Você está na página 1de 31

Universidade Federal de Viosa Centro de Cincias Agrrias Departamento de Engenharia Agrcola

DESENVOLVIMENTO DE ALGORITMOS

Elaborada por Daniela de Carvalho Lopes Evandro de Castro Melo

Viosa, abril de 2002

NDICE 1. INTRODUO ............................................................................................... 1 2. DESENVOLVIMENTO DE ALGORITMOS..................................................... 3 2.1. PORTUGOL ............................................................................................. 3 2.2. FLUXOGRAMA........................................................................................ 4 2.4. EXERCCIOS............................................................................................ 4 3. CONCEITOS IMPORTANTES ....................................................................... 5 3.1. COMPILADOR ......................................................................................... 5 3.2. SINTAXE E SEMNTICA DE UM PROGRAMA...................................... 5 3.3. OPERADORES E EXPRESSES ........................................................... 6 3.4. COMENTRIOS ....................................................................................... 7 3.5. EXERCCIOS............................................................................................ 8 4. VARIVEIS E CONSTANTES ....................................................................... 9 4.1. VARIVEIS .............................................................................................. 9 4.2. CONSTANTES ....................................................................................... 10 4.3. REGRAS PARA NOMES DE VARIVEIS E CONSTANTES ................ 10 4.4. EXERCCIOS.......................................................................................... 11 5. ESTRUTURA CONDICIONAL (ANLISE DE CONDIES)...................... 12 5.1. COMANDO SE ....................................................................................... 12 5.2. COMANDO CASO ................................................................................. 13 5.3. EXERCCIOS.......................................................................................... 13 6. ESTRUTURA DE REPETIO (ITERAES)............................................ 14 6.1. COMANDO ENQUANTO ....................................................................... 14 6.2. COMANDO PARA.................................................................................. 15 6.3. COMANDO REPITA............................................................................... 15 6.4. EXERCCIOS.......................................................................................... 16 7. EXERCCIOS DE REVISO......................................................................... 17 8. VETORES..................................................................................................... 19 8.1. EXERCCIOS.......................................................................................... 20 9. MATRIZES ................................................................................................... 21 9.1. EXERCCIOS.......................................................................................... 22 10. PROCEDIMENTOS E FUNES .............................................................. 24 10.1. PASSAGEM DE PARMETROS ......................................................... 25 10.2. EXERCCIOS........................................................................................ 27 11. LITERATURA............................................................................................. 29

Desenvolvimento de Algoritmos

1. INTRODUO
A utilizao do computador na soluo de problemas relacionados s mais diversas reas est facilitando e agilizando o trabalho de muitas pessoas. Atualmente o conhecimento de tcnicas de programao um requisito importante, principalmente na formao de profissionais relacionados s cincias exatas, como a engenharia por exemplo. Informalmente, um ALGORITMO qualquer procedimento computacional bem definido que tenha algum valor ou conjunto de valores como ENTRADA e produza algum valor ou conjunto de valores como SADA. Portanto, um algoritmo um conjunto de passos computacionais que transformam uma entrada de dados (problema) em sada de dados (soluo). A implementao da soluo de um problema em um computador consiste basicamente em dois passos: Montagem de uma seqncia de operaes que, quando executadas, produzem um resultado, que a soluo do problema (ALGORITMO); Transformao da seqncia acima em uma linguagem executvel por um computador (LINGUAGEM DE PROGRAMAO). O algoritmo um conjunto de passos para executar uma tarefa. (Receita). A formulao de um algoritmo pode ser descrita como um texto contendo instrues que sero executadas em uma ordem determinada. Na computao um algoritmo uma sequncia precisa que pode ser utilizada por um computador para a soluo de um problema. O algoritmo composto por um conjunto finito de passos, cada um requerendo uma ou mais instrues. Cada uma destas instrues, tambm chamadas de operaes, deve ser perfeitamente definida e clara. Exemplo: Como somar dois nmeros? Algoritmo SomarDoisNumeros Incio Ler (Num1) Ler (Num2) Soma = Num1 + Num2 Escrever (Soma) O ato de criar um algoritmo uma arte que nunca poder ser totalmente automatizada. Cada pessoa cria uma sequncia diferente para solucionar um mesmo problema. Para armazenar um algoritmo na memria do computador e para que o computador possa entender e comandar as operaes a serem executadas, necessrio que o algoritmo seja transcrito para uma linguagem de programao (Delphi, Turbo Pascal, C, C++, Matlab, LabView, Visual Basic, etc). Seja qual for a linguagem de programao, a soluo correta do problema apresentada pelo computador depender da qualidade do algoritmo criado para descrev-lo. Um algoritmo dito correto se, para cada instncia de entrada, ele fornece a sada correta. Dizemos que um algoritmo correto resolve o problema computacional dado.

Desenvolvimento de Algoritmos

Outro aspecto importante a validao do algoritmo gerado. A validao um processo no qual se verifica se o algoritmo fornece os resultados corretos considerando todas as entradas de dados possveis. Esta verificao realizada independentemente do cdigo de programao utilizado na implementao. Depois de implementado o programa tambm dever ser validado verificando-se se est executando corretamente o que foi determinado no algoritmo. O processo completo que resulta em um programa computacional capaz de solucionar determinado tipo de problema pode ser dividido em cinco reas descritas a seguir: Estabelecimento do problema: estabelecer os objetivos do trabalho. O problema deve ser bem definido para que o trabalho de elaborao do algoritmo seja facilitado. Desenvolvimento de um modelo: influencia diretamente na soluo do problema. Modelos mais complicados gastam mais tempo para serem resolvidos e esto mais sujeitos a erros. Criao do algoritmo: elaborar o algoritmo propriamente dito. Avaliao do algoritmo: testar o algoritmo. Avaliar as possveis entradas e verificar se as solues geradas so corretas. Avaliar, tambm, os casos de exceo. Implementao: traduzir o algoritmo para uma linguagem de programao especfica.

Desenvolvimento de Algoritmos

