Você está na página 1de 46

CENTRO UNIVERSITRIO NOSSA SENHORA DO PATROCNIO CEUNSP

INSTITUTO DE ENGENHARIA ARQUITETURA E DESIGN COMPUTAO CIENTIFICA - PRIMEIRO SEMESTRE LETIVO

TCNICAS DE DESENVOLVIMENTO DE LGICA

PROF VALRIA AP. PEREZ FARIA

Sumrio
1 - As dificuldades de programar .............................................................................................. 3 2 - A metodologia de aprendizagem ......................................................................................... 3 5 - Algoritmo.............................................................................................................................. 4 5 - Desenvolvendo algoritmos................................................................................................... 5 6 - Fases ..................................................................................................................................... 5 7 - Algoritmos No Computacionais.......................................................................................... 6 8 - Algoritmos Computacionais ................................................................................................. 7 9 -Linearizao de Expresses ................................................................................................. 10 10 -Forma Geral de um ALGORITMO ...................................................................................... 13 12 -Variveis ............................................................................................................................ 14 13 -Operador de Atribuio .................................................................................................... 15 14 -Linhas de Comentrio ....................................................................................................... 16 15 -Comandos de E/S (Entrada/Sada) .................................................................................... 16 16 -Construindo os Primeiros Algoritmos: .............................................................................. 19 17 - Estrutura Condicional ....................................................................................................... 21 17 .a - Escolha...Caso .............................................................................................................. 24 18 -Testando o Algoritmo ....................................................................................................... 25 19 -Estrutura de Repetio ..................................................................................................... 26 20 -Comando repita...Ate ........................................................................................................ 27 21 -Comando enquanto..faca.................................................................................................. 32 22 -Comando para..faca .......................................................................................................... 33 23 -Variveis Compostas Homogneas ................................................................................... 34 23.a Variveis Indexadas Unidimensionais (Vetores) ............................................................. 35 23.b Variveis Indexadas Bidimensionais (Matrizes) .............................................................. 36 24 -Subalgoritmos ................................................................................................................... 38 24.a Funes ........................................................................................................................... 38 24.b Procedimento (Sub_rotinas) ........................................................................................... 42 25 - Funes definidas recursivamente .................................................................................. 43 25 - Referncias ....................................................................................................................... 46

Computao Cientfica I Prof. Valria Ap. Perez Faria

3 Programar um computador no uma tarefa to difcil. Difcil programar as nossas cabeas. O computador, na realidade, uma rplica bastante simplificada de nossa mente, com apenas uma diferena essencial: a AUTO-PROGRAMAO. Ao longo de nossas vidas, aprendemos coisas a partir de alguns elementos fundamentais como cores, smbolos, sons, cheiros, e sentimentos. Esses elementos vo se combinando atravs de um processo conhecido como aprendizado. O processo de aprendizado nada mais do que uma auto-programao de nossas mentes. Algum diz para nosso crebro o que ele tem que fazer ao se deparar com uma situao especfica, tal como: dobrar uma esquina, parar ao perceber o sinal vermelho, escovar os dentes ao acordar, em fim - tudo o que fazemos regido por programas que, um dia, ns mesmos desenvolvemos. Ora, se somos capazes de desenvolver programas para um aparelho to complexo e genial como o nosso crebro, por que no um simples computador? Este o nosso desafio. Desenvolver as tcnicas necessrias para conseguirmos codificar programas em um computador digital.

1 - As dificuldades de programar
Programar um computador, assim como a nossa mente, requer duas exigncias bsicas: Conhecer a linguagem na qual se vai programar; Estruturar o raciocnio de forma a saber combinar os comandos desta linguagem, dentro de uma sequncia lgica, ou seja, de modo a atingirmos o objetivo perseguido. A linguagem de programao utilizada pelas nossas mentes composta de comandos (olhe, escute, memorize, decida, sinta, ame, odeie...), elementos (cores, tipos de cheiros, notas musicais, smbolos sonoros, smbolos visuais...) e capaz de reconhecer e utilizar os recursos disponveis no organismo (olho, ouvido, crebro, nariz, boca...), sem os quais torna-se impossvel a execuo de um programa. A linguagem de programao utilizada pelos computadores composta tambm por comandos (receba, escreva, some, multiplique...) e elementos (nmeros, palavras e smbolos), e tambm capaz de reconhecer e utilizar os recursos disponveis no computador e perifricos (impressora, monitor de vdeo, mouse, teclado, memria...). Ao aprendermos uma receita de bolo, colocamos uma poro de comandos em nossa mente. Estes comandos so gravados de uma forma analgica e, logo em seguida, consolidamos o processo de aprendizagem atravs da execuo daquele programa. Claro, da primeira vez que fazemos algo podemos cometer erros, que so automaticamente ajustados pela nossa mente para que, da prxima vez, no voltem a acontecer. Da mesma maneira, sempre que um programador desenvolve a primeira verso de seu programa, h uma fase de testes, quando os erros aparecem e so ajustados necessidade do usurio. A esta fase damos o nome de DEPURAO.

2 - A metodologia de aprendizagem
Como vemos, a programao de computadores bastante semelhante a programao de nossas mentes, o que torna suas dificuldades e caractersticas tambm similares.Aplicaremos as tcnicas e recursos existentes aos elementos inerentes a computadores, interagindo com variveis de memria, comandos de entrada e sada de dados, alm de comandos que Computao Cientfica I Prof. Valria Ap. Perez Faria

4 controlaro a repetio de blocos de comandos. Estruturas como vetores, matrizes, listas, filas, pilhas, rvores, entre outras, sero ministrados em outras disciplinas. Para representar as aes (comandos), utilizaremos uma linguagem no comercial - o pseudocdigo, conhecido como Algoritmo. Uma linguagem que lhe poupe de comandos em ingls, e que no apresente grandes sofisticaes. A linguagem de programao experimental que utilizaremos para exercitar a lgica de programao ser na nossa prpria linguagem: a lngua portuguesa. Para facilitar o processo de aprendizagem, os temas que abordaremos podero ser convertidos para a linguagem Pascal, que tem em suas origens, o objetivo de ensinar os alunos a interagirem com o computador de forma prtica.

3 - Introduo Lgica de Programao


3.a Lgica
A lgica de programao necessria para pessoas que desejam trabalhar com desenvolvimento de sistemas e programas, ela permite definir a seqncia lgica para o desenvolvimento. Ento o que lgica? Lgica de programao a tcnica de encadear pensamentos para atingir determinado objetivo.

3.b Seqncia Lgica


Estes pensamentos, podem ser descritos como uma seqncia de instrues, que devem ser seguidas para se cumprir uma determinada tarefa. Seqncia Lgica so passos executados at atingir um objetivo ou soluo de um problema.

3.c Instrues
Na linguagem comum, entende-se por instrues um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, porm, instruo a informao que indica a um computador uma ao elementar a executar. Convm ressaltar que uma ordem isolada no permite realizar o processo completo, para isso necessrio um conjunto de instrues colocadas em ordem seqencial lgica. Por exemplo, se quisermos fazer uma omelete de batatas, precisaremos colocar em prtica uma srie de instrues: descascar as batatas, bater os ovos, fritar as batatas, etc... evidente que essas instrues tm que ser executadas em uma ordem adequada no se pode descascar as batatas depois de frit-las. Dessa maneira, uma instruo tomada em separado no tem muito sentido; para obtermos o resultado, precisamos colocar em prtica o conjunto de todas as instrues, na ordem correta. Instrues so um conjunto de regras ou normas definidas para a realizao ou emprego de algo. Em informtica, o que indica a um computador uma ao elementar a executar.

4 - Programas
Os programas de computadores nada mais so do que algoritmos escritos numa linguagem de computador (Pascal, C, Cobol, Fortran, Visual Basic entre outras) e que so interpretados e executados por uma mquina, no caso um computador. Notem que dada esta interpretao rigorosa, um programa por natureza muito especfico e rgido em relao aos algoritmos da vida real.

5 - Algoritmo
Algoritmo formalmente uma sequencia de passos que levam a execuo de uma tarefa. Podemos pensar em um algoritmo como uma receita, uma sequencia de instrues que do Computao Cientfica I Prof. Valria Ap. Perez Faria

5 cabo de uma meta especfica. Estas tarefas no podem ser redundantes nem subjetivas na sua definio, devem ser claras e precisas. Um algoritmo uma sequncia de instrues finita e ordenada de forma lgica para a resoluo de uma determinada tarefa ou problema. So exemplos de algoritmos instrues de montagem, receitas, manuais de uso, etc. Um algoritmo no a soluo do problema, pois, se assim fosse, cada problema teria um nico algoritmo; um algoritmo um caminho para a soluo de um problema. Em geral, existem muitos (seno infinitos) caminhos que levam a uma soluo satisfatria.

