Você está na página 1de 65

CURSO TCNICO EM INFORMTICA

PROFESSOR JEAN CARLOS COELHO DE ALENCAR

Apostila Lgica de Programao Parte 01

OURICURI - PE

SUMRIO
1.0 INTRODUO A LGICA.......................................................................................3 1.1 Lgica Aplicada Tecnologia da Informao (Informtica)................................4 2.0 INTRODUO AO ALGORITMO............................................................................6 2.1 Classificao de Algortimo.................................................................................6 2.2 Exemplos de Algortimo......................................................................................9 2.4 Tipos de Dados.................................................................................................12 2.5 Operadores.......................................................................................................12 2.5.1 Operadores Relacionais............................................................................12 2.5.2 Operadores Lgicos..................................................................................13 2.5.2.1 Operador Lgico no..........................................................................13 2.5.2.2 Operador Lgico ou............................................................................14 2.5.2.3 Operador Lgico e..............................................................................14 2.5.2.4 Operador Lgico xou..........................................................................15 2.5.3 Operadores Aritmticos.............................................................................15 2.5.5 Operadores de String................................................................................16 2.5.6 Operadores de Atribuio..........................................................................16 3.0 FORMAS DE REPRESENTAO DE ALGORTMOS.........................................17 3.1 Diagrama de Chaplin........................................................................................17 3.1 Fluxograma.......................................................................................................17 3.2 Portugus Estruturado (Portugol ou Pseudocdigo)........................................20 4.0 QUALIDADE DO ALGORITIMO:...........................................................................22 5.0 ESTRUTURAS DE ALGORITMO:........................................................................24 5.1 Declarao de Variveis / Constantes..............................................................24 5.2 Comandos de Sada de Dados.........................................................................25 5.3 Comandos de Entrada (Leitura) de Dados.......................................................26 5.4 Estrutura Sequencial (Incondicional)................................................................26 5.5 Estrutura Condicional........................................................................................33 5.6 Estrutura Seleo Mltipla................................................................................47 5.7 Estrutura de Repetio - Laos........................................................................53 5.7.1 Estrutura de Repetio Pr-testada "enquanto...faca"...........................54 5.7.2 Estrutura de Repetio Prs-testada "repita...ate".................................59

3 de 65

1.0 INTRODUO A LGICA


Neste material sero apresentados os conceitos de lgica e algortimo, que so a base para a programao de computadores. Esta pode ser considerada a arte de solucionar problemas em computao. Tecnicamente falando, programar desenvolver algortimos, ou seja, definir um conjunto lgico de instrues, que devero ser fornecidas ao computador para ele executar alguma tarefa. at possvel se construir um pequeno programa em alguns dias, e sem necessariamente saber os conceitos de lgica e algortimo, mas se voc pretende ser um programador profissional e ter destreza com as centenas de comandos envolvidos numa programao, alm de dominar sua sintaxe set ter de ficar refolheando mltiplas pginas a cada nova ideia que deseja implementar, preciso, alm de pacincia, algumas centenas de horas de estudo e um certo dom para coisa. Usamos a lgica no nosso dia a dia, e muitas vezes nem nos damos conta. No ato de escovar os dentes, cozinhar, dirigir dentre outros, estamos sempre executando tarefas nas quais seguimos alguma sequncia lgica (raciocnio lgico) de forma totalmente automtica. Aristteles, um filsofo grego que considerado o criador da Lgica, embora ele no a chamasse assim, mas Razo. Definiu que a Razo : um Instrumento, uma introduo para as cincias e para o conhecimento. O termo lgica foi adotado posteriormente, sedo originado do grego Logos que significa linguagem racional. De acordo com o dicionrio Michaelis, lgica a anlise das formas e leis do pensamento, mas no se preocupa com o contedo do pensamento e sim com a forma. Pode ser definida tambm como a maneira pela qual um pensamento ou um ideia organizada e apresentada, possibilitando que cheguemos a uma CONCLUSO. Um argumento pode ser composto por uma ou mais premissa, as quais podem ser verdadeiras ou falsas e que conduzem a uma concluso, que tambm podem ser verdadeira ou falsa. Nos argumento apresentado abaixo, 1 e 2 representam as premissas e 3 a concluso: 1. Ouricuri uma cidade do estado de Pernambuco. 2. Joo nasceu em Ouricuri. 3. Portanto, Joo Pernambucano.

4 de 65 Argumento um conjunto de uma ou mais sentenas declarativas, tambm conhecidas como proposies, ou ainda, premissas, acompanhadas de uma outra frase declarativa conhecida como concluso. Argumentos so classificados em dedutivos e indutivos. Os dedutivos afirmam que a verdade de uma concluso uma consequncia lgica das premissas que a antecedem. Por exemplo: 1. 2. 3. Mamferos, so animais que mamam; A cabra mama; Portanto, a cabra um mamfero.

J os indutivos afirmam que a verdade da concluso apenas apoiada pelas premissas, neste caso se torna preciso conhecer os fatos para se poder fazer a comparao. 1. No ano passado no choveu em janeiro e o ano foi de seca; 2. Neste ano choveu em janeiro; 3. Logo, neste ano no haver seca. Toda e qualquer premissa, assim como toda concluso, pode assumir apenas o valor verdadeiro ou falso e jamais poder assumir ou possuir valores ambguos. Sendo assim, as frases que apresentam um argumento so referidas como sendo verdadeiras ou falsas. Devemos programar nossas Mentes! Programar no um tarefa difcil! Computador uma rplica da Mente; Com uma autoprogramao; Aprendizado (Cores, smbolos, sons...); Processo de aprendizado autoprogramao;

O que ser mais complexo nosso crebro ou um simples computador? Lembrem-se a inteligencia do computador, somos ns que fazemos (programamos).

Este ser o nosso desafio!!

1.1 Lgica Aplicada Tecnologia da Informao (Informtica)


O estudo da lgica, pode ser aplicado as mais diversas reas do conhecimento. O proposito aqui, apresentar a anlise e desenvolvimento da lgica na construo de Softwares (Programas de Computador), onde a partir da

5 de 65 observao da lgica o programador (desenvolvedor) constri seus algortimos, que posteriormente viraro um software. Sendo estes, programas de computador, capazes de apresentar as mais diversas solues, nas mais variadas reas do conhecimento humano (contabilidade, administrao, engenharia, educao...). Usaremos para a soluo dos algortimos, a Lgica Formal, tambm chamada de Lgica Simblica que se preocupa basicamente com a estrutura do raciocnio. E lida com a relao entre conceitos e fornece um meio de compor provas de declaraes. Os conceitos so rigorosamente definidos, e as sentenas so transformadas em notaes simblicas precisas, compactas e no ambguas, esta tambm nos permite trabalhar com variveis, permitindo assim, a utilizao do mesmo raciocnio para a soluo de vrios problemas. Exemplos: 1. 2. 3. Mamferos, so animais que mamam; A cabra mama; Portanto, a cabra um mamfero. e

Baseados na lgica formal podemos substituir as palavras Mamferos cabra, por X e Y. 1. 2. 3. X, so animais que mamam; A Y mama; Portanto, Y um X.

Posteriormente falaremos sobre variveis, e seu uso. Na logica aplicada a T.I., o resultado das sentenas ser sempre, V ou F (Verdadeiro ou Falso), ela a tcnica de desenvolver algoritmos (sequncias lgicas) para atingir determinados objetivos dentro de certas regras baseadas na Lgica Matemtica, estes algortimos sero adaptados para uma Linguagem de Programao utilizada pelo programador para construir seu software.

6 de 65

