Sei sulla pagina 1di 22

Universidade do Estado de Santa Catarina UDESC Centro de Cincias Tecnolgicas CCT

Apostila sobre VisuAlg

Christian J. Pereira Joinville, 2011

Sumrio

1 - Introduo Aos Algoritmos ................................................................................................................ 01 2 - Linearizao de Expresses ............................................................................................................... 01 3 - Forma Geral de um ALGORITMO .................................................................................................. 02 4 Variveis ............................................................................................................................................. 03 5 - Operador de Atribuio ..................................................................................................................... 04 6 - Linhas de Comentrio ........................................................................................................................ 04 7 - Comandos de E/S (Entrada/Sada) ................................................................................................... 04 8 - Estruturas Seqenciais ....................................................................................................................... 06 9 - Estrutura Condicional ........................................................................................................................ 06 10 - Escolha...Caso ................................................................................................................................... 08 11 - Estrutura de Repetio .................................................................................................................... 09 12 - Comando repita...Ate ....................................................................................................................... 10 13 - Comando Enquanto..faca ................................................................................................................. 11 14 - Comando para..faca ......................................................................................................................... 11 15 - Variveis Compostas Homogneas ................................................................................................. 12 15.1 - Variveis Indexadas Unidimensionais (Vetores) ............................................................................ 12 15.2 - Variveis Indexadas Bidimensionais (Matrizes) .............................................................................. 13 16 Subalgoritmos ................................................................................................................................... 14 16.1 Funes ............................................................................................................................................ 14 16.2 - Procedimento (Sub_rotinas) ............................................................................................................. 16 Exerccios .................................................................................................................................................. 18 Captulo 8 .................................................................................................................................................... 18 Captulo 9 e 10 ............................................................................................................................. ............... 18 Captulo 11 14 .......................................................................................................................................... 18 Captulo 15 .................................................................................................................................................. 19 Captulo 16 .................................................................................................................................................. 20

1 - Introduo Aos Algoritmos


Um algoritmo uma seqncia 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. De maneira geral, existem muitos caminhos que levam a uma soluo. Para praticar os algoritmos e os problemas, utilizaremos o software Visualg desenvolvida por Cludio Morgado de Souza. E-mail: cmorgado@apoioinformatica.com.br. Para programar em Visualg, utiza-se o Portugol (ou Portugus Estruturado), ele , na verdade uma simplificao do portugus, limitado um conjunto de palavras e regras que definem o que chamamos de sintaxe da linguagem, esta sintaxe ser apresentada aos poucos.

2 - Linearizao de Expresses
Para a construo de algoritmos que realizam clculo 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 Portugol, a tabela a seguir mostra um exemplo. { [ 2/3 - ( 5 - 3 )]+1} . 5 Tradicional ((2/3 - (5-3)) +1)*5 Computacional

As tabelas a seguir mostram os operadores aritmticos em Portugol Operadores Aritmticos Adio Subtrao Multiplicao Diviso Diviso Inteira Exponenciao Resto da Diviso Portugol + * / \ ^ ou Exp(<base>,<expoente>) %

Os operadores relacionais realizam a comparao entre dois operandos ou duas expresses e resultam em valores lgicos (VERDADEIRO ou FALSO) Operadores Relacionais Maior Menor Maior ou Igual Menor ou Igual Igual Diferente Portugol > < >= <= = <>

Por exemplo, 2+5>4 resulta em VERDADEIRO, 3 <> 3 resulta em FALSO Os operadores lgicos atuam sobre expresses e tambm resultam em valores lgicos VERDADEIRO ou FALSO. Operadores Lgicos Multiplicao Lgica Portugol E Significado Resulta VERDADEIRO quando ambas as partes forem verdaderas. Resulta VERDADEIRO quando uma das partes for verdadeira Nega uma afirmao, invertendo seu valor: caso seja FALSO, torna-se VERDADEIRO.

Adio Lgica Negao

Ou Nao

Por exemplo, (2+5>4) E (3<>3) resulta FALSO,pois a afirmao 3<>3 FALSO.


1