5 - Desenvolvendo algoritmos
Regras para construo do algoritmo Para escrever um algoritmo precisamos descrever a sequencia de instrues, de maneira simples e objetiva. Para isso utilizaremos algumas tcnicas: Usar somente um verbo por linha Imaginar que voc est desenvolvendo um algoritmo para pessoas que no trabalham com informtica Usar frases curtas e simples Ser objetivo Procurar usar palavras que no tenham duplo sentido.

6 - Fases
Para montar um algoritmo, precisamos primeiro dividir o problema apresentado em trs fases fundamentais.

ENTRADA
Onde temos:

PROCESSAMENTO

SADA

ENTRADA: So os dados de entrada do algoritmo PROCESSAMENTO: So os procedimentos utilizados para chegar ao resultado final SADA: So os dados j processados, ou seja a resposta do problema.

Exemplo de algoritmo

Digite os valores N1 e N2

Soma N1 + N2

Resultado: soma

Computao Cientfica I Prof. Valria Ap. Perez Faria

7 - Algoritmos No Computacionais
Um algoritmo no computacional um algoritmo cuja sequncia de passos, a princpio, no pode ser executada por um computador. Abaixo apresentado um algoritmo no computacional cujo objetivo usar um telefone pblico. Provavelmente voc executou o algoritmo deste exemplo diversas vezes. O termo algoritmoest muito ligado Cincia da Computao, mas, na realidade, ele pode ser aplicado a qualquer problema cuja soluo possa ser decomposta em um grupo de instrues. Exemplo 1.1

Outro exemplo tpico de algoritmo uma receita culinria, como no exemplo abaixo. Exemplo 1.2 Algoritmo para fritar um ovo 1. Colocar um ovo na frigideira 2. Esperar o ovo ficar frito 3. Remover o ovo da frigideira O algoritmo acima, no entanto, poderia ser mais detalhado e completo. Uma verso mais aceitvel seria: Exemplo 1.3 Algoritmo para fritar um ovo 1. Retirar um ovo da geladeira 2. Colocar a frigideira no fogo 3. Colocar leo 4. Esperar at o leo ficar quente 5. Quebrar o ovo separando a casca 6. Colocar o contedo do ovo na frigideira 7. Esperar um minuto 8. Retirar o ovo da frigideira 9. Apagar o fogo Essa segunda verso mais completa e detalhada que a anterior. Nela, vrias aes que estavam subentendidas foram explicitadas. No entanto, para que o algoritmo possa ser til, necessrio ainda que quem faz uso dele conhea os termos utilizados nas instrues. O algoritmo do exemplo s ser til para algum que seja fluente na lngua portuguesa e Computao Cientfica I Prof. Valria Ap. Perez Faria

7 conhea o significado dos verbos Retirar, Colocar, Esperar assim como dos substantivos utilizados no contexto de uma receita culinria. Em outras palavras, preciso que a linguagem utilizada no algoritmo seja conhecida tanto por quem o escreveu quanto por quem vai execut-lo. Para que o algoritmo possa ser executado por uma mquina importante que as instrues sejam corretas e sem ambiguidades. Portanto, a forma especial de linguagem que utilizaremos bem mais restrita que o Portugus e com significados bem definidos para todos os termos utilizados nas instrues. Essa linguagem conhecida como Portugus Estruturado (s vezes tambm chamada de Portugol). O portugus estruturado , na verdade, uma simplificao extrema do Portugus, limitada a umas poucas palavras e estruturas que tm um significado muito bem definido. Ao conjunto de palavras e regras que definem o formato das sentenas vlidas chamamos sintaxe da linguagem. Durante este texto, a sintaxe do Portugus Estruturado ser apresentada progressivamente e a utilizaremos em muitos exerccios de resoluo de problemas. Aprender as palavras e regras que fazem parte dessa sintaxe fundamental; no entanto, no o maior objetivo deste curso. O que realmente exigir um grande esforo por parte do estudante aprender a resolver problemas utilizando a linguagem. Para isso, h somente um caminho: resolver muitos problemas. O processo semelhante ao de tornar-se competente em um jogo qualquer: aprender as regras do jogo (a sintaxe) s o primeiro passo, tornar-se um bom jogador (programador) exige tempo, muito exerccio e dedicao. Embora o Portugus Estruturado seja uma linguagem bastante simplificada, ela possui todos os elementos bsicos e uma estrutura semelhante de uma linguagem tpica para programao de computadores. Alm disso, resolver problemas com portugus estruturado, pode ser uma tarefa to complexa quanto a de escrever um programa em uma linguagem de programao qualquer. Portanto, neste curso, estaremos na verdade procurando desenvolver as habilidades bsicas que sero necessrias para adquirir-se competncia na programao de computadores. Para praticar nossa sintaxe e testar nossos problemas, utilizaremos o software Visualg

8 - Algoritmos Computacionais
O computador, a princpio, no executa nada. Para que ele faa uma determinada tarefa calcular uma folha de pagamento, por exemplo -, necessrio que ele execute um programa. Um programa um conjunto de milhares de instrues que indicam ao computador, passo a passo, o que ele tem que fazer. Logo, um programa nada mais do que um algoritmo computacional descrito em uma linguagem de programao. Uma linguagem de programao contm os comandos que fazem o computador escrever algo na tela, realizar clculos aritmticos, receber uma entrada de dados via teclado, e milhares de outras coisas, mas estes comandos precisam estar em uma ordem lgica. O termo processamento de dados muitas vezes utilizado em conjunto com computadores, pois, em geral, isto o que eles fazem: processar dados. Da pode extrair os dois componentes bsicos de um algoritmo computacional (de agora em diante, esta palavra sempre utilizada no contexto de algoritmos computacionais): dados e cdigo. Dados so os valores (nmeros, nomes, etc.) de que precisamos para resolver o problema, e cdigo so os comandos ou instrues que usaremos para manipular e "processar" os dados.

Computao Cientfica I Prof. Valria Ap. Perez Faria

9 - Diagrama de Bloco
9.1 O que um diagrama de bloco?
O diagrama de blocos uma forma padronizada e eficaz para representar os passos lgicos de um determinado processamento. Com o diagrama podemos definir uma seqncia de smbolos, com significado bem definido, portanto, sua principal funo a de facilitar a visualizao dos passos de um processamento.

9.2 Simbologia
Existem diversos smbolos em um diagrama de bloco. No decorrer do curso apresentaremos os mais utilizados. Veja no quadro abaixo alguns dos smbolos que iremos utilizar:

Computao Cientfica I Prof. Valria Ap. Perez Faria

Dentro do smbolo sempre ter algo escrito, pois somente os smbolos no nos dizem nada. Veja no exemplo a seguir: Exemplos de Diagrama de Bloco:

Computao Cientfica I Prof. Valria Ap. Perez Faria

10

Veja que no exemplo da bala seguimos uma seqncia lgica somente com informaes diretas, j no segundo exemplo da mdia utilizamos clculo e exibimos o resultado do mesmo.

9 -Linearizao de Expresses
Para a construo de algoritmos que realizam clculos matemticos, todas as expresses aritmticas devem ser linearizadas, ou seja, colocadas em linhas, devendo tambm ser feito o mapeamento dos operadores da aritmtica tradicional para os do Portugus Estruturado.

Computao Cientfica I Prof. Valria Ap. Perez Faria

11 Os operadores relacionais realizam a comparao entre dois operandos ou duas expresses e resultam em valores lgicos (VERDADEIRO ou FALSO).

Exemplo 3.2 2+5>4 resulta VERDADEIRO 3<>3 resulta FALSO Os operadores lgicos atuam sobre expresses e tambm resultam em valores lgicos VERDADEIRO ou FALSO. Smbolo utilizado para comparao entre expresso.

Computao Cientfica I Prof. Valria Ap. Perez Faria

12

A tabela abaixo chamada tabela-verdade mostra os resultados das aplicaes dos operadores lgicos conforme os valores dos operadores envolvidos.

De acordo com a necessidade, as expresses podem ser unidas pelos operadores lgicos. Exemplo 3.3 (2+5>4) e (3<>3) resulta FALSO, pois VERDADEIRO e FALSO resulta FALSO. A modularizao a diviso de uma expresso em partes, proporcionando maior compreenso e definindo prioridades para a resoluo da mesma. Como pde ser observado no exemplo anterior, em expresses computacionais utilizamos somente parnteses "()" para modularizao. Na sintaxe do Portugus Estruturado podemos ter parnteses dentro de parnteses, como seriam os colchetes e as chaves na matemtica. Os parnteses indicam quais sub-expresses, dentro de uma expresso, sero executados primeiro. A princpio, a execuo da esquerda para direita, mas alm dos parnteses, existem prioridades entre os operadores envolvidos na expresso. Tais prioridades so mostradas nas tabelas seguintes.