2.0 INTRODUO AO ALGORITMO


Quando desejamos criar ou desenvolver um programa de computador (software) para atender uma determinada situao e/ou para solucionar algum problema, devemos escrever toda a sequencia lgica (algortimo) para tal soluo, e esta dever ser posteriormente traduzida para uma linguagem que tando o homem(programador), quanto a mquina(computador) entendam. Esta linguagem denominada de Linguagem de Programao [ASCENCIO & CAMPUS, 2010]. Um algoritmo na realidade, uma sequncia no ambgua de instrues que executada at que determinada condio se verifique. Mais especificamente, em matemtica, constitui o conjunto de processos (e smbolos que os representam) para efetuar um clculo. Existem trs etapas bsicas para se desenvolver um software: Anlise que consiste no estudo do problema a ser corrigido, onde sero definidos todos os dados, prolemas, solues... Algortimo, onde a partir da anlise, sero montadas todas as sequencia lgica para soluo dos problemas levantados. Neste caso, poderemos utilizar as seguintes formas de representao: Descrio Narrativa, Fluxograma, Diagrama de Chapin e Pseudocdigos, tambm conhecidos como Portugus Estruturado ou Portugol. Codificao, fase na qual o algortimo traduzido para uma linguagem programador. Testes, aps a construo do software, so realizados testes para conferir sua conformidade com os requisitos iniciais. O software deve satisfazer a todas especificaes do cliente. de programao, normalmente dominada pelo

2.1 Classificao de Algortimo


Segundo [WIKIBOOKS, 2010] os algortimos podem ser classificados por: implementao, paradigma, campo de estudo e complexidade.

7 de 65 Classificao por implementao: Pode-se classificar algoritmos pela maneira pelo qual foram implementados. Recursivo ou iterativo - um algoritmo recursivo possui a caracterstica de invocar a si mesmo repetidamente at que certa condio seja satisfeita e ele terminado, que um mtodo comum em programao funcional. Algoritmos iterativo usam estruturas de repetio tais como laos, ou ainda estruturas de dados adicionais tais como pilhas, para resolver problemas. Cada algoritmo recursivo possui um algoritmo iterativo equivalente e vice versa, mas que pode ter mais ou menos complexidade em sua construo. Lgico - um algoritmo pode ser visto como uma deduo lgica controlada. O componente lgico expressa os axiomas usados na computao e o componente de controle determina a maneira como a deduo aplicada aos axiomas. Tal conceito base para a programao lgica. Serial ou paralelo - algoritmos so geralmente assumidos por serem executados instruo instruo individualmente, como uma lista de execuo, o que constitui um algoritmo serial. Tal conceito base para a programao imperativa. Por outro lado existem algoritmos executados paralelamente, que levam em conta arquiteturas de computadores com mais de um processador para executar mais de uma instruo ao mesmo tempo. Tais algoritmos dividem os problemas em subproblemas e o delegam a quantos processadores estiverem disponveis, agrupando no final o resultado dos subproblemas em um resultado final ao algoritmo. Tal conceito base para a programao paralela. Classificao por paradigma: Pode-se classificar algoritmos pela metodologia ou paradigma de seu desenvolvimento, tais como: Diviso e conquista - algoritmos de diviso e conquista reduzem repetidamente o problema em subproblemas, geralmente de forma recursiva, at que o subproblema pequeno o suficiente para ser resolvido. Um exemplo prtico o algoritmo de ordenao merge sort.

8 de 65 Programao dinmica - pode-se utilizar a programao dinmica para evitar o reclculo de soluo j resolvidas anteriormente. Algoritmo ganancioso - um algoritmo ganancioso similar programao dinmica, mas difere na medida que as solues dos subproblemas no precisam ser conhecidas a cada passo, uma escolha gananciosa pode ser feita a cada momento com o que at ento parece ser mais adequado. Programao linear Reduo - a reduo resolve o problema ao transform-lo em outro problema. chamado tambm transformao e conquista. Busca e enumerao - vrios problemas podem ser modelados atravs de grafos. Um algoritmo de explorao de grafo pode ser usado para caminhar pela estrutura e retornam informaes teis para a resoluo do problema. Esta categoria inclui algoritmos de busca e backtracking. Paradigma heurstico e probabilstico - algoritmos probabilsticos realizam escolhas aleatoriamente. Algoritmos genticos tentar encontrar a soluo atravs de ciclos de mutaes evolucionrias entre geraes de passos, tendendo para a soluo exata do problema. Algoritmos heursticos encontram uma soluo aproximada para o problema. Classificao por campo de estudo: Cada campo da cincia possui seus prprios problemas e respectivos algoritmos adequados para resolv-los. Exemplos clssicos so algoritmos de busca, de ordenao, de anlise numrica, de teoria de grafos, de manipulao de cadeias de texto, de geometria computacional, de anlise combinatria, de aprendizagem de mquina, de criptografia, de compresso de dados e de interpretao de texto. Classificao por complexidade: Alguns algoritmos so executados em tempo linear, de acordo com a entrada, enquanto outros so executados em tempo exponencial ou at mesmo nunca terminam de serem executados. Alguns problemas possuem mltiplos algoritmos enquanto outros no possuem algoritmos para resoluo.

9 de 65

2.2 Exemplos de Algortimo


Considere o problema das Torres de Hanoi . Analise e descreva uma maneira de mover os discos do pino A para o pino C, mantendo a mesma ordem. Em hiptese nenhuma um disco maior poder ficar sobre o menor. Veja a figura abaixo:

Obs.: deve-se mover um nico anel por vez e um anel de dimetro maior nunca pode repousar sobre algum outro de dimetro menor. Soluo: Algoritmo para resolver o problema das Torres de Hanoi. Incio 1. Mover o anel P da haste A para a haste C. 2. Mover o anel M da haste A para a haste B. 3. Mover o anel P da haste C para a haste B. 4. Mover o anel G da haste A para a haste C. 5. Mover o anel P da haste B para a haste A. 6. Mover o anel M da haste B para a haste C. 7. Mover o anel P da haste A para a haste C. Fim Um homem precisa atravessar um rio com um barco que possui capacidade de carregar apenas ele mesmo e mais uma das trs cargas que so: um lobo, um bode e um mao de alfafas. Observe as leis naturais: o lobo carnvoro e o bode herbvoro. O que o homem deve fazer para conseguir atravessar o rio sem perder suas cargas? Soluo: Algoritmo para resolver o problema das Travessia.

10 de 65 Incio 1) O Homem leva o bode da margem 1 para a margem 2. 2) O Homem navega da margem 2 para a margem 1. 3) O Homem leva o lobo da margem 1 para a margem 2. 4) O Homem leva o bode da margem 2 para a margem 1. 5) O Homem leva a alfafa da margem 1 para a margem 2. 6) O homem navega da margem 2 para a margem 1. 7) O Homem leva o bode da margem 1 para a margem 2. Fim No nosso dia a dia, muitas vezes tratamos algortimos sem nem perceber, observe a seguinte situao: Um cozinheiro precisa fazer um sanduche de queijo, s que ele passa pelos seguintes dilemas: o queijo est fatiado ou o queijo est sem Fatiar. Soluo 1: Algoritmo para resolver o problema de se fazer o sanduche com o queijo estando fatiado. Incio 1) Pegar a faca; 2) Pegar o po; 3) Cortar o po; 4) Colocar a faca na mesa; 5) Pegar a fatia de queijo; 6) Abrir o po; 7) Colocar a fatia de queijo no po. Fim Soluo 2: Algoritmo para resolver o problema de se fazer o sanduche com o queijo no estando fatiado. Incio 1) Pegar a faca; 2) Pegar o po; 3) Cortar o po; 4) Colocar o po na mesa; 5) Pegar o queijo;