(2+5>4) E (Nao(3<>3)) Resulta VERDADEIRO. 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 Portugol podemos ter parnteses dentro de parnteses, como seriam os colchetes e as chaves na matemtica. A prioridade dos operadores est descrita nas tabelas a seguir: Operador Aritmtico Exponenciao Multiplicao/Diviso Adio/Subtrao (2+2)/2 resulta em 2, e 2 + 2 / 2 resulta em 3. Operador Lgico E Ou Nao Prioridade 3 2 1 Prioridade 3 (Maior) 2 1 (Menor)

(2>3) ou (3<2) e (2<3) resulta em FALSO, (2>3) e (3<2) ou (2<3) resulta em VERDADEIRO. Tambm existe prioridade entre as categorias dos operadores. Operador Aritmticos Relacionais Lgicos Prioridade 3 2 1

Vale lembrar que o VisuAlg no possui relacionamento de categorias 2*5>3 ou 5+1<2 e 2<7-2 resulta em erro. (2*5>3) ou (5+1<2) e (2<7-2), assim seria o correto.

3 - Forma Geral de um ALGORITMO


Nessa seo vamos conhecer os primeiros elementos que compem o Portugol e escrever alguns algoritmos. A estrutura geral de um algoritmo : Algoritmo "<nome do algoritmo>" var < declarao de variveis> inicio < lista de comandos> fimalgoritmo 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 podemos efetuar as operaes comparar, comprar, comer e servir; inicio indica 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 so palavras 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 destaque.
2

4 - 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. 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: VAR <identificador 1>, <identificador 2>, ..., <identificador n>: <tipo das variveis>

onde <identificador determina que tipo de valor usados para referenci-las precisos, dando uma idia

i> o nome (identificador) de uma varivel e <tipo das variveis> as variveis podero receber. Os identificadores das variveis so dentro do algoritmo. Tais identificadores devem ser claros e do papel da varivel no algoritmo.

a. b. c. d. e. f.

A identificao ou nomeao de variveis segue algumas regras: Nomes de variveis no podem ser iguais a palavras reservadas; Nomes de variveis devem possuir como primeiro caractere uma letra ou underline '_' (os outros caracteres podem ser letras, nmeros e underline); Nomes de variveis devem ter no mximo 127 caracteres; Nomes de variveis no podem conter espaos em branco; Na sintaxe do Portugol , no h diferena entre letras maisculas de minsculas (NOME o mesmo que noMe); Duas ou mais variveis no podem possuir o mesmo nome. Exemplo 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. PALAVRAS RESERVADAS aleatorio abs algoritmo arccos arcsen arctan arquivo asc ate caracter caso compr copia cos cotan cronometro debug declare

e eco enquanto entao escolha escreva exp faca falso fimalgoritmo fimenquanto fimescolha fimfuncao fimpara fimprocedimento fimrepita fimse funo

grauprad inicio int interrompa leia literal log logico logn maiusc mensagem minusc nao numerico numpcarac ou outrocaso para

passo pausa pi pos procedimento quad radpgrau raizq rand randi repita se sen senao timer tan verdadeiro xou

Em Portugol, s existem quatro tipos de dados, conforme a tabela abaixo.


3

Tipo Inteiro

Descrio Representa valores inteiros. Exemplos: 10,5,-5,-10

Real ou Numrico

Literal ou Caractere

Lgico

Representa valores reais (com ponto separador da parte decimal) Exemplos: 10,15.5, -14,67 Representa texto (sequencia ou cadeia de caracteres) entre aspas duplas. Exemplos: Esta uma cadeia de caracteres, B, 12 Representa valores lgicos (VERDADEIRO ou FALSO)

5 - 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. Exemplo 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: VAR salario: REAL INICIO salario <- "Insuficiente" Deve estar claro, tambm, que sempre esquerda do comando deve haver um (e somente um) identificador de varivel. Assim, so seguintes comandos: 2060 <- NumeroConta NumeroAgencia+digitoControle <- 2345 + 0 NomeCliente+sobrenome <- Joo + Silva de atribuio incorretos os