Exemplo 3.4 (2 + 2)/2 resulta 2 e 2 + 2/2 resulta 3

Computao Cientfica I Prof. Valria Ap. Perez Faria

13 Exemplo 3.5 (2>3) ou (3<2) e (2<3) //resultado seria Falso (2>3) e (3<2) ou (2<3) //resultado seria Verdadeiro Entre as categorias de operadores tambm h prioridades, conforme mostrado na tabela abaixo.

10 -Forma Geral de um ALGORITMO


Nessa seo vamos conhecer os primeiros elementos que compem o Portugus Estruturado e escrever alguns algoritmos. A estrutura geral de um algoritmo :

onde as palavras algoritmo e fimalgoritmo fazem parte da sintaxe da linguagem e sempre delimitam o inicio e fim de um algoritmo; a < declarao de variveis> a seo ou parte do algoritmo onde descrevemos os tipos de dados que sero usados na lista de comandos. Por exemplo, poderamos definir que fruta um tipo de dado que pode assumir apenas os valores ma, pra, banana, abacaxi e outras frutas, sobre os quais podemosefetuar as operaes comparar, comprar, comer e servir; inicioindica o fim das declaraes e o incio da seo de comandos; < lista de comandos > apenas uma indicao de que entre as palavras inicio e fimalgoritmo podemos escrever uma lista com uma ou mais instrues ou comandos. importante salientar que, quando um algoritmo executado, as instrues ou comandos de um algoritmo so sempre executados na ordem em que aparecem no mesmo. As palavras que fazem parte da sintaxe da linguagem sopalavras reservadas, ou seja, no podem ser usadas para outro propsito em um algoritmo que no seja aquele previsto nas regras de sintaxe. A palavra algoritmo, por exemplo, uma palavra reservada. Neste texto, as palavras reservadas sempre aparecero em negrito.

Computao Cientfica I Prof. Valria Ap. Perez Faria

14

11 - Constantes
Constante um determinado valor fixo que no se modifica ao longo do tempo, durante a execuo de um programa. Conforme o seu tipo, a constante classificada como sendo numrica, lgica e literal. Exemplo de constantes:

12 -Variveis
Uma varivel pode ser vista como uma caixa com um rtulo ou nome colado a ela,que num dado instante guarda um determinado objeto. O contedo desta caixa no algo fixo,permanente. Na verdade, essa caixa pode ter seu contedo alterado diversas vezes. Contudo, o contedo deve ser sempre do mesmo tipo. Na figura abaixo, a caixa (varivel) rotulada com FATOR contm o valor 5. Como seu tipo numrico, em um determinado instante essa caixa poder conter qualquer valor numrico (inteiro ou fracionrio; positivo, negativo ou zero). Entretanto, em um determinado instante, ela conter um, e somente um, valor.

Variveis so palavras que tem um significado bem especfico em um algoritmo. Para que o computador possa executar comandos que envolvem variveis da maneira correta, ele deve conhecer os detalhes das variveis que pretendemos usar. Esses detalhes so: o identificador desta varivel e o tipo de valores que essa varivel ir conter. Precisamos assim, de uma maneira de especificar esses detalhes e comunic-los ao computador. Para isso devemos declarar nossas variveis logo abaixo da expresso VAR que tem a seguinte forma:

onde<identificador i> o nome (identificador) de uma varivel e <tipo das variveis> determina que tipo de valor as variveis podero receber. Os identificadores das variveis so usados para referenci-las dentro do algoritmo.

Computao Cientfica I Prof. Valria Ap. Perez Faria

15 Tais identificadores devem ser claros e precisos, dando uma ideia do papel da varivel no algoritmo. A identificao ou nomeao de variveis segue algumas regras: a. nomes de variveis no podem ser iguais a palavras reservadas; b. nomes de variveis devem possuir como primeiro caractere uma letra ou sublinhado '_' (os outros caracteres podem ser letras, nmeros e sublinhado); c. nomes de variveis devem ter no mximo 127 caracteres; d. Nomes de variveis no podem conter espaos em branco; e. na sintaxe do Portugus Estruturado, no h diferena entre letras maisculas de minsculas (NOME o mesmo que noMe). Exemplo 5.1 Identificadores vlidos: NOME, TELEFONE, IDADE_FILHO, IdadeFilho, NOTA1, Est_Civil Identificadores invlidos: 3Endereco, Estado Civil, PARA, algoritmo, numero/complemento Voc deve estar se perguntando por que a palavra PARA e algoritmo so identificadores invlidos. Eles so invlidos, pois so palavras reservadas da linguagem, veja outras palavras que voc no deve utilizar como identificadores de variveis.

Em Portugus Estruturado, s existem trs tipos de dados, conforme a tabela abaixo.

LOGICO Representa valores lgicos (VERDADEIRO ou FALSO).

13 -Operador de Atribuio
Para colocar um valor em uma varivel dentro de um algoritmo, utilizamos o operador de atribuio. O operador de atribuio representado por uma seta (<-) apontando para a esquerda.

Computao Cientfica I Prof. Valria Ap. Perez Faria

16 Exemplo 6.1 Peso <- 78.7 // Este comando atribui varivel Peso o valor 78.7. Nome <- "Joo da Silva" // Este comando atribui varivel Nome o valor "Joo da Silva". Achei <- FALSO // Este comando atribui varivel Achei o valor FALSO. importante lembrar que s se pode atribuir s variveis valores do mesmo tipo da varivel. Assim, o seguinte comando seria invlido: Exemplo 6.2 VAR salario: REAL INICIO salario<- "Insuficiente" Deve estar claro, tambm, que sempre esquerda do comando de atribuio deve haver um (e somente um) identificador de varivel. Assim,so incorretos os seguintes comandos: Exemplo 6.2 so incorretos 2060 <- NumeroConta NumeroAgencia+digitoControle<- 2345 + 0 NomeCliente+sobrenome<- Joo + Silva NomeCliente+sobrenome<- Joo + Silva

14 -Linhas de Comentrio
Os comentrios so declaraes no compiladas que podem conter qualquer informao textual que voc queira adicionar ao cdigo-fonte para referncia e documentao de seu programa. Uma Linha So representados por duas barras normais ( // ). Todo o texto que voc digitar aps as duas barras ser comentrio. Exemplo 7.1 // Este mtodo calcula o fatorial de n...x <- y; // Inicializa a varivel x com o valor de y

15 -Comandos de E/S (Entrada/Sada)


Em geral, um programa que faz seu processamento e no tem como mostrar seus resultados intil (imagine, por exemplo, uma calculadora que realiza uma infinidade de operaes matemticas, mas no tem um display para mostrar os resultados!). Portanto, em algum ponto do algoritmo geralmente deve ocorrer exibio de valores, e todas as linguagens de programao tm comandos para este fim. Em Portugus Estruturado. algoritmos usamos o comando escreva para isto. A sintaxe desse comando tem a seguinte forma: Computao Cientfica I Prof. Valria Ap. Perez Faria

17

OBS.: No Visualg existem dois comandos escreva com finalidades diferentes quando usado consecutivamente.

Exemplo 8.1 X <- 3.5 Y <- 4 Escreva ("O valor de X ", X) Escreva (" E o valor de Y ", Y) Escreval (" A soma de X e Y ", X+Y) Escreval ("O valor de X ", X) Escreval ("E o valor de Y ", Y) Escreval ("A soma de X e Y ", X+Y) Faria com que aparecesse na tela: O valor de X 3.5 E o valor de Y 4 A soma de X e Y 7.5 O valor de X 3.5 E o valor de Y 4 A soma de X e Y 7.5 Nem todos os dados que um algoritmo manipula so gerados por ele. Um algoritmo (programa) de caixa automtico, por exemplo, tem que obter do usurio o nmero da conta, a senha, a opo de servio desejada, etc. Assim, deve haver um meio para que sejam digitados (ou fornecidos de outra maneira) dados para o algoritmo. Mais uma vez, todas as linguagens de programao permitem isto, e no nosso Portugus Estruturado usamos o comando leia. A sintaxe deste comando :

Exemplo 8.2 leia (NumeroConta) leia (NumeroAgencia) leia (NomeCliente) Voc pode mandar uma mensagem antes para o usurio, assim ele sabe qual o contedo que deve ser colocado, ou seja, digitado. Exemplo 8.3 Computao Cientfica I Prof. Valria Ap. Perez Faria

18 Escreva ("Digite seu nome: ") Leia (nome) Escreva ("Digite sua agencia: ") Leia (NumeroAgencia) Escreva ("Digite sua conta: ") Leia (NumeroConta) Deve estar claro que sempre direita do comando leia haver um identificador de varivel. Assim, so incorretos os seguintes comandos: Exemplo 8.4 so incorretos leia (NumeroConta+60) leia (12345) leia (NomeCliente+Sobrenome)

Computao Cientfica I Prof. Valria Ap. Perez Faria

19

16 -Construindo os Primeiros Algoritmos:


Estruturas sequenciais De forma genrica, a construo de um algoritmo se resume s seguintes etapas: a)entendimento do problema; b)elaborao da soluo algortmica; e c)codificao da soluo no Portugus Estruturado; Geralmente a etapa 2 a mais complexa, pois depende da engenhosidade e experincia do construtor. Exemplo 9.1 Enunciado:Faa um programa que leia dois valores numricos, e calcule e exiba a sua mdia aritmtica. Etapa 1 Simples, hein? Dos tempos de escola lembramos que a mdia aritmtica de dois valores calculada como (a+b)/2, e sendo assim a primeira etapa j est pronta. Etapa 2 Os dados necessrios sero os dois valores, que colocaremos em duas variveis A e B, do tipo numrico, e uma terceira varivel, que chamaremos Mdia, que armazenar a mdia aritmtica calculada. Etapa 3 A obteno dos dados neste programa simples e direta. Basta pedir ao usurio que digite os valores. Etapa 4 O processamento aqui o clculo da mdia, usando o mtodo citado acima, na etapa 1. O resultado do clculo ser armazenado na varivel Mdia. Etapa 5 Basta exibir o contedo da varivel Mdia. Soluo: 1. Algoritmo "Clculo de Mdia Aritmtica" 2. VAR 3. A,B,Media : REAL 4. Inicio 5. Escreva ("Programa que calcula a mdia aritmtica de dois valores.") 6. Escreva ("Digite um valor : ") 7. Leia (A) 8. Escreva ("Digite outro valor : ") 9. Leia (B) 10. Media <- (A+B)/2 11. Escreva ("A mdia dos dois valores : ", Media) 12. FimAlgoritmo Comentrios Voc deve ter notado que colocamos na tela instrues para o usurio usando o comando Escreva. Esta uma boa tcnica de programao, mesmo hoje em dia, com o ambiente do Computao Cientfica I Prof. Valria Ap. Perez Faria