11 de 65 6) Cortar uma fatia de queijo; 7) Colocar a faca na mesa; 8) Pegar e abrir o po; 9) Colocar a fatia de queijo no po. Fim Soluo 3: Algoritmo para prevendo os dois problemas anteriores. Incio 1) Pegar a faca; 2) Pegar o po; 3) Cortar o po; 4) Se o queijo estiver fatiado ento 5) Passos de 4 a 6 da soluo 1 6) Seno 7) Passos de 4 a 8 da soluo 2 8) Colocar a fatia de queijo no po. Fim

2.3 Variveis / Constantes


O uso de variveis / constantes, nos permite a utilizao do mesmo algortimo para a soluo de vrios problemas, inclusive determinando seus tipos de dados. As variveis so alocaes na memria do computador para armazenar dados podem mudar seus valores no decorrer do algortimo. J as constantes so alocaes na memria do computador para armazenar dados que no decorrer do algoritmo ou processamento sempre ter o mesmo valor. Toda varivel / constante tem um nome e um valor. O nome das variveis dever ser escrito no padro CamelCase, as constantes devem ser nomeadas em caixa alta(maisculas), e seguindo as seguintes regras: Devem comear por uma letra e depois conter letras, nmeros ou underline _, at um limite de 30 caracteres. As variveis podem ser simples ou estruturadas.

12 de 65 No pode haver duas variveis com o mesmo nome, com a natural exceo dos elementos de um mesmo vetor.

2.4 Tipos de Dados


Existem quatro tipos de dados bsicos utilizados na construo de algortimos: inteiro, real, cadeia de caracteres(strings) e lgico(booleano). Baseado na utilizao do VisuAlg, um editor e interpretador de Pseudocdigos. As palavras-chave que utilizaremos para definir estes tipos sero as seguintes (observe que elas no tm acentuao): inteiro: define variveis numricas do tipo inteiro, ou seja, sem casas decimais. real: define variveis numricas do tipo real, ou seja, com casas decimais. caractere: define variveis do tipo string, ou seja, cadeia de caracteres. logico: define variveis do tipo booleano, ou seja, com valor VERDADEIRO ou FALSO. No caso de constantes, os tipos de dados aceitveis so: Caracteres, Lgicos e Numricos que podem ser inteiros ou reais. Neste ltimo caso, o separador de decimais o ponto e no a vrgula.

2.5 Operadores
So os smbolos usados para o trabalho com variveis e constantes. H basicamente cinco grupos de operadores: relacionais; lgicos; aritmticos; de strings; de atribuio. 2.5.1 Operadores Relacionais

13 de 65 So utilizados em expresses lgicas para se testar a relao entre dois valores do mesmo tipo, so eles: = < > igual; menor que; maior que;

<= menor ou igual a; >= maior ou igual a; <> diferente de P.S.: Retornam Verdadeiro ou Falso, como resposta. Exemplos: 3=4 ---> FALSO 3<4 ---> VERDADEIRO 3>4 ---> FALSO 3 <= 4 ---> VERDADEIRO 3 >= 4 ---> FALSO 3 <> 4 ---> VERDADEIRO A = A ---> VERDADEIRO C = D ---> FALSO A = a ----> VERDADEIRO

(Em algumas linguagens de programao

case sensitive, como Java, considerado FALSO) 2.5.2 Operadores Lgicos So utilizados em expresses lgicas para se testar a relao entre dois valores lgicos(booleanos). nao; ou; e; xou;

P.S.: Retornam Verdadeiro ou Falso, como resposta. 2.5.2.1 Operador Lgico no Operador unrio de negao. nao VERDADEIRO = FALSO, nao FALSO = VERDADEIRO. Tem a maior precedncia entre os operadores lgicos. Equivale ao NOT do Pascal ou ! Do Java.

14 de 65

2.5.2.2 Operador Lgico ou Operador que resulta VERDADEIRO quando um dos seus operandos lgicos for verdadeiro. Equivale ao OR do Pascal ou || do Java. Observe a tabela abaixo:

Valor 01 Verdadeiro Falso Verdadeiro Falso

Valor 02 Verdadeiro Verdadeiro Falso Falso

Resultado Verdadeiro Verdadeiro Verdadeiro Falso

Exemplos: A = verdadeiro , B = falso e C = falso A ou nao B nao(A ou B) A ou B C ou B nao A ou B ---> ---> ---> ---> ---> VERDADEIRO FALSO VERDADEIRO FALSO FALSO

2.5.2.3 Operador Lgico e Operador que resulta VERDADEIRO quando todos os seus operandos lgicos forem verdadeiros. Possui precedncia sobre ou e xou. Equivale ao AND do Pascal ou && do Java. Observe a tabela abaixo: Valor 01 Verdadeiro Falso Verdadeiro Falso Valor 02 Verdadeiro Verdadeiro Falso Falso Resultado Verdadeiro FALSO FALSO Falso

Exemplos:

15 de 65 A = verdadeiro , B = falso e C = falso A e ( B ou A) (A e B ) ou nao (B e C) (A e B ) ou (B e C) (A e B) e (A ou B) nao(A ou B) e nao(B e C) 2.5.2.4 Operador Lgico xou Operador que resulta VERDADEIRO se seus dois operandos lgicos forem diferentes, e FALSO se forem iguais. Equivale ao XOR do Pascal. Observe a tabela abaixo: ---> ---> ---> ---> ---> VERDADEIRO VERDADEIRO VERDADEIRO FALSO FALSO

Valor 01 Verdadeiro Falso Verdadeiro Falso

Valor 02 Verdadeiro Verdadeiro Falso Falso

Resultado FALSO Verdadeiro Verdadeiro FALSO

Exemplos: A = verdadeiro , B = falso e C = falso A e ( B xou A) (A xou B ) e nao (B e C) (A e B ) xou (B ou C) (A e B) xou (A e B) nao(A xou B) xou nao(B e C) 2.5.3 Operadores Aritmticos So os que recebem nmeros e retornam nmeros, aps terem efetuado alguma operao aritmtica. So eles: Operadores unrios, isto , so aplicados a um nico operando. So os operadores aritmticos de maior precedncia. Exemplos: -3, +x. Enquanto o operador unrio - inverte o sinal do seu operando, o operador + no altera o valor em nada o seu valor. ---> ---> ---> ---> ---> VERDADEIRO VERDADEIRO FALSO FALSO VERDADEIRO

+,-

16 de 65 \ Operador de diviso inteira. Por exemplo, 5 \ 2 = 2. Tem a mesma precedncia do operador de diviso tradicional. Operadores aritmticos tradicionais de adio, subtrao, multiplicao e diviso. Por conveno, * e / tm precedncia sobre + e -. Para modificar a ordem de avaliao das operaes, necessrio usar parnteses como em qualquer expresso aritmtica. Operador de mdulo (isto , resto da diviso inteira). Por exemplo, 8 MOD 3 = 2. Tem a mesma precedncia do operador de diviso tradicional. Operador de potenciao. Por exemplo, 5 ^ 2 = 25. Tem a maior precedncia entre os operadores aritmticos binrios (aqueles que tm dois operandos).

+,-,*,/

MOD ou % ^

2.5.5 Operadores de String Operador de concatenao de strings (isto , cadeias de caracteres), quando usado com dois valores (variveis ou constantes) do tipo "caractere". Por exemplo: "Ouri" + "curi" = "Ouricuri" .

