Você está na página 1de 18

UNIPAC Bom Despacho - Faculdade Presidente Antonio Carlos

Trabalho de Computao Aplicada Engenharia

Algoritmo Fluxograma Pseudocdigo - Portugol

Daniel dos Santos Moreira.

Ano 2013

Introduo O ensino da lgica de programao geralmente tratado nas primeiras fases dos cursos de informtica, onde os alunos iniciantes aprendem a desenvolver o raciocino lgico para ento escrever algoritmos para soluo de problemas. O Portugol uma pseudo-linguagem algortmica muito utilizada na descrio de algoritmos, destaca-se pelo uso de comandos em portugus, o que facilita o aprendizado da lgica de programao, habituando o iniciante com o formalismo de programao. Apesar de todas essas vantagens, o Portugol apresenta o inconveniente dos algoritmos no poderem ser executados no computador. Dessa forma, o iniciante precisa imaginar a sua execuo, o que no uma tarefa to fcil para quem est comeando. A lgica para programao consiste em aprender a pensar na mesma seqncia em que o computador executa as tarefas, aprende-se a imaginar como as aes sero executadas partindo-se do estudo de um problema at chegar a construo de um algoritmo (soluo). Considere com exemplo o seguinte problema: Expressar o resultado da soma de dois valores. comum, para uma pessoa pensar em algo assim: Pegar os dois valores, somar e dar o resultado.

Aps ter adquirido uma certa experincia, a mesma pessoa pode, de forma automtica, converter tal pensamento em instrues sem necessidade de especificar detalhadamente os processos que esto implcitos nesta pequena rotina Aes Pegar Somar Dar o resultado Operaes Receber os dois valores numrico e armazen-los Executar a instruo da soma e armazenar o resultado Mostrar o resultado, armazen-lo para uso posterior ou para ser visualizado em outra oportunidade

Quanto maior o domnio da lgica de programao, mais fcil ser detalhar as tarefas envolvidas na soluo do problema proposto e mais eficiente ser o algoritmo criado, porm, para um iniciante construir um algoritmo que permita a um computador executar a tarefa proposta no to simples. Segundo "Algoritmo a descrio de um conjunto de comandos que, obedecidos, resultam numa sucesso finita de aes.

A tabela, mostra dois algoritmos, um bastante genrico (aes) e outro um pouco mais detalhado (operaes), porm, apesar de apresentar um bom nvel de detalhamento ainda no pode ser considerado um algoritmo para o computador. Em Portugol, o mesmo algoritmo pode ser escrito da seguinte forma: Algoritmo exemplo;

Var v1 ,v2 , v3 : inteiro; Inicio leia (v1); leia (v2); v3 v1 + v2; escreva (v3); Fim.

A representao dos algoritmos em Portugol, conhecido tambm como Pseudocdigo, muito utilizada, segundo (SALIBA, 1992, p. 6): "Esta forma de representao de algoritmo rica em detalhes, como a definio dos tipos das variveis usadas no algoritmo e, por assemelhar-se bastante forma em que os programas so escritos, encontra muita aceitao." A traduo de um algoritmo escrito em Portugol para um programa de computador numa linguagem de programao muito fcil e clara, facilitando assim o ensino e aprendizado da linguagem de programao. O Portugol a forma mais utilizada para escrever algoritmos por ser uma linguagem simples e permitir o detalhamento dos algoritmos. O ensino do Portugol, hoje, feito de maneira manual (utilizando folhas de papel), o que no estimula os alunos em aprender e exercitar o desenvolvimento de algoritmos.

Este trabalho apresenta um ambiente para o desenvolvimento de algoritmo em Portugol com o auxilio do computador.

A Ferramenta Portugol/Plus O Objetivo principal do sistema Portugol/Plus fornecer uma ferramenta de apoio ao ensino da lgica de programao baseado no Portugol, sem reduzir o estudo terico. Com esta ferramenta pretende-se proporcionar uma forma de estimular os alunos a praticar e exercitar o desenvolvimento de algoritmos em Portugol. O ambiente foi desenvolvido para operar em microcomputador do tipo PC (Personal Computer), sob o sistema operacional DOS (Disk Operating System), e divide-se em duas partes principais: Editor de algoritmos (padro ASCII); Compilador. 1) Editor de Algoritmos