20 Windows, etc. Da mesma forma, ao imprimir o resultado, no mostramos simplesmente a mdia, mas explicamos ao usurio o que aquele valor significa. Como pode ser analisado no tpico anterior todo programa possui uma estrutura sequencial determinada por um INCIO e FIM. Em um algoritmo, estes limites so definidos com as palavras Algoritmo e FimAlgoritmo.

Exemplo 9.2 Enunciado: Algoritmo que l o nome de um aluno, as notas de suas trs provas e calcule e exibe a mdia harmnica das provas. Etapa 1: a mdia harmnica de trs provas a, b e c dada pela frmula:

Etapa 2: os dados necessrios sero o nome do aluno e os valores das provas. O algoritmo limita-se basicamente prpria frmula. 1. Algoritmo "MediaHarmonica" 2. VAR 3. a, b, c, MH: REAL 4. NOME: CARACTER 5. inicio 1. escreva ("Entre com o nome do aluno: ") 2. leia (nome) 3. escreval ("Entre com as notas das trs provas") 4. escreva ("Digite a primeira nota: ") 5. leia (a) 6. escreva ("Digite a segunda nota: ") 7. leia (b) 8. escreva ("Digite a terceira nota: ") 9. leia (c) 10. MH <- 3/(1/a + 1/b +1/c) 11. escreval ("A mdia harmnica do aluno: ", NOME, " ", MH) 12. FimAlgoritmo

Exemplo 9.3 Enunciado: Um algoritmo que l o valor do raio e calcule a rea do crculo correspondente. Etapa 1: o clculo da rea do crculo Pi*R2. Etapa 2: o dado necessrio o valor do raio, que ser lido (colocado) na varivel Raio. 1. algoritmo "Calcula rea Circulo" 2. var 3. Area, Raio: REAL Computao Cientfica I Prof. Valria Ap. Perez Faria

21 4. 5. 6. 7. 8. 9. inicio Escreval ("Entre com o raio: ") Leia (Raio) Area<- Pi*Raio^2 Escreva ("A rea do circulo com o raio ", Raio, " ", Area) fimalgoritmo

Voc no precisa declarar o pi, pois j uma funo definida pelo programa Visualg.

17 - Estrutura Condicional
Na vida real tomamos decises a todo o momento baseadas em uma situao existente. Em um algoritmo, chamamos esta situao de condio. Associada a uma condio, existir uma alternativa possvel de aes. Exemplo 10.1 "se tiver R$ 10,00 sobrando ento irei ao cinema hoje noite. A condio nesta frase "tiver R$ 10,00 sobrando". Ela uma expresso lgica, pois a pergunta "Tenho R$ 10,00 sobrando?" Pode (tem que) ser respondida com "Sim" ou "No". Lembre-se, ento: em um algoritmo, toda condio tem que ser uma expresso lgica, algo que possa-se pensar como isto VERDADEIRO ou isto FALSO. Se a condio for verdadeira, a ao a ser executada "irei ao cinema", se a resposta pergunta "Tenho dinheiro suficiente?" for "Sim". Ento, em um algoritmo, as aes so um ou mais comandos que sero realizados apenas se a avaliao da condio resulta VERDADEIRO. Vamos colocar agora a frase do exemplo anterior em outra forma, mais parecida com nosso Portugus Estruturado: Exemplo 10.2 se "tiver R$ 10,00 sobrando" entao "irei ao cinema" fimse Veja que grifamos trs palavras: se, entao e fimse. Elas so muito importantes na estrutura dos comandos de deciso. Como prximo passo, vamos generalizar a estrutura que criamos acima:

Para terminar a nossa comparao, devemos lembrar que os comandos de um algoritmo so sempre indispensvel, e que o computador s lida com quantidades definidas (ou seja, ele no

Computao Cientfica I Prof. Valria Ap. Perez Faria

22 sabe o que "ter R$ 10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter a seguinte forma: Exemplo 10.3 se Dinheiro >= 10 entao Ir_ao_Cinema<- VERDADEIRO Fimse O exemplo acima poderia ser estendido para o caso do sujeito no ter dinheiro sobrando: "se tiver R$ 10,00 sobrando irei ao cinema hoje noite, mas se no tiver ficarei vendo TV em casa". Neste caso, uma codificao possvel para esse algoritmo seria: Exemplo 10.4 se Dinheiro >= 10 entao Ir_ao_Cinema<- VERDADEIRO Ver_TV<- FALSO Fimse se Dinheiro < 10 entao Ir_ao_Cinema<- FALSO Ver_TV<- VERDADEIRO Fimse importante frisar que sempre direita do comando se dever parecer uma expresso lgica, e uma expresso cujo resultado VERDADEIRO ou FALSO. Assim, os seguintes comandos so incorretos: Exemplo 10.5 se A <- B entao // uma atribuio e no uma expresso ... fimse se A + B entao // uma expresso aritmtica e no uma expresso ... fimse Por outro lado, esto corretos os seguintes comandos: Exemplo 10.6 se (A > B) e (A > C) e (B <> C) entao ... fimse senao Achou entao // Correto se Achou foi declarada como logico ... fimse Seja o algoritmo abaixo:

Computao Cientfica I Prof. Valria Ap. Perez Faria

23

Exemplo 10.7 Faa um Algoritmo para calcular a rea de um circulo, fornecido o valor do raio, que deve ser positivo. 1. Algoritmo "Calcula Area do Circulo" 2. VAR 3. Area, Raio: Real 4. inicio 5. Escreval ("Entre com raio do crculo") 6. Leia (Raio) 7. Se Raio> 0 entao 8. Area<- PI*(Raio^2) 9. Escreva ("A rea do crculo de raio ", Raio, " ", Area) 10. fimse 11. Se Raio<= 0 entao 12. Escreva ("Raio no pode ser nulo ou negativo!") 13. fimse 14. fimalgoritmo Observe que se a condio do primeiro verdadeira, a segunda condio falsa e vice-versa, e o conjunto de instrues a ser executado se Raio <= 0 (apenas a instruo escreva ("Raio no pode ser nulo ou negativo!")) uma alternativa para a condio Raio > 0. Para expressar isso mais facilmente (e tambm por questes de eficincia), a maioria das linguagens de programao permite associar um conjunto de instrues a ser executado se a condio do comando resultar em FALSO. Em Portugus Estruturado, a sintaxe para tal a seguinte:

Utilizando o senao, o algoritmo para calcular a rea de um circulo, ficaria assim: Exemplo 10.8 1. 2. 3. 4. 5. 6. 7. 8. Algoritmo "Calcula Area do Circulo" VAR Area, Raio: Real inicio Escreval ("Entre com raio do crculo") Leia (Raio) Se Raio> 0 entao Area<- PI*(Raio^2) Computao Cientfica I Prof. Valria Ap. Perez Faria

24 9. 10. 11. 12. 13. Escreva ("A rea do crculo de raio ", Raio, " ", Area) senao Escreva ("Raio no pode ser nulo ou negativo!") fimse fimalgoritmo

Exemplo 10.9 Algoritmo que pea ao usurio a quantia em dinheiro que tem sobrando e sugira, caso ele tenha 10 ou mais reais, que v ao cinema, e se no tiver, fique em casa vendo TV. 1. Algoritmo "AconselhaPrograma" 2. Var 3. Dinheiro: REAL 4. inicio 5. Escreval ("*** Servio Informatizado de Sugestes ***") 6. Escreva ("Quanto dinheiro voc tem sobrando?") 7. Leia (Dinheiro) 8. Se Dinheiro >= 10 entao 9. Escreval ("V ao cinema hoje noite.") 10. Senao 11. Escreval ("Fique em casa vendo TV.") 12. Fimse 13. Escreva ("Obrigado e volte sempre.") 14. Fimalgoritmo

17 .a - Escolha...Caso
Em algumas situaes necessrio termos vrias solues ligadas a respostas diferentes, neste caso o comando de alternativa simples ou composta no uma soluo prtica, isto porque obrigar o programador a escrever muitas linhas de programa, alm de ter que criar vrios comandos de alternativas compostas e verificar a validade de suas condies para que o comando execute o caminho correto para uma determinada condio. Temos ento o comando de alternativa de mltipla escolha. O funcionamento deste comando obedece a seguinte regra:

Exemplo 10.10 Um determinado clube de futebol pretende classificar seus atletas em categorias e para isto ele contratou um programador para criar um programa que executasse esta tarefa. Para isso o Computao Cientfica I Prof. Valria Ap. Perez Faria

25 clube criou uma tabela que continha a faixa etria do atleta e sua categoria. A tabela est demonstrada abaixo: IDADE CATEGORIA De 05 a 10 Infantil De 11 a 15 Juvenil De 16 a 20 Junior De 21 a 25 Profissional Construa um programa que solicite o nome e a idade de um atleta e imprima a sua categoria. 1. Algoritmo "CLASSIFICAO DE ATLETAS 2. var 3. nome, categoria : caractere 4. idade : inteiro 5. inicio 6. Escreva("Nome do Atleta = ") 7. Leia (nome) 8. Escreva("Idade do Atleta = ") 9. Leia (idade) 10. Escolha idade 11. caso 5,6,7,8,9,10 12. categoria<- "Infantil" 13. caso 11,12,13,14,15 14. categoria<- "Juvenil" 15. caso 16,17,18,19,20 16. categoria<- "Junior" 17. caso 21,22,23,24,25 18. categoria<- "Profissional" 19. outrocaso 20. categoria<- "INVALIDO" 21. Fimescolha 22. Escreva ("Categoria = ",categoria) 23. fimalgoritmo

18 -Testando o Algoritmo
Um algoritmo, depois de ser elaborado, pode (e deve) ser testado. Para tal, utilizamos um mtodo conhecido como teste de mesa. O teste de mesa como uma simulao de todos os passos, ou seja, entradas, comandos e instrues do algoritmo, a fim de saber se ele chega ao resultado a que se prope e se a lgica est correta. Para tal, preenche-se uma tabela com valores para as variveis e segue-se o fluxo de execuo do algoritmo, simulando a execuo de cada instruo, ou seja, refazendo o que o computador faria ao executar cada instruo. A cada comando simulado (executado), o valor das variveis na tabela deve ser atualizado. Se, para uma instruo executada, uma ou mais variveis no ficaram com os valores esperados, h um erro na lgica do algoritmo.

Computao Cientfica I Prof. Valria Ap. Perez Faria

26

19 -Estrutura de Repetio
Nos exemplos e exerccios que vimos at agora sempre foi possvel resolver os problemas com uma sequncia de instrues onde todas eram necessariamente executadas uma nica vez. Os algoritmos que escrevemos seguiam, portanto, apenas uma sequncia linear de operaes. Veja, por exemplo, um algoritmo para ler os nomes e as notas das provas de trs alunos e calcular suas mdias harmnicas. Uma possvel soluo seria repetir o trecho de cdigo do algoritmo do Exemplo 9.2 trs vezes. Exemplo 12.1 Algoritmo que l os nomes dos alunos de uma turma de trs alunos e as notas de suas trs provas; o algoritmo calcula e exibe as mdias harmnicas das provas de cada aluno. 1. Algoritmo "MediaHarmonica" 2. VAR 3. a, b, c, MH: REAL 4. NOME: caractere 5. inicio 6. escreva ("Entre com o nome do aluno: ") 7. leia (nome) 8. escreval ("Entre com as notas das trs provas") 9. escreva ("Digite a primeira nota: ") 10. leia (a) 11. escreva ("Digite a segunda nota: ") Computao Cientfica I Prof. Valria Ap. Perez Faria

27 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. leia (b) escreva ("Digite a terceira nota: ") leia (c) MH <- 3/(1/a + 1/b +1/c) escreval ("A mdia harmnica do aluno: ", NOME, " ", MH) escreva ("Entre com o nome do aluno: ") leia (nome) escreval ("Entre com as notas das trs provas") escreva ("Digite a primeira nota: ") leia (a) escreva ("Digite a segunda nota: ") leia (b) escreva ("Digite a terceira nota: ") leia (c) MH <- 3/(1/a + 1/b +1/c) escreval ("A mdia harmnica do aluno: ", NOME, " ", MH) escreva ("Entre com o nome do aluno: ") leia (nome) escreval ("Entre com as notas das trs provas") escreva ("Digite a primeira nota: ") leia (a) escreva ("Digite a segunda nota: ") leia (b) escreva ("Digite a terceira nota: ") leia (c) MH <- 3/(1/a + 1/b +1/c) escreval ("A mdia harmnica do aluno: ", NOME, " ", MH) FimAlgoritmo

A soluo acima vivel apenas para uma turma de poucos alunos; para uma turma de 40 alunos, a codificao da soluo seria por demais trabalhosa. Nesta seo, veremos um conjunto de estruturas sintticas que permitem que um trecho de um algoritmo (lista de comandos) seja repetido um determinado nmero de vezes, sem que o cdigo correspondente tenha que ser escrito mais de uma vez. Em Portugus Estruturado possui trs estruturas de repetio: repita...ate, enquanto...faca e para...faca.

20 -Comando repita...Ate
Nessa estrutura, todos os comandos da lista so executados e uma expresso lgica avaliada. Isto se repete at que a avaliao da condio resulte em FALSO, quanto ento o prximo comando a ser executado o comando imediatamente aps o ate. Cada repetio da lista de comandos tambm chamada de iterao e essa estrutura tambm chamada de lao de repetio. Sua forma geral :

Computao Cientfica I Prof. Valria Ap. Perez Faria

28

Exemplo 13.1 Algoritmo que escreve os nmeros de 1 a 10. 1. algoritmo "DemonstraRepeticao" 2. VAR 3. i: INTEIRO 4. inicio 5. i<- 1 6. repita 7. escreva (i) 8. i<- i + 1 9. ate i > 10 10. fimalgoritmo No exemplo acima, a varivel i controla o nmero de repeties do lao. Normalmente, a varivel de controle do lao recebe um valor inicial, incrementada (ou decrementada) de um valor constante no lao e tem seu valor testado no final do lao. Ao chegar a um determinado valor, o lao interrompido. A inicializao da varivel contadora deve acontecer fora do lao, antes do seu incio. Exemplo 13.2 Algoritmo que l os nomes dos alunos de uma turma de trs alunos e as notas de suas trs provas; o algoritmo calcula e exibe as mdias harmnicas das provas de cada aluno. 1. Algoritmo "MediaHarmonica" 2. var 3. a, b, c, MH, i: real 4. NOME: caractere 5. inicio 6. i <- 1 7. Repita 8. escreva ("Entre com o nome do aluno: ") 9. leia (nome) 10. escreval ("Entre com as notas das trs provas") 11. escreva ("Digite a primeira nota: ") 12. leia (a) 13. escreva ("Digite a segunda nota: ") 14. leia (b) 15. escreva ("Digite a terceira nota: ") 16. leia (c) 17. MH <- 3/(1/a + 1/b +1/c) Computao Cientfica I Prof. Valria Ap. Perez Faria

29 18. 19. 20. 21. escreval ("A mdia harmnica do aluno: ", NOME, " ", MH) i <- i + 1 ate i > 3 FimAlgoritmo

Existem diversas maneiras de implementar o mesmo lao, mas todo lao com varivel de controle deve conter: a)inicializao da varivel de controle; b)incremento (aumento do valor da varivel de controle) ou decremento (diminuio do valor da varivel de controle) da varivel de controle; e c)teste de valor da varivel de controle. Exemplo 13.3 Algoritmo que escreve os nmeros pares de 10 a 2. 1. algoritmo "DecrementoNumerosPares" 2. var 3. i: inteiro 4. inicio 5. i <- 10 6. Repita 7. escreva (i) 8. i <- i - 2 9. ate i = 0 10. Fimalgoritmo Um cuidado fundamental que o construtor do algoritmo deve ter o de certificar-se que a condio para que sejam mantidas as iteraes torne-se, em algum momento, falsa, para que o algoritmo no entre em um lao infinito. Exemplo 13.4 1. algoritmo laoInfinito 2. VAR 3. Contador: numerico 4. inicio 5. repita 6. Contador <- 1 7. Contador <- Contador + 1 8. ate Contador = 10 9. fimalgoritmo