2.5.6 Operadores de Atribuio Os operadores de atribuio servem basicamente para atribuirmos valores a variveis e constantes. Operador de atribuio usado com todos os tipos de dados. Por exemplo: A <- 2, isto quer dizer que o valor de A 2; B <- A + 3, significa q B cinco (2+3 = 5)

<-

17 de 65

3.0 FORMAS DE REPRESENTAO DE ALGORTMOS


Existem diversas formas de representao e confeco de algoritmos. Dentre elas, podemos destacar o diagrama de chaplin, o fluxograma e o Portugus Estruturado (Portugol ou pseudocdigo).

3.1 Diagrama de Chaplin


O diagrama de Chaplin utiliza poucos smbolos com significados predefinidos. Constitui-se de dois segmentos verticais de retas paralelas, interligadas por outros segmentos, formando retngulos ou tringulos sobrepostos. Este tipo de diagrama dispensa modelos especficos de desenho, como gabaritos, e de fcil confeco. Veja os smbolos abaixo:
Utilizado na representao de inicio ou fim do algoritmo, e processamento / instrues.

instrues

condio V F

Utilizado na representao de uma estrutura de deciso (seleo ou condicional).

instrues condio

Estrutura de Repetio: REPITA-AT.

condio instrues

Estrutura de Repetio: ENQUANTO-FAA e PARA-AT-FAA

3.1 Fluxograma
Uma das tcnicas usadas para definir os passos da soluo dos algoritmos a fluxogramao, que consiste em escrev-los utilizando algumas figuras geomtricas interligadas entre si. Estas figuras seguem padres baseados na Norma ISO 5807 1985. A utilizao de smbolos com significados prprios no requer papel especfico e tem a vantagem de ser muito fcil de entender, pois ao visualizar j se entende o que aquela instruo deseja executar, sua desvantagem obrigar o

18 de 65 programador a saber o significado de cada smbolo existente para este fim. Veja os smbolos abaixo: Terminal Utilizado na representao de inicio ou fim do algoritmo.

Processamento

Utilizado na representao de um processamento / instruo.

Entrada manual

Utilizado na representao de uma entrada de dados manual.

Exibio

Utilizado na representao de uma exibio no vdeo (monitor)

Utilizado na representao de uma estrutura de deciso Deciso (seleo ou condicional), bem nas Estrutura de Repetio: REPITA-AT e ENQUANTO - FAA. Este smbolo representa a definio de um grupo de operaes Preparao estabelecidas como uma sub-rotina de processamento. Utilizado na representao de uma estrutura de Repetio: PARA AT - FAA Conector - Este smbolo representa a entrada ou sada em outra parte do fluxograma. Conector de Pginas Utilizado para interligar partes do fluxogramas em distintas. Seta de orientao de Fluxo

19 de 65 Exemplo: Algoritmo para exibir o nome da disciplina:

Incio

Lgica de Programao

Fim

Exemplo 2: Algoritmo para receber dois nmeros, via teclado e verificar se so iguais:

20 de 65

3.2 Portugus Estruturado (Portugol ou Pseudocdigo)


Consiste em escrever o algortimo por meio de regras pr-definidas. O Portugus Estruturado, uma forma especial de linguagem bem mais restrita que a Lngua Portuguesa e com significados bem definidos para todos os termos utilizados nas instrues (comandos). Essa linguagem tambm conhecida como Portugol (juno de Portugus com Algol), Pseudocdigo ou Pseudolinguagem. O Portugus Estruturado na verdade uma simplificao extrema da lngua portuguesa, limitada a pouqussimas palavras e estruturas que tm significado pr-definido, pois deve-se seguir um padro. Emprega uma linguagem intermediria entre a linguagem natural e uma linguagem de programao, para descrever os algoritmos. Faremos aqui uma adaptao do portugol de forma utilizarmos esta linguagem de construo de algoritmos, no padro do software VisualG, da Apoio Informtica. Segue abaixo, o formato bsico do nosso pseudocdigo no padro VisualG: algoritmo "semnome" // Funo : // Autor : // Data : // Seo de Declaraes inicio // Seo de Comandos fimalgoritmo Portugol - VisualG Exemplo: Algoritmo para exibir o nome da disciplina: algoritmo "Exibe disciplina" // Autor : Jean Carlos // Data: 20/02/2011 inicio escreva (Lgica de Programao) fimalgoritmo Exemplo:

21 de 65 Algoritmo para receber dois nmeros, via teclado e verificar se so iguais: algoritmo "Verifica nmeros iguais" var A, B: inteiro inicio leia (A,B) se(A = B) entao escreva (iguais) senao escreva (diferentes) fimse fimalgoritmo

22 de 65

4.0 QUALIDADE DO ALGORITIMO:


Para mantermos uma boa qualidade nos nossos algoritmos, devemos observar dentre outras, as seguintes regras: Indentao: Segundo [WIKIPROG 2010], em algoritmos / programao, indentao (recuo, neologismo derivado da palavra em ingls indentation, tambm encontram-se as formas indentao e endentao) um termo aplicado ao cdigo fonte de um programa para indicar que os elementos hierarquicamente dispostos tm o mesmo avano relativamente posio (x,0). Na maioria das linguagens a indentao tem um papel meramente esttico / organizacional, tornando a leitura do cdigo fonte muito mais fcil (read-friendly), porm obrigatria em outras. A verdadeira valia deste processo visvel em arquivos de cdigo fonte extensos, no se fazendo sentir tanto a sua necessidade em arquivos pequenos (relativamente ao nmero de linhas).

A figura acima representa um algoritmo utilizando de indentao.

23 de 65
A figura acima representa um algoritmo que no utiliza indentao.

Nomenclatura de Variveis / Constantes, como demonstrado no item 2.3. Comentrios: so informaes que voc inclui no seu algortimo para documentar o que est fazendo. Exemplo:
algoritmo "Verifica se nmeros so iguais" var A, B: inteiro inicio escreva ("Digite o primeiro Nmero: ") leia (A) escreva ("Digite o segundo Nmero: ") leia (B) //teste se A e B so iguais se(A = B) entao escreva (A, " e", B ," so iguais") senao escreva (A, " e", B ," so diferentes") fimse fimalgoritmo

Exemplo de comentrio

Modularizao: um conceito onde o sistema ou software divido em partes distintas. Compe o ferramental necessrio para um programa mais legvel com uma melhor manuteno e melhor desempenho por meio da programao estruturada, falaremos mais sobre modularizao alguns captulos a frente.

24 de 65

5.0 ESTRUTURAS DE ALGORITMO:


Os algoritmos so basicamente formados por uma ou mais das estruturas abaixo: Estrutura Sequencial (Incondicional); Estrutura Seletiva (de Seleo ou Condicional); Estrutura Multi seletiva; Estrutura de Repetio.

5.1 Declarao de Variveis / Constantes.


Constantes, so valores que no se alteram ao longo do programa. Uma constante pode aparecer sob forma de um valor explcito (constante literal) ou um nome simblico que representa um determinado valor ao longo do programa (constante simblica). Em VisuAlg no existe declarao de constantes, mas para simular o uso de constantes, usamos uma atribuio no incio o programa a uma varivel. Devemos tomar o cuidado de no alterar o seu valor durante a execuo do algoritmo. Uma constante simblica definida da seguinte forma: < NOME_CONSTANTE > : < tipo > E no inicio do corpo se atribui o seu valor como demonstrado abaixo:
... var PI : numerico inicio PI <- 3.14 fimalgoritimo