6 - 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 // Este mtodo calcula o fatorial de n...x <- y;

7 - 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 4 de programao tm comandos para este fim. Em Portugol utilizamos o comando escreva para

isto. A sintaxe desse comando tem a seguinte forma Escreva (<expresso ou identificador ou constante>, <expresso ou identificador ou constante>, ..., <expresso ou identificador ou constante>)

OBS.: No Visualg existem dois comandos escreva com finalidades diferentes quando usado consecutivamente. Escreval (<expresso ou identificador ou constante>) //Mostra o primeiro resultado na mesma linha depois em linhas diferentes. Escreva (<expresso ou identificador ou constante>) //Mostra o resultado na mesma linha, mas em colunas diferentes. Exemplo X <- 3.5 Y <- 4 Escreva ("O valor de X ", X) Escreva (" E o valor de Y ", Y) Escreva (" 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 : Leia (<identificador>)

Exemplo 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 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: leia (NumeroConta+60) leia (12345) leia (NomeCliente+Sobrenome)
5

8 - Estruturas Seqenciais
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 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. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Algoritmo "Clculo de Mdia Aritmtica" VAR A,B,Media : REAL Inicio Escreva ("Programa que calcula a mdia aritmtica de dois valores") Escreva ("Digite um valor : ") Leia (A) Escreva ("Digite outro valor : ") Leia (B) Media <- (A+B)/2 Escreva("A mdia dos dois valores : ", Media) FimAlgoritmo 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 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 seqencial determinada por um INCIO e FIM. Em um algoritmo, estes limites so definidos com as palavras Algoritmo e FimAlgoritmo.

9 - 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 "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 possase pensar como isto VERDADEIRO ou isto FALSO. Se a condio for 6 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 o Portugol: 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:

se <condio> entao <aes (uma ou mais) a serem realizadas se a condio for verdadeira> fimse 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 sabe o que "ter R$ 10,00 sobrando"). Para aproximar mais nossa frase de um algoritmo, poderemos ter a seguinte forma: 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: 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: 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: se (A > B) e (A > C) e (B <> C) entao ... fimse se nao Achou entao // Correto se Achou foi declarada como logico ... fimse Seja o algoritmo abaixo: Faa um Algoritmo para calcular a rea de um circulo, fornecido o valor do raio, que deve ser positivo.
7

1. 2.

Algoritmo "Calcula Area do Circulo" VAR

3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.

Area, Raio: Real inicio Escreval ("Entre com raio do crculo") Leia (Raio) Se Raio > 0 entao Area <- PI*(Raio^2) Escreva ("A rea do crculo de raio ", Raio, " ", Area) fimse Se Raio <= 0 entao Escreva ("Raio no pode ser nulo ou negativo!") fimse 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 permitem associar um conjunto de instrues a ser executado se a condio do comando resultar em FALSO. em Portugol, a sintaxe para tal a seguinte: se <condio> entao <aes (uma ou mais) a serem realizadas se a condio for verdadeira> senao <aes (uma ou mais) a serem realizadas se a condio for falsa> fimse Utilizando o senao, o algoritmo para calcular a rea de um circulo, ficaria assim:

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.

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) Escreva ("A rea do crculo de raio ", Raio, " ", Area) senao Escreva ("Raio no pode ser nulo ou negativo!") fimse fimalgoritmo

10 - 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: escolha < expresso-de-seleo > caso < exp 1 > , < exp 2 >, ... , < exp n > < lista-de-comandos-1 > caso < exp 1 > , < exp 2 >, ... , < exp n > < lista-de-comandos-2 > outrocaso < lista-de-comandos-3 > fimescolha Exemplo 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 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. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23.

Algoritmo "CLASSIFICAO DE ATLETAS var nome, categoria : caractere idade : inteiro inicio escreva("Nome do Atleta = ") leia (nome) escreva("Idade do Atleta = ") leia (idade) escolha idade caso 5,6,7,8,9,10 categoria <- "Infantil" caso 11,12,13,14,15 categoria <- "Juvenil" caso 16,17,18,19,20 categoria <- "Junior" caso 21,22,23,24,25 categoria <- "Profissional" outrocaso categoria <- "INVALIDO" fimescolha escreva ("Categoria = ",categoria) fimalgoritmo