Existem diversas maneiras de implementar o mesmo lao, mas todo lao com varivel de controle deve conter: a)inicializao da varivel de controle;

Computao Cientfica I Prof. Valria Ap. Perez Faria

30 b)incremento (aumento do valor da varivel de controle) ou decremento (diminuio do valor da varivel de controle) da varivel de controle; e c) teste de valor da varivel de controle. Exemplo 13.3 Algoritmo que escreve os nmeros pares de 10 a 2. 1. algoritmo "DecrementoNumerosPares" 2. var 3. i: inteiro 4. inicio 5. i <- 10 6. Repita 7. escreva (i) 8. i <- i - 2 9. ate i = 0 10. Fimalgoritmo Um cuidado fundamental que o construtor do algoritmo deve ter o de certificar-se que a condio para que sejam mantidas as iteraes torne-se, em algum momento, falsa, para que o algoritmo no entre em um lao infinito. Exemplo 13.4 1. algoritmo laoInfinito 2. VAR 3. Contador: numerico 4. inicio 5. repita 6. Contador <- 1 7. Contador <- Contador + 1 8. ate Contador = 10 9. fimalgoritmo No exemplo acima, a execuo do algoritmo entra em um lao infinito porque a inicializao da varivel Contador (instruo Contador <- 1) deveria ser feita antes do comando repita, ou seja, antes do lao. No exemplo, ela sempre voltar a ser 1 e nunca alcanar o valor 10. Exemplo 13.5 1. algoritmo laoInfinito 2. VAR 3. Soma: numerico 4. inicio 5. Soma <- 1 6. repita 7. Soma <- Soma + 2 8. ate Soma = 10 9. escreva (soma) 10. fimalgoritmo

Computao Cientfica I Prof. Valria Ap. Perez Faria

31 No exemplo acima, a execuo do algoritmo entra em um lao infinito porque a varivel Soma incrementada de 2 em 2. Como ela comea com o valor 1, ela passar do valor 9 para o 11, ou seja, nunca ser igual a 10. Para corrigir o problema, bastaria alterar a condio conforme o exemplo abaixo. Exemplo 13.6 1. algoritmo laoInfinito Consertado 2. VAR 3. Soma: REAL 4. inicio 5. Soma <- 1 6. repita 7. Soma <- Soma + 2 8. ate Soma > 10 9. escreva (soma) 10. fimalgoritmo Lembrete: Quando ocorrer lao infinito no Visualg voc ficar sem comunicao. Procura dar Ctrl+ALT+DEL e selecionar o programa Visualg e clicar no boto finalizar. No se preocupe com seu algoritmo, pois quando ocorre isso o Visualg salva automaticamente. Para recuperar seu algoritmo basta abrir Visualg novamente que mostrar uma janela como abaixo, perguntando se deseja recuperar ou no o algoritmo perdido no lao infinito.

Se voc sabe que vai ocorrer um lao infinito e mesmo assim quer executar seu algoritmo, procura executar passo a passo pressionando a tecla F8 para no trancar.

Exemplo 13.7 1. algoritmo "Menu" 2. VAR 3. opcao: inteiro 4. inicio 5. repita 6. escreval ("Cadastro de clientes") 7. escreval ("1-Incluir") 8. escreval ("2-Alterar") 9. escreval ("3-Consultar") 10. escreval ("4-Excluir") Computao Cientfica I Prof. Valria Ap. Perez Faria

32 11. escreval ("5-Sair") 12. leia(opcao) 13. ateopcao = 5 14. fimalgoritmo No exemplo acima, mostra como feito um menu de cadastro de clientes, onde mostro as opes primeiro e depois compar-las conforme o usurio digitar;

21 -Comando enquanto..faca
Na estrutura enquanto..faca, a expresso lgica avaliada e, se ela for verdadeira, a lista de comandos executada. Isso se repete at que a condio seja falsa. Veja a sua forma geral:

A estrutura enquanto...faca tambm uma estrutura de repetio, semelhante repita. A diferena bsica entre as duas estruturas a posio onde testada a expresso. Na estrutura repita, a condio avaliada aps a execuo dos comandos, o que garante que os comandos sero executados pelo menos uma vez. Na estrutura enquanto, a expresso avaliada no incio e se o resultado for FALSO no primeiro teste, a lista de comandos no executada nenhuma vez. Essa diferena faz com que em determinadas situaes o uso de uma estrutura seja mais vantajoso que o uso da outra. O exemplo a seguir, onde so mostradas duas solues para um mesmo problema, ilustra essa diferena: Exemplo 14.1 Algoritmo que l diversos nmeros positivos e escreve, para cada um, sua raiz quadrada. Exemplo 14.1 Algoritmo que l diversos nmeros positivos e escreve, para cada um, sua raiz quadrada. 1. algoritmo comEnquanto 2. var 3. i: numerico 4. inicio 5. leia (i) 6. enquanto i >=0 faca 7. escreva (i^0.5) 8. leia (i) 9. fimenquanto 10. fimalgoritmo 1. algoritmo comRepita 2. var 3. i: numerico 4. inicio 5. repita 6. leia (i) Computao Cientfica I Prof. Valria Ap. Perez Faria

33 7. se i >=0 entao 8. escreva (i^0.5) 9. fimse 10. ate i<0 11. fimalgoritmo No primeiro algoritmo, se o valor lido de i for negativo, o algoritmo no deve escrever nada. Com o uso do comando repita (segundo algoritmo), para que isso ocorra, um teste do valor deve ser feito antes da escrita.

22 -Comando para..faca
O comando para...faca tambm permite a descrio, dentro de um algoritmo, de uma estrutura de repetio. Sua forma geral :

Na estrutura para..faca, a varivel de controle inicializada com <valor inicial> e no incio de cada iterao, seu valor comparado com <valor final>. Se o valor da varivel for menor ou igual a <valor final>, a lista de comandos executada e aps ser executado o ltimo comando a lista, a varivel de controle incrementada. Isto repete-se at que o valor da varivel de controle seja maior que <valor final>, quando ento executado o comando imediatamente aps a palavra fimpara. A instruo passo necessria se o incremento for diferente de 1. Exemplo 15.1 Um algoritmo que l escreve os nmeros mpares de 1 a 1000. 1. para i de 1 ate 1000 passo 2 faca // Incrementa i de 2 em 2 2. escreva i, mpar 3. fimpara A estrutura para..faca uma estrutura de repetio mais completa que as anteriores, pois ela incorpora a inicializao, incremento e teste de valor final da varivel de controle. preferencialmente utilizada em situaes em que sabe-se previamente o nmero de repeties a serem feitas. Este nmero de repeties pode ser uma constante ou estar em uma varivel. A seguir, sero apresentados alguns problemas utilizando estruturas de repetio e desenvolvidas algumas solues para os mesmos. Exemplo 15.2 Algoritmo que l 5 nmeros e escreve todos os que forem positivos. 1. Algoritmo "Positivos" 2. var 3. i, numero: inteiro 4. inicio 5. para i de 1 ate 5 passo 1 faca Computao Cientfica I Prof. Valria Ap. Perez Faria

34 6. 7. 8. 9. 10. 11. 12. escreval ("Digete um numero") leia (numero) se numero>0 entao escreva (numero) fimse fimpara fimalgoritmo