Figura 1: Viso Geral do Ambiente

O editor de algoritmos, permite a digitao e a manipulao dos arquivos que contm os algoritmos utilizando uma interface dirigida por menus. Numa viso geral

v-se os diversos menus (Arquivo, Editar, Localizar, Compilar, Janela e Opes): O menu arquivos permite, como o nome diz, a manuteno de arquivos, com itens como criar, salvar e salvar como (salvar com outro nome), contando tambm com aes extras, tais como: Mudar o dir que serve para alterar o diretrio (rea de trabalho) em que o ambiente pesquisa os arquivos para edio. Dos shell que serve para se obter uma sesso de linha de comando do sistema operacional sem abandonar o ambiente. Sair para encerrar a execuo do ambiente. O menu editar permite executar aes sobre os arquivos em edio (abertos), estas aes compreendem copiar, mudar e/ou apagar partes dos arquivos em edio. O menu localizar ajuda na busca e/ou substituio de trechos escritos no arquivo atual em uso (corrente). O menu janela controla o modo como so visualizados todos os arquivos abertos (em edio) em um mesmo instante. O menu opes controla valores configurveis pelo usurio dentro do ambiente como cores e mouse.

Figura 2 : Viso do Menu Compilar

O menu compilar, serve para tornar possvel a execuo dos algoritmos criados. Aps editado e salvo, usa-se este menu para a realizao da compilao do algoritmo, depois de corrigidos os erros (caso seja encontrado algum), pode-se executar o algoritmo para ver o seu comportamento, se o resultado obtido realmente o desejado. Podendo-se tambm, o que muito importante para o aprendizado, partir para sucessivos refinamentos (melhorias) nas solues

encontradas, sempre tendo-se a possibilidade de visualizar como as alteraes feitas afetam o resultado pretendido (a nova soluo pode vir a ser melhor, pior ou equivalente).

2) Compilao O conhecimento sobre a construo de compiladores, segundo (AHO, 1995; JOS NETO, 1987) remonta do incio da dcada de 50, no se sabendo precisamente o seu incio. A construo de compiladores foi motivada pela complexidade de programar em computadores na poca, quando usava-se cdigo de mquina ou assembler, o que alm de difcil, forava a execuo do programa no equipamento para o qual o mesmo havia sido escrito, pois em outros o cdigo precisava ser reescrito, o que resultava em verses do mesmo programa para cada tipo de equipamento. Os compiladores so programas que recebem com entrada um programa fonte, analisam-no o contedo e o contexto, caso encontrem erros informam ao usurio, do contrrio, convertem o programa fonte para um programa objeto geralmente em linguagem da mquina. O compilador trabalha sobre uma gramtica, que um conjunto de palavras (instrues) limitado por ele e reconhecidas como comandos, que tem regras fixas e no conflitantes de uso, o que significa que uma instruo tem apenas um significado para um compilador, no havendo ambiguidade.

O Compilador do Portugol/Plus
Algoritmo em Portugol

Analisador Lxico

Analisador Sinttico

Programa em Pascal

Durante o processo de compilao como mostrado na figura 3, o compilador do ambiente Portugol/Plus faz uma verificao da sintaxe das instrues usadas no algoritmo, caso no sejam encontrados erros, um programa objeto gerado na linguagem de programao Pascal. Atravs de um compilador Pascal executa-se o programa objeto.

Programas de computador Nesta seo, veremos o processo necessrio para se criar um programa e execut-lo. Primeiramente introduziremos os principais conceitos para a melhor compreenso de como um programa visto pelo computador. Depois nos aprofundaremos nos detalhes de como um programa transformado em um cdigo que pode ser executado pelo computador.

O que um programa Os computadores das mais variadas arquiteturas tm funcionamento similar. Apresenta a arquitetura simplificada de um computador.

UCP Unidade Central de Processamento

BARRAMENTO

Memria

Dispositivos Entrada/Sada

Conexes externas

Teclado Mouse Etc.

Arquitetura simplificada de um computador

A parte fsica do computador chamada de hardware, que formado basicamente por uma Unidade Central de Processamento (UCP), pela memria e pelos dispositivos de entrada e sada. O barramento faz a ligao desses componentes.