2. DESENVOLVIMENTO DE ALGORITMOS
Recomenda-se que os algoritmos sejam estruturados partindo-se de uma descrio geral e que, gradativamente, sejam acrescentadas particularidades e detalhes soluo do problema. Esta tcnica chamada refinamentos sucessivos, construo hierrquica ou desenvolvimento topdown (de cima para baixo). Exemplo: Efetuar a diviso de dois nmeros. Primeira Etapa: Descrio geral Algoritmo Diviso Fornecer o denominador Fornecer o divisor Diviso = Denominador / Divisor Segunda Etapa: Controle de erro Algoritmo Diviso Fornecer o denominador Fornecer o divisor Se o divisor for diferente de zero : Diviso = Denominador / Divisor Se o divisor for igual a zero: Diviso no existe

O refinamento sucessivo dos algoritmos permite abordar o problema de maneira mais objetiva diminuindo-se a probabilidade de erros e facilitando a sua reparao quando ocorrerem. Existem diversas tcnicas que ajudam no desenvolvimento de algoritmos facilitando seu entendimento para as pessoas.As mais utilizadas so o portugol e o fluxograma. 2.1. PORTUGOL O portugol uma forma de escrita estruturada, cuja finalidade descrever, em uma sequncia lgica, os passos para a resoluo de um problema. Nesta tcnica os algoritmos so escritos em uma linguagem simples que no possui muitas regras para sua escrita. Os algoritmos escritos em portugol devem ser escritos de maneira que todas as linhas contenham uma nica instruo Exemplo: Ler dois nmeros e determinar qual dele o maior. Algoritmo Maior Inicio Escrever (Digite o primeiro nmero) Ler (num1) Escrever (Digite o segundo nmero) Ler (num2) Se num1>num2 ento Escrever (O maior nmero , num1) Se num2>num1 ento Escrever (O maior nmero , num2)

Desenvolvimento de Algoritmos

Se num1=num2 ento Escrever (Os nmeros so iguais) FimMaior 2.2. FLUXOGRAMA O fluxograma utiliza smbolos que indicam o tipo de operao que dever ser realizada. Exemplo: Ler dois nmeros e determinar qual dele o maior. Algoritmo Maior
Incio

Ler num1

Ler num2

Num1>Num2

No

Num2>Num1

No

Nmeros iguais

Sim

Sim

Maior = Num1

Maior = Num2

Fim

2.4. EXERCCIOS Escreva algoritmos abaixo utilizando o portugol e o fluxograma: Somar dois nmeros Calcular a mdia entre trs nmeros Ler um nmero e verificar se maior que 10

Desenvolvimento de Algoritmos

3. CONCEITOS IMPORTANTES
3.1. COMPILADOR Para que os computadores entendam as instrues que esto escritas em uma linguagem de programao estas instrues precisam ser traduzidas em um cdigo especial chamado linguagem de mquina. Esta linguagem apresenta vrios incovenientes pois todas as operaes so escritas como conjuntos de uns e zeros para que possam ativar diretamente os dispositivos eletrnicos do computador. Mas, a pessoa que estiver programando no precisa se preocupar com a traduo do cdigo escrito em uma linguagem de programao para a linguagem de mquina. Os ambientes em que escrevemos nossos cdigos (Pascal, Delphi, C e outros) possuem um programa que executado quando pedimos para executar o cdigo que escrevemos e capaz de transform-lo em um cdigo escrito em linguagem de mquina. Este programa chamado COMPILADOR. 3.2. SINTAXE E SEMNTICA DE UM PROGRAMA Estes dois termos so muito utilizados pelos programadores quando o programa ou o algoritmo est sendo validado. A SINTAXE de um programa est relacionada forma como ele foi escrito. Ou seja, se as palavras e comandos existentes no cdigo do programa esto escritos corretamente. Se existir erro de sintaxe significa que algum comando ou instruo existente no programa foram escritos de maneira incorreta e o programa no poder ser executado. A SEMNTICA est relacionada ao contedo da instruo, ou seja, o que a instruo significa. Quando existem erros de semntica significa que alguma instruo no est fazendo o que queramos que fizesse e os resultados apresentados pelo programa no so corretos.

Desenvolvimento de Algoritmos

3.3. OPERADORES E EXPRESSES As expresses so instrues formadas por operadores e cujo resultado depender de valores atribudos a estes operadores. Exemplo: A equao x 2 + x um exemplo de expresso aritmtica. Como no existe o smbolo relacionado raiz no teclado de um computador (e isto ocorre com outros smbolos) esta expresso dever ser escrita em um algoritmo da seguinte maneira: x^2+x^(1/2). Os operadores que formam esta expresso so ^, +, ( ) e /. x dever ser escrita em um algoritmo da A equao x 3 y3 + 4 xy 2 seguinte forma: x^3*y^3+4*x*y-x/2. Os operadores que formam esta expresso so ^, *, -, / e +. Os operadores podem ser aritmticos, lgicos ou relacionais. Os operadores aritmticos geralmente fazem parte de expresses que envolvem clculos. Os operadores lgicos fazem parte de expresses que envolvem resultados caracterizados como verdadeiro ou falso. Finalmente, os operadores relacionais indicam uma comparao a ser realizada entre os termos de uma relao. A tabela mostrada a seguir apresenta os principais operadores, seus tipos e smbolos. OPERAO Adio Subtrao Multiplicao Diviso Potncia Conjuno Disjuno Negao Maior Maior ou igual Menor Menor ou igual Igual Diferente Prioridade TIPO aritmtico aritmtico Aritmtico Aritmtico Aritmtico Lgico Lgico Lgico Relacional Relacional Relacional Relacional Relacional Relacional Relacional SMBOLO + * / ^ AND (E) OR (OU) NOT (NO) > >= < <= = <> ( )

Exemplo: A expresso (2+3 >2) AND (3+1<2) analisada da seguinte maneira: o que est entre parntesis executado e a expresso simplificada para (5>2) AND (4<2). Como 5 maior que 2, a primeira comparao resulta em verdadeiro e, como 4 maior que 2, a segunda comparao resulta em falso. Um valor verdadeiro e um valor falso conectados por AND resulta em falso, que o resultado final da expresso. Os operadores lgicos se relacionam da seguinte forma: Verdadeiro AND Verdadeiro = Verdadeiro