11 - Estrutura de Repetio
Nos exemplos e exerccios que vimos at agora sempre foi possvel resolver os problemas com uma seqncia de instrues onde todas eram necessariamente executadas uma nica vez. Os algoritmos que escrevemos seguiam, portanto, apenas uma seqncia 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 trs vezes. Exemplo 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. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.

Algoritmo "MediaHarmonica" VAR a, b, c, MH: REAL NOME: caractere inicio 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: ")

21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39.

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 Portugol possui trs estruturas de repetio: repita...ate, enquanto...faca e para...faca.

12 - 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 :

repita <lista de comandos> ate <expresso lgica ou relacional>

Exemplo Algoritmo que escreve os nmeros de 1 a 10. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. algoritmo "DemonstraRepeticao" VAR i: INTEIRO inicio i<- 1 repita escreva (i) i<- i + 1 ate i > 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. Existem diversas maneiras de implementar o mesmo lao, mas todo lao com varivel de controle deve conter: 10 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.

13 - 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: enquanto <expresso lgica ou relacional> faca <lista de comandos> fimenquanto

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 Algoritmo que l diversos nmeros positivos e escreve, para cada um, sua raiz quadrada. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. algoritmo comEnquanto var i: numerico inicio leia (i) enquanto i >=0 faca escreva (i^0.5) leia (i) fimenquanto fimalgoritmo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. algoritmo comRepita var i: numerico inicio repita leia (i) se i >=0 entao escreva (i^0.5) fimse ate i<0 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.

14 - Comando para..faca
O comando para...faca tambm permite a descrio, dentro de um algoritmo, de uma estrutura de repetio. Sua forma geral : para <varivel de controle> de <valor inicial> ate <valor final> [passo <incremento>] faca <lista de comandos> fimpara

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 da 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. Um algoritmo que l escreve os nmeros mpares de 1 a 1000. para i de 1 ate 1000 passo 2 faca // Incrementa i de 2 em 2 escreva i, mpar fimpara A estrutura para..faca uma estrutura de repetio mais completa que as anteriores, pois ela 11

1. 2. 3.

incorpora a inicializao, incremento e teste de valor preferencialmente utilizada em situaes em que sabe-se a serem feitas. Este nmero de repeties pode ser varivel. A seguir, sero apresentados alguns problemas desenvolvidas algumas solues para os mesmos.

final da varivel de controle. previamente o nmero de repeties uma constante ou estar em uma utilizando estruturas de repetio e

Algoritmo que l 5 nmeros e escreve todos os que forem positivos. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Algoritmo "Positivos" var i, numero: inteiro inicio para i de 1 ate 5 passo 1 faca 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.

15 - 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 nome 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. 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.

15.1 - Variveis Indexadas Unidimensionais (Vetores)


Variveis indexadas com uma nica dimenso, tambm conhecidas como vetores, so referenciadas por um nico ndice. A sintaxe para declarao : <identificador> : vetor [<tamanho>] de < tipo > Tamanho [VI..VF]=> Vi= Valor inicial do ndice e VF valor Final do ndice. Exemplo IDADE: VETOR [1..5] DE INTEIRO 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: < identificador>[<posio>] <- <valor> Exemplo

12

1. 2. 3. 4. 5. 6.

nomes[1] <- Joo da Silva idades[1] <- 35 nomes[3] <- Maria Aparecida idades[3] <- idades[1] i <- 5 idades[i] <- 45 Exemplo 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. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.

Algoritmo "vetores" VAR NUMERO: VETOR [1..6] DE REAL I, conta_neg: INTEIRO inicio conta_neg <- 0 para i de 1 ate 6 faca leia (NUMERO[i]) se NUMERO[i] < 0 entao conta_neg <- conta_neg + 1 fimse fimpara para i de 1 ate 6 faca escreval (NUMERO[i]) fimpara escreva ("Total de nmeros negativos: ", conta_neg) fimalgoritmo