A UCP (ou processador) contm um conjunto relativamente pequeno de instrues que capaz de executar. Cada processador contm um conjunto diferente de instrues, apesar de similares entre si. As instrues que o processador executa so buscadas da memria. Essas instrues podem ser desde operaes matemticas a interaes com os dispositivos de entrada e sada. Chamamos de programa de computador um conjunto de instrues que ser executado pelo processador em uma determinada seqncia. Esse programa leva o computador a executar alguma tarefa. Como podemos perceber, um programa nada mais que um tipo de algoritmo. Sua particularidade que suas operaes so especficas para o computador e restritas ao conjunto de instrues que o processador pode executar. Podemos considerar esse conjunto de instrues como a primeira linguagem de programao do computador, tambm chamada de linguagem de mquina. Classificamos as linguagens de programao segundo a sua proximidade com a linguagem de mquina. Quanto maior a semelhana com a linguagem de mquina, mais baixo o nvel da linguagem. As linguagens de programao mais semelhantes linguagem de mquina so conhecidas como linguagens de baixo nvel. Analogamente, linguagens de programao distantes da linguagem de mquina so conhecidas como linguagens de programao de alto nvel. Linguagens de programao de alto nvel so mais prximas da linguagem natural e guardam pouca similaridade com a linguagem da mquina em que sero executadas. A linguagem de programao que um computador capaz de compreender composta apenas de nmeros. Assim, fazer algoritmos na linguagem de programao do computador ou em sua linguagem de mquina um processo extremamente complicado para ns, seres humanos, acostumados com a nossa prpria linguagem. Por isso, para facilitar a programao de computadores, foi necessria a criao de um cdigo que relacionasse a linguagem de mquina a uma linguagem mais fcil de ser compreendida. A linguagem de montagem (ou assembly) um cdigo que tem uma instruo alfanumrica (ou mnemnica) para cada instruo numrica em linguagem de mquina. Para que um programa escrito em linguagem de montagem possa ser executado pelo computador, necessrio que seu cdigo seja traduzido para o cdigo de mquina. Isto feito por meio de um programa chamado assembler.

Cdigo em linguagem de montagem

Assembler

Cdigo em linguagem de mquina

Traduo para a linguagem de mquina

A linguagem de montagem muito prxima da linguagem de mquina e, por isso, uma linguagem de programao de baixo nvel. Para cada processador, h uma linguagem de montagem j que h uma relao direta entre as instrues em linguagem de montagem e em linguagem de mquina. Isto faz com que o cdigo tenha que ser refeito se quisermos executar um programa em um processador no compatvel com o qual ele foi escrito inicialmente. Neste caso, dizemos que o cdigo no portvel. A implementao de programas nesse tipo de linguagem ainda muito complexa e dependente do conhecimento das instrues do processador. Para aumentar a produtividade dos programadores e a portabilidade dos programas, foram criadas as linguagens de programao de alto nvel. Essas linguagens so independentes do processador em que sero executadas. Suas caractersticas principais so que seu cdigo mais elaborado, contemplando operaes mais complexas e mais prximas da lgica humana. Para que possam ser processadas por um computador, os comandos da linguagem precisaro ser traduzidos para a linguagem de mquina. Essa traduo feita por meio de um compilador ou de um interpretador, dependendo do caso, como veremos a seguir.

Executando um programa O compilador, a partir do cdigo em linguagem de alto nvel, chamado de cdigo-fonte, gera um arquivo com o cdigo em linguagem de mquina, conhecido como cdigo objeto. Esse cdigo-objeto fica em disco e s carregado em memria no momento da execuo. O interpretador faz o mesmo trabalho, porm no gera o arquivo em cdigo-objeto. As instrues so traduzidas para linguagem de mquina em tempo de execuo, instruo a instruo. A figura mostra os passos para a execuo de um cdigo em linguagem de alto nvel por meio da compilao. A figura apresenta o esquema similar para a interpretao.

Cdigo-fonte em Linguagem de Alto nvel

Compilador

Cdigo em linguagem de mquina


Compilao de um programa.

Cdigo-fonte em linguagem alto nvel

Interpretador

Memria