Neste algoritmo so utilizadas duas variveis, cada uma com uma funo bem definida. A varivel i usada para controlar o nmero de repeties e a varivel numero utilizada para armazenar cada um dos valores lidos. Ao escrever um algoritmo, importante ter bem clara a funo de cada varivel. Como sero lidos 5 nmeros diferentes, a leitura de numero deve ser feita dentro do lao. Exemplo 15.3 Algoritmo que l um nmero N e escreve todos os nmeros de 1 a N. 1. algoritmo "determina o tamanho do lao" 2. var 3. i, N: INTEIRO 4. inicio 5. leia (N) 6. para i de 1 ate N faca 7. escreva (i) 8. fimpara 9. fimalgoritmo Vale observar que, como nesse algoritmo lido apenas um nmero, sua leitura deve ser feita fora da estrutura de repetio. Note que no possui a sintaxe passo, pois o passo +1 definido como padro. Lembrete: O valor I e N do exemplo acima tem que ser inteiro, pois se for declarado como um valor real ou numrico o algoritmo retornara com um erro de sitaxe.

23 - Variveis Compostas Homogneas


A declarao de variveis, uma a uma, suficiente para a codificao algortmica da soluo de uma ampla gama de problemas, mas insuficiente para resolver um grande nmero de problemas computacionais. Imagine, por exemplo, como faramos para construir um algoritmo, que lesse os nomes de 500 pessoas e imprimisse um relatrio destes mesmos nomes, mas ordenados alfabeticamente. No seria uma tarefa simples, pois teramos que definir 500 variveis do tipo literal, como mostrado abaixo:

Exemplo 16.1 1. algoritmo "Invivel" 2. var Computao Cientfica I Prof. Valria Ap. Perez Faria

35 3. 4. 5. 6. 7. nome1, nome2, nome3, nome4, nome5,..., nome499, nome500: literal inicio leia (nome1,nome2,...,nome500) ... Fimalgoritmo

Considere o tamanho do algoritmo, e o trabalho braal necessrio para constru-lo. Para resolver problemas como este, e outros, existem as variveis indexadas. A declarao de uma varivel indexada corresponde, na verdade, declarao de vrias variveis cujo identificador difere apenas por um ndice. O ndice corresponde a um valor numrico comeando por 1. Cada varivel indexada pode receber valores no decorrer do algoritmo como se fosse uma varivel comum.

23.a Variveis Indexadas Unidimensionais (Vetores)


Variveis indexadas com uma nica dimenso, tambm conhecidas como vetores, so referenciadas por um nico ndice. A sintaxe para declarao :

Exemplo 16.2 8. IDADE:VETOR [1..5] DE INTEIRO 9. NOMES: VETOR [1..5] DE CARACTERE A declarao acima corresponde declarao de 10 variveis: nomes[1], nomes[2], nomes[3], nomes[4], nomes[5], idades[1], idades[2], idades[3], idades[4] e idades[5]. Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padro:

Exemplo 16.3 1. nomes[1] <- Joo da Silva 2. idades[1] <- 35 3. nomes[3] <- Maria Aparecida 4. idades[3] <- idades[1] 5. i <- 5 6. idades[i] <- 45 Exemplo 16.4 Algoritmo que l um vetor NUMERO de 6 posies e o escreve. A seguir, ele conta quantos valores de NUMERO so negativos e escreva esta informao. 1. Algoritmo "vetores" 2. VAR 3. NUMERO: VETOR [1..6] DE REAL 4. I, conta_neg: INTEIRO 5. inicio Computao Cientfica I Prof. Valria Ap. Perez Faria

36 6. conta_neg<- 0 7. para i de 1 ate 6 faca 8. leia (NUMERO[i]) 9. se NUMERO[i] < 0 entao 10. conta_neg<- conta_neg + 1 11. fimse 12. fimpara 13. para i de 1 ate 6 faca 14. escreval (NUMERO[i]) 15. fimpara 16. escreva ("Total de nmeros negativos: ", conta_neg) 17. fimalgoritmo

23.b Variveis Indexadas Bidimensionais (Matrizes)


Variveis indexadas com duas dimenses, tambm conhecida como matrizes, so referenciadas por dois ndices, cada qual comeando por 1. A sintaxe para declarao :

Exemplo 16.5 PESSOAS: VETOR [1..2,1..3] DE CARACTERE A declarao acima corresponde declarao de 6 variveis: PESSOAS[1,1], PESSOAS [1,2], PESSOAS[1,3], PESSOAS[2,1], PESSOAS[2,2], e PESSOAS [2,3]. Para se atribuir um valor a um elemento do vetor devemos utilizar o seguinte padro: < identificador>[<posio 1>,<posio 2>] <- <valor> Exemplo 16.6 PESSOAS[1,3]<- Tonet Exemplo 16.7 Algoritmo que l uma matriz v Valores(3,3) e calcula as somas: a) da linha 3 de Valores; b) da coluna 2 de Valores; c) da diagonal principal; d) da diagonal secundria; e e) de todos os elementos da matriz. 1. 2. 3. 4. Algoritmo "Matriz" VAR VALORES : VETOR [1..3,1..3] DE REAL somaLinha3, somaColuna2, somaDiagPrinc, somaDiagsecu, somaTudo: REAL Computao Cientfica I Prof. Valria Ap. Perez Faria

37 5. i, j: INTEIRO //os ndice sempre inteiro 6. inicio 7. somaLinha3<- 0 8. somaColuna2<- 0 9. somaDiagPrinc<- 0 10. somaDiagsecu<- 0 11. somaTudo<- 0 12. Para i de 1 ate 3 faca 13. Para j de 1 ate 3 faca 14. Escreva("Digite um valor para a matriz") 15. Leia (VALORES[i,j]) 16. somaTudo<- VALORES[i,j] + somaTudo 17. se i=3 entao 18. somaLinha3<- VALORES[i,j]+ somaLinha3 19. fimse 20. se j=2 entao 21. somaColuna2<- VALORES[i,j]+ somaColuna2 22. fimse 23. se i=j entao 24. somaDiagPrinc<- VALORES[i,j]+ somaDiagPrinc 25. fimse 26. se j=4-i entao 27. somaDiagsecu<- VALORES[i,j]+ somaDiagsecu 28. fimse 29. fimpara 30. fimpara 31. Para i de 1 ate 3 faca 32. para j de 1 ate 3 faca 33. escreval (VALORES[i,j]) 34. fimpara 35. fimpara 36. escreval ("Soma de todos os elementos ", somaTudo) 37. escreval ("Soma dos elementos da linha 3 ", somaLinha3) 38. escreval ("Soma dos elementos da coluna 2 ", somaColuna2) 39. escreval ("Soma dos elementos da diagonal principal ", somaDiagPrinc) 40. escreval ("Soma dos elementos da diagonal secundria ", somaDiagsecu) 41. fimalgoritmo

Computao Cientfica I Prof. Valria Ap. Perez Faria

38

24 -Subalgoritmos
So trechos de algoritmos que efetuam um ou mais clculos determinados. Ao invs de escrever-se um algoritmo grande, escrevem-se vrios algoritmos menores, os quais, no isoladamente, mas em conjunto, resolvem o problema proposto. conveniente utiliz-los quando uma determinada tarefa efetuada em diversos lugares no mesmo algoritmo. Ao invs de escrever-se um trecho diversas vezes, escreve-se um sub-algoritmo e chama-se-o diversas vezes. - Eles reduzem o tamanho do algoritmo. - Facilitam a compreenso e visualizao do algoritmo. - So declarados no incio do algoritmo e podem ser chamados em qualquer ponto aps sua declarao. - Eles podem ser Funes que retorna algum valor ou Procedimento (Subrotina) que no retorna nada.

24.a Funes
Uma funo um instrumento (Esttico) que tem como objetivo retornar um valor ou uma informao. A chamada de uma funo feita atravs da citao do seu nome seguido opcionalmente de seus argumentos iniciais entre parnteses. As funes podem ser predefinidas pela linguagem ou criadas pelo programador de acordo com o seu interesse. Funes Predefinidas do Visualg O visulag vem com bibliotecas de funes predefinidas que voc pode utilizar em seus programas. Veja a tabela abaixo:

Computao Cientfica I Prof. Valria Ap. Perez Faria

39

Exemplo 17.1 1. Algoritmo "RETORNA O SOBRENOME" 2. var 3. nome, sobrenome : Caractere 4. quant_caracteres, local_espcao : INTEIRO 5. inicio 6. nome<- "Bruno Tonet" 7. quant_caracteres<- Compr (nome) 8. local_espcao<- POS (" ",nome) 9. sobrenome<- Copia (nome, local_espcao + 1 , quant_caracteres) 10. Escreva("Seu sobrenome ", sobrenome) 11. fimalgoritmo Exemplo 17.2 1. Algoritmo "RETORNA UM VALOR INTEIRO" 2. var 3. valorReal : REAL 4. valorInteiro : INTEITO Computao Cientfica I Prof. Valria Ap. Perez Faria