Desenvolvimento de Algoritmos

Verdadeiro AND Falso = Falso Falso AND Verdadeiro = Falso Falso AND Falso = Falso Verdadeiro OR Verdadeiro = Verdadeiro Verdadeiro OR Falso = Verdadeiro Falso OR Verdadeiro = Verdadeiro Falso OR Falso = Falso NOT Verdadeiro = Falso NOT Falso = Verdadeiro

Quando uma expresso analisada o computador executa as operaes de acordo com uma tabela de prioridades em que operadores com prioridades mais altas so analisados primeiro. A ordem de prioridade dos operadores a seguinte: Parntesis : ( ) Potncia : ^ Multiplicao e diviso : * e / Adio e subtrao : + e Relacionais NOT (NO) AND (E) OR (OU) As linguagens de programao possuem algumas funes j implementadas e que podem ser utilizadas nas expresses para facilitar o trabalho do desenvolvedor do programa. Exemplos de algumas destas funes so: truncar, arredondar, raiz quadrada, logaritmo e outras. 3.4. COMENTRIOS Os comentrios so utilizados para facilitar o entendimento do algoritmo. Pode ser um texto ou simplesmente uma frase que aparece delimitado por chaves ({ }) ou precedido por duas barras (//). Os comentrios explicam o que acontecer quando determinada instruo for executada e servem, tambm, para ajudar quem escreveu o algoritmo, caso haja a necessidade de analis-lo algum tempo depois de sua criao. So estruturas que existem na maioria das linguagens de programao. Exemplo: Subtrair dois nmeros Algoritmo Subtrao Incio {Ler dois nmeros} Ler (num1) Ler (num2) {Subtrair os dois nmeros} Resultado = num1-num2 Fim {fim do algoritmo subtrao}

Desenvolvimento de Algoritmos

3.5. EXERCCIOS 1) Escreva as expresses abaixo no formato utilizado em algoritmos: a) b) c) 2x2 y 3+x
1 3x + 4y 2
3
3

x2 + 2

2) Sabendo-se que A=10, B=3, X=2 e Y=1, quais os resultados fornecidos pelas expresses abaixo: a) X+Y-A + (A B^2+Y) 4*X b) B^(2+X) A/3 +1 c) (A B^3 >X) OR (X 3 =1) d) NOT (X*Y = B) 3) Faa um algoritmo que leia os coeficientes a, b e c referentes a equao do segundo grau (ax2+bx+c) e exiba como resultado as razes da equao. 4) Faa um algoritmo que leia a base e a altura de um tringulo e calcule sua rea. 5) A potncia de um motor pode ser expressa em cv ou kW . Sabe-se que 1kW = 0,736 cv. Faa um algoritmo que leia um valor de potncia em cv e informe o valor de potncia equivalente em kW. 6) Faa um algorimo para transformar um valor de temperatura em F para C, (F 32) 5 sabendo-se que: C = 9

Desenvolvimento de Algoritmos

4. VARIVEIS E CONSTANTES
4.1. VARIVEIS Sabe-se que na matemtica uma varivel a representao simblica dos elementos de certo conjunto. Nos algoritmos, destinados a resolver um problema no computador, as variveis so armazenadas na memria do computador e os valores associados a elas podem ser modificados ao longo da execuo do programa. Embora uma varivel possa assumir diferentes valores, ela s pode armazenar um nico valor a cada instante. Toda varivel identificada por um nome e ser capaz de armazenar valores de um mesmo tipo. So cinco os tipos bsicos de dados que podem se utilizados: Inteiro: qualquer nmero inteiro negativo, nulo ou positivo (2, 4 ,0 ,-1). As principais operaes vlidas para este tipo de variveis so: soma, subtrao, multiplicao, DIV (diviso que no calcula a parte fracionria, por exemplo 5DIV2=2) e MOD (calcula o resto da diviso, por exemplo 5MOD2=1); Real: qualquer nmero real negativo, nulo ou positivo (2,5; 3,44; 12,3). As principais operaes vlidas para este tipo de variveis so: adio, subtrao, multiplicao e diviso. Caracter: quaisquer caracteres alfa-numricos (a,C, 2, L, d). Cadeia de caracteres (String): qualquer conjunto de caracteres alfanumricos (Ana, hoje, LOUCO, Tudo bem?). As principais operaes vlidas para este tipo de variveis so: concatenao e tamanho. Concatenar duas strings fazer a unio delas gerando uma nica cadeia de caracteres. Por exemplo, a concatenao das strings Nome: e Ariosvaldo resultar na string Nome: Ariosvaldo. Em potugol a concatenao escrita da seguinte maneira: Nome:+ Ariosvaldo=Nome: Ariosvaldo. Avaliar o tamanho de uma string verificar quantos caracteres ela possui. Por exemplo o tamanho da string terra 5. Em portugol escreve-se: Length (Terra) = 5. Lgico: variveis que podero assumir valores Verdadeiro ou Falso. As principais operaes vlidas para este tipo de variveis so: AND, OR e NOT. Toda varivel deve ser declarada. Declarar uma varivel significa criar um local na memria que ser rotulado com o nome da varivel. A varivel deve ser declarada antes do incio da execuo do programa identificando-se seu nome e tipo. Exemplo: Calcular o triplo de um nmero fornecido pelo usurio. Algoritmo TRIPLO; Var {indica que variveis sero declaradas} Numero, Resultado: Real Incio Ler (Numero) Resultado := Numero * 3 Escrever (Resultado) Fim

Desenvolvimento de Algoritmos

10