OBS: Utiliza-se como padro colocar nome da constante simblica em letra maiscula. Variveis, uma varivel identifica um espao na memria do computador, reservado para armazenar valores de um determinado tipo. Uma varivel definida da seguinte forma: < nomeDaVariavel > : < tipo > < listaDeVariaveis > : < tipo >

25 de 65 ... var PI : numerico a: inteiro Valor1, Valor2: real nomeDoAluno: caractere sinalizador: logico

5.2 Comandos de Sada de Dados


escreva (<lista-de-expresses>) Escreve no dispositivo de sada padro (isto , na rea direita da metade inferior da tela do VisuAlg) o contedo de cada uma das expresses que compem <lista-de-expresses>. As expresses dentro desta lista devem estar separadas por vrgulas; depois de serem avaliadas, seus resultados so impressos na ordem indicada. equivalente ao comando write do Pascal ou print do Java. escreval (<lista-de-expresses>). Idem ao anterior, com a nica diferena que fora a quebra de uma linha (pula uma linha em seguida). equivalente ao writeln do Pascal ou println do Java. Exemplos:
algoritmo "exemplo" var salario : real codigo : inteiro nome : caractere teste : logico inicio salario <- 1500.3456 codigo <- 23 nome <- "Joo" teste <- falso escreval (salario : 1: 2) escreval (codigo ) escreval (nome) escreval (Seu nome : ,nome) escreval (teste) escreva (nome, , teste) fimalgoritmo

Resultado na mquina:

26 de 65

5.3 Comandos de Entrada (Leitura) de Dados


leia (<lista-de-variveis>) Recebe valores digitados pelos usurio, atribuindo-os s variveis cujos nomes esto em <lista-de-variveis> ( respeitada a ordem especificada nesta lista). anlogo ao comando read do Pascal. Veja no exemplo abaixo o resultado:
algoritmo "exemplo 1" var x: inteiro inicio escreval(Digite um nmero:) leia (x) escreva (O nmero digitado foi,x) fimalgoritmo

Resultado na mquina:

5.4 Estrutura Sequencial (Incondicional)


A estrutura sequencial aquela na qual uma ao (instruo) segue a outra em sequncia, sem que haja algum tipo de desvio. Exemplo 01: Algoritmo para exibir um nome: Pseudocdigo:
algoritmo Exiba um nome Inicio escreva(Jean Carlos) fimalgoritmo

Diagrama de Chaplin:
Inicio Escreva Jean Carlos Inicio

27 de 65 Fluxograma:
Inicio

Jean Carlos

Fim

Resultado na mquina:

Exemplo 02: Algoritmo para ler e exibir um nmero: Pseudocdigo:


algoritmo Ler e exibir um nmero var numero: inteiro inicio escreval(Digite um nmero) leia(numero) fimalgoritmo Neste momento, a varivel numero recebe o valor digitado pelo usurio, ou seja, se o usurio digitar 30, o valor de numero ser 30

escreva(O nmero digitado foi:, numero)

Diagrama de Chaplin:

Inicio Escreva Digite um nmero Leia(numero) Escreva O nmero digitado foi:, numero Fim

28 de 65 Fluxograma:
Inicio

Digite um nmero:

numero

O nmero digitado foi:, numero

Fim

Resultado na mquina:

Exemplo 03: algoritmo, onde se solicite ao usurio o seu nome e sua idade, e posteriormente seja exibido na tela a seguinte mensagem: <nome digitado> tem <idade digitada> anos de idade. Informaes sobre como gerar o resultado: O usurio digitou Joo e depois 20. O resultado ser:

29 de 65 Joo tem 20 anos de idade Pseudocdigo:


algoritmo Ler e exibir nome e idade var Neste momento, a varivel nome recebe o valor digitado pelo nome: caracter usurio, ou seja, se o usurio digitar Andr, o valor de nome ser Andr. escreva(Digite seu nome: ) Neste momento, a varivel idade leia(nome) recebe o valor digitado pelo usurio, ou seja, se o usurio escreva(Digite sua idade: ) digitar 14, o valor de idade ser leia(idade) 14. escreva(nome, tem , idade, anos de idade) idade: inteiro inicio

fimalgoritmo

Diagrama de Chaplin:

Inicio

Escreva Digite seu nome:

Leia(nome)

Escreva Digite sua Idade:

Leia(idade)

Escreva nome, tem , idade, anos de idade

Fim

30 de 65 Fluxograma:

Inicio

Digite seu nome:

nome

Digite sua Idade:

idade

nome, tem , idade, anos de idade

Fim

Resultado na mquina:

Exemplo 04: algoritmo, onde se solicite ao aluno o seu nome e sua nota 01, sua nota 02, e posteriormente seja exibido na tela a seguinte mensagem:

31 de 65 <nome digitado>, sua mdia : <valor da mdia>. Informaes sobre como gerar o resultado: O usurio digitou Joo, e depois 6 e 7. O resultado ser: Joo , sua mdia : 6.5 Pseudocdigo:
algoritmo Ler o nome, duas notas e exibir exibir a mdia var nota1, nota2, media: real nome : caracter inicio escreva(Digite seu nome: ) leia(nome) escreva(Digite a primeira nota: ) leia(nota1) escreva(Digite a segunda nota: ) leia(nota2) media <- (nota1 + nota2)/2 escreva(nome, sua mdia : , media) fimalgoritmo

Diagrama de Chaplin:

Inicio Escreva Digite seu nome: Leia(nome) Escreva Digite a primeira nota: Leia(nota1) Escreva Digite a segunda nota: Leia(nota2) media <- (nota1 + nota2)/2 Escreva nome, sua mdia : , media Fim

32 de 65 Fluxograma:
Inicio

Digite seu nome:

nome

Digite a primeira nota:

nota1

Digite a segunda nota:

nota2

media <- (nota1 + nota2)/2

nome, sua mdia : , media

Fim

Resultado na mquina:

33 de 65

5.5 Estrutura Condicional


a estrutura que permite a tomada de deciso, em um algoritmo, mediante a anlise lgica de uma condio teste lgico / expresso-lgica; Condio comparao que somente possui dois valores possveis (verdadeiro ou falso); Estrutura: se <expresso-lgica> entao <sequncia-de-comandos> fimse Se o seu resultado da <expresso-lgica> for VERDADEIRO, todos os comandos da <sequncia-de-comandos> (entre esta linha e a linha com fimse) so executados. Se o resultado for FALSO, estes comandos so desprezados e a execuo do algoritmo continua a partir da primeira linha depois do fimse. se <expresso-lgica> entao <sequncia-de-comandos-1> senao <sequncia-de-comandos-2> fimse Nesta outra forma do comando, se o resultado da avaliao de <expressolgica> for VERDADEIRO, todos os comandos da <sequncia-de-comandos-1> (entre esta linha e a linha com senao) so executados, e a execuo continua depois a partir da primeira linha depois do fimse. Se o resultado for FALSO, estes comandos so desprezados e o algoritmo continua a ser executado a partir da primeira linha depois do senao, executando todos os comandos da <sequncia-decomandos-2> (at a linha com fimse). Estes comandos equivalem ao if...then e if...then...else do Pascal, e ao if e if...else do JAVA. Note que no h necessidade de delimitadores de bloco (como begin e end, e { }), pois as sequncias de comandos j esto delimitadas pelas palavras-chave senao e fimse. O VisuAlg permite o aninhamento desses comandos de desvio condicional.

34 de 65 Exemplo 01: Algoritmo para verificar e um nmero par: Pseudocdigo:


algoritmo Verifica se Par var num, resto: inteiro Inicio escreva(Digite um nmero ) leia(num) resto <- num mod 2 se resto = 0 entao escreva(O nmero , num, par.) fimse fimalgoritmo //Poderia ser tambm num % 2