15.2 - 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 : <identificador> : vetor [<tamanho1>,<tamanho2>] de < tipo > Exemplo 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 PESSOAS[1,3]<- Joao

Exemplo 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. 5. 6. 7. 8. Algoritmo "Matriz" VAR VALORES : VETOR [1..3,1..3] DE REAL somaLinha3, somaColuna2, somaDiagPrinc, somaDiagsecu, somaTudo: REAL i, j: INTEIRO //os ndice sempre inteiro inicio somaLinha3 <- 0 somaColuna2 <- 0

13

9. 10. 11. 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. 40. 41.

somaDiagPrinc <- 0 somaDiagsecu <- 0 somaTudo <- 0 Para i de 1 ate 3 faca Para i de 1 ate 3 faca Escreva("Digite um valor para a matriz") Leia (VALORES[i,j]) somaTudo <- VALORES[i,j] + somaTudo se i=3 entao somaLinha3 <- VALORES[i,j]+ somaLinha3 fimse se j=2 entao somaColuna2 <- VALORES[i,j]+ somaColuna2 fimse se i=j entao somaDiagPrinc <- VALORES[i,j]+ somaDiagPrinc fimse se j=4-i entao somaDiagsecu <- VALORES[i,j]+ somaDiagsecu fimse fimpara fimpara Para i de 1 ate 3 faca para j de 1 ate 3 faca escreval (VALORES[i,j]) fimpara fimpara escreval ("Soma de todos os elementos ", somaTudo) escreval ("Soma dos elementos da linha 3 ", somaLinha3) escreval ("Soma dos elementos da coluna 2 ", somaColuna2) escreval ("Soma dos elementos da diagonal principal ", somaDiagPrinc) escreval ("Soma dos elementos da diagonal secundria ", somaDiagsecu) fimalgoritmo

16 - Subalgoritmos
So trechos de algoritmos que efetuam um ou mais clculos determinados. Ao invs de escreverse 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.

16.1 - 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:

Funo Abs(valor: real) : real Arccos(valor: real): real Arcsen(valor: real): real Arctan(valor: real) : real Asc(s: caracter): inteiro Compr(c: caracter): inteiro

Descrio Valor Absoluto Arco cosseno Arco seno Arco tangente Retorna o cd ASCII Retorna a dimenso do caracter

14

Copia(c:caracter, posini,posfim :inteiro):caracter Cos (valor:real):real Cotan(valor:real):real Exp(<base>,<expoente>) Grauprad(valor: real): real Int(valor:real): inteiro Log(valor:real):real Logn(valor:real):real Maiusc(c:caracter): caracter Minusc(c:caracter):caracter Numpcarac(n: inteiro ou real) : caracter Pi: real Pos (subs, c: caracter) : inteiro Quad(valor: real): real Radpgrau(valor: real) : real Raizq(valor:real):real Rand: real Randi (limite: inteiro) :inteiro Sen (valor: real):real Tan (valor: real):real

Copia um determinado trecho de caracter Cosseno Cotangente Potenciao Converte grau para radianos Converte o valor em inteiro Logaritmo de base 10 Logaritmo natural (ln) Converte em maiscula Converte em minscula Converte um numero inteiro ou real para caractere Valor Pi Retorna a posio do caractere Elevado ao quadrado Converte radiano para grau Raiz quadrada Gerador de numeros aleatrios entre 0 e 1 Gerador de numeros aleatrios com um limite determinado Seno Tangente

Pressionando (CTRL+J) o visualg mostra uma Lista de funes predefinidas, a sua utilizao muito simples basta selecionar a funo desejada e dar um Enter, depois s passar os parmetros desejados.

Exemplo 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Algoritmo "RETORNA O SOBRENOME" var nome, sobrenome : Caractere quant_caracteres, local_espcao : INTEIRO inicio nome <- "Joao Silva" quant_caracteres <- Compr (nome) local_espcao <- POS (" ",nome) sobrenome <- Copia (nome, local_espcao + 1 , quant_caracteres) Escreva("Seu sobrenome ", sobrenome) 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 chamada o retorno tambm fixo. Algoritmo "<nome do algoritmo>" var <declarao de variveis globais> <definio da funo> inicio < lista de comandos> fimalgoritmo