Quando um valor fornecido a uma varivel para que seja armazenado na memria do computador dizemos que o valor foi atribudo varivel. O comando de atribuio representado pelo smbolo := . Uma atribuio s ser vlida se o valor atribudo for do mesmo tipo da varivel. Por exemplo se tentarmos atribuir o valor AGRICULTURA a uma varivel do tipo real ocorrer um erro, mas se atribuirmos o valor AGRICULTURA a uma varivel do tipo String o programa ser executado corretamente. A atribuio diferente da comparao. Por exemplo, quando a expresso x:=2 (atribuio) for executada o valor 2 ser armazenado no espao de memria reservado para a varivel x que dever ser do tipo inteiro. Quando a expresso x=2 (comparao) for executada o computador verificar se o valor armazenado no espao reservado para a varivel x do tipo inteiro igual a 2. 4.2. CONSTANTES As constantes so armazenadas na memria do computador e os valores associados a elas no podem ser modificados ao longo da execuo do programa. Uma constante pode ser um nmero, um valor lgico ou uma sequncia de caracteres. As constantes tambm devem ser declaradas, como mostra o exemplo a seguir: Exemplo: Calcular o triplo de um nmero fornecido pelo usurio. Algoritmo TRIPLO; Const {indica que constantes sero declaradas} T : Inteiro = 3 Var {indica que variveis sero declaradas} Numero, Resultado: Real Incio Ler (Numero) Resultado := Numero * T Escrever (Resultado) Fim Observe que, no exemplo anterior, o valor associado a nmero ser diferente para cada execuo do programa e depender do valor digitado pelo usurio. Mas, o valor associado a T ser sempre 3.

4.3. REGRAS PARA NOMES DE VARIVEIS E CONSTANTES Os nomes de variveis e constantes devem ser formados por um ou mais caracteres, sendo que o primeiro deve ser uma letra e os seguintes letras ou dgitos. No permitido a utilizao de smbolos especiais (-, +, *, & ou outros). Tambm no deve haver espaos entre os caracteres que definem o nome de uma varivel ou constante. A tabela a seguir apresenta alguns exemplos de nomes vlidos e invlidos para variveis.

Desenvolvimento de Algoritmos

11

Nomes INVLIDOS para variveis/constantes 2NOTA MEDIA SIMPLES % VARIAO

Nomes VLIDOS para variveis/constantes NOTA MEDIASIMPLES PORCENTO VARIACAO

4.4. EXERCCIOS 1) Identificar quais as variveis e constantes foram utilizadas nos exerccios 3,4 e 5 do captulo anterior dizendo o seu tipo. 2) Assinale com um X as variveis que apresentam nomes invlidos justificando sua resposta. Para todas as opes indique o tipo da varivel. ( ) NOTA ( ) AH! ( ) km/h ( ) 5(8) ( ) a{b} ( ) SALA115 ( ) Xa3 ( ) ABC 3) Para cada linha de comando abaixo dizer quais os tipos das variveis e avaliar o resultado de acordo com os valores de entrada determinados. a) soma ( num1 MOD 2) * (num1 DIV 2) Considerar: num1 = 3, num1 = 16, num1 = 25 b) resultado (var1 OR var2) AND (var3) Considerar: var1, var2 e var3 = False; var1 e var3 = True e var2 = False var1 e var3 = False e var2 = True c) completo nome + sobrenome Considerar: nome = Gensio e sobrenome = Silva d) valor (x / y) - 4/(y^2)*x + x*(y-1) Considerar: x = 2 e y = 4 ; x = 24 e y = 8; x = 6 e y = 4

Desenvolvimento de Algoritmos

12

5. ESTRUTURA CONDICIONAL (ANLISE DE CONDIES)


A estrutura condicional permite a escolha do grupo de aes e estruturas a ser executado quando determinadas condies, representadas por expresses lgicas so satisfeitas. 5.1. COMANDO SE No comando SE quando a condio avaliada verdadeira uma determinada sequncia de comandos executada e quando a condio avaliada falsa outra sequncia de comandos executada. A estrutura condicional SE pode ser simples ou composta. A sintaxe da estrutura condicional simples : Se (condio) ento (sequncia de comandos) FimSe A sintaxe da estrutura condicional composta : Se (condio) ento (sequncia de comandos A) Seno (sequncia de comandos B) Ou Se (condio 1) ento (sequncia de comandos 1) Seno se (condio 2) ento (sequncia de comandos 2) ... Seno se (condio N) ento (sequncia de comandos N) Seno (sequncia de comandos N+1) O comando SE pode ser traduzido da seguinte maneira: Se o resultado da condio for verdadeiro execute a sequncia de comandos 1 seno execute a sequncia de comandos 2. Exemplos: Como entrar em casa? Algoritmo EntrarNaCasa Pegar chave do porto no bolso SE (chave est no bolso) OR (chave est na bolsa) ENTO Abrir o porto SENO Desesperar-se, voc est para fora por tempo indeterminado Comparar dois nmeros verificando qual deles o maior. Algoritmo Comparacao var num1,num2: Real Inicio Ler (num1) Ler (num2) Se (num1 > num2) Ento Escrever (O primeiro nmero o maior) Seno se (num1 < num2) Ento Escrever (O segundo nmero o maior) Seno Escrever (Os nmeros so iguais) FimComparacao

Desenvolvimento de Algoritmos

13

5.2. COMANDO CASO O comando CASO permite que a condio avaliada resulte em valores diferentes de verdadeiro ou falso. Isto ocorre porque existe uma sequncia de aes que so executadas de acordo com o resultado da expresso avaliada. A sintaxe do comando CASO : CASO (Expresso) (Opo 1): (sequncia de comandos 1) (Opo 2): (sequncia de comandos 2) ... (Opo n): (sequncia de comandos N) O comando CASO pode ser traduzido da seguinte maneira: caso o resultado da expresso seja igual a opo 1 execute a sequncia de comandos 1, caso o resultado da expresso seja igual a opo 2 execute a sequncia 2. Exemplo: Fazer um algoritmo que permita ao usurio escolher entre calcular o dobro ou o triplo de um nmero fornecido por ele. Algoritmo DobroOuTriplo Var OP: Inteiro Num, Resultado: Real; Incio Escrever ( Opes:) Escrever ( 1 Calcular o dobro do nmero) Escrever ( 2 Calcular o triplo do nmero) Escrever ( Escolha uma opo: ) Ler (OP) Escrever ( Digite o nmero:) Ler (Num) Caso (OP) 1: Resultado := Num*2 2: Resultado := Num*3 Escrever (Resultado); Fim 5.3. EXERCCIOS 1) Fazer um algoritmo para ler os trs lados de um tringulo, dizer se ele issceles, escaleno ou equiltero. OBS: Antes de verificar o tipo do tringulo deve-se verificar se os lados fornecidos formam tringulo ( L1+L2 > L3; L2+L3 >L1 e L3+L1 > L2) 2) Fazer um algoritmo para ler trs notas, imprimir a maior delas e a mdia destas notas . 3) Faa um algoritmo que permita ao usurio fornecer trs nmeros e escolher entre as opes: calcular a mdia, calcular a soma ou calcular a multiplicao dos nmeros.