Fluxograma:

35 de 65 Diagrama de Chaplin:

Resultado na mquina:

Exemplo 02: Algoritmo para verificar e um nmero par ou impar: Pseudocdigo:


algoritmo Verifica se Par ou Impar var num, resto: inteiro Inicio escreva(Digite um nmero ) leia(num) resto <- num mod 2 se resto = 0 entao escreva(O nmero, num, par.) senao escreva(O nmero, num, impar.) fimse fimalgoritmo //Poderia ser tambm num % 2

36 de 65 Fluxograma:

Diagrama de Chaplin:

37 de 65 Resultado na mquina:

Exemplo 03: Algoritmo que solicite dois nmeros e informe qual o maior: Pseudocdigo:
algoritmo Verifica qual o maior var num1, num2: inteiro Inicio escreva(Digite o primeiro nmero ) leia(num1) escreva(Digite o segundo nmero ) leia(num2) se num1 > num2 entao escreva(O nmero, num1, maior que , num2) senao se num1 < num2 entao escreva(O nmero, num2, maior que , num1) senao escreva(O nmero, num1, igual ao , num2) fimse fimse fimalgoritmo

Resultado na mquina:

38 de 65

Exemplo 04: Faa um algoritmo, onde se solicite ao aluno o seu nome e sua nota 01, sua nota 02, e posteriormente seja exibido na tela as seguintes mensagens: Quando o aluno atingir nota superior ou igual a 6,00: <nome digitado>, sua mdia : <valor da mdia>, voc est aprovado. Caso contrrio: <nome digitado>, sua mdia : <valor da mdia>, voc est reprovado. Pseudocdigo:
algoritmo Calcula mdia e verifica aprovao var nota1, nota2, media: real nome: caracter Inicio escreva(Digite seu nome) leia(nome) escreva(Digite a primeira nota) leia(nota1) escreva(Digite a segunda nota) leia(nota2) media <- (nota1 + nota2) / 2 se media >= 6 entao

escreva(nome, sua mdia :, media, voc est aprovado.)


senao

escreva(nome, sua mdia :, media, voc est reprovado.)


fimse fimalgoritmo

39 de 65 Resultado na mquina:

Exemplo 05: Fazer um algoritmo que receba dois nmeros e um operador (+, -, / e *), e de acordo com o operador digitado, efetue a operao correta e exiba o resultado. Caso a operao escolhida seja diviso, verificar se o segundo nmero igual a 0, e sendo, informar que a diviso no possvel. Pseudocdigo:
algoritmo "Calculadora" // Seo de Declaraes var n1, n2: inteiro sinal:caracter inicio escreval("Digite um nmero") leia(n1) escreval("Digite a operao (+, -, * ou / )") leia(sinal) escreval("Digite um nmero") leia(n2) se(sinal = "+") entao escreva("O resultado : ", n1 + n2) senao se(sinal = "-") entao escreva("O resultado : ", n1 - n2) senao se(sinal = "*") entao

40 de 65
escreva("O resultado : ", n1 * n2) senao se(sinal = "/") entao se (n2 = 0) entao escreva("Diviso por zero no permitido") senao escreva("O resultado : ", n1 / n2) fimse senao escreva(sinal, ", no um operador vlido") fimse fimse fimse fimse fimalgoritmo

Resultado na mquina:

41 de 65 Exemplo 06: Fazer um algoritmo que receba o tipo de figura: q, r, t (quadrado, retngulo e tringulo respectivamente). Para q solicitar um lado, r e t dois lados. Calcular e exibir sua rea e valores digitados. Caso se digite tipos diferentes informar. rea do quadrado = L ; rea do quadrado = L1 * L2 rea do tringulo = (L1 * L2) / 2 Pseudocdigo:
algoritmo "Calcula rea de polgonos" // Seo de Declaraes var L1, L2 : inteiro poligono : caracter area : real inicio escreval("Digite um Poligono:") escreval("Q - Quadrado") escreval("R - Retngulo") escreval("T - Tringulo") leia(poligono) se(poligono = "Q") entao escreval("Digite o lado do Quadrado") leia(L1) se(L1 > 0) entao area <- L1 ^ 2 escreva("A rea do Quadrado :", area) senao escreva("O valor do Lado no pode ser menor ou igual a 0") fimse senao se(poligono = "R") entao escreval("Digite o lado 1 do Retngulo") leia(L1) escreval("Digite o lado 2 do Retngulo") leia(L2) se(L1 <= 0) e (L1 <= 0)entao escreva("O valor do Lado no pode ser menor ou igual a 0") senao area <- L1 * L2 escreva("A rea do Retngulo :", area) fimse senao se(poligono = "T") entao escreval("Digite o lado 1 do Tringulo") leia(L1) escreval("Digite o lado 2 do Tringulo") leia(L2) se(L1 <= 0) e (L1 <= 0)entao escreva("O valor do Lado no pode ser menor ou igual a 0")

42 de 65
senao area <- L1 * L2/2 escreva("A rea do Tringulo :", area) fimse senao escreva(poligono, ", no um poligono vlido!!!!") fimse fimse fimse fimalgoritmo

Resultado na mquina:

Exemplo 07: Fazer um algoritmo que receba o tipo de associao de resistores: S ou P (Srie ou Paralelo), e trs valores de resistncias. Caso se digite tipos

43 de 65 diferentes de associao, informar! Se o valor da resistncia for zero informar que este valor invlido. Srie => RT = R1 + R2 + R3 Paralelo => 1/RT = 1/R1 + 1/R2 + 1/R3 ou (R1 * R2) / (R1 +R2) de dois em dois. Pseudocdigo:
Algoritmo "Calcula Resistncia" var acao: caracter RT, R1, R2, R3 : Real inicio escreval("Digite a associao:") escreval("S - Srie") escreval("P - Paralelo") leia(acao) se acao = "S" entao escreva("Digite o valor de R1 ") leia(R1) escreva("Digite o valor de R2 ") leia(R2) escreva("Digite o valor de R3 ") leia(R3) se (R1 <= 0) ou (R2 <= 0) ou (R3 <= 0) entao escreva("Impossvel calcular") senao escreva("O valor da Resistncia : ", R1 + R2 + R3) fimse senao se acao = "P" entao escreva("Digite o valor de R1 ") leia(R1) escreva("Digite o valor de R2 ") leia(R2) escreva("Digite o valor de R3 ") leia(R3) se (R1 <= 0) ou (R2 <= 0) ou (R3 <= 0) entao escreva("Impossvel calcular") senao RT <- (R1 * R2) / R1 + R2 RT <- (RT * R3) / RT + R3 escreva("O valor da Resistncia : ", RT) fimse senao escreva(acao, " um valor invlido") fimse fimse fimalgoritmo

44 de 65 Resultado na mquina:

Exemplo 08: Fazer um algoritmo que calcule os valores de corrente (i), tenso (u) e resistncia (r), de acordo com as frmulas abaixo: u = i * r; i = u / r ; r = u / i Se algum valor digitado for zero informar q invlido.

45 de 65