Traduo de cada instruo na fase de execuo do programa


Interpretao de um programa.

Podemos notar que programar um computador tornou-se muito mais fcil do que anteriormente. A introduo de linguagens de alto nvel como Pascal, C, Cobol, Java, entre outras, aumentou a produtividade dos programadores, permitindo que programas mais elaborados fossem feitos, atendendo a demandas mais complexas. Alm disso, os cdigos so portveis, ou seja, independentes da plataforma mediante nova compilao do cdigo-fonte.

Linguagens de programao e sistemas operacionais


A realizao de determinadas operaes em linguagem de mquina pode ser extremamente complexa. Operaes que necessitem de interface com os dispositivos de entrada e sada, como gravao ou leitura de dados em disco, so um exemplo. Esse tipo de operao no importante apenas em linguagens de programao. Este um dos motivos pelos quais os sistemas operacionais so construdos. Na realidade, os sistemas operacionais constroem uma camada entre hardware e software, facilitando a utilizao dos recursos da mquina real por meio da criao de uma mquina virtual. Essa mquina virtual muito mais simples de ser utilizada e

prov uma srie de mecanismos ao usurio que facilitam a utilizao dos recursos do computador. Um exemplo so os arquivos, que permitem a manipulao de dados em disco sem que seja necessrio o conhecimento dos detalhes do funcionamento dos discos, como trilhas, setores, velocidade da rotao, posicionamento dos dados no disco e outros mais. Alm disso, o sistema operacional gerencia os recursos da mquina, evitando a m utilizao e at mesmo a danificao de seus componentes por um programador. Alm de os sistemas operacionais implementarem operaes complexas e extremamente teis ao uso do computador, tambm fornecem uma interface para que outros programas possam utiliz-las. Essas interfaces so conhecidas como chamadas de sistema, ou system calls, e o conjunto de operaes disponibilizadas so as bibliotecas do sistema operacional. Os compiladores utilizam essas interfaces em vez de implementar as operaes complexas por si mesmos. Quando o compilador encontra chamadas ao sistema operacional no cdigo-fonte em linguagem de alto nvel, transforma-as em referncias no resolvidas no cdigo-objeto em linguagem de mquina. Para que esse cdigo possa ser executado, precisa ser ligado ao cdigo do sistema operacional que efetivamente implementa a operao. Esta a segunda etapa da compilao. O processo conhecido como ligao do cdigo ou linking. A figura apresenta as etapas da transformao de um cdigo em linguagem de alto nvel at que este possa ser executado.

A integrao dos compiladores com os sistemas operacionais permite que o cdigo objeto de um programa seja portvel para qualquer mquina que utilize o mesmo sistema operacional, tornando o cdigo-objeto dependente do sistema operacional e no mais da plataforma do processador, visto que o sistema operacional deixa transparente as diferenas entre plataformas diversas. Porm, um cdigo-objeto compilado em um sistema operacional no poder ser executado em um outro sistema operacional. Assim, um programa executvel em Linux provavelmente no poder ser executado em um sistema operacional HP-UX, SunOS, AIX ou da famlia Microsoft. Para que esse programa funcione nesses sistemas operacionais, o cdigo-fonte, em linguagem de alto nvel, dever ser compilado neste sistema operacional. A linguagem de programao Java tem uma arquitetura diferente, o que fornece a seus programas mais portabilidade que outras linguagens de programao de alto nvel. A compilao do cdigo Java no gera cdigo executvel em nenhum sistema operacional. Em vez disso, gera um cdigo pseudo-executvel, chamado bytecode. Esse cdigo uma espcie de cdigo de baixo nvel que, porm, no uma linguagem de mquina de algum processador, nem faz interface especfica com algum determinado sistema operacional. Para que esse cdigo possa ser executado em algum (e ao mesmo tempo em qualquer) sistema operacional, necessrio que mais uma camada de software esteja a instalada. A camada funciona como um sistema operacional genrico, deixando transparentes as particularidades do sistema operacional real. Essa camada de software chamada de Mquina Java Virtual, ou Java Virtual Machine (JVM). A JVM faz a traduo dos bytecodes para cdigo executvel naquele sistema operacional. Isto faz com que um programa escrito em Java e que seja compilado para bytecode possa ser executado em qualquer mquina que tenha a JVM adequada instalada. Durante a execuo, esse cdigo ser traduzido em tempo real para a linguagem proprietria e executado. A traduo em tempo real pode ser entendida como uma espcie de interpretao. Portanto, difcil afirmar que a linguagem de programao Java seja uma linguagem puramente compilada ou interpretada. Essa caracterstica da linguagem Java faz com que esta seja extremamente interessante para o uso na Internet, visto que o cdigo Java que esteja presente em um site poder ser executado em qualquer plataforma que contenha a JVM instalada. Normalmente, os browsers j contm uma JVM para que possam trabalhar com sites