Desenvolvimento de Algoritmos

14

6. ESTRUTURA DE REPETIO (ITERAES)


A estrutura de repetio permite que uma sequncia de comandos seja executada repetidamente at que uma determinada condio de interrupo seja satisfeita. 6.1. COMANDO ENQUANTO O ENQUANTO uma estrutura de repetio condicional, isto , uma vez iniciada ser executada at que a condio estipulada seja falsa. A sintaxe do comando ENQUANTO mostrada a seguir. ENQUANTO (condio) FAA (sequncia de comandos) FimEnquanto No caso da condio ser um contador, este deve ser incializado antes do incio da estrutura e deve ser incrementado dentro dela. Exemplo: Fazer um algoritmo que imprima na tela os nmeros inteiros de 1 a 100. Algoritmo Imprime1a100 Var Contador:Inteiro Incio Contador := 1 {Contador iniciallizado} Enquanto (Contador<=100) Faa Escrever(Contador) Contador := Contador +1 {Contador incrementado} FimEnquanto FimAlgoritmo Quando o comando ENQUANTO utilizado, pode acontecer de nenhuma iterao ser realizada. Isto ocorre, quando, a condio j falsa na primeira vez que o comando executado. Exemplo: Fazer um algoritmo que permita ao usurio definir quantas vezes o nmero 10 ser impresso na tela. Algoritmo ImprimeNumero Var Contador, Quantidade :Inteiro Incio Contador := -1 Escrever (Quantas vezes voc deseja que o nmero 10 seja impresso na tela?) Ler (Quantidade) Enquanto (Contador >= Quantidade) Faa Escrever(10) Contador := Contador +1 FimEnquanto

Desenvolvimento de Algoritmos

15

FimAlgoritmo Neste exemplo se a quantidade informada pelo usurio dor zero nenhuma iterao ser realizada. 6.2. COMANDO PARA O PARA uma estrutura de repetio incondicional, isto , uma vez iniciada ser executada quantas vezes estiver estipulada no intervalo determinado. A sintaxe do comando PARA apresentada a seguir: PARA Contador := ValorInicial AT ValorFinal FAA Sequncia de comandos FimPara O comando PARA sempre utiliza uma varivel inteira para representar o contador que dever ser declarada pelo desenvolvedor do programa. Quando o comando PARA utilizado, todas as iteraes estipuladas no intervalo so feitas. Exemplo: Fazer um algoritmo que imprima na tela os nmeros inteiros de 1 a 100. Algoritmo Imprime1a100 Var Contador:Inteiro Incio Para Contador := 1 at 100 Faa Escrever(Contador) FimPara FimAlgoritmo 6.3. COMANDO REPITA O REPITA uma estrutura de repetio condicional, isto , uma vez iniciada ser executada at que a condio estipulada seja falsa. Assim como acontece com o comando ENQUANTO, no caso da condio ser um contador, este deve ser incializado antes do incio da estrutura e deve ser incrementado dentro da estrutura. A sintaxe do comando REPITA apresentada a seguir. REPITA Sequncia de comandos AT (condio) Quando o comando REPITA utilizado, pelo menos uma iterao realizada. Isto ocorre, porque a condio s ser avaliada no final da estrutura do comando.

Desenvolvimento de Algoritmos

16

Exemplo: Fazer um algoritmo que imprima na tela os nmeros inteiros de 1 a 100. Algoritmo Imprime1a100 Var Contador:Inteiro Incio Contador:=1 Repita Escrever(Contador) Contador := Contador +1 At (Contador >=100) FimAlgoritmo 6.4. EXERCCIOS 1) Fazer um algoritmo que calcule e imprima o valor de S na srie abaixo. O valor de N ser informado pelo usurio. 1 1 1 1 S = 1+ + + + L + 2 3 4 N 2) Fazer um algoritmo que leia e imprima inteiros positivos. O programa pra quando lido um valor negativo ou zero. 3) Fazer um algoritmo que, dados o valor inicial e a razo, calcule a PA ou a PG correspondente e imprima os resultados. O tipo de progresso calculado e o nmero de termos sero definidos pelo usurio.

Desenvolvimento de Algoritmos

17

7. EXERCCIOS DE REVISO
1) Qual o valor de L aps a execuo do algoritmo abaixo? Algoritmo Revisao1 Var X,Y,L: Real A,B,C: Lgico Inicio A:=Falso B:=Verdadeiro C:=Falso X:=1,5 Y:=3,2 X:=X+1 SE C OR ((X+Y) > 5) OR (NOT A AND B)) ENTO L := 0 SENO L := 1 ESCREVER (L) FimAlgoritmo

2) Fazer um algoritmo que calcule o fatorial de N, sendo que o valor inteiro N ser fornecido pelo usurio. OBS.: N! = 1 2 3 L (N 1) N e 0! = 1

3) Qual a diferena entre: a) O comando PARA e o comando ENQUANTO b) O comando ENQUANTO e o comando REPITA c) O comando SE e o comando CASE

Desenvolvimento de Algoritmos

18

4) Fazer um algoritmo que leia o nmero do CPF, o nmero de dependentes e a renda anual de um contribuinte e calcule o valor do seu imposto de renda. Haver um desconto de R$ 600,00 por dependente e os valores da alquota para o clculo do imposto so: Renda lquida Alquota At R$ 2.000,00 Isento De R$ 2.001,00 at R$ 5.000,00 5% De R$ 5001,00 at 10.000,00 10% Acima de R$ 10.000,00 15% Como resultados devero ser impressos todos os dados de entrada, o valor do desconto e o valor do imposto.