Pseudocdigo:
Algoritmo "Clculo de P, U, R, I" var acao: caracter U,I,R,P : Real inicio escreval("Indique o que voc pretende calcular:") escreval("P - Potncia") escreval("U - Tenso") escreval("I - Corrente") escreval("R - Resistncia") leia(acao) se acao = "P" entao escreva("Digite o valor de U - Tenso: ") leia(U) escreva("Digite o valor de I - Corrente: ") leia(I) se (U > 0) e (I > 0) entao P <- U * I escreva("O valor de P, : ",P,"W") senao escreva("Impossvel calcular") fimse senao se acao = "I" entao escreva("Digite o valor de U - Tenso: ") leia(U) escreva("Digite o valor de R - Resistncia: ") leia(R) se (U > 0) e (R > 0) entao I <- U / R escreva("O valor de I, : ",I,"A") senao escreva("Impossvel calcular") fimse senao se acao = "U" entao escreva("Digite o valor de R - resistncia: ") leia(R) escreva("Digite o valor de I - Corrente: ") leia(I) U <- R * I escreva("O valor de U, : ",U,"V") senao se acao = "R" entao escreva("Digite o valor de U - Tenso: ") leia(U) escreva("Digite o valor de I - Corrente: ") leia(I) se (U > 0) e (I > 0) entao R <- U / I escreva("O valor de R, : ",R,"ohm") senao escreva("Impossvel calcular") fimse senao

46 de 65
escreva(acao, ", um valor invlido!!") fimse fimse fimse fimse fimalgoritmo

Resultado na mquina:

Exemplo 09: Faa um algoritmo que receba um nmero e verifique se ele impar. Sendo verificar se mltiplo de 9, e quando for informar ao usurio com a seguinte mensagem: <Nmero digitado> impar e mltiplo de 9. quando for apenas impar exibir a mensagem: <Nmero digitado> impar e , mas no mltiplo de 9. caso contrrio, apresentar a seguinte informao: <Nmero digitado> no impar:

47 de 65

Pseudocdigo:
algoritmo "Verifica se impar e mltiplo 9" // Data : 2/5/2011 // Seo de Declaraes var num, res, eDivi9 : inteiro inicio escreva("Digite um nmero: ") leia(num) res <- num mod 2 eDivi9 <- num mod 9 se (res <> 0) e (eDivi9 = 0) entao escreva(num, ", impar e mltiplo de 9") senao se (res <> 0) e (num mod 9 <> 0) entao escreva(num, ", impar, mas no mltiplo de 9") senao escreva(num, ", Nao impar") fimse fimse fimalgoritmo

Resultado na mquina:

5.6 Estrutura Seleo Mltipla


a estrutura que permite a tomada de deciso, comparando um dado valor a constantes, desviando o fluxo de cdigo para o ponto indicado pela primeira constante onde h similaridade;

48 de 65 O VisuAlg implementa (com certas variaes) o comando case do Pascal ou switch case do Java. A sintaxe a seguinte: Estrutura: escolha <expresso-de-seleo> caso <exp11>, <exp12>, ..., <exp1n> <sequncia-de-comandos-1> caso <exp21>, <exp22>, ..., <exp2n> <sequncia-de-comandos-2> ... outrocaso <sequncia-de-comandos-extra> fimescolha Quando o resultado da avaliao de <expresso-de-seleo> for igual ao valor de <exp11> ou <exp12> ou <exp1n> (caso <exp11>, <exp12>, ..., <exp1n>), todos os comandos da <sequncia-de-comandos-1> so executados, caso contrrio, sero testados os valores para <exp21> ou <exp22> ou <exp2n> (caso <exp21>, <exp22>, ..., <exp2n>) e neste caso, todos os comandos da <sequnciade-comandos-2> so executados, e assim por diante. Se ocorrer de nenhum dos valores testados nas linhas com a palavra-chave caso, ocorrer a execuo do que for previso com a palavra-chave outrocaso, ou seja, todos os comandos da <sequncia-de-comandos-extra> so executados. Exemplo 01: Algoritmo para selecionar um dia da semana: Pseudocdigo:
Algoritmo "Dias da semana" var dia: inteiro inicio escreval("Digite um nmero de 1 a 7") leia(dia) escolha dia caso 1 escreva("Domingo") caso 2 escreva("Segunda-feira") caso 3 escreva("Tera-feira") caso 4

49 de 65
escreva("Quarta-feira") caso 5 escreva("Quinta-feira") caso 6 escreva("Sexta-feira") caso 7 escreva("Sbado") outrocaso escreva(dia, " um valor invlido") fimescolha fimalgoritmo

Fluxograma:

50 de 65 Resultado na mquina:

Exemplo 02: Algoritmo que solicita ao usurio a quantidade e o cdigo de um produto e depois seja exibido qual produto, quantidade de produtos informada e o valor total da compra: Veja a tabela abaixo: Cdigo 1 2 3 4 5 Feijo Arroz Macarro Picanha Leite Produto Preo R$2,30 R$4,21 R$1,10 R$9,66 R$2,15

Pseudocdigo:
Algoritmo "Localiza produtos" var codigo: inteiro quantidade, valorTotal: real inicio escreval("Digite o cdigo do produto:") leia(codigo)

51 de 65
escolha codigo caso 1 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 2.30 escreva("Voc comprou", quantidade, "Kg de Feijo e vai pagar, R$",valorTotal) fimse caso 2 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 4.21 escreva("Voc comprou", quantidade, "Kg de Arroz e vai pagar, R$",valorTotal) fimse caso 3 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 1.10 escreva("Voc comprou", quantidade, "Kg de Macarro e vai pagar, R$",valorTotal) fimse caso 4 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 9.66 escreva("Voc comprou", quantidade, "Kg de Picanha e vai pagar, R$",valorTotal) fimse caso 5 escreval("Digite a quantidade de produtos") leia(quantidade) se quantidade <= 0 entao escreva("A quantidade no pode ser igual ou menor que 0") senao valorTotal <- quantidade * 2.15 escreva("Voc comprou", quantidade, "L de Leite e vai pagar, R$",valorTotal) fimse outrocaso escreva(codigo, " um valor invlido") fimescolha fimalgoritmo

52 de 65 Resultado na mquina:

Exemplo 03: Algoritmo para exibir quantidade de dias de um determinado ms: Pseudocdigo:
Algoritmo "Dias / Ms" var mes: inteiro inicio escreval("Digite um Ms de 1 a 12") leia(mes) escolha mes caso 1, 3, 5, 7, 8, 10, 12 escreva("O Ms",mes, ", possui 31 mess") caso 2 escreva("O Ms",mes, ", possui 28 mess") caso 4, 6, 9, 11 escreva("O Ms",mes, ", possui 30 mess") outrocaso escreva(mes, " um valor invlido") fimescolha fimalgoritmo

Resultado na mquina:

53 de 65

5.7 Estrutura de Repetio - Laos


a estrutura de desvio do fluxo de controle presente em algoritmos que realiza e repete diferentes aes dependendo de uma condio ser verdadeira ou falsa; Esto associados a uma estrutura de repetio uma condio de parada (teste lgico) e um conjunto (sequncia) de instrues: verifica-se a condio, e caso seja verdadeira (dependendo do tipo de lao, pode ser verificado antes ou aps a execuo das instrues), o bloco executado. Aps o final da execuo do conjunto de instrues, a condio verificada novamente, e caso ela ainda seja verdadeira, o cdigo executado novamente. Um item que merece ateno na criao de algoritmos que utilizem estruturas de repetio : se o conjunto de instrues nunca alterar o estado da condio, o algoritmo entrar numa situao conhecida com lao infinito, ou seja, o algoritmo nunca sara da execuo do lao. Existem trs estruturas de repetio usuais nas linguagens de programao e algoritmos, sendo estas tambm implementadas no VisuAlg: Repetio pr-testada "enquanto...faca"; Repetio ps-testada - Repita at; Repetio com varivel de controle - para...ate...faca.

54 de 65

5.7.1 Estrutura de Repetio Pr-testada "enquanto...faca"