que contenham programas Java. A figura 1.6 apresenta as etapas necessrias para a execuo de um programa Java.

Linguagem natural Vimos a evoluo na portabilidade dos programas de alto nvel e o quanto tais linguagens de programao se afastaram da linguagem de mquina e se aproximaram da lgica humana. Porm, para um iniciante, mesmo a linguagem de programao de alto nvel pode ser um tanto complexa. Claro que muito mais simples do que programar em linguagem de mquina ou em linguagem de baixo nvel, mas o verdadeiro problema que as pessoas, em geral, no esto acostumadas a fazer algoritmos. Diferentemente da linguagem natural, a linguagem de programao dirigida a orientar uma mquina e no pessoas. Mquinas no podem tomar decises com base em premissas. Mquinas no podem escolher alternativas, mesmo que estas nos paream bvias. Mquinas no podem corrigir comandos mal redigidos. Mquinas no podem descobrir a inteno do programador, mesmo que ela seja (ou pelo menos parea) clara

no contexto. Pessoas fazem tudo isso (pelo menos na maior parte das vezes) sem sequer notar. Por isso, a linguagem de programao precisa ter algumas caractersticas que a linguagem natural no tem. Veja-as a seguir: Rigidez sinttica: O compilador um tradutor relativamente limitado, que s consegue fazer as tradues sobre um idioma bastante limitado, com construes muito bem definidas. Apesar de encontrarmos palavras pertencentes linguagem natural, elas no sero usadas com a mesma liberdade. Rigidez semntica: O computador definitivamente no pode lidar com ambigidades. Por isso, no adianta o programador ter uma inteno se no conseguir exprimi-la de forma exata. Podemos dizer que o computador um timo cumpridor de ordens, porm no tem idia de quais ordens est cumprindo, nem o contexto em que essas aes esto inseridas. Diferentemente da linguagem de programao, a linguagem natural apresenta ambigidades. Veja o exemplo: A velhinha ouviu o barulho da janela. Essa frase curta pode ser interpretada de pelo menos trs maneiras:

1. A velhinha ouviu o barulho produzido pela janela. 2. A velhinha estava junto janela e ouviu o barulho. 3. A velhinha ouviu o barulho que veio atravs da janela.

Qualquer mquina seria incapaz de interpretar o que realmente est acontecendo, mesmo que o contexto pudesse ajudar. Por isso, a rigidez semntica to crucial e consequentemente a linguagem natural no pode ser utilizada como ferramenta para a construo de algoritmos para computador. A necessidade desses quesitos faz com que a linguagem natural no seja a escolha adequada para a escrita de algoritmos para computador. A segunda alternativa seria escrever o algoritmo diretamente na linguagem de programao. Porm, a rigidez sinttica e a semntica tornam a escrita de algoritmos diretamente em uma linguagem de programao real, mesmo de alto nvel, uma tarefa bastante difcil, pois as pessoas no esto acostumadas a essas exigncias para expressar ordens. Muitas vezes, mesmo em linguagem natural, esta no uma tarefa trivial. Realmente chegamos a um dilema: a linguagem natural no adequada porque no tem rigidez sinttica e semntica e a linguagem de programao no adequada