5) O que est errado no algoritmo abaixo? Algoritmo Revisao6 Var Inteiro: N, PAR, X Inicio Ler (N) X := MOD (N / 2) SE (X=0) ENTAO PAR := Verdadeiro SENO PAR := Falso FimAlgoritmo

Desenvolvimento de Algoritmos

19

8. VETORES
O vetor uma varivel composta capaz de armazenar mais de um valor ao mesmo tempo. uma estrutura de dados homognea porque todos os dados armazenados dentro de um vetor devem ser do mesmo tipo. Exemplo: Vetor Notas 8 10 9,5 2 7,2

O vetor Notas armazena apenas valores do tipo Real. Cada posio do vetor identificada por um ndice. Assim, a primeira posio, que contm o valor 8, possui ndice 1, a segunda posio, que contm valor 10, possui indice 2 e assim sucessivamente at a ltima posio, que contm o valor 7,2, e possui ndice 5. O ndice utilizado sempre que deseja-se ler um valor armazenado ou atribuir um valor a determinada posio de um vetor. Os limites dos ndices so determinados no momento da declarao do vetor. Assim, possvel existir vetores cujos ndices variam, por exemplo, de 2 a 6, 0 a 4 ou 1 a 100. Para acessar, modificar ou fazer referncia a um elemento de um vetor utiliza-se a seguinte notao: Nome_do_Vetor [ndice]. Exemplos Armazenar a nota 8 na primeira posio do vetor Notas: Notas [1] := 8. Armazenar o contedo da segunda posio do vetor Notas na varivel MaiorNota: MaiorNota := Notas[2]. Escrever na tela o contedo do vetor Notas: ... Para i:=1 at 5 faa Escrever (Notas [i]) FimPara ... Um vetor declarado da seguinte maneira: NomeVetor: VETOR [LimiteInferior .. LimiteSuperior] DE TIPO Exemplo: Um professor tem 80 alunos e deseja saber quais foram aprovados e quais foram reprovados, gerando um relatrio. Algoritmo Alunos Var Aprovados, Reprovados: vetor [1 .. 80] de String NotaFinal: Real Nome: String i : Inteiro Inicio {Inicaliza os vetores} Para i :=1 at 80 faa Aprovados[i] :=

Desenvolvimento de Algoritmos

20

Reprovados[i] := FimPara Para i := 1 at 80 faa Ler (Nome) Ler ( NotaFinal) Se NotaFinal >= 6.0 ento Aprovados [i] := Nome Seno Reprovados[i] := Nome FimPara Para i := 1 at 80 faa Se Aprovados[i] <> then Escrever ( O aluno , Aprovados[i], foi aprovado.) Seno Escrever ( O aluno , Reprovados[i], foi reprovado) FimPara FimAlgoritmo 8.1. EXERCCIOS 1) Considere que o vetor apresentado a seguir est armazenado na memria do computador e se chama CRR. ! U O T R E C A

O que ser impresso quando a seguinte sequncia de comandos for executada? Para i:= 2 at 4 faa Aux := CRR[i] CRR[i]:= CRR[8 i + 1] CRR [8 i +1] := Aux FimPara Aux := CRR[1] CRR[1] := CRR[8] CRR[8] := Aux 2) Fazer um algoritmo que leia 35 notas, armazene em um vetor e imprima a maior nota e a posio do vetor onde ela est armazenada

Desenvolvimento de Algoritmos

21

9. MATRIZES
A matriz uma varivel composta bidimensional (um vetor com mais de uma linha) capaz de armazenar mais de um valor ao mesmo tempo. uma estrutura de dados homognea porque todos os dados armazenados dentro de uma matriz devem ser do mesmo tipo. Exemplo: Matriz Notas Matriz 3 x 5 (Linha x Coluna)
Coluna 1 Coluna 2 Coluna 3 Coluna 4 Coluna 5

8 9 8

10 3,6 9,5

9,5 5 9,5

2 4 1

7,2 10 7,7

Linha 1

Linha2

Linha3

A matriz Notas armazena apenas valores do tipo Real. Cada posio da matriz possui um ndice que identifica a linha e a coluna onde o valor se encontra. Assim, a primeira posio, que contm o valor 8, possui ndice [1,1], a segunda posio que contm valor 10 possui indice [1,2] e assim sucessivamente at a ltima posio que contm o valor 7,7 e possui ndice [5,5]. Assim como acontece com os vetores, o ndice utilizado sempre que deseja-se ler um valor armazenado ou atribuir um valor a determinada posio de um vetor. Para acessar, modificar ou fazer referncia a um elemento de uma matriz utiliza-se a seguinte notao: Nome_da_Matriz [linha, coluna]. Exemplos Armazenar a nota 8 na primeira linha e primeira coluna da matriz Notas: Notas [1,1] := 8. Armazenar o contedo da terceira linha e quarta coluna da matriz Notas na varivel MenorNota: MenorNota := Notas[3,4]. Escrever na tela o contedo da matriz Notas: ... Para i:=1 at 3 faa Para j=1 at 5 faa Escrever (Notas [i,j]) FimPara Ir para prxima linha FimPara ... Neste exemplo o contador i faz referncia s linhas da matriz e o contador j faz referncia s colunas.

Desenvolvimento de Algoritmos

22