Esta estrutura repete uma sequncia de comandos enquanto uma determinada condio (especificada atravs de uma expresso lgica) for satisfeita. Estrutura:

enquanto <expresso-lgica> faca <sequncia-de-comandos> fimenquanto Neste tipo de lao, a <expresso-lgica> (condio de parada) primeiramente verificada, e se for verdadeira a <sequncia-de-comandos> executada. No final da execuo da <sequncia-de-comandos>, atingir o comando fimenquanto, volta-se ao incio do lao onde a condio de parada <expressolgica> novamente testada, dando prosseguimento a repetio do lao at a <expresso-lgica>, retornar falso. Exemplo 01: Algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros a partir do digitado at 50: Pseudocdigo:
algoritmo "sequencia de nmeros at 50" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num:inteiro inicio escreva("Digite um numero: ") leia(num) enquanto num <= 50 faca escreva(num) num <- num + 1 fimenquanto fimalgoritmo

55 de 65 Fluxograma:

Diagrama de Chaplin:

56 de 65 Resultado na mquina:

Exemplo 02: Elabore um algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros de 1 at ele: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1 enquanto aux <= num faca escreva(aux) aux<-aux+1 fimenquanto fimalgoritmo

Resultado na mquina:

57 de 65 Exemplo 03: Elabore um algoritmo que a partir do exemplo 2 exiba tambm a soma dos nmeros gerados: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado + Soma" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,soma,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1 soma<-0 enquanto aux<=num faca escreval(aux) soma<-soma+aux aux<-aux+1 fimenquanto escreva("A soma e: ",soma) fimalgoritmo

Resultado na mquina:

Exemplo 04: Elabore um algoritmo que solicite o nome do usurio ou a letra s para sair, e enquanto no se desejar sair, solicitar tambm o telefone: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var

58 de 65
nome, telefone: caracter inicio escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) fimenquanto fimalgoritmo

Resultado na mquina:

Exemplo 05: Elabore um algoritmo que a partir do exemplo 4 exiba tambm a quantidade de usurios cadastrados: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao e conta usurios" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var nome, telefone: caracter cont: inteiro inicio cont <- 0 escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) cont <- cont + 1 fimenquanto escreva("Total de usurios cadastrados: ", cont) fimalgoritmo

59 de 65

Resultado na mquina:

5.7.2 Estrutura de Repetio Ps-testada "repita...ate"


uma variao da estrutura anterior, e difere pela verificao da condio que feita aps uma execuo da sequencia de comandos e a expresso lgica que necessita de seu resultado falso para d prosseguimento ao lao. Estrutura: repita <sequncia-de-comandos> ate <expresso-lgica> Neste tipo de lao, a <sequncia-de-comandos> executada primeiramente para depois a <expresso-lgica> (condio de parada) ser verificada. A palavra chave repita indica o inicio do lao. J a palavra chave ate indica o fim da <sequncia-de-comandos> a serem repetidos (lao). Cada vez que o programa chega neste ponto (ate), <expresso-lgica> avaliada, e se for falsa, volta-se ao incio do lao (repita), onde a <sequncia-de-comandos> executada novamente, e depois a condio de parada <expresso-lgica> novamente testada, dando prosseguimento a repetio do lao at seu valor ser verdadeiro.

60 de 65 Exemplo 01: Algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros a partir do digitado at 50: Pseudocdigo:
algoritmo "sequencia de nmeros at 50" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num:inteiro inicio escreva("Digite um numero: ") leia(num) repita escreva(num) num <- num + 1 ate num > 50 fimalgoritmo

Se o usurio digitar um nmero maior que 50 ele ser exibido pelo menos uma vez! Corrigvel com a estrutura se, no utilizada para simplificar o algoritmo

Observe que utilizando a estrutura enquanto, o teste era efetuado ao contrrio: num <= 50, e no, num > 50

Fluxograma:

61 de 65

Diagrama de Chaplin:

Resultado na mquina:

Obs: resultado incorreto para o solicitado no algoritmo

Exemplo 02: Elabore um algoritmo que solicite ao usurio um nmero, e seja capaz de exibir todos os nmeros inteiros de 1 at ele: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1

62 de 65
enquanto aux <= num faca escreva(aux) aux<-aux+1 fimenquanto fimalgoritmo

Resultado na mquina:

Exemplo 03: Elabore um algoritmo que a partir do exemplo 2 exiba tambm a soma dos nmeros gerados: Pseudocdigo:
algoritmo "sequencia de nmeros at at o digitado + Soma" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var num,soma,aux:inteiro inicio escreva("Digite um numero: ") leia(num) aux<-1 soma<-0 enquanto aux<=num faca escreval(aux) soma<-soma+aux aux<-aux+1 fimenquanto escreva("A soma e: ",soma) fimalgoritmo

63 de 65 Resultado na mquina:

Exemplo 04: Elabore um algoritmo que solicite o nome do usurio ou a letra s para sair, e enquanto no se desejar sair, solicitar tambm o telefone: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var nome, telefone: caracter inicio escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) fimenquanto fimalgoritmo

Resultado na mquina:

Exemplo 05:

64 de 65 Elabore um algoritmo que a partir do exemplo 4 exiba tambm a quantidade de usurios cadastrados: Pseudocdigo:
algoritmo "Solicita nome e telefone - Lao e conta usurios" // Funo : // Autor : // Data : 28/5/2011 // Seo de Declaraes var nome, telefone: caracter cont: inteiro inicio cont <- 0 escreva("Digite seu nome ou 's' para sair: ") leia(nome) enquanto nome <> "s" faca escreva("Digite seu telefone:") leia(telefone) escreval("Usurio: ", nome, " - Telefone: ", telefone) escreva("Digite seu nome ou 's' para sair: ") leia(nome) cont <- cont + 1 fimenquanto escreva("Total de usurios cadastrados: ", cont) fimalgoritmo

Resultado na mquina:

65 de 65

BIBLIOGRAFIA
FORBELLONE, Andre Luiz Vilar; EBERSPACHER, Henri Frederico. Lgica de programao: a construo de algoritmos e estruturas de dados. 3. ed. So Paulo: Makron Books; Pearson Education do Brasil, 2006. ASCENCIO, Ana Fernanda Gomes; CAMPOS, Edilene Aparecida Veneruchi. Fundamentos da Programao de Computadores: Algortimos, Pascal, C++ e Java. 2. ed. So Paulo: Pearson Education do Brasil, 2010. PUGA, Sandra; RISSETTI Gerson. Lgica de Programao e Estruturas de Dados: com Aplicaes em Java. 2. ed. So Paulo: Pearson Education do Brasil, 2010. ZIVIANI, Nivio. Projeto de Algoritmos: com Implementaes em Java e C ++. 2. ed. So Paulo: Thomson; Cengage Learning, 2007. FREITAS, Maria Ester; DANTAS, Marcelo. Algoritmos e Lgica de Programao. 2. ed. So Paulo: Cengage Learning, 2011. WIKIBOOKS (2010). Introduo Programao. Acessado em: 02/ 02/ 2011, em: http://pt.wikibooks.org/wiki/Introdu%C3%A7%C3%A3o_%C3%A0_programa %C3%A7%C3%A3o/Defini%C3%A7%C3%B5es_sobre_L %C3%B3gica_de_Programa%C3%A7%C3%A3o#T.C3.A9rmino_do_algoritmo WIKIPROG(2010). Algoritmo (Indentao). Acessado em: 02/ 02/ 2011,em: http://pt.wikipedia.org/wiki/Indentao