Sintaxe da Funo funcao <identificador> ([var]<parmetros>) <tipo de retorno> var <declarao de variveis locais>
15

inicio

<lista de comandos> retorne <varivel de retorno> fimfuncao

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 tem validade dentro do escopo da funo. Retorne: local onde colocado a varivel de retorno. 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 ALGORITMO "Funes Personalizadas" var Valor_1,Valor_2, soma: real FUNCAO FSoma(Recebe_valor1, Recebe_valor2: Real):Real var total : real Inicio total<-Recebe_valor1+Recebe_valor2 retorne total fimfuncao INICIO ("Valor_1 : ") LEIA (Valor_1) Escreva ("Valor_2 : ") LEIA (Valor_2) soma<-FSoma(Valor_1,Valor_2) ESCREVA ("Soma das vaiveis ", soma) FIMALGORITMO

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22.

16.2 - Procedimento (Sub_rotinas)


Sintaxe Procedimento: procedimento <identificador> ([var]<parmetros>) var <declarao de variveis locais> inicio <lista de comandos> fimprocedimento 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
16

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26.

ALGORITMO "Procedimento" var A,B,C,D,CONT,AUX:Inteiro Procedimento TROCA(var x, y: inteiro) var Aux : inteiro INICIO Aux <- x x <- y y <- Aux FIMProcedimento INICIO LEIA (A,B,C,D) Enquanto NAO((A<=B) e (B<=C) e (C<=D)) faca se (D<C) entao TROCA(D,C) FIMSE SE C<B ENTAO TROCA(C,B) FIMSE SE B<A ENTAO TROCA(A,B) FIMSE FIMENQUANTO ESCREVA (A," ",B," ",C," ",D) FIMALGORITMO

17

Exerccios Captulo 8
Exerccio 1 Faa um algoritmo que leia o nome de um piloto, uma distncia percorrida em km e o tempo que o piloto levou para percorr-la (em horas). O programa deve calcular a velocidade mdia em km/h, e exibir a seguinte frase: A velocidade mdia do <piloto> foi <velocidade mdia> km/h. Exerccio 2 Em uma pizzaria, cada tulipa de chopp custa R$ 0,80 e uma pizza mista grande custa R$10,00 mais R$1,50 por tipo de cobertura pedido (queijo, presunto, banana, etc). Uma turma vai pizaria e pde uma determinada quantidade de chopps e uma pizza grande com uma determinada quantidade de coberturas. Faa um algoritmo que calcule e conte e, sabendo quantas pessoas esto mesa, quanto que cada um deve pagar (no esqueca dos 10% do garom). Exerccio 3 Escreva um algoritmo que calcule o nmero de notas que deve ser dado de troco para um pagamento efetuado. O algoritmo deve ler o valor a ser pago, e o valor realmente pago. Supor que o troco seja dado em notas de 50, 20, 10, 5, 2 e 1 real, dando sempre a menor quantidade de notas.

Captulo 9 e 10
Exerccio 1 Escreva um programa que leia um nmero inteiro. Se o nmero lido for positivo, escreva uma mensagem indicando se ele par ou mpar. Se o nmero for negativo, escreva a seguinte mensagem: Nmero Negativo!. Exerccio 2 Faa um algoritmo que receba o valor do salrio de uma pessoa e o valor de um financiamento pretendido. Caso o financiamento seja menor ou igual 5 vezes o salrio da pessoa, o algoritmo dever escrever Financiamento Concedido, seno, ele dever escrever Financiament Negado. Independente de conceder ou no o financiamento, o algoritmo escrever depois a frase: Obrigado por nos consultar. Exerccio 3 Faa um programa que l 4 valores, I, A, B, C, onde I um nmero inteiro positivo e A, B e C so quaisquer valores reais. O programa deve escrever os valores lidos e: Se I = 1, Escrever A, B e C em ordem crescente; Se I = 2, Escrever A, B e C em ordem decrescente; Se I = 3, Escrever A, B e C de forma que o maior valor fique entre os outros; Se I no for um dos trs valores acima, dar uma mensagem indicando isto.