Uma matriz declarada da seguinte maneira: NomeMatriz: VETOR [LInferiorLinha .. LSuperiorLinha, LInferiorColuna .. LSuperiorColuna] DE TIPO Exemplo: Um professor tem 80 alunos, cada um com 4 notas e deseja saber qual a mdia de cada um, gerando um relatrio. Algoritmo Alunos Var Notas: Vetor [1 .. 80, 1..4] de Real Media: Vetor [1..80] de Real Nota: Real I,j : Inteiro Inicio Para i:=1 at 80 faa Media[i] := 0 FimPara Para i := 1 at 80 faa Para j := 1 at 4 faa Escrever (Fornea a nota , j, do aluno , i) Ler ( Nota) Notas[i,j] := Nota Media[i]:=Media[i]+Nota; FimPara FimPara Para i := 1 at 80 faa Escrever (Aluno , i) Escrever (Mdia: ,Media[i]) Para j := 1 at 4 faa Escrever (Nota , j,:, Notas[i,j]) FimPara FimPara FimAlgoritmo 9.1. EXERCCIOS 1) Fazer um algoritmo que some duas matrizes N x N (N ser fornecido pelo usurio) e imprima o resultado. 2) Fazer um algoritmo que leia uma matriz 20 x 20 e divida cada elemento de uma linha da matriz pelo elemento da diagonal principal desta linha. A matriz modificada dever ser impressa. 3) Faa um algoritmo que leia uma matriz NxM (N e M devero ser fornecidos pelo usurio) e imprima o maior e o menor nmero da matriz e a posio onde se encontram. 4) Dada uma matriz MAT 4 x 5 fazer um algoritmo para somar os elementos de cada linha gerando um vetor SOMALINHA com 4 posies. Em seguida somar os elementos do vetor gerando uma varivel TOTAL impressa no final. O algoritmo dever ser testado para o seguinte conjunto de dados:

Desenvolvimento de Algoritmos

23

MAT 8 0 9 2

-1 3 12 1

5 0 -11 2

3 1 5 1

2 4 6 0

5) Considere uma turma com 10 alunos, cada um com 4 notas. Estes dados so armazenados em uma matriz 10 x 5 , em que a primeira coluna armazena a matrcula do aluno e as 4 ltimas armazenam as suas notas. Fazer um algoritmo que: a) Leia estes dados, armazenando-os ; b) Imprima a mdia de cada aluno; c) Imprima a maior mdia e a matrcula do aluno que a possui

Desenvolvimento de Algoritmos

24

10. PROCEDIMENTOS E FUNES


As funes e procedimentos so blocos de intrues que so executados quando necessrio e realizam aes especficas como mostrar resultados ou calcular algo. As funes e procedimentos so tambm chamadas de sub-rotinas. As variveis declaradas dentro de um procedimento ou de uma funo s existiram na memria do computador enquanto a sub-rotina estiver sendo executada e, por isso, so chamadas variveis locais. As variveis declaradas dentro do bloco principal so chamadas variveis globais e existiro na memria do computador enquanto ele estiver sendo executado. Dizemos que as variveis globais so visveis no bloco principal e nos blocos escritos dentro dele e que as variveis locais so visveis apenas dentro do bloco onde foram declaradas. Exemplo: Fazer um algoritmo para calcular a rea de figuras geomtricas. O usurio poder escolher entre calcular a rea de um retngulo ou quadrado. Algoritmo Areas Var {Variveis globais} Opcao:Integer Area:Real Procedimento ExibeResultado Inicio Escrever (Area) FimProcedimento Funo AreaRet : Real Var {variveis locais} Base, Altura:Real Inicio Ler (Altura) Ler (Base) AreaRet := Base*ALtura FimFuncao Funo AreaQua : Real Var {variveis locais} Lado:Real Inicio Ler (Lado) AreaQua := Lado*Lado FimFuncao Inicio {Esta parte do algoritmo executada logo aps a leitura das variveis globais} Escrever (1 Calcular area de um retngulo) Escrever (2 Calcular area de um quadrado)

Desenvolvimento de Algoritmos

25

Escrever (Escolha a opo: ) Ler (Opcao) Case (Opcao) 1: Area := AreaRet 2: Area:= AreaQua ExibeResultado FimAlgoritmo Como se pode observar no exemplo anterior, um procedimento um bloco de instrues que realiza uma ao sem retornar valores ao programa principal (por exemplo, exibir resultados). Uma funo um bloco de instrues que realiza uma ao e retorna um valor ao programa principal (por exemplo, calcular a rea de uma figura geomtrica). Quando declaramos uma funo devemos informar qual o seu tipo, ou seja, qual o tipo do valor que ser retornado ao programa principal. Podemos escrever procedimentos dentro de funes ou vice-versa, procedimentos dentro de procedimentos e funes dentro de funes. Supondo que escrevemos uma funo A dentro de uma funo B, as variveis declaradas dentro da funo A sero visveis tambm na funo B. Mas as variveis locais funo B s sero visveis dentro dela. Exemplo: Fazer um algoritmo, utilizando funes e procedimentos, que leia dois valores e calcule a seguinte equao: R = V1 + ( V1 * V 2) Procedimento Calcula Var Valor1, Resultado:Real {variveis visveis no procedimento e na funo} InicioProcedimento Funo Continua: Real Var Valor2:Real {varivel visvel apenas na funo} InicioFuno Ler (Valor2) Continua := Valor1*Valor2 FimFuno Ler (Valor1) {Esta instruo executada imediatamente aps a instruo IncioProcedimento} Resultado := Valor1 + Continua; FimProcedimento No exemplo anterior a varivel Valor1 pode ser utilizada dentro da funo Continua pois esta funo est declarada no mesmo bloco que a varivel. Mas, Valor2 s pode ser utilizada dentro da funo pois, como local a ela, no visvel para o bloco maior. 10.1. PASSAGEM DE PARMETROS Existem alguns casos em que um mesmo procedimento ou funo precisam ser executados realizando uma mesma instruo para diversas variveis. Neste caso utiliza-se uma varivel genrica na instruo chamada

Desenvolvimento de Algoritmos

26