40 5. 6. 7. 8. 9. inicio valorReal<- 5.87978098980980989089898 valorInteiro<- INT(valorReal) Escreva("Valor inteiro ", valorInteiro) fimalgoritmo

Criando Funes A criao de uma Funo deve ser declarada, com os demais objetos, no incio do programa. Este tipo de subalgoritmo sempre retornam um e apenas um valor ao algoritmo que lhe chamou. Cada funo tem associada ao seu valor de retorno um tipo explcito. Da mesma maneira com que os parmetros so fixos para todas as chamadas o retorno tambm fixo.

Sintaxe da Funo

Identificador: Nome da funo. Passagem de parmetros por referncia: utiliza-se a construo VAR antes dos identificadores para indicar a passagem por referncia. Os identificadores so separados por vrgula. Parmetros: Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de dados a separao feita com ponto-e-vrgulas ';'. Tipo de retorno da funo: Real, Inteiro, Lgico ou Caractere. Declarao de variveis locais: idntica a declarao de variveis globais. As variveis declaradas localmente tm validade dentro do escopo da funo. Retorne:local onde colocado a varivel de retorno. Cuidados Sempre declare as variveis globais antes da funo. A funo sempre fica dentro do escopo Algoritmo e Fim Algoritmo. Procure no Declarar variveis globais com o mesmo nome das variveis da funo. Exemplo 17.3 1. ALGORITMO "Funes Personalizadas" 2. var Computao Cientfica I Prof. Valria Ap. Perez Faria

41 3. Valor_1,Valor_2, soma: real 4. 5. FUNCAO FSoma(Recebe_valor1, Recebe_valor2: Real):Real 6. var 7. total : real 8. Inicio 9. total<-Recebe_valor1+Recebe_valor2 10. retorne total 11. fimfuncao 12. 13. INICIO 14. Escreva ("Valor_1 : ") 15. LEIA (Valor_1) 16. 17. Escreva ("Valor_2 : ") 18. LEIA (Valor_2) 19. soma<-FSoma(Valor_1,Valor_2) 20. 21. ESCREVA ("Soma das vaiveis ", soma) 22. FIMALGORITMO

Computao Cientfica I Prof. Valria Ap. Perez Faria

42

24.b Procedimento (Sub_rotinas)


Sintaxe Procedimento:

Identificador: Nome do procedimento. Passagem de parmetros por referncia: utiliza-se a construo VAR antes dos identificadores para indicar a passagem por referncia. Os identificadores so separados por vrgula. Parmetros: Entre um mesmo tipo de dados so separados por vrgula. Entre tipos de dados a separao feita com ponto-e-vrgulas ';'. Exemplo 17.4 1. ALGORITMO "Procedimento" 2. 3. var 4. A,B,C,D,CONT,AUX:Inteiro 5. 6. Procedimento TROCA(var x, y: inteiro) 7. var 8. Aux : inteiro 9. INICIO 10. Aux<- x 11. x <- y 12. y <- Aux 13. FIMProcedimento 14. 15. INICIO 16. LEIA (A,B,C,D) 17. Enquanto NAO((A<=B) e (B<=C) e (C<=D)) faca 18. se (D<C) entao 19. TROCA(D,C) 20. FIMSE 21. SE C<B ENTAO 22. TROCA(C,B) 23. FIMSE 24. SE B<A ENTAO 25. TROCA(A,B) 26. FIMSE 27. FIMENQUANTO Computao Cientfica I Prof. Valria Ap. Perez Faria

43 28. ESCREVA (A," ",B," ",C," ",D) 29. FIMALGORITMO

25 - Funes definidas recursivamente


Um algoritmo que para resolver um problema divide-o em subprogramas mais simples, cujas solues requerem a aplicao dele mesmo, chamado recursivo, seja de forma direta ou indireta. Em geral, uma rotina recursiva R pode ser expressa como uma composio formada por um conjunto de comandos C (que no contm chamadas a R) e uma chamada (recursiva) rotina R:

Entretanto, pode-se ter tambm uma forma indireta de recurso, na qual as rotinas so conectadas atravs de uma cadeia de chamadas recursivas que acaba retornando a primeira que foi chamada:

Para que esteja bem definida, uma funo recursiva deve possuir as seguintes propriedades: (1) Deve haver certos argumentos, chamando valores bsicos, para os quais a funo no se refere a ela mesma. (2) Sempre que a funo se refere a ela mesma o argumento deve estar relacionado a um valor bsico e/ou a um valor anterior. Vejamos um exemplo clssico para esclarecermos o conceito: calculo do fatorial de um nmero. A definio de fatorial : F(n) = 1 se n = 0 ou n = 1; F(n) = n.F(n-1), se n>1. onde n um numero inteiro positivo. Uma propriedade (facilmente verificvel) dos fatoriais que: n! = n . (n-1)!

Computao Cientfica I Prof. Valria Ap. Perez Faria

44 Esta propriedade chamada de propriedade recursiva: o fatorial de um numero pode ser calculado atravs do fatorial de seu antecessor. Ora, podemos utilizar esta propriedade para escrevermos uma rotina recursiva para o calculo de fatorial. Veja: F(4) = 4.F(4-1) F(3) = 3.F(3-1) F(2) = 2.F(2-1) F(1) = 1.F(1-1) F(0) = 1 imagina a funo subindo, pois encontrou F(0) = 1 F(1) = 1.1 F(2) = 2.1 F(3) = 3.2 F(4) = 4.6 resposta 24. Qual a lgica neste problema? 4x3x2x1=24 Se fosse n 6 qual seria a resposta? 6x5x4x3x2x1=720 Vamos passar isso para o Computador Os algoritmos recursivos tm em geral a forma seguinte: caso de base (base de recurso), onde o problema resolvido diretamente (sem chamada recursiva) caso geral, onde o problema resolvido com uma chamada recursiva caso geral onde o tamanho do problema menor a cada chamada Esquematicamente, os algoritmos recursivos tm a seguinte forma: se "condicao para o caso de base" entao resolucao direta para o caso de base senao uma ou mais chamadas recursivas fimse Um algoritmo recursivo pode ter um ou mais casos de base e um ou mais casos gerais. E para quealgoritmo termine, as chamadas recursivas devem convergir em direo ao caso de base, seno o algoritmo no terminar jamais. Convergir significa ter uma parte menor do problema para ser resolvido. F(4) = 4.F(4-1) F(3) = 3.F(3-1) F(2) = 2.F(2-1) Computao Cientfica I Prof. Valria Ap. Perez Faria

45 F(1) = 1.F(1-1) F(0) = 1 ------------ Caso Base F(1) = 1.1 F(2) = 2.1 F(3) = 3.2 F(4) = 4.6 Exemplo 18.1 30. Algoritmo "Funo Recursiva" 31. var 32. A, Fatorial: Inteiro 33. 34. Funcao Fat (x:Inteiro):Inteiro 35. inicio 36. se x=0 entao 37. retorne 1 38. senao 39. retorne x * Fat (x-1) 40. Fimse 41. FimFuncao 42. 43. inicio 44. Leia (A) 45. Fatorial <- Fat (A) 46. Escreva ("Fatorial ", A, " ", Fatorial) 47. FimAlgoritmo Vantagens da Recurso Simplifica a soluo de alguns problemas; Geralmente, um cdigo com recurso mais conciso; Caso no seja usada, em alguns problemas, necessrio manter o controle das variveis manualmente. Desvantagens da Recurso Funes recursivas so mais lentas que funes iterativas, pois muitas chamadas consecutivas funes so feitas; Erros de implementao podem levar a estouro de pilha. Isto , caso no seja indicada uma condio de parada, ou se esta condio nunca for satisfeita, entre outros.

Computao Cientfica I Prof. Valria Ap. Perez Faria

46

25 - Referncias
http://www.apoioinformatica.inf.br/ http://www.consiste.dimap.ufrn.br/~david/ http://www.inf.pucrs.br/%7Eegidio/algo1/ http://dein.ucs.br/Disciplinas/sis218-algoritmos/2003-2/sis218d/cronog_algo.html http://www.inf.ufpr.br/info/ http://www.angelfire.com/bc/fontini/algoritm.html Apostila de Lgica de Programao criao de algoritmos e programas professor Renato da Costa Apostila de Lgica e Programao Unicamp.

Computao Cientfica I Prof. Valria Ap. Perez Faria