Captulo 11 14
18

Exerccio 1 Escrever um algoritmo que l um nmero desconhecido de valores, um de cada vez, e conta quantos deles esto em cada um dos intervalos [0,25], (25,50], (50,75], (75,100].

Exerccio 2 Escrever um algoritmo que leia informaes sobre um grupo de 250 pessoas e calcule alguns dados estatsticos. Para cada pessoa do grupo deve ler o nome da pessoa, a altura, o peso e o sexo. Calcular e escrever: A quantidade total de homens e mulheres e o percentual de cada. A mdia de peso das pessoas (somatrio dos pesos de todas as pessoas pela quantidade de pessoas) O nome da pessoa mais alta. Exerccio 3 Escrever um algoritmo que l um nmero no determinado de valores para m, todos inteiros e positivos, um de cada vez. Se m for par, verificar quantos divisores possui e escrever esta informao. Se m for mpar e menor do que 12, calcular e escrever o fatorial de m. Se m for mpar e maior ou igual 12, calcular e escrever a soma inteiros de 1 at o nmero lido. Exercio 4 Escrever um algoritmo que gera e escreve os 4 primeiros nmeros perfeitos. Um nmero perfeito aquele que igual soma dos seus divisores. Ex: 28 = 1+2+4+7+14. Exerccio 5 Faa um algoritmo que gere uma tabela com os nmeros de 1 a 10 e mostre o seu quadrado, cubo, fatorial, nmero de divisores e uma mensagem dizendo se ele primo ou no, a cada 20 linhas deve ser escrito o cabealho novamente: Nmero 1 2 Quadrado 1 4 Cubo 1 8 Fatorial 1 2 Divisores 1 2 Primo Sim Sim

Exerccio 6 Escrever um algoritmo que l um conjunto no determinado de pares de valores a, b, todos inteiros e positivos, e para cada par lido, obtm o MDC e o MMC de a, b, escrevendo-os juntamente com os valores lidos.

Captulo 15
Exerccio 1 Escrever um algoritmo que l um vetor de 13 posies que o gabarito de um teste de loteria esportiva, contendo os valores 1, 2 ou 3. Ler, a seguir, para cada apostador, o nmero de seu carto e um vetor de respostas. Verificar para cada apostador o nmero de acertos e escrev-lo na tela, caso tenha 13 acertos, aparecer tambm a mensagem: GANHADOR, PARABNS!. Exerccio 2 Escrever um algoritmo que l um vetor de 15 posies e o escreve. Ordene a seguir os elementos do vetor em ordem crescente e escreva novamente o vetor na tela.

Exerccio 3 Escrever um algotirmo que l, para um vetor de 30 posies, vinte valores que ocuparo

19

as primeiras 20 posies do vetor. Ordene, a seguir os elementos em ordem crescente. leia, a seguir 10 valores, um por vez, e insira-os nas posies adequadas do vetor ordenado, de forma que o mesmo continue ordenado. Escreva o vetor ao final. Exerccio 4 Na teoria de sistemas define-se elemento minimax de uma matriz, o menor elemento da linha em que se encontra o maior elemento da matriz. Escrever um algoritmo que l uma matriz 10x10 e determina o elemento minimax desta matriz, escrevento a matriz e a posio do elemento minimax ao final. Exerccio 5 Escreva um algoritmo que ordene os elementos de cada linha de uma matriz 10x10.

Captulo 16
Exerccio 1 Escreva uma funo que receba um vetor literal de 1000 posies e retorne o nmero de palavras do vetor. As palavras so separadas por espaos em branco. Exerccio 2 faa uma subrotina que receba uma matriz 10x10, o nmero de uma linha, o nmero de uma coluna e retorne uma matriz 9x9, resultante da remoo da coluna e da linha informados.

20

Potrebbero piacerti anche