parmetro. No exemplo a seguir V um parmetro, ou seja, quando a funo Quadrado for chamada o valor da varivel indicada entre parntesis ser copiado para V e a instruo dentro da funo ser executada corretamente. Os parmetros sempre so declarados entre parntesis logo depois do nome do bloco (procedimento ou funo). Exemplo: Fazer um algoritmo que calcule o somatrio: S=1+4+9+ ... +10000 Algoritmo CalculaResultado Var S,Valor:Real Funo Quadrado (V: Real):Real Incio Quadrado := V*V FimFuno Inicio S := 1 Para Valor := 2 at 100 Faa S:=S+ Quadrado (Valor) FimPara FimAlgoritmo Existem dois tipos principais de passagem de parmetros: passagem por valor e passagem por referncia. O exemplo anterior apresentou a passagem por valor em que o valor da varivel original copiado para o parmetro. Qualquer alterao que seja feita no parmetro no alterar a varivel original. Na grande maioria dos casos os parmetros utilizados em funes executam passagens por valor. Na passagem por referncia o endereo de memria da varivel passado como parmetro e qualquer alterao feita no parmetro alterar a varivel original. O que diferencia a passagem por valor da passagem por parmetro no cdigo do bloco a forma de declarar o parmetro. Na passagem por referncia deve-se escrever a palavra var antes do nome do parmetro. O exemplo a seguir apresenta dois algoritmos semelhantes que ilustram a diferena entre estes dois tipos de passagem de parmetros. Exemplo: Fazer um algoritmo que dados os valores de X e Y calcule a seguinte equao: Z = X2+Y2 Maneira 1 - Passagem de parmetros por referncia

Algoritmo CalculaZ1 var Z,X,Y:Real Incio Procedimento SomaQuadrados (var N1,N2:Real) Inicio N1 :=N1*N1

Desenvolvimento de Algoritmos

27

N2 :=N2*N2 Z := N1+N2 FimProcedimento Ler (X) Ler (Y) SomaQuadrados (X,Y) FimAlgoritmo

Maneira 2 Passagem de parmetros por valor

Algoritmo CalculaZ2 var Z,X,Y:Real Incio Procedimento SomaQuadrados (N1,N2:Real) Inicio N1 :=N1*N1 N2 :=N2*N2 Z := N1+N2 FimProcedimento Ler (X) Ler (Y) SomaQuadrados (X,Y) FimAlgoritmo O algoritmo CalculaZ1 utiliza a passagem de parmetros por referncia pois antes da declarao do parmetro no procedimento SomaQuadrados existe a palavra var e o algoritmo CalculaZ2 utiliza a passagem de parmetros por valor. Suponha que o usurio fornea o valor 2 para X e 3 para Y. Quando o algoritmo CalculaZ1 terminar de ser executado o valor de X ser 4, o valor de Y ser 9 e o valor de Z ser 13. Quando o algoritmo CalculaZ2 terminar de ser executado o valor de X ser 2, o valor de Y ser 4 e o valor de Z ser 13. 10.2. EXERCCIOS 1) Quando o algoritmo abaixo for executado o que ser exibido na tela? Algoritmo ExercicioCap11 Var R1,R2,X,Y,A:Real Incio Procedimento Somatorio1 (P1:Real) Inicio P1:=2*P1 R1:= P1+ 4 FimSomatorio1 Procedimento Somatorio2 ( var P2,P3:Real) Inicio P2 := 3*P2

Desenvolvimento de Algoritmos

28

P3 := 2*P3 R2 := P2 + P3 FimSomatorio2 X := 1 Y := 3 A := 5 Somatorio1 (A) Somatorio2 (Y, X) Escrever (A, X, Y, R1, R2)

2) Refazer os exerccios abaixo utilizando procedimentos e funes. a) Captulo 3 Exerccio 3: Utilizar trs funes (CalcularDelta, CalcularX1 e CalcularX2) e um procedimento (ExibirResultados). b) Captulo 3 Exerccio 6: Utilizar um procedimento para ler os dados de entrada e um para exibir os resultados. c) Captulo 5 Exerccio 1: Utilizar um procedimento para ler os dados de entrada, um para exibir os resultados e um para verificar se os lados fornecidos formam realmente um tringulo. d) Captulo 5 Exerccio 2: Utilizar uma funo para retornar o maior nmero e um procedimento para exibir os resultados. e) Captulo 5 Exerccio 3: Utilizar um procedimento para exibir um menu com as opes de clculos, trs funes (CalculaMedia, CalculaSoma, CalculaMultiplicacao) e um procedimento para exibir os resultados. f) Captulo 6 Exerccio 3: Utilizar um procedimento para exibir um menu com informaes sobre o programa e as opes PA ou PG, duas funes (CalculaPA, CalculaPG) e um procedimento para exibir os resultados. g) Captulo 6 Exerccio 4: Utilizar dois procedimentos (LerDadosEntrada e ExibeREsultados). h) Captulo 7 Exerccio 5: Utilizar 3 procedimentos (LerDadosEntrada, CalcularImposto e ExibeResultados).

Desenvolvimento de Algoritmos

29

11. LITERATURA
FARRER, H. Programao estruturada de computadores: algoritmos estruturados. Ed.Guanabara, 1985. 241 p. LEISERSON, C.E.; STEIN,C.; RIVEST,R.L.; CORMEN, T.H. Algoritmos. Ed.Campus, 2002. 1a edio, 936 p. LOPES, A.; GARCIA, G. Introduo programao. Ed.Campus, 2001. 1a edio, 584 p. MANZANO, J.A.; OLIVEIRA, J.F. Algoritmos: lgica para o desenvolvimento de programao. So Paulo, Erica, 1998. 13a edio, 274p. MANZANO, J.A.; OLIVEIRA, J.F. Estudo dirigido de algoritmos. So Paulo, Erica, 1998. 7a edio, 240p. NIKLAUS, W. Algorithms and data structures. London, Prentice-Hall International, 1986. 288p. PINTO, W.S. Introduo ao desenvolvimento de algoritmos e estruturas de dados. So Paulo, 1990. 2a edio. PREISS, B.R. Programao estruturada de computadores. Ed.Campus, 2002. 1a edio. VENANCIO, C.F. Desenvolvimento de algoritmos. So Paulo, Erica, 1998. 131p. ZIVIANI, N. Projeto de algoritmos com implementaes em PASCAL e C. So Paulo, Pioneira, 1994. 267p. ZIVIANI, N. Algoritmos lgica para desenvolvimento de programao de computadores. So Paulo, Pioneira, 1994. 13a edio, 267p.