justamente por ter essas caractersticas. Parece claro que teremos de encontrar uma terceira alternativa para expressarmos algoritmos para computador. Na realidade, j existem algumas alternativas. Apresentaremos duas delas: fluxograma e pseudocdigo. Fluxograma Os fluxogramas apresentam os algoritmos de forma grfica. So formados de caixas que contm as instrues a serem executadas. Tais caixas so ligadas por setas que indicam o fluxo das aes. Algumas caixas especiais indicam a possibilidade de o fluxo seguir caminhos distintos, dependendo de certas situaes que podem ocorrer durante a execuo do algoritmo. Tambm h representaes para o incio do algoritmo e para o seu final, para que o fluxo do algoritmo possa ser determinado do seu princpio at o seu trmino. De fato, a representao de algoritmos por meio de fluxogramas tem uma srie de vantagens. A primeira a facilidade proporcionada para a compreenso do funcionamento do algoritmo, mesmo para os leigos. Algumas pessoas tambm se adaptam bem ao desenvolvimento de algoritmos sob essa representao. Entretanto, a representao grfica no prtica. A correo de uma linha de pensamento pode implicar a reconstruo de muitas instrues. Alm disso, a construo de algoritmos mais complexos e longos pode se tornar extremamente trabalhosa, ocupando vrias pginas. Essas caractersticas acabam tornando a utilizao do fluxograma desaconselhvel como ferramenta principal para o desenvolvimento de algoritmos. Todavia, a utilizao de fluxogramas continua sendo til para apresentao de algoritmos em um nvel de abstrao alto, sem entrar nos detalhes de sua implementao.

Pseudocdigo Algoritmos podem ser representados em cdigo diretamente em linguagem de programao. Como j vimos, a implementao de algoritmos diretamente em uma linguagem de programao apresenta algumas desvantagens. Porm, fato que temos algumas vantagens como o cdigo pronto para a execuo (mesmo que seja aps a compilao) e, o mais importante, a rigidez sinttica e a semntica, que so imprescindveis para que o algoritmo possa ser lido e executado pelo computador. O pseudocdigo visa a trazer o mximo possvel desses benefcios, tentando diminuir o nus da utilizao da linguagem de programao. Abre-se mo do cdigo

compilvel para se ter um cdigo menos rgido, menos dependente das peculiaridades que todo compilador tem. Ao contrrio da linguagem de programao, o pseudocdigo tem um grau de rigidez sinttica intermediria entre as linguagens natural e de programao. Alm disso, podemos utilizar o idioma nativo. Em geral, linguagens de programao so construdas utilizando palavras reservadas em ingls, uma espcie de padro de mercado. Um pseudocdigo bastante conhecido no Brasil o Portugol, que apresenta uma aceitao grande e tem suas razes para isso. bastante simples e atende s caractersticas necessrias no que concerne rigidez semntica e sinttica. Entretanto, o Portugol opta por algumas construes em detrimento de outras que consideramos interessantes para o passo posterior, que a transformao do pseudocdigo em programa. A questo principal a ausncia de blocos genricos de comandos, Tais construes esto presentes na maior parte das linguagens de programao de alto nvel e so importantes para que o programador iniciante fique acostumado com esse tipo de estruturao. Para representarmos nossos algoritmos, utilizaremos uma adaptao do Portugol, que incluir algumas construes e mecanismos que julgamos adequados para o melhor aprendizado do programador, procurando facilitar o processo de construo do algoritmo. Veja a seguir um exemplo de pseudocdigo,

Criao de um algoritmo para engenharia civil

Inicio Criar:

b1: D1:
l1: D2:

h1: D3: b2: B1: l2: B2: h2: VOL: h3:

Escrever entre com o valor de b1 Ler b1 (valor1) Escrever entre com o valor de l1

Ler l1-(valor 2) Escrever entre com o valor de h1 Ler h1-(valor 3) Escrever entre com o valor de b2 Ler b2-(valor 4) Escrever entre com o valor de l2 Ler l2-(valor 5) Escrever entre com o valor de h2 Ler h2-(valor 6) Escrever entre com o valor de h3 Ler h3-(valor 7)

Calcule

D1 b1 x h1 x l1
B1 (b2 + l2)/2 B2 (b2 +l2)/2

Se (B1>B2)...(escreva variaveis b1, b2, l1 e l2 esto incorretas!) b1 l1 b2 l2 Voltar inicio

Seno D2 h3 / 3 x (B2 + (Raiz de B2 x B1) + B1) D3 b2 x h2 x l2 Vol D1 + D2 + D3

Fim