ALGORITMOS E
ESTRUTURAS DE DADOS I
Lavras/MG
2011
1 INTRODUO AO CURSO.....................................................................................................................7
1.1 Algoritmo.....................................................................................................................................7
2 CONSTRUO DE ALGORITMOS........................................................................................................14
3 ALGORITMOS EM PSEUDOCDIGO...................................................................................................21
4.1 Variveis.....................................................................................................................................22
4.2 Constantes.................................................................................................................................25
5 COMANDOS SEQUENCIAIS.................................................................................................................28
6 COMANDOS CONDICIONAIS..............................................................................................................37
6.4 Indentao.................................................................................................................................46
7 COMANDOS DE REPETIO...............................................................................................................59
12 VETORES........................................................................................................................................95
13 MATRIZES.....................................................................................................................................101
15.1 PROCEDIMENTOS....................................................................................................................122
15.2 FUNES.................................................................................................................................127
16 RECURSIVIDADE...........................................................................................................................141
17 NDICE DE FIGURAS......................................................................................................................146
18 NDICE DE TABELAS......................................................................................................................152
19 RELAO DE CONES....................................................................................................................153
1 INTRODUO AO CURSO
O contedo de Algoritmo e Estrutura de Dados AED ensinado em cursos tcnicos e
universitrios como Cincia da Computao, Sistemas de Informao, Engenharias (de Software,
Eltrica, Civil, Mecnica, Mecatrnica,...), Programao, Analista de Sistemas, Informtica,
dentre outros. A profundidade e abrangncia do contedo dependem do foco de cada curso.
Geralmente, o contedo de AED divide-se em disciplinas denominadas AED I, AED II e
AED III nos cursos relacionados computao. O aprendizado acumulativo, sendo impossvel
aprender AED II ou AED III sem aprender AED I, ou aprender AED III sem aprender AED I e
AED II.
O ensino das disciplinas de AED desenvolve o raciocnio lgico dos alunos, capacitando-os
para programao de computadores.
A seguir, o termo Algoritmo e o termo Estrutura de Dados so explicados separadamente,
facilitando a compreenso de seus significados.
1.1 Algoritmo
A primeira palavra relacionada a Algoritmo, algorism, foi criada no sculo 9 pelo
matemtico persa islo Abu Abdullah Muhammad ibn Musa Al-Khwarizmi. Inicialmente, o termo
foi criado para nomear regras que ensinavam como realizar clculos usando nmeros hindu-
arbicos. No sculo 18, o termo foi traduzido para o Latin Europeu como Algorithm, e seu
significado passou a abranger todo procedimento definido (claro, preciso) para resolver
problemas e executar tarefas.
Passo 1) N = 30;
Passo 2) Raiz (30) = 5,477. Para guardar parte inteira ento raiz = 5;
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Passo 4.1) para i=2, riscar todos os seus mltiplos de i(=4) at N se no estiver riscado
02 03 0 05 06 07 08 09 10 11 12 13 14 15
4
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Passo 4.1) i=3, riscar todos os seus mltiplos de i (=9)at N se no estiver riscado
02 03 04 05 06 07 08 0 10 11 12 13 14 15
9
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
Passo 4.1) i=4, riscar todos os seus mltiplos de i(=16) at N se no estiver riscado
02 03 04 05 06 07 08 09 10 11 12 13 14 15
1 17 18 19 20 21 22 23 24 25 26 27 28 29 30
6
Passo 4.1) i=5, riscar todos os seus mltiplos de i (=25) at N se no estiver riscado
02 03 04 05 06 07 08 09 10 11 12 13 14 15
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
17 19 23 29
Os nmeros primos de 2 a 30 so: 02, 03, 05, 07, 11, 13, 17, 19, 23 e 29.
Em computao dizemos que instruo uma informao que indica uma ao a ser
executada, por exemplo, por um computador. Deve-se considerar que uma instruo executada
em separado, pode no ter sentido. Para obtermos o resultado desejado precisamos executar um
conjunto de instrues na ordem correta.
Exemplificando...
Para fazer um bolo preciso executar uma sequencia de instrues, como: separar os
utenslios e ingredientes a serem utilizados, pr-aquecer o forno e medir os ingredientes, untar a
forma, bater os ovos etc.
Entretanto estas instrues devem ser executadas em uma ordem adequada no se deve
colocar o fermento aps o bolo assado.
Exemplificando...
Na Figura 3, observa-se um formulrio que deve ser preenchido para renovao ou
assinatura nova de uma revista. Nele, observa-se a necessidade de preencher campos como:
O usurio sabe que no pode colocar o valor em uma data, nem uma data em um campo de
nome, por exemplo. E que as informaes devem ser preenchidas de acordo com o tamanho do
campo. Isto uma estrutura de dados, onde se tem um conjunto de dados com tamanho e tipo de
dado para cada campo bem definidos.
Cliente {
nome [30]: literal; //
salario: real;
idade: inteiro;
}
Cliente {
nome [50]: literal;
telefone: literal;
sexo: caractere;
credito: real;
}
Figura 5 Variao de uma Estrutura de dados Cliente
- Estrutura de dados define um conjunto de dados, seu tamanho e tipo de dado para cada
campo;
Aps construir o(s) algoritmo(s) e definir a(s) estrutura(s) de dados, o profissional est apto
para programar o sistema que ser entregue ao cliente.
algoritmo, pois seu raciocnio j est treinado para observar o problema, desenvolver o algoritmo
mentalmente e program-lo no computador.
2 CONSTRUO DE ALGORITMOS
Para comear a construir algoritmos, deve-se primeiro aprender as notaes mais utilizadas
para descrev-los e conhecer as fases para seu desenvolvimento.
Exemplificando...
Algoritmo para fritar um ovo:
Passo 1 Pegar a frigideira e colocar leo;
Passo 2 Levar a frigideira ao fogo;
Passo 3 Pegar o ovo, quebr-lo e colocar seu contedo na frigideira;
Passo 4 Esperar a clara ficar branca e virar o ovo; e
Passo 5 Se preferir, voc pode estourar a gema para deix-la firme.
Figura 6 - Exemplo de algoritmo usando Descrio Narrativa
O conjunto de smbolos descritos a seguir utilizado para representar uma seqncia lgica
(algoritmo) denominada Fluxograma.
Tabela 3 Simbologia utilizada em Fluxogramas
Exemplificando...
Exemplificando...
Algoritmo media;
Declare N1,N2 : inteiro;
media : real;
Inicio
Leia (N1);
Leia (N2);
media (N1+N2) / 2;
SE (media >= 60) ENTO
Escreva (Aluno aprovado com mdia: , media);
SENO
Escreva (Aluno reprovado com mdia: , media);
FIMSE;
Fim.
Figura 9 - Algoritmo Mdia em Pseudocdigo
Exemplificando...
# Algoritmo x y z Sada
1. algoritmo soma;
2. Declare x, y, z : inteiro;
3. Inicio
4. Leia(x); 8
5. Leia(y); 7
6. z x + y; 15
7. Escreva(z); 15
8. Fim.
Figura 10 Execuo de Teste de Mesa do Algoritmo Soma
Cria-se uma tabela sendo que: na primeira coluna insere-se o programa, na segunda coluna
at a penltima inserem-se os dados de entrada (x e y) e processamento (z), e na ltima coluna os
dados de sada. Aps montar a tabela, basta leia cada uma das linhas do programa e fazer o que
se pede.
A primeira linha apenas determina o nome do programa (soma). A segunda linha determina
os dados de entrada e processamento. A terceira linha informa onde o corpo principal do
algoritmo comea. Na quarta linha, o comando leia(x) implica em se determinar o valor de x que,
neste caso, foi atribudo o valor 8. Na quinta linha, o comando leia(y) implica em se determinar o
valor de y que, neste caso, foi atribudo o valor 7. Na sexta linha, o comando z x + y implica
em somar os dois nmeros e guardar o resultado em z. O valor guardado foi 15. Na stima linha,
o comando ESCREVA determina que o valor z deve ser escrito na tela do computador. E a ltima
linha encerra o algoritmo.
2 Fase) Definio das Entradas: Identificar os dados que devem ser solicitados e lidos
pelo computador para a resoluo do problema;
3 Fase) Definio do Processamento: Definir quais operaes devem ser realizadas nos
dados de entrada, gerando os dados de sada;
4 Fase) Definio das Sadas: Identificar quais dados o usurio espera receber do
computador aps ter fornecido os dados de entrada;
6 Fase) Teste do algoritmo: Executar o algoritmo passo a passo, aplicando, por exemplo, o
teste de mesa.
Exemplificando...
Problema: Calcule e mostre a mdia aritmtica simples das notas de um aluno, sabendo que foram
realizadas 4 provas P1, P2, P3 e P4.
1 Fase Compreenso do Problema: Devo obter as 4 notas do aluno, som-las e dividir a soma por
4. O resultado a mdia. Logo, eu conheo a soluo do problema e se possvel resolve-lo
manualmente, ento deve-se buscar um algoritmo para ele.
3 Fase Definio do Processamento: O procedimento ser somar os 4 dados de entrada (P1, P2,
P3, P4) e dividir seu resultado por 4.
Algoritmo em Pseudocdigo
Algoritmo media;
Declare P1, P2, P3, P4, media: real;
Inicio
Leia(P1);
Leia(P2);
Leia(P3);
Leia(P4);
Media (P1+ P2+P3+ P4) / 4;
Escreva(Mdia: , media);
Fim.
3 ALGORITMOS EM PSEUDOCDIGO
3.1 Estrutura Bsica de um Algoritmo
Um algoritmo possui a estrutura bsica representada a seguir. As representaes indicadas
pela notao < > implicam que devem ser substitudas e o programador deve determinar o valor.
As representaes indicadas pela notao [ ] implicam em estrutura facultativa, podendo-se fazer
um algoritmo sem utiliz-la.
Utiliza-se duas barras // para comentar uma linha. Para comentar um bloco que possua
mais de uma linha, utiliza-se barra e asterisco /* para abrir o comentrio de bloco e asterisco e
barra */ para fechar o comentrio de bloco.
O detalhamento para se construir o algoritmo e quais comandos podem ser usados consiste
no objetivo do restante deste livro.
4.1 Variveis
Declara-se uma varivel para determinar seu nome (salrio, data, idade, nome, ...) e o tipo
de dado (nmero inteiro, nmero real, um caractere, texto, ...) a ser fornecido pelo usurio ou
calculado pelo algoritmo.
Algoritmo teste;
Declare idade : inteiro;
salario : real;
INICIO
<comandos>;
FIM.
Figura 13 - Exemplo de declaraes de variveis
Uma varivel est associada a uma posio de memria, e seu contedo pode ser alterado
durante a execuo de um programa. Embora uma varivel possa assumir diferentes valores, ela
s pode armazenar um valor por vez.
Valor da varivel
Algoritmo teste2;
Declare salario, comissao: real;
Nome da varivel
Incio
salario 1200,00;
Escreva (Entre com valor da comisso: ); Alterando o valor
Leia (comissao); da varivel
salario salario + comissao;
Escreva (O salrio atual :, salario);
Fim;
Figura 14 - Exemplo Alterao de valor de varivel
1 2 3 4 5 6 7
1 700,00
comissao
2
3 1900,00
4
salario
No computador no diferente. Deve-se definir o tipo de dado para cada um dos campos.
O computador acusar erro, por exemplo, se voc tentar escreva 12/03/2017 em uma idade.
Idade no aceita barras e composto por apenas um nmero inteiro, ao contrrio da data que
possui 2 nmeros inteiros. O contrrio tambm gera erro, pois um nmero inteiro no satisfaz a
necessidade de 3 nmeros inteiros.
Podem-se fazer operaes com os tipos de dados. Os nmeros podem ser somados,
subtrados dentre outras operaes aritmticas. Literais podem ter parte de seus caracteres
retirados, outros inseridos etc.
4.2 Constantes
Denomina-se como constante dados que no se modificam no decorrer do algoritmo, por
isto o nome de constante.
valor da constante
Algoritmo teste;
Const pi = 3,1415;
e = 2,71828;
Declare idade : inteiro;
nome da constante
salario : real;
Incio
<comandos>;
Fim.
Figura 16 - Exemplo de declaraes de constantes
2) Deseja-se armazenar nota, nome, nmero da matrcula, sexo, data de nascimento, valor
da mensalidade de um aluno e se ele bolsista. Declare as variveis em portugol.
3) Assinale com C os nomes CORRETOS para algoritmos, variveis e constantes e com I os
INCORRETOS. Explique o que est errado nos incorretos.
( ) 34 - 23 ( ) km/h ( ) 3notas
( ) nome aluno ( ) nota ( ) nota_bimestral
( ) _d20 ( ) cia3a3 ( ) e-mail
( ) Minimo ( ) xyz ( ) estado_civil( )
( ) aula_03 ( ) Data_Nascimento ( ) comissao%
( ) SALARIO ( ) achou! ( ) nota_bimestral
( ) nota*final ( )A+B ( ) 360hs
5 COMANDOS SEQUENCIAIS
Os comandos sequenciais so as estruturas mais simples utilizadas na construo de
algoritmos e subdividem-se em comandos de entrada, sada e atribuio.
Ela formada por um conjunto de instrues (ou comandos) que executadas em uma
seqncia linear de cima para baixo e da esquerda para a direita, ou seja, da mesma forma como
foram escritas.
Exemplificando...
...
leia (raio); // O valor digitado pelo usurio ser armazenado na varivel raio.
...
leia (nome); // Os caracteres digitados pelo usurio sero armazenados na varivel
nome.
...
Exemplificando...
Escreva (O aluno , nome, est aprovado); /*Mostra a mensagem O aluno , logo depois o valor
Exemplificando...
x Jos;
y 2.5;
y y + 1;
teste falso;
media (N1 + N2 + N3 + N4) / 4;
raio 2;
area PI * (raio * raio);
perimetro 3* PI * raio;
Utilizamos as palavras INCIO e FIM para delimitar o bloco de sequncia, conforme
sintaxe a seguir.
Exemplificando...
Algoritmo Comandos_Sequenciais;
Declare
X, Y : inteiro;
A, B : real;
nome : literal;
INCIO
Escreva (Entre com o valor de X: ) ;
Leia (X);
Escreva (Entre com o valor de A: );
Leia (A);
Escreva (Entre com o seu nome: );
Leia (nome);
Y X * 3;
B (A * 2,4) / 3;
Escreva (nome , os valores de X e A agora valem: ,Y, B);
FIM.
Figura 17 Exemplo de Comandos Sequenciais
Observe que todos os comandos entre INCIO e FIM esto com a margem mais a direita,
para facilitar a visualizao. Isto se chama indentao e ser explicada em mais detalhes em
outra seo. O mesmo pode ser observado com 3 linhas de declarao de variveis, cuja margem
foi empurrada para a direita, sendo um subnvel de Declare.
3) O computador trabalha com dados numricos sem conhecer a unidade de medida ou o dado
representado. Assim, quando voc digita 30 no teclado, o computador no sabe se 30 a idade (anos),
a temperatura (C,F, K), a dimenso (mm, cm, m, km,...), presso etc. Se voc pedir para ele subtrair a
idade da presso, ele o far, pois para ele tudo nmero. Cabe ao programador gerenciar e fazer
corretamente as contas, ficando atento as unidades de medida.
1 ( ) parnteses
2 Exponenciao
3 Multiplicao ou diviso (o que vier primeiro)
4 Adio ou subtrao (o que vier primeiro)
Exemplificando...
X=11
area_triangulo (Base * Altura) / 2;
X 5*(7-9)+3*7;
Z 1 + 7 * 2 ** 3 1;
Z=56
media (P1+ P2) / 2;
Entretanto, cada linguagem possui suas prprias funes pr-definidas e como veremos
adiante no tpico 15.2 o programador pode criar funes conforme necessidade.
Tabela 8 Funes pr-definidas
Exemplificando...
A ABS (-4); // A 4
A TRUNC (2,78); // A 2
A INT (4,15); // A 4
A INT (-4,15); // A - 4
A FRAC (3.65); ;// A 0.65
A FRAC (-3.65); // A - 0.65
A SQRT(9); // A 3;
A ROUND (2.78); // A 3
A ROUND (-1,4); // A -1
A SQR(2); // A 4;
A 7 MOD 2 ; // A 1;
A 6 MOD 2 ; // A 0;
A 7 DIV 2; // A 3,5;
A 18 DIV 3; // A 6;
A CONCAT(abc, def) ; // A abcdef;
A CONCAT(ana, rubelia) ; // A anarubelia;
Exerccios Resolvidos:
1) Elabore um algoritmo para calcular o permetro de um crculo dado o seu raio, considerando que
Permetro = 2 * * Raio.
Algoritmo perimetro_circulo;
Const pi = 3,1415;
Declare peri, raio : real;
INCIO
Escreva (Programa para calcular o permetro de um crculo dado seu raio);
Escreva (Entre com o valor do raio: );
Leia (raio);
peri 2 * pi * raio;
Escreva (O permetro do crculo segundo o raio , raio, informado : , peri);
FIM.
Figura 18 Algoritmo para calcular o permetro de um crculo
2) Elabore um algoritmo para calcular consumo mdio de um veculo, conhecidos a distncia total e a
quantidade de combustvel consumido para percorrer tal distncia.
Algoritmo calc_consumo;
Declare consumo, distancia, qde_comb: real;
INCIO
Escreva (Programa para calcular o consumo mdio de combustvel);
Escreva (Informe a distancia em Km percorrida pelo veiculo: );
Leia (distancia);
Escreva (Informe a quantidade em litros de combustvel gasto: );
Leia (qde_comb);
consumo qde_comb/ distancia;
Escreva (O consumo mdio de combustvel para a distncia de, distancia, km foi
de: , consumo, litros/km.);
Escreva (O carro fez , distancia/qde_comb, km por litro!);
FIM.
Figura 19 Algoritmo para calcular o consumo de combustvel
3) Elabore um algoritmo para leia uma quantidade de chuva dada em polegadas e apresente o
equivalente em milmetros, considerando que 1 polegada = 25,4 milmetros (mm).
Algoritmo chuva_em_mm;
Declare pol, mm: real;
INCIO
Escreva (Programa para converter um volume de chuva de polegadas para milmetros.);
Escreva (Informe a quantidade de chuva em polegadas: );
Leia (pol);
mmpol * 25,4;
Escreva (volume de chuva em milmetros : , mm, mm);
FIM.
Figura 20 Algoritmo para calcular o consumo de combustvel
4) Elabore um algoritmo para calcular o estoque mdio de uma pea, considerando que
EstoqueMedio = (QuantidadeMnima + QuantidadeMxima) /2. Faa um Teste de Mesa com
dados definidos por voc.
5) Elabore um algoritmo para leia uma temperatura em graus Fahrenheit, calcule e exiba a
temperatura convertida em graus Centgrados, considerando que C = (F - 32) * ( 5 / 9 ).
6) Elabore um algoritmo que leia o salrio base de um funcionrio, o nmero de horas extras
feitas, o valor de cada hora extra e o auxilio refeio. Imprima na tela o valor do salrio
bruto (sem descontos). Na sequencia calcule o desconto do INSS de 10% sobre o salrio
bruto e mostre o total a receber.
7) Elabore um algoritmo que leia trs nmeros e apresente o resultado da soma das
combinaes destes nmeros.
8) Elabore um algoritmo para leia uma temperatura em graus Celsius, calcule e exiba a
temperatura convertida em graus Kelvin, considerando que K = C + 273.
9) Elabore um algoritmo que dada a cotao do dlar e um valor em dlares, converta este
valor em Real e mostre o resultado.
10) Elabore um algoritmo que leia valores para X e Y respectivamente e calcule:
a) O resto da diviso de X / 3
b) X3 4
c)(X * Y) 2
d) XY + 2
e)Raiz quadrada de Y
6 COMANDOS CONDICIONAIS
Os comandos condicionais (deciso ou desvio) permitem a escolha de uma instruo ou
grupo de instrues a ser executado quando determinada condio ou no satisfeita como
exemplificado na figura a seguir.
no
Escrever ( X ,menor a 10 )
...
se (tiver dinheiro suficiente) ento
almoarei em um bom restaurante;
seno
comerei um lanche;
fim-se;
...
Figura 22 Exemplo de Comando Condicional SE ENTO SENO
- Se salrio for maior que 2400 reais ento desconte 15% do imposto de renda na fonte;
- Se salrio menor que 3 salrios mnimos ento salrio famlia por dependente ser 30
reais, seno 10 reais.
- Se comprador de Minas Gerais ento aplique 18% ICMS, seno aplique 12% de ICMS.
Exemplificando...
Tabela 10 Operadores Relacionais aplicados ao tipo INTEIRO
Dados os valores das variveis do tipo INTEIRO X = 3 e Y = 7, vide os
resultados das expresses a seguir:
Express Resultado
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.
X>=Y FALSO
X<=Y VERDADEIRO
.
Tabela 12 Operadores Relacionais aplicados ao tipo CARACTERE
Dados os valores das variveis do tipo CARACTERE X = a e Y = d,
vide os resultados das expresses a seguir :
Express Resultado
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.
o
X=Y FALSO
X <> Y VERDADEIRO
X>Y FALSO
X<Y VERDADEIRO
X>=Y FALSO
X<=Y VERDADEIRO
.
Para comparar literais, usa-se as mesmas regras de caracteres, seguindo um processo
anlogo a procura de palavra em um dicionrio. Assim compara-se a primeira letra de X, A,
com a primeira letra de Y, a, assume-se que X menor que Y, pois letras maisculas so
menores que as minsculas.
a) (X >= 2)
b) (X < 1) E (B >=D)
c) (A + B) > 10 OU (A + B) = (C + D)
d) (A >= C) E (D >= C)
e) NO (X > 3)
f) (X < 1) E NO (B > D)
g) NO (D < 0) E (C > 5)
h) NO (X > 3) OU (C < 7)
i) (A > B) OU (C > B)
No SE ... ENTO determinada que se uma condio for satisfeita ento o bloco de
comando(s) executado.
Exemplificando...
Faa um algoritmo que leia a mdia de um aluno e escreva na tela Aluno Aprovado caso
a mdia dele seja igual ou superior a 6.
...
SE (media>=6) ENTO
escreva (Aluno Aprovado);
FIMSE;
...
...
SE (condio) ENTO
comando 1;
comando 2;
SENO
comando 3;
comando 4;
FIMSE;
...
Figura 25 Sintaxe do Comando Condicional Composto
Exemplificando...
Faa um algoritmo que leia a mdia de um aluno e escreva na tela se ele foi aprovado ou
reprovado.
...
SE (media>=6) ENTO
escreva (Aluno Aprovado);
SENO
escreva (Aluno Reprovado);
FIMSE;
...
Figura 26 Exemplo de Algoritmo usando Comando Condicional Composto
...
SE (media >= 6) E ( frequencia > 75% )
ENTO
escreva (Aluno Aprovado)
SENO
escreva (Aluno Reprovado);
FIMSE;
...
Figura 27 Exemplo de Algoritmo usando Comando Condicional Simples
...
SE (NO tiver dinheiro) ENTO
almoarei em casa;
SENO
irei a um restaurante;
FIMSE;
...
Figura 28 Exemplo de Comando Condicional SE ENTO SENO, usando operador NO
...
SE (tiver dinheiro suficiente) OU (terminado o trabalho)
ENTO
irei ao cinema;
SENO
ficarei em casa;
FIMSE;
...
Figura 29 Exemplo de Comando Condicional SE ENTO SENO, usando operador OU
Exerccios Resolvidos:
1) Elabore um algoritmo para calcular as razes de uma equao de segundo grau, dados os
fatores a, b e c, Considerando , se d menor que zero as razes no podem ser
calculadas (no existem razes reais). Seno, possvel calcular as duas razes.
...
leia (a);
leia (b);
leia (c);
d b * b 4 * a * c;
SE (d < 0) ENTO
Escreva (No existem razes reais);
SENO
raiz1 ( -b + SQRT(d) ) / (2 * a );
raiz2 ( -b SQRT(d) ) / (2 * a );
Escreva ( raiz1 );
Escreva ( raiz2 );
FIMSE;
...
2) Faa um algoritmo que receba um nmero inteiro e verifique se esse nmero par ou mpar.
algoritmo par_impar;
declare num, r : inteiro;
INICIO
escreva (Este algoritmo verifica se um nmero par ou mpar.);
escreva (Digite um nmero inteiro: );
leia (num);
r num MOD 2;
SE (r = 0) ENTO
escreva(Este nmero par);
SENO
escreva(Este nmero mpar);
FIMSE;
FIM.
6.4 Indentao
Indentao (palavra adaptada do ingls, indentation) uma tcnica de recuo que aplicada
ao cdigo de um programa facilita a visualizao da organizao dos comandos e sua estrutura.
Seu uso iniciou-se antes da programao com o nome de tabulao de texto, sendo utilizada
rotineiramente na escrita de livros, panfletos, cartazes etc.
Exemplificando...
Na Figura 30, nota-se que a margem do primeiro pargrafo no seguida em todo texto. H
dois nveis de indentao, alm do alinhamento natural da margem esquerda do primeiro
pargrafo. O primeiro nvel refere-se s palavras PAI, ME E FILHOS, o qual foi empurrado
para a direita, no seguindo o alinhamento original da margem esquerda. O segundo nvel,
empurrado mais para a direita do primeiro nvel, refere-se aos comprovantes mdicos a serem
entregues pela ME. Observa-se que as palavras Papa Nicolau e Mamografia esto em um
alinhamento mais interno da folha. A indentao auxiliando no entendimento de quais
documentos devem ser entregues por cada um dos participantes segundo seu papel na famlia
(pai, me ou filho).
Um texto pode ter vrios nveis de indentao e deve-se garantir uniformidade da margem
para os textos de mesmo nvel. Portanto, os textos selecionados para compor o segundo nvel de
indentao devem seguir o mesmo alinhamento de margem, sendo proibida variao de margem
para o mesmo nvel.
Quando se deseja criar um novo nvel de indentao, basta empurrar um pouco mais a
margem para a direita. Na prtica, a tcnica de indentao permite associar visualmente
informaes especficas as informaes genricas.
Exemplificando...
Faa um algoritmo que leia um nmero e responda se ele maior que 10.
Algoritmo Maior10;
declare x: inteiro; As 3 linhas de comando do
INCIO ENTO foram indentadas para
Escreva (Digite um nmero: );
facilitar a visualizao. E o
Leia (x);
mesmo foi feito para o SENO.
SE (x>10) ENTO
escreva (x, maior que 10);
escreva (Os comandos da indentao do ENTO foram executados);
escreva(A indentao facilita visualizar quais comandos esto dentro do ENTO);
SENO
escreva (x, menor que 10);
escreva (Os comandos da indentao do SENO foram executados);
escreva(A indentao facilita visualizar quais comandos esto dentro do SENO);
FIMSE;
FIM.
Figura 31 Exemplo de Indentao
Adote o hbito de utilizar a tcnica de indentao mesmo que ela parea difcil no incio.
Aps dominar seu uso, o programador observar que sua utilizao facilita o trabalho, aumenta a
produtividade, facilita o entendimento do cdigo, alm de ser exigido nas empresas.
Exemplificando...
Faa um algoritmo que leia dois nmeros inteiros e responda qual deles o maior ou se
eles so iguais.
Algoritmo Maior;
declare x, y: inteiro;
INCIO
escreva (Este algoritmo apresenta qual de 2 nmeros inteiros, lidos do teclado, o maior.);
escreva (Digite o primeiro nmero: );
leia (x);
escreva (Digite o segundo nmero: );
leia (y);
Comando SE...ENTO...SENO dentro
SE (x>y) ENTO de outro comando SE...ENTO...SENO
escreva (x, maior que , y); denomina-se aninhamento.
SENO
SE (x<y) ento
escreva (y, maior que , x);
SENO
escreva (x, igual a , y);
FIMSE;
FIMSE;
FIM.
Figura 32 Exemplo de Aninhamento de Comandos SE...ENTO...SENO, Algoritmo Maior
O aninhamento pode ocorrer apenas com SE...ENTO e dentro dele outro SE...ENTO.
Outra forma seria ter um comando SE...ENTO dentro de um bloco SENO, bem como
outras variaes. Havendo um comando dentro do outros, afirma-se ter aninhamento.
Exerccios Resolvidos:
1) Faa um algoritmo que leia a mdia final e frequencia de um aluno e imprima na tela se o
aluno est REPROVADO POR FREQUENCIA, APROVADO, RECUPERAO ou
REPROVADO POR NOTA, sabendo que:
Aluno precisa ter 75% ou mais de frequencia nas aulas, caso contrrio ele est
reprovado por falta, independente da nota.
Aluno est de recuperao se a mdia for maior ou igual a 30 e menor que 60.
Aluno est reprovado por nota se a mdia for menor que 30 pontos.
Algoritmo Aprovacao_Aluno;
Declare media, frequencia: real;
INCIO
leia(frequencia);
leia (media);
2) Faa um algoritmo para leia trs nmeros inteiros X, Y e Z e verificar se eles formam um
tringulo, imprimindo na tela "X, Y e Z no formam um tringulo" ou "X, Y e Z formam um
tringulo". Se as medidas formarem um tringulo, imprimir na tela se o tringulo
equiltero, issceles ou escaleno.
Algoritmo triangulo;
Declare
x, y, z: inteiro;
INICIO
leia ( x, y, z );
FIM.
A Figura 35 representa que <varivel> assumir um valor e caso o valor seja igual ao valor
em opo1, ento os comandos1 sero executados. Caso contrrio, <varivel> ser comparada
com o valor em opo2 e, no caso de ser igual, executar comandos2, seno comparar com as
demais opes existentes. Se uma opo for satisfeita, ento os comandos referente aquela opo
executada e todas as demais opes so ignoradas.
ESCOLHA <varivel>
CASO 1: < comandos >;
CASO 2: < comandos >;
CASO 3: < comandos >;
...
CASO n: < comandos >;
CASO CONTRRIO: < comandos >;
FIMESCOLHA;
Figura 36 Sintaxe do Comando Condicional ESCOLHA CASO
...
leia (cargo);
SE (cargo=1) ENTO
escreva("Presidente")
SENO
SE (cargo=5) ENTO
escreva("Chefe de Seo")
SENO
SE (cargo=8) ENTO
escreva("Auxiliar de Servios Gerais")
SENO
escreva("Esta operao no permite cargos diferentes de 1, 5 e 8");
FIMSE;
FIMSE;
FIMSE;
...
Figura 37 Algoritmo Aplicando o Comando SE...ENTO...SENO
Observa-se na Figura 37 um trecho de algoritmo que solicita leia um valor para cargo. Se o
usurio digitar o valor 1, ento aparecer na tela "Presidente". Se o usurio digitar o valor 5,
ento aparecer na tela "Chefe de Seo". Se o usurio digitar o valor 8, ento aparecer na tela
"Auxiliar de Servios Gerais". Se o usurio digitar um valor diferente de 1, 5 ou 8, ento
aparecer na tela "Esta operao no permite cargos diferentes de 1, 5 e 8".
...
leia (cargo);
ESCOLHA (cargo)
CASO 1: escreva("Presidente");
CASO 5: escreva("Chefe de Seo");
CASO 8: escreva("Auxiliar de Servios Gerais");
CASOCONTRARIO escreva("Esta operao no permite cargos diferentes de 1, 5 e 8");
FIMESCOLHA;
...
Figura 38 Algoritmo Aplicando o Comando ESCOLHA...CASO
...
Leia (opcao);
ESCOLHA (opo)
CASO 1: < comandos >;
CASO 2, 4: < comandos >;
CASO 3: < comandos >;
CASO 5 ..10: < comandos >;
CASO CONTRRIO: < comandos >;
FIMESCOLHA;
...
Figura 39 Sintaxe do Comando Condicional ESCOLHA CASO Outra sintaxe 2
Exemplificando...
No algoritmo a seguir o valor da varivel ms lido e testado. Caso o valor esteja entre os
valores entre 1 a 12 executado o comando correspondente a opo. Caso contrrio executado
o comando que escreve ms invlido.
algoritmo descubra_mes;
declare mes : inteiro;
INICIO
escreva (Digite o nmero do ms: );
leia (mes);
ESCOLHA (mes)
CASO 1: escreva (Janeiro);
CASO 2: escreva (Fevereiro);
CASO 3: escreva (Maro);
...
CASO 12: escreva (Dezembro);
CASO CONTRRIO: escreva (Ms invlido!);
FIMESCOLHA;
FIM.
Figura 40 Exemplo de Algoritmo usando Escolha Caso
Exemplificando...
algoritmo faixa_etria;
declare idade : inteiro;
INICIO
escreva (Digite a idade em anos: );
leia (idade);
ESCOLHA (idade)
CASO 0..2: escreva (Beb);
CASO 3..9: escreva (Criana);
CASO 10..19: escreva (Adolescente);
CASO 20..30: escreva (Jovem);
CASO 31..60: escreva (Adulto);
CASO CONTRRIO: escreva (Idoso);
FIMESCOLHA;
FIM.
Figura 41 Exemplo de Algoritmo usando Escolha Caso
(X <> Y) OU (Y < Z)
b) X13; Y 2; Z5;
NO (X > Y)
c) X 4; Y 7; Z9;
(X < Y) E (Y > Z)
d) X 6; Y 4; Z4;
(X >= Y) OU (Y = Z)
e) X a; Y k; ZD;
NO (X <= Y)
f) X Rosana; Y Roseane; ZRosria;
Escolha do Operao
usurio
1 Mdia entre os nmeros digitados
2 Diferena do maior pelo menor
3 Produto entre os nmeros digitados
4 Diviso do primeiro pelo segundo
6)Elabore um algoritmo que leia um nmero inteiro e mostre uma mensagem indicando se este
nmero par ou mpar, e se positivo ou negativo.
7)Um banco conceder um crdito especial a seus clientes dependendo de seu saldo mdio. Faa
um algoritmo que leia o saldo mdio de um cliente e calcule o valor do crdito de acordo com
a tabela a seguir. Mostre uma mensagem informando o saldo mdio e o valor do crdito. (use
o comando ESCOLHA...CASO)
7 COMANDOS DE REPETIO
Para compreender a necessidade de comandos de repetio, necessrio examinar algumas
solicitaes que um cliente pode fazer.
Nota-se que para fazer o algoritmo o comando escreva deve ser repetido vrias vezes tendo
pequena alterao. Como a tabuada solicitada compreendia os valores entre os nmeros 0 a 9
ento o trabalho foi repetitivo, mas no to grande.
Outro pedido poderia ser a solicitao do somatrio de 1 at 1milho. Pense em como seria
a soluo para o somatrio de 1 at 10, depois imagine ter que fazer o somatrio at 10 milhes.
Invista um tempo para compreender a soluo e o trabalho repetitivo imposto por esta
solicitao.
Nestes dois ltimos exemplos, do seno e do somatrio, muitas linhas de cdigo seriam
escritas, em um trabalho puramente repetitivo, mas voc chegaria a uma soluo.
Para solues que exigem trabalho repetitivo, devem-se usar comandos de repetio.
O teste de condio do comando PARA fica no incio de sua estrutura. Assim, o bloco de
comandos repetido at atingir o nmero de repeties explicitadas. Quando a condio no for
mais satisfeita, a execuo saltar os comandos que deveriam ser repetidos, deixando de execut-
los, e continuando a execuo normal do algoritmo. Se a condio no for satisfeita logo na
primeira comparao, nenhuma instruo dentro da estrutura PARA ser executada.
Na Figura 45, a varivel i recebe um valor inicial, um valor final e um valor para
incrementar a varivel i a cada repetio realizada. Se o incremento for 1, ento a cada repetio
a varivel i ser acrescida automaticamente de 1. Se o incremento for 3, ento a cada repetio a
varivel i incrementada de 3 automaticamente.
...
Declare contador: inteiro;
Contador
...
utilizado no
PARA contador DE <valor inicial> AT <valor final> FAA
comando
<instrues>;
PARA...FAA
FIM -PARA;
...
Figura 46 Pseudocdigo do Comando de Repetio PARA
No exemplo apresentado na Figura 47, foi declarada uma varivel denominada CONT para
ser o contador utilizado no comando PARA...FAA. Observa-se que no comando PARA...FAA
que CONT inicia seu valor em 1, devendo ir at o valor 10. O incremento padro para CONT
1, isto , CONT comear seu valor em 1, e variar de 1 em 1, at atingir 10.
...
declare cont: inteiro;
...
PARA cont DE 1 AT 10 FAA
escreva ( o valor do contador : , cont );
FIMPARA;
Escreva ( Saiu das repeties do PARA...FAA);
...
Figura 47 Exemplo Do PARA...FAA Sem A Clusula PASSO
Executando o algoritmo da Figura 47, cont inicia-se com o valor 1, em seguida o algoritmo
imprime a mensagem o valor do contador : 1 na tela.
E assim sucessivamente, at que o valor de cont atinja o valor 10. Neste caso, ele imprime
a mensagem na tela o valor do contador : 10, o ltimo valor descrito no comando, e passa a
executar a prxima linha aps o FIMPARA. As mensagens impressas na tela sero:
o valor do contador : 1
o valor do contador : 2
o valor do contador : 3
o valor do contador : 4
o valor do contador : 5
o valor do contador : 6
o valor do contador : 7
o valor do contador : 8
o valor do contador : 9
o valor do contador : 10
Saiu das repeties do PARA...FAA
Figura 48 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 47
Determina o valor de
... variao do contador
Declare i : inteiro;
...
PARA i de <valor inicial> AT <valor final> PASSO <valor de incremento>
FAA
<instrues>;
FIMPARA ;
...
Figura 49 Pseudocdigo do Comando de Repetio PARA
Exemplificando...
...
Declare cont: inteiro;
...
PARA cont DE 1 AT 10 PASSO 3 FAA
escreva ( o valor do contador : , cont );
FIMPARA;
Escreva ( Saiu das repeties do PARA...FAA);
...
Figura 50 Exemplo Do PARA...FAA com A Clusula PASSO
Executando o algoritmo da Figura 50, cont inicia-se com o valor 1, em seguida imprime a
mensagem o valor do contador : 1 na tela. Ao atingir o FIMPARA, o algoritmo retorna para a
primeira linha do comando PARA...FAA.
Como foi determinado o valor 3 para PASSO, ento cont passa a valer 4 (1 de CONT + 3
do PASSO). Como cont ainda no chegou at 10, a linha escreva executada novamente,
imprimindo a mensagem o valor do contador : 4 na tela. Ao atingir o FIMPARA, o algoritmo
retorna para a primeira linha do comando PARA...FAA.
Como foi determinado o valor 3 para PASSO, ento cont passa a valer 7 (4 de CONT + 3
do PASSO). E assim sucessivamente, at cont valer mais que 10. As mensagens impressas na
tela sero:
o valor do contador : 1
o valor do contador : 4
o valor do contador : 7
o valor do contador : 10
Saiu das repeties do PARA...FAA
Exemplificando...
Faa um algoritmo que imprima na tela os nmeros de 50 a 20.
Algoritmo Inverso_50_20;
Declare cont: inteiro;
...
PARA cont DE 50 AT 20 PASSO -1 FAA
escreva ( o valor do contador : , cont );
FIM-PARA;
Escreva (Saiu das repeties do PARA...FAA);
...
Figura 52 Exemplo Do PARA...FAA Sem A Clusula PASSO
Como foi determinado o valor -1 para PASSO, ento cont passa a valer 49 (50 de cont -1
do PASSO). Como cont ainda no chegou at 20, a linha escreva executada novamente,
imprimindo a mensagem o valor do contador : 49.
Isto ocorre sucessivamente at a ltima repetio da impresso com cont valendo 20. Aps
isto, cont assa a valer 19 e ento a repetio deixa de acontecer, considerando que a condio do
comando AT 20. Assim, o fluxo do programa passa para a primeira linha, imediatamente,
aps o FIMPARA, imprimindo na tela Saiu das repeties do PARA...FAA. A sada na tela
ser:
o valor do contador : 50
o valor do contador : 49
o valor do contador : 48
...
...
o valor do contador : 22
o valor do contador : 21
o valor do contador : 20
Saiu das repeties do PARA...FAA
Figura 53 Mensagens Impressas Na Tela Aps Execuo do Algoritmo da Figura 52
Exerccios Resolvidos
1. Faa um algoritmo que leia nome, nota 1 e nota 2 de 20 alunos, e imprima na tela o nome do
aluno e a sua mdia.
...
Declare i : inteiro;
nome: literal;
n1, n2 : real;
...
PARA i de 1 AT 20 passo 1 FAA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
FIMPARA;
...
Figura 54 Exemplo de Algoritmo usando Comando de Repetio PARA
Algoritmo Somatorio_1_50;
Declare i, total : inteiro;
Inicio
total 0;
PARA i de 1 AT 50 FAA
total total + i;
FIMPARA;
Escreva ("O somatrio de 1 a 50 : , total);
Fim.
Figura 55 Exemplo de Somatrio de 1 a 50 usando Comando de Repetio PARA
3. Faa um algoritmo que imprima na tela o valor do somatrio de 1 at N, sendo N um valor fornecido
pelo usurio.
Algoritmo Somatorio_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA i de 1 AT N FAA
total total + i;
FIMPARA;
Escreva ("O somatrio de 1 at , N, : , total);
Fim.
Figura 56 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA
Algoritmo Somatorio_3_de_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA i de 0 AT N PASSO 3 FAA
total total + i;
FIMPARA;
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : , total);
Fim.
Figura 57 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando a Clusula PASSO
Exerccios Resolvidos
1. Faa um algoritmo que calcule o somatrio dos termos a seguir, sendo N lido do teclado:
Somatrio = 1 + 1/3 + 1/5 + 1/7 + ...+ 1/N
Algoritmo Somatorio_fracao;
Declare cont: inteiro;
total : real;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
PARA cont de 1 AT N PASSO 2 FAA
total total + ( 1 / cont );
FIMPARA;
Escreva ("O somatrio : , total);
Fim.
Figura 59 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA
2. Faa um algoritmo que calcule o somatrio de N termos de frao, cujo denominador varia de
5 em 5 e o denominador de 2 em 2. N lido do teclado:
Somatrio = 1 + 6/3 +11/5 + 16/7 + ...
Algoritmo Somatorio_fracao;
Declare cont, N: inteiro;
Total, denominador, numerador : real;
Inicio
Escreva ("Digite o nmero de termos N: ");
Leia (N);
total 0;
numerador 1;
denominador 1;
PARA cont de 1 AT N FAA
total total + ( numerador / denominador);
numerador numerador + 5;
denominador denominador + 2;
FIMPARA;
Escreva ("O somatrio : , total);
Fim.
Figura 60 Exemplo de Somatrio de 1 a N usando Comando de Repetio PARA
Algoritmo tabuada;
Declare i, tab, num: inteiro;
INICIO
Escreva (Tabuada do: )
Leia (tab);
Escreva (At o nmero: );
Leia (num);
PARA i de 1 AT num FAA
Escreva (i, x , tab, = , i * tab);
FIMPARA;
FIM.
Figura 61 Exemplo de Algoritmo Tabuada, usando PARA
Algoritmo atualizar_preco;
Declare i : inteiro;
descricao : literal;
preco, n_preco : real;
INICIO
Escreva (Este programa permite a atualizao do preo em 20% de 30
produtos.);
PARA i de 1 AT 30 FAA
Escreva(Descrio: );
Leia (descricao);
Escreva(Preo Atual: );
Leia (preco);
n_preco preco * 1.20;
Escreva(O novo preo de ,descricao, = , n_preco);
FIMPARA;
Fim.
Figura 62 Algoritmo atualizar_preco, usando PARA
Exemplificando...
Como foi atribudo o valor 1 cont, ento pode-se afirmar que 1 menor que 10, tornando
a condio verdadeira, implicando na execuo das linhas de dentro do ENQUANTO. Logo,
seria impresso na tela a mensagem o valor do contador : 1.
Na prxima linha, encontra-se o FIMENQUANTO que faz a execuo mudar para a linha
ENQUANTO (cont <=10) faa. Analogamente, continua-se a execuo at cont ser
incrementado valer 10. Considerando que a condio (cont <= 10) e 10 igual a 10, ento o
algoritmo escreve na tela o valor do contador : 10 e, na linha seguinte, acrescenta mais 1 a
cont, resultando no valor 1. Quando a execuo retornar a condio com cont valendo 11, a
condio se tornar falsa e a execuo passar para a primeira linha aps o FIMENQUANTO,
imprimindo na tela Saiu das repeties do ENQUANTO...FAA.
Exerccios Resolvidos:
1. Faa um algoritmo que imprima na tela os nmeros de 50 a 20.
Algoritmo Inverso_50_20;
Declare cont: inteiro;
Inicio
cont 50;
ENQUANTO ( cont >=20 ) FAA
escreva ( o valor do contador : , cont );
cont cont -1;
FIM-ENQUANTO;
Escreva (Saiu das repeties do ENQUANTO...FAA);
Fim
Figura 68 Algoritmo que imprime de 50 a 20 aplicando ENQUANTO...FAA
2. Faa um algoritmo que leia nome, nota 1 e nota 2 de 20 alunos, e imprima na tela o nome do
aluno e a sua mdia.
Algoritmo Media_Aluno;
Declare cont : inteiro;
nome: literal;
n1, n2 : real;
Inicio
cont 1;
ENQUANTO (cont <= 20 ) FAA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
cont cont + 1;
FIM-ENQUANTO;
Fim.
Figura 69 Exemplo de Algoritmo, usando Comando de Repetio ENQUANTO
Algoritmo soma;
declare soma, i inteiro;
INICIO
soma 0;
i 1;
ENQUANTO i <= 10 FAA
soma soma + i;
i i + 1;
FIM-ENQUANTO;
Escreva (soma);
FIM.
Figura 70 Algoritmo Soma usando ENQUANTO
Algoritmo Somatorio_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 1;
ENQUANTO ( i <= N ) FAA
total total + i;
i i + 1;
FIM-ENQUANTO;
Escreva ("O somatrio de 1 at , N, : , total);
Fim.
Figura 71 Exemplo de Somatrio de 1 a N usando Comando de Repetio ENQUANTO
Algoritmo Somatorio_3_de_1_N;
Declare i, total, N: inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 0;
ENQUANTO ( i <= N ) FAA
total total + i;
i i + 3;
FIM-ENQUANTO;
6. Faa um algoritmo que calcule o somatrio de N termos de frao, cujo denominador varia
de 5 em 5 e o denominador de 2 em 2. N lido do teclado:
Somatrio = 1 + 6/3 +11/5 + 16/7 + ...
Algoritmo Somatorio_fracao;
Declare cont, N: inteiro;
total, denominador, numerador : real;
Inicio
Escreva ("Digite o nmero de termos N: ");
Leia (N);
total 0;
numerador 1;
denominador 1;
cont 1;
ENQUANTO ( cont <= N ) FAA
total total + ( numerador / denominador);
numerador numerador + 5;
denominador denominador + 2;
cont cont + 1;
FIM-ENQUANTO;
Escreva ("O somatrio : , total);
Fim.
Figura 73 Exemplo de Somatrio de 1 a N usando Comando de Repetio ENQUANTO
7. Faa um algoritmo que leia a senha de um usurio. O algoritmo somente deve permitir que o
usurio continue a executar o sistema se a senha digitada for correta, caso contrrio, o algoritmo
deve pedir a senha ao usurio.
...
Escreva (Digite a senha);
Leia (senha);
ENQUANTO senha <> xyz FAA
Escreva (Senha invlida);
Escreva (Digite a senha novamente);
Leia (senha);
FIM-ENQUANTO;
Escreva (Acertou a Senha);
...
Figura 74 Exemplo de Algoritmo, usando Comando de Repetio ENQUANTO
Neste exemplo, o usurio digita a senha, cuja primeira leitura est antes do
ENQUANTO...FAA, garantindo um valor inicial para que a senha possa ser comparada na
condio do ENQUANTO. Em seguida, a condio do ENQUANTO verifica se a senha
diferente de XYZ. Se a senha digitada for diferente de XYZ, as linhas dentro do
ENQUANTO...FAA sero executadas. Essas linhas informam, nesta ordem, que a senha
invlida e pede ao usurio digit-la novamente.
Repare que enquanto a senha for diferente de XYZ o algoritmo ficar preso nestas
repeties e o usurio no conseguir fazer mais nada no algoritmo. Quando o usurio digitar a
senha correta, a condio (senha <> XYZ) ser falsa, e a execuo continuar na linha
imediatamente aps o FIM-ENQUANTO.
Exerccios Resolvidos:
1. Faa um algoritmo que leia a descrio e preo de um produto. Atualize o preo em 30%
e escreva na tela a descrio e o novo preo. Caber ao usurio a deciso de quantos
produtos deseja atualizar. Portanto, aps cada entrada de dados e impresso na tela, o
algoritmo deve solicitar ao usurio a pressionar S ou s caso queira entrar com novo
produto para clculo. O algoritmo deve parar a execuo somente se o usurio no digitar
S e nem s.
Algoritmo atualizar_preco;
Declare resposta: caracter;
descricao : literal;
preco, n_preco : real;
INICIO
Escreva (Digite S para atualizar o preo ou N para sair);
resposta S;
ENQUANTO ( resposta = S ) ou ( resposta = s ) FAA
Escreva(Descrio: );
Leia (descricao);
Escreva(Preo Atual: );
Leia (preco);
n_preco preco * 1.30;
Escreva(O novo preo de ,descricao, = , n_preco);
Escreva (Digite S para atualizar o preo ou N para sair);
leia (resposta);
FIM-ENQUANTO;
FIM.
Figura 75 Algoritmo atualizar_preco, usando ENQUANTO
2. Faa um algoritmo que leia 20 nmeros inteiros positivos e imprima na tela o maior.
Algoritmo atualizar_preco;
Declare i, num, maior : inteiro;
INICIO
i 1;
maior -1;
ENQUANTO ( i <=20 ) FAA
Escreva(Digite um nmero: );
Leia (num);
Se ( num > maior ) ento
maior num;
Fim-se;
i i + 1;
FIM-ENQUANTO;
Escreva (O maior nmero digitado , maior);
FIM.
Figura 76 Algoritmo Imprimir Maior Nmero usando ENQUANTO
O teste de condio do comando REPITA fica no fim de sua estrutura. Assim, primeiro
executa-se um conjunto de instrues e, somente depois, realiza-se o teste de condio. Se a
condio for falsa, o fluxo de programa retorna para a linha da instruo REPITA e repete os
comandos descritos dentro do REPITA...AT. Se a condio for verdadeira, o fluxo do programa
sai da estrutura REPITA...AT e continua a execuo na primeira linha, imediatamente, aps a
clusula AT.
REPITA
<instrues>;
AT <condio>;
Em seguida, atinge-se a linha da condio AT (cont > 10). Como CONT vale 2, ento
ele no maior que 10, fazendo com que a execuo volte para a linha REPITA. impresso na
tela o valor do contador : 2 e CONT incrementado de 1, passando a valer 3.
Logo aps, atinge-se a linha da condio AT (cont > 10). Como CONT vale 3, ento
ele no maior que 10, fazendo com que a execuo volte para a linha REPITA.
Algoritmo Escreve_ate_10;
Obrigatrio atribuir
Declare cont: inteiro; valor inicial ao contador
Inicio
cont 1;
REPITA
escreva ( o valor do contador : , cont ); Obrigatrio adicionar
cont cont + 1;
algum valor ao
AT ( cont > 10 );
Escreva (Saiu das repeties do REPITA...AT); contador dentro do
Fim. REPITA
Exemplificando...
Os comandos dentro do REPITA realmente podero ser executados pelo uma vez
mesmo que a condio no seja satisfeita.
As variveis presentes na condio do REPITA tem um valor inicial lido ou atribudo
antes de chegar na condio.
O local onde ocorre o incremento/decremento est correto, evitando que possa ocorrer
uma repetio a mais ou a menos do projetado e/ou clculos errados.
Exemplificando...
Faa um algoritmo que imprima na tela os nmeros de 50 a 20.
Algoritmo Inverso_50_20;
Declare cont: inteiro;
Inicio
cont 50;
REPITA
escreva ( o valor do contador : , cont );
cont cont -1;
AT ( cont < 20 );
Escreva (Saiu das repeties do REPITA...AT);
Fim
Figura 82 Algoritmo que imprime de 50 a 20 aplicando REPITA...AT
Observe que o teste da condio cont < 20 executado somente aps a execuo dos
comandos dentro do REPITA...AT. O fluxo do programa repetir os comandos dentro do
REPITA...AT sempre que a condio for falsa. Quando a condio for verdadeira o fluxo
desviado para a primeira linha imediatamente aps a clusula AT.
Exerccios Resolvidos:
1. Faa um algoritmo que leia nome, nota 1 e nota 2 de 20 alunos, e imprima na tela o nome
do aluno e a sua mdia.
Algoritmo Media_Aluno;
Declare cont : inteiro;
nome: literal;
n1, n2 : real;
Inicio
cont 1;
REPITA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
cont cont + 1;
AT ( cont > 20 );
Fim.
Figura 83 Exemplo de Algoritmo, usando Comando de Repetio REPITA...AT
Algoritmo soma;
declare soma, i: inteiro;
INICIO
soma 0;
i 1;
REPITA
soma soma + i;
i i + 1;
AT ( i > 10 );
Escreva (soma);
FIM.
Figura 84 Algoritmo Soma, usando REPITA...AT
Algoritmo Somatorio_1_N;
Declare i, total, N : inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 1;
REPITA
total total + i;
i i + 1;
AT ( i > N );
Escreva ("O somatrio de 1 at , N, : , total);
Fim.
Figura 85 Exemplo de Somatrio de 1 a N usando Comando de Repetio REPITA...AT
Algoritmo Somatorio_3_de_1_N;
Declare i, total, N: inteiro;
Inicio
Escreva ("Digite valor de N: ");
Leia (N);
total 0;
i 0;
REPITA
total total + i;
i i + 3;
AT ( i > N );
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : ,
total);
Fim.
Figura 86 Exemplo de Somatrio dos mltiplos de 3 de 1 a N Usando REPITA...AT
Algoritmo Somatorio_fracao;
Declare cont, N: inteiro;
total, denominador, numerador : real;
Inicio
Escreva ("Digite o nmero de termos N: ");
Leia (N);
total 0;
numerador 1;
denominador 1;
cont 1;
REPITA
total total + ( numerador / denominador);
numerador numerador + 5;
denominador denominador + 2;
cont cont + 1;
AT ( cont > N );
Escreva ("O somatrio dos mltiplos de 3 de 1 at , N, : ,
total);
Fim.
Figura 87 Exemplo de Somatrio de 1 a N usando Comando de Repetio REPITA...AT
6. Faa um algoritmo que leia a senha de um usurio. O algoritmo somente deve permitir
que o usurio continue a executar o sistema se a senha digitada for correta, caso
contrrio, o algoritmo deve pedir a senha ao usurio.
...
Escreva (Digite a senha);
REPITA
Escreva (Senha invlida);
Escreva (Digite a senha novamente);
Leia (senha);
AT (senha = xyz);
Escreva (Acertou a Senha);
...
Figura 88 Exemplo de Algoritmo, usando Comando de Repetio REPITA...AT
7. Faa um algoritmo que leia a descrio e preo de um produto. Atualize o preo em 30%
e escreva na tela a descrio e o novo preo. Caber ao usurio a deciso de quantos
produtos deseja atualizar. Portanto, aps cada entrada de dados e impresso na tela, o
algoritmo deve solicitar ao usurio a pressionar S ou s caso queira entrar com novo
produto para clculo. O algoritmo deve parar a execuo somente se o usurio no digitar
S e nem s.
Algoritmo atualizar_preco;
Declare resposta: caracter;
descricao : literal;
preco, n_preco : real;
INICIO
Escreva (Digite S para atualizar o preo ou N para sair);
resposta S;
REPITA
Escreva(Descrio: );
Leia (descricao);
Escreva(Preo Atual: );
Leia (preco);
n_preco preco * 1.30;
Escreva(O novo preo de ,descricao, = , n_preco);
Escreva (Digite S para atualizar o preo ou N para sair);
leia (resposta);
AT (resposta = N) ou (resposta = n)
FIM.
Figura 89 Algoritmo atualizar_preco, usando REPITA
8. Faa um algoritmo que leia 20 nmeros inteiros positivos e imprima na tela o maior.
Algoritmo atualizar_preco;
Declare i, num, maior : inteiro;
INICIO
i 1;
maior -1;
REPITA
Escreva(Digite um nmero: );
Leia (num);
Se ( num > maior ) ento
maior num;
Fim-se;
i i + 1;
AT ( i > 20 );
Escreva (O maior nmero digitado , maior);
FIM.
Figura 90 Algoritmo Imprimir Maior Nmero usando ENQUANTO
Algoritmo media;
Declare soma, num, media: real;
cont : inteiro;
INICIO
soma 0;
cont 1;
ENQUANTO cont <= 50 FAA
Escreva (Digite um nmero: );
leia (num);
soma soma + num;
cont cont + 1;
Media soma / cont ;
FIMENQUANTO;
Escreva(A mdia dos nmeros digitados : , media);
FIM.
Usando o REPITA: Faa um algoritmo que leia 50 nmeros fornecidos pelo usurio,
calcule e exiba a mdia.
Algoritmo media;
Declare soma, num, media: real;
cont : inteiro;
INICIO
soma 0;
cont 1;
REPITA
Escreva (Digite um nmero: );
leia (num);
soma soma + num;
cont cont + 1;
Media soma / cont ;
AT cont > 50;
Escreva(A mdia dos nmeros digitados : , media);
FIM.
Usando o PARA: Faa um algoritmo que leia 50 nmeros fornecidos pelo usurio, calcule
e exiba a mdia.
Algoritmo media;
Declare soma, num, media: real;
cont : inteiro;
INICIO
soma 0;
PARA cont de 1 AT 50 FAA
Escreva (Digite um nmero: );
leia (num);
soma soma + num;
Media soma / cont ;
FIMPARA;
Escreva(A mdia dos nmeros digitados : , media);
FIM.
6) Construa um algoritmo que calcule a srie descrita a seguir para um nmero de termo
informado pelo usurio via teclado. (12 + 1)/1 + (22 + 1)/3 + (32 + 1)/5 + (42 + 1)/7 + ...
Algoritmo Media_Aluno;
Declare cont : inteiro;
nome: literal;
n1, n2 : real;
Inicio
cont 1;
REPITA
Escreva ("Nome: ");
Leia (nome);
Escreva ("Primeira nota:");
Leia (n1);
Escreva ("Segunda nota:");
Leia (n2);
media (n1+n2)/2;
Escreva ("O aluno ",nome," teve mdia igual a: ",media);
cont cont + 1;
AT ( cont > 20 );
Fim.
Figura 91 Algoritmo Media_Aluno, usando Comando de Repetio REPITA...AT
Uma pequena variao na sada do algoritmo pode torn-lo bem mais complexo. Por
exemplo, se fosse solicitado um algoritmo que lesse o nome, a nota 1 e a nota 2 de 20 alunos, e
imprimisse na tela a mdia geral dos alunos e depois o nome, notas e mdia de cada aluno.
Neste caso, o Comando de Repetio no seria suficiente para resolver o problema. Seria
necessrio declarar vrias variveis para armazenar todos os nomes e notas, para calcular e
imprimir a mdia geral e os dados digitados no final. Uma possvel soluo considerando apenas
3 alunos seria:
Algoritmo Media_Geral;
Declare n1,n2,n3,n4,n5,n6, Media, MediaGeral: real;
nome1, nome2, nome3: literal;
Inicio
Escreva(Nome: );
Leia(nome1);
Escreva(Nota 1: );
Leia(n1);
Escreva(Nota 2: );
Leia(n2);
Escreva(Nome: );
Leia(nome2);
Escreva(Nota 1: );
Leia(n3);
Escreva(Nota 2: );
Leia(n4);
Escreva(Nome: );
Leia(nome3);
Escreva(Nota 1: );
Leia(n5);
Escreva(Nota 2: );
Leia(n6);
MediaGeral (n1+n2+n3+n4+n5+n6)/6;
Escreva(A Mdia Geral , MediaGeral);
Media (n1+n2)/2;
Escreva(nome1, n1, n2, Media);
Media (n3+n4)/2;
Escreva(nome2, n3, n4, Media);
Media (n5+n6)/2;
Escreva(nome3, n5, n6, Media);
FIM.
Figura 92 Algoritmo Media_Geral, usando Comando de Repetio REPITA...AT
No caso da estrutura Vetor e Matriz, pode-se armazenar diversos dados de um mesmo tipo
em uma nica varivel. O fato de armazenar dados do mesmo tipo, somente inteiro ou somente
real ou somente lgico etc, d aos vetores e matrizes a classificao de Estruturas de Dados
Homogneas (homognea quer dizer do mesmo tipo de dado).
12 VETORES
Considere o algoritmo apresentado na Figura 93 que solicita ao usurio a entrada dos nomes
de 20 alunos e os imprime na tela na medida em que o dado digitado.
Algoritmo nomes_alunos;
Declare nome: literal;
i : inteiro;
INICIO
PARA i de 1 AT 20 FAA
Escreva ("Digite o nome do aluno ",i,":");
Leia (nome);
Escreva ("Aluno", i, : , nome);
FIMPARA;
FIM.
Figura 93 Exemplo de Algoritmo usando Comando de Repetio REPITA
Porm, se pedir para leia o nome de 20 alunos e depois de lido todos, imprimi-los na tela,
no haveria soluo com o que foi aprendido at o momento, a no ser que se declarasse 20
variveis para nome.
O algoritmo da Figura 94 mostra claramente esta limitao. Ele l 20 nomes de alunos um
a um, conforme o usurio os digita. Neste caso usamos apenas de uma varivel inteira que serve
como contador (i) e uma varivel do tipo literal para armazenar o nome.
O nome do aluno digitado, armazenado na varivel nome, exibido ao usurio, e a varivel
liberada para armazenar o prximo nome de aluno. Se voc solicitar ao programa que exiba o
contedo da varivel nome aps o comando PARA, ver que somente o ltimo nome digitado
ser exibido.
Faa o teste. Insira o comando Escreva ("Nome do Aluno: ", nome) aps o comando
FIMPARA.
Algoritmo nomes_alunos;
Declare nome : literal;
i : inteiro; // declarao do contador
INICIO
PARA i de 1 AT 20 FAA
Escreva ("Digite o nome do aluno ",i,":");
Leia (nome);
Escreva ("Aluno", i, : , nome);
FIMPARA;
FIM.
Escreva ("Nome do Aluno: ", nome); /* apresentar somente o ltimo
nome de aluno digitado, que corresponde ao ltimo valor armazenado na
varivel nome. */
Figura 94 Algoritmo nomes_alunos
Para que todos os nomes de alunos digitados sejam exibidos preciso armazen-los em
uma estrutura de dados. Neste caso utiliza-se uma estrutura de dados homognea
unidimensional, o vetor.
Um vetor uma varivel formada por vrios espaos na memria, todos do mesmo tipo,
com o mesmo identificador (mesmo nome) e alocadas sequencialmente na memria.
V=
ndices
1 2 3 4 5
A Figura 95 apresenta um vetor chamado V, que possui cinco posies. Pode-se armazenar
cinco valores neste vetor. Cada posio representada pelo seu ndice. Assim, para saber o valor
armazenado na primeira posio basta escreva V[1], na segunda posio, V[2], e assim
sucessivamente. Os nmeros abaixo do vetor de 1 a 5 so denominados de ndices e identificam
qual posio deseja-se manipular.
Algoritmo teste;
Declare <nome da varivel>[tamanho]: tipo;
...
INICIO
<comandos>;
FIM.
Figura 96 Declarao de Vetor em pseudocdigo
Onde: nome o nome da varivel tipo vetor, tamanho a quantidade de dados que ser
armazenada na varivel e tipo o tipo de dado que poder ser armazenado.
Exemplificando...
Algoritmo teste;
Declare V[5]: inteiro;
...
INICIO
<comandos>;
FIM.
Figura 97 Exemplo de Declarao de um Vetor de 5 posies do tipo inteiro
Aps a execuo destas trs linhas acima, o vetor ficaria com a seguinte configurao:
V= 23 19 -4
1 2 3 4 5
...
Declare nome [20]: literal;
...
nome[1]
A primeira vez que o comando Leia for executado i valer 1, implicando que o valor
digitado pelo usurio ficar na posio 1 do vetor, analogamente os valores sero lidos e
colocados um aps o outro at a posio 20.
Exemplificando...
Algoritmo nomes_alunos;
Declare nome [20]: literal; /* trocamos a varivel nome: literal por um
vetor de tamanho 20 do tipo literal */
i : inteiro;
Entrada dos
INICIO
dados Escreva ("Entre com o nome dos Alunos);
PARA i de 1 AT 20 FAA
Sada dos Escreva ("Aluno ", i, ":"); //solicita os nomes dos alunos um a um
Leia (nome[ i ]); //os dados so armazenados um a um, no vetor
dados
FIMPARA;
PARA i de 1 AT 20 FAA
Escreva (Aluno: , nome[ i ]); /* todos os nomes armazenados no
vetor nome sero exibidos */
FIMPARA;
FIM.
Figura 99 Algoritmo nomes_alunos utilizando Vetor, entrada e sada de dados
Para exibir (Sada) dados o procedimento o mesmo, utiliza-se outro comando PARA e no
comando Escreva coloca-se o nome do vetor seguido de [ ] e o contador i usado no PARA.
O mesmo raciocnio vlido para guardar a nota 1 e nota 2 de cada aluno, bastando criar
um vetor de 20 posies para Nota1 e outro de 20 posies para Nota2. Deste modo, possvel
armazenar todos os valores digitados pelo usurio.
Exemplificando...
Algoritmo Mult_tres;
Declare Num[10]: inteiro;
i : inteiro;
INICIO
Escreva ("Entre com os valores);
PARA i de 1 AT 10 FAA Processamento dos
Escreva ("Valor ", i, ":"); dados
Leia (Num[ i ]);
FIMPARA;
PARA i de 1 AT 10 FAA
Num[i] Num[i] * 3; // multiplica cada valor por trs, guardando o resultado no prprio vetor.
FIMPARA;
Sada dos
PARA i de 1 AT 10 FAA
Escreva (Valor: , Num[ i ]); dados
FIMPARA;
FIM.
Figura 100 Algoritmo nomes_alunos utilizando Vetor, processando dados
2) Faa um algoritmo que leia um vetor de 20 posies e uma varivel inteira A. A seguir,
mostre o produto da varivel A por cada valor do vetor.
3) Faa um algoritmo que leia dois vetores: F[20] e G[20]. Calcule e mostre, a seguir, a soma
dos valores de F com G, guardando o resultado em um 3 vetor H.
4) Faa um algoritmo que leia dois vetores: F[20] e G[20]. Calcule e mostre, a seguir, a soma
dos valores de F com G, guardando o resultado no vetor F.
5) Faa um algoritmo que leia um vetor de tamanho 20 e inverta seus elementos, trocando o
1 elemento com o ltimo, o 2 elemento com o penltimo. Mostre o vetor invertido.
6) Faa um algoritmo que leia um vetor de tamanho 6, conte quantos valores deste vetor so
negativos e mostre essa informao.
7) Faa um algoritmo que leia um vetor de 10 posies, substitua todos os valores iguais a
zero por 1 e escreva o vetor resultante.
8) Faa um algoritmo que leia um vetor de 20 posies e uma varivel inteira A. Imprima na
tela achou se o valor A existe no vetor, e no achou se o valor no foi encontrado.
9) Faa um algoritmo que leia um vetor de 20 posies e uma varivel inteira A. Imprima na
tela a(s) posio(es) em que o valor A foi encontrado no vetor.
13 MATRIZES
Vimos que uma estrutura capaz de armazenar diversos dados de um mesmo tipo em uma
nica varivel considerada uma Estrutura de Dados Homognea, lembrando que homognea
quer dizer do mesmo tipo de dado. E classificamos este tipo de estrutura em Vetores
(unidimensionais), visto na seo anterior, e Matrizes (bidimensionais).
Exemplificando...
Representao de uma Matriz M 5X10 da Figura 103:
M[1,1] M[1,2] M[1,10]
M 1
M[5,1] 5
M[5,10]
1 2 3 4 5 6 7 8 9 10
Onde:
Algoritmo teste;
Declare < nome da varivel > [ <n de linhas>, <n de colunas>] :
tipo;
...
INICIO
<comandos>;
FIM.
Figura 102 Declarao de matriz em pseudocdigo
Exemplificando...
Declarando uma matriz M do tipo inteiro de 5 linhas e 10 colunas (5X10).
Algoritmo teste;
Declare M [5 , 10] : inteiro;
...
INICIO
<comandos>;
FIM.
Figura 103 Exemplo de Declarao de uma Matriz 5X10 do tipo inteiro
Como no vetor o acesso a cada elemento de uma matriz feito pela especificao de sua
posio por meio do seu ndice.
Na Figura 103 apresenta a declarao de uma matriz M com 5 linhas e em cada linha 10
colunas que podem armazenar valores inteiros. No total, a matriz M pode armazenar 50 valores
inteiros.
Exemplificando...
Algoritmo teste;
Declare A [4] : Inteiro;
B [20 , 4] : Inteiro;
C [5, 20 , 4] : Inteiro;
D [2 ,5, 20 , 4] : Inteiro;
E [3 , 2 , 5, 20 , 4] : Inteiro;
F [2 ,3 , 2 , 5, 20 , 4] : Inteiro;
...
INICIO
<comandos>;
FIM.
Figura 104 Declarao de Matrizes de diferentes dimenses
No exemplo da Figura 104, cada estrutura pode ser utilizada para armazenar informaes
como:
M 1 24 3
2 14
3 44
4
5 38
1 2 3 4 5 6 7 8 9 10
Exemplificando...
Algoritmo entrada_matriz;
Entrada dos Declare num [3, 5] : inteiro;
dados i, j : inteiro;
INICIO
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (num[ i, j ];
FIMPARA;
FIMPARA;
FIM.
Figura 107 Entrada de dados em uma Matriz 3X5
num 1 13 24000 2 -5 48
2 -6 0 100 -27 154
3 23 1 5 87 -51
1 2 3 4 5
Algoritmo entrada_e_saida_matriz;
Declare num [3, 5] : inteiro;
i, j : inteiro;
INICIO
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (num[ i, j ]);
FIMPARA;
Sada dos
FIMPARA;
dados
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva(num[ i , j ]);
FIMPARA;
FIMPARA;
FIM.
Figura 109 Entrada e Sada de dados em uma Matriz 5X10
Exemplificando...
Elaborar um algoritmo para leia uma matriz NUM de 5 linhas por 10 colunas de inteiros. Depois
somar 100 a cada valor da matriz.
Algoritmo Soma_100;
Declare Num[5, 10] ,i ,j : inteiro;
INICIO
Escreva ("Entre com os valores);
// L os valores da matriz
PARA i de 1 AT 5 FAA
PARA j de 1 AT 10 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (Num[ i, j ];
Processamento FIMPARA;
FIMPARA;
dos dados
// Soma o nmero 100 a cada valor armazenado
PARA i de 1 AT 5 FAA
PARA j de 1 AT 10 FAA
Num[ i, j] Num[ i, j] + 100;
FIMPARA;
FIMPARA;
// Imprime a sada
PARA i de 1 AT 5 FAA
PARA j de 1 AT 10 FAA
Escreva(Posio[ , i , , j, ]:, Num[ i, j] );
FIMPARA;
FIMPARA;
FIM.
Figura 110 Algoritmo para somar nmero 5 a cada posio de uma matriz [5,10]
Exerccios Resolvidos:
1) Elaborar um algoritmo para leia uma matriz MAT de 3 linhas por 5 colunas de inteiros.
Depois somar os elementos da 2 linha e armazenar em uma varivel A, multiplicar os
elementos da 3 coluna e armazenar em uma varivel B.
Algoritmo matriz_com_soma_e_multipli;
Declare mat[3,5], i, j, A, B: inteiro;
INCIO
PARA i de 1 AT 3 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (mat [i,j] );
FIMPARA;
FIMPARA;
A 0;
B 1;
PARA j de 1 AT 5 FAA // fixando a linha 2
A A + mat [2,j];
FIMPARA;
2) Elaborar um algoritmo para leia uma Matriz 5x5 de inteiros, encontrar o maior valor
armazenado nela e multiplicar este valor pela matriz lida.
Algoritmo acha_maior_mult;
Declare M[5,5], RES[5,5], i, j, maior: inteiro;
INCIO
PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva ("Digite os valores da posio[ ",i, " e ,j, ]:");
Leia (M [ i, j ] );
FIMPARA;
FIMPARA;
maior M [1,1];
PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
SE M [ i, j ] > maior ENTO
maior M [ i, j ];
FIMSE;
FIMPARA;
FIMPARA;
Escreva (O maior valor da matriz digitada : , maior);
FIM.
Figura 112 Algoritmo para encontrar maior valor da matriz e multiplic-lo pela matriz
3) Elaborar um algoritmo para somar duas matrizes 2x2 do tipo inteiro fornecidas pelo usurio.
Apresente as 2 matrizes lidas e o resultado em outra matriz.
Algoritmo soma_matrizes;
Declare A[2,2], B [2,2], RES[2,2], i, j: inteiro;
INCIO
PARA i de 1 AT 2 FAA
PARA j de 1 AT 2 FAA
Escreva ("Digite os valores da Matriz A[ ",i, " e ,j, ]:");
Leia (A [ i, j ] );
FIMPARA;
FIMPARA;
PARA j de 1 AT 2 FAA
Escreva ("Digite os valores da Matriz B[ ",i, " e ,j, ]:");
Leia (B [ i, j ] );
FIMPARA;
FIMPARA;
PARA i de 1 AT 2 FAA
PARA j de 1 AT 2 FAA
RES [ i, j ] A[ i , j] + B[ i , j ];
FIMPARA;
FIMPARA;
Escreva (A matriz A : );
PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva (A [ i, j ]);
FIMPARA;
FIMPARA;
Escreva (A matriz B : );
PARA i de 1 AT 5 FAA
PARA j de 1 AT 5 FAA
Escreva (B [ i, j ]);
FIMPARA;
FIMPARA;
FIM.
Figura 113 Algoritmo para somar duas matrizes
Um Registro permite trabalhar com dados de tipos diferentes em uma mesma estrutura e
por isso considerado heterogneo.
Algoritmo registro;
Declare <nome_da_varivel_registro> REGISTRO (<lista de campos e seus tipos>);
...
INICIO
<comandos>;
FIM.
Figura 114 Declarao de Registro em pseudocdigo
Exemplificando ...
Considere um Registro com campos referentes a dados de alunos como: matrcula, nome, curso,
perodo e mdia.
Algoritmo registro_aluno;
Declare reg_aluno REGISTRO (matr, nome, curso: literal, periodo: inteiro, media:
real);
...
INICIO
<comandos>;
FIM.
Figura 115 Declarao de Registro Aluno
reg_aluno
produto
...
produto.cod B002;
produto.descricao tomada;
produto.preco 1.99;
...
Figura 119 Exemplo de comandos para manipular o Registro produto
Exemplificando...
Algoritmo registro_produto;
Declare produto REGISTRO (cod, descricao:literal, preco: real);
INICIO
// Entrada de Dados no Registro Produto
Escreva(Entre com o Cdigo do Produto: );
Leia(produto.cod);
Escreva(Entre com a Descrio do Produto: );
Leia(produto.descricao);
Escreva(Entre com o Preo Unitrio do Produto: );
Leia(produto.preco);
FIM.
Figura 121 Entrada e Sada de Dados Registro Produto
Exemplificando ...
Algoritmo registro_aluno;
Declare reg_aluno [20] REGISTRO (matr, nome, curso: literal, periodo: inteiro, media:
real);
i: inteiro;
...
INICIO
<comandos>;
FIM.
Figura 122 Declarao de um Vetor de Registros para Aluno
produto[100]
1 2 ... 99 100
Exemplificando...
Considere um algoritmo para leia 100 registros de produtos e imprimi-los na tela. Cada registro
dever conter o cdigo do produto, sua descrio e seu preo unitrio.
Algoritmo registro_produto;
Declare produto[100] REGISTRO (cod, descricao:literal, preco: real);
i: inteiro;
INICIO
// Entrada de Dados de 100 Registros de Produto
PARA i DE 1 AT 100 FAA
Escreva(Entre com o Cdigo do Produto: );
Leia(produto[ i ].cod);
Escreva(Entre com a Descrio do Produto: );
Leia(produto[ i ].descricao);
Escreva(Entre com o Preo Unitrio do Produto: );
Leia(produto[ i ].preco);
FIMPARA;
Exerccios Resolvidos:
1. Elabore um algoritmo que leia informaes de descrio, preo, quantidade e ano de
vencimento dos produtos de um supermercado. O algoritmo dever fazer: a) o cadastro
de 100 produtos; b) listar todos os produtos cuja quantidade em estoque seja maior que
20 unidades; e c) listar todos os produtos cujo vencimento seja menor que 2011.
Algoritmo produto_supermercado;
Declare prod[100] REGISTRO (
descricao : literal
preco: real
qde: inteiro
venc:inteiro);
i: inteiro;
INICIO
PARA i DE 1 AT 100 FAA
Escreva(Entre com a Descrio do Produto: );
Leia(prod[ i ].descricao);
Escreva(Entre com o preo: );
Leia(prod[ i ].preco);
Escreva(Entre com a quantidade: );
Leia(prod[ i ].qde);
Escreva(Entre com o ano de vencimento: );
Leia(prod[ i ].venc);
FIMPARA;
2. A prefeitura de uma cidade fez uma pesquisa entre seus habitantes, coletando dados sobre
o salrio, sexo, idade e nmero de filhos. Considerando 100.000 habitantes na cidade,
faa um algoritmo que calcule e mostre:
a. A mdia do nmero de filhos da populao;
b. A maior idade;
c. A mdia do salrio das mulheres.
Algoritmo pesquisa;
Declare pesq[100000] REGISTRO (
sal: real;
sexo: caractere;
idade: inteiro;
filhos: inteiro;);
i, maior: inteiro;
MF, SalF, cont : real;
INICIO
PARA i DE 1 AT 100000 FAA
Escreva(Informe o salrio: );
Leia(pesq[i].sal);
Escreva(Informe o sexo, usando F para feminino e M para masculino: );
Leia(pesq[i].sexo);
Escreva(Informe a idade: );
Leia(pesq[i].idade);
Escreva(Informe o nmero de filhos: );
Leia(pesq[i].filhos);
FIMPARA;
MF 0;
PARA i DE 1 AT 100000 FAA
MF MF + pesq[ i ].filhos; // acumula qde de filhos para calcular media
FIMPARA;
MF MF / 100000;
Escreva(A mdia do nmero de filhos da populao: , MF);
SalF 0;
cont 0;
PARA i DE 1 AT 100000 FAA
SE (pesq[ i ].sexo = F) E (pesq[ i ].sal > 2000)ENTO
SalF SalF + pesq[ i ].sal; // acumula salrio feminino maior que 2000
para calcular media
cont cont +1;
FIMSE;
FIMPARA;
Algoritmo
Cada mdulo, alm de ter acesso s variveis do algoritmo que o chamou (variveis
globais), pode ter suas prprias variveis (variveis locais), que existem apenas durante sua
chamada.
A modularizao pode ser feita declarando-se Procedimentos e Funes, chamados em
qualquer parte do algoritmo. Para entender a diferena entre procedimentos e funes e como
declar-las, necessita-se compreender os conceitos retorno de valor e parmetro, melhor
explicado por meio de exemplos.
Vimos na seo 5.5.2 em Funes pr-definidas a funo que calcula a raiz quadrada de um
nmero denominada SQRT(x). Portanto, quando se faz a chamada desta funo usando a
expresso SQRT(25) no programa, espera-se obter a resposta da raiz quadrada de 25. A resposta,
parmetro ou
argumento
resp SQRT(25);
A funo retorna o
valor 5
Figura 130 Exemplo de retorno de valor e parmetro
Uma funo retorna um nico valor e pode possuir vrios parmetros. Tendo conscincia
destes conceitos, torna-se fcil diferenciar Procedimentos de Funes.
Procedimentos so sub-rotinas que NUNCA retornam um valor como resultado, apenas
executam uma tarefa. Por exemplo, o comando escreva imprime uma mensagem na tela, mas no
retorna nenhum valor. O comando leia um procedimento que l um valor do teclado e o
armazena numa varivel, sem retornar valor.
Funes so sub-rotinas que SEMPRE retornam um valor como resultado. O tipo
retornado por uma funo pode ser do tipo bsico como inteiro, real, literal, caractere ou lgico,
ou pode ser do tipo declarado pelo usurio como um vetor, matriz, registro dentre outros.
A declarao de procedimentos e funes bastante similar, diferenciando apenas pelo fato
de que em Funo deve-se informar o tipo de dado a ser retornado, enquanto procedimento no
existe a declarao o tipo de retorno, pois ele no nunca retorna valor.
Ressalta-se que o aluno deve guardar e no esquecer esta definio: A diferena entre o uso
de um Procedimento e uma Funo : um Procedimento NUNCA retorna valor, enquanto uma
Funo SEMPRE retornar um valor.
15.1 PROCEDIMENTOS
Um procedimento um conjunto de comandos que realiza alguma operao ao qual se d
um nome e NUNCA retorna valor.
Pode-se dizer que um procedimento possui vida prpria, com suas prprias variveis
(varivel local), mas que para ser processado, deve ser chamado pelo algoritmo principal ou por
outro procedimento.
<lista_de_variveis> : <tipo>;
Figura 132 Declarao de Varivel em Procedimentos
Exemplificando...
Declarao do procedimento SEPARADOR sem parmetros. Este procedimento cria uma
linha como separador na tela usando asteriscos (*).
...
PROCEDIMENTO SEPARADOR ( );
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (*);
FIMPARA;
FIMPROCEDIMENTO;
...
...
PROCEDIMENTO IMPRIMIR ( );
declare i : inteiro;
PARA i de 1 AT 1000 FAA
escreva (i);
FIMPARA;
FIMPROCEDIMENTO;
...
Figura 134 Declarao do Procedimento IMPRIMIR
...
PROCEDIMENTO SEPARADOR ( smbolo : caractere);
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (simbolo);
FIMPARA;
FIMPROCEDIMENTO;
...
Figura 135 Declarao do Procedimento SEPARADOR
...
PROCEDIMENTO IMPRIMIR(x1, x2:inteiro);
declare i : inteiro;
PARA i de x1 AT x2 FAA
escreva (i);
FIMPARA;
FIMPROCEDIMENTO;
...
Figura 136 Declarao do Procedimento IMPRIMIR
...
PROCEDIMENTO IMPRIMIR(nome:caractere; salario:real; idade:inteiro);
declare i : inteiro;
escreva (nome:, nome);
escreva (salario:, salario);
escreva (idade: , idade);
FIMPROCEDIMENTO;
...
Figura 137 Declarao do Procedimento IMPRIMIR
Algoritmo teste_procedimento;
declare nome : literal;
PROCEDIMENTO SEPARADOR ( );
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (*);
FIMPARA;
FIMPROCEDIMENTO;
INICIO
escreva (Algoritmo para testar chamada de um procedimento);
separador;
escreva (Aula de AEDI);
separador;
escreva (Digite seu nome:);
leia (nome);
separador;
escreva (O nome :, nome);
separador;
FIM.
Figura 138 Chamada ao Procedimento SEPARADOR
A Figura 138 mostra um procedimento que imprime uma linha com 20 asteriscos. Toda vez
que o procedimento SEPARADOR for chamado, ele sempre far a mesma coisa sem nenhuma
variao, ou seja, imprimir uma linha com 20 asteriscos.
Algoritmo teste_procedimento;
declare nome : literal;
simbolo: caractere;
PROCEDIMENTO SEPARADOR ( );
declare i : inteiro;
PARA i de 1 AT 20 FAA
escreva (simbolo);
FIMPARA;
FIMPROCEDIMENTO;
INICIO
escreva (Algoritmo para testar chamada de um procedimento);
escreva (Digite o caractere que deseja imprimir como separador de linha: );
leia(simbolo);
separador;
escreva (Digite novo caractere que deseja imprimir como separador de linha: );
leia(simbolo);
separador;
FIM.
Figura 139 Chamado ao Procedimento SEPARADOR
A Figura 139 mostra um algoritmo em que o usurio fornece o caractere que deseja
imprimir como separador de linha. Este caractere armazenado na varivel smbolo declarada
como de escopo global. A primeira vez que o procedimento SEPARADOR chamado, uma linha
com o caractere armazenado em smbolo ser impresso. Em seguida, novo caractere solicitado
ao usurio e, na sequencia, o procedimento SEPARADOR utilizar esse novo smbolo para
imprimir a linha com 20 caracteres. Observe que a variao do comportamento do procedimento
sem parmetro, somente foi possvel por que o procedimento utiliza uma varivel global que
pode ser alterada.
Exemplificando...
Voltemos ao exemplo da Figura 138 que declara um procedimento que cria uma linha como
separador na tela usando asteriscos (*). Mas agora alterando-o, permitindo o uso de diferentes
smbolos como separador.
Algoritmo teste_procedimento_com_parametro;
declare nome : literal;
PROCEDIMENTO SEPARADOR (simbolo : caractere);
declare i : inteiro;
PARA i de i AT 20 FAA
escreva (simbolo);
FIMPARA;
FIMPROCEDIMENTO;
INICIO
escreva (Testando chamada de procedimento com passagem de parmetro!);
separador (-);
escreva (Aula de AEDI);
separador (=);
escreva (Digite seu nome:);
leia (nome);
separador (+);
escreva (O nome :, nome);
separador (#);
FIM.
Figura 140 Algoritmo, usando Procedimento COM passagem de Parmetros
15.2 FUNES
Uma funo um conjunto de comandos que realiza alguma operao para a qual d-se um
nome e SEMPRE retorna um valor.
E tambm como no caso dos procedimentos, as funes precisam ser chamadas pelo
algoritmo principal para serem executadas. Ao se chamar uma funo, desvia-se a execuo do
algoritmo principal para realizar uma tarefa especfica. Aps sua execuo, no local onde foi
feita a chamada da funo atribui-se o valor retornado por ela.
O conceito de Funo vem da idia de funo matemtica, como raiz quadrada, seno,
cosseno, tangente, logaritmo etc, onde calcula-se um valor a partir de outro(s) fornecido(s)
funo.
Lembre-se que como uma funo sempre retorna um valor, elas devem ser chamadas de
forma a fazer sentido a substituio da chamada da funo pelo valor que ela retorna.
Por isso, em uma funo deve-se declarar tipos, consistentes com o tipo de valor por ela
calculado (inteiro, real, caractere, literal ou Lgico).
variavel Funcao(parmetros);
variavel Funcao(parmetros) + Z;
A chamada de uma funo feita atravs da citao do seu nome, seguido pelos
parmetros entre parnteses (se houver), dentro de uma expresso.
Exemplificando...
Declarao da funo DIVIDIR com 2 parmetros. Esta funo divide dois nmeros
inteiros e retorna um nmero real.
Algoritmo Exemplo_funcao_com_parametro;
declare calc: real;
X,Y: inteiro;
FUNCAO DIVIDIR ( a, b : inteiro) : real;
retorne a/b;
FIMFUNCAO;
INICIO
Escreva ("Digite 2 nmeros inteiros para serem divididos);
Escreva ("Digite o 1 nmero= );
Leia(X);
Escreva ("Digite o 2 nmero= );
Leia(Y);
calc DIVIDIR( X ,Y );
Escreva ("A diviso de ", x, "por ", y, " ", calc);
FIM.
Figura 144 Algoritmo com chamada a Funo com 2 parmetros
...
FUNCAO <nome_da_funcao>:<tipo_do_valor_retornado>;
declare < lista-de-variveis> : <tipo>;
<comandos>;
retorne <valor de retorno>;
FIMFUNCAO;
...
Figura 145 Declarao de Funo SEM passagem de parmetros
Exemplificando...
Algoritmo para calcular dividir dois nmeros reais, cuja funo NO possui parmetros.
Algoritmo Exemplo_funcao_sem_parametro;
declare calc, X,Y : real;
FUNCAO DIVIDIR : real;
retorne X/Y;
FIMFUNCAO;
INICIO
Escreva ("Digite 2 nmeros para serem divididos);
Escreva ("Digite o 1 nmero= );
Leia(X);
Escreva ("Digite o 2 nmero= );
Leia(Y);
calc DIVIDIR;
Escreva ("A diviso de , x, por , y, ", calc);
FIM.
Figura 146 Algoritmo com chamada a Funo sem parmetros
...
FUNCAO <nome_da_funcao> (<lista-de-parmetros> : <tipo>): <tipo_retornado>;
declare < lista-de-variveis> : <tipo>;
<comandos>;
retorne <valor de retorno>;
FIMFUNCAO;
...
Figura 147 Declarao de Funo COM passagem de parmetros
Exemplificando...
Algoritmo _funcao_com_parametros;
declare calc, X,Y : real;
INICIO
Escreva ("Digite 2 nmeros para serem multiplicados!);
Escreva ("Digite o 1 nmero= );
Leia(X);
Escreva ("Digite o 2 nmero= );
Leia(Y);
calc MULTIPLICAR( X , Y );
Escreva ("A multiplicao de , x, por , y, ", calc);
FIM.
Figura 148 Algoritmo com chamada a Funo COM parmetros
Algoritmo Exemplo_funcao;
declare X, Y : inteiro;
inicio
Escreva ("Digite um nmero inteiro);
Leia(X);
Y QUAD(X);
Escreva (X, " elevado ao quadrado = ", Y);
Fim.
Note que:
A funo QUAD recebe num como parmetro do tipo inteiro, ter um valor de retorno
do tipo inteiro e possui Z como uma varivel local do tipo inteiro;
O comando de chamada da funo QUAD aparece no comando de atribuio () no do
algoritmo principal.
Exerccios Resolvidos:
PROGRAMA Uso_Funcao;
declare num:inteiro;
INICIO
Escreva ("Digite um nmero inteiro);
leia (num);
escreva ( POTENCIA(num) );
FIM.
Algoritmo aumento_salario;
declare sal, aum, novo_sal: real;
INICIO
Escreva (Digite o salrio: );
Leia (sal);
aum CALC (sal);
novo_sal sal + aum;
Algoritmo Calcula_Preco;
INICIO
lerdados;
peso_grama kg2grama( peso_kg );
preco_total CalcularPrecoTotal( codigo, peso_grama );
valor_imposto Imposto( cod_pais, preco_total );
valor_total ValorTotal( preco_total, valor_imposto );
ImprimirDados;
FIM.
PROCEDIMENTO lerdados( )
escreva("Digite o cdigo do produto: ");
leia(codigo);
escreva("Digite o peso do produto(kg): ");
leia(peso_kg);
escreva("Digite o cdigo do pas de origem: ");
leia(cod_pais);
FIMPROCEDIMENTO;
FUNCAO kg2grama(pesokg:real):real
PROCEDIMENTO ImprimirDados()
escreva("Peso em gramas: ", peso_grama);
escreva("Preco Total do Produto: "preco_total);
escreva("Valor do Imposto ",valor_imposto);
escreva("Valor Total ", valor_total);
FIMPROCEDIMENTO;
PROCEDIMENTO IMPRIMIR;
declare i : inteiro;
PARA i de x1 AT x2 FAA
escreva (i);
FIMPARA;
FIMPROCEDIMENTO;
Figura 150 Declarao do Procedimento IMPRIMIR
Nesta seo, apresentam-se as diferenas entre os conceitos, para que o programador tome
a melhor deciso de acordo com as necessidades do projeto
Alm da declarao da funo, imagine uma linha chamando a funo com a seguinte
declarao:
N1 10;
N2 20;
S SOMAR(N1, N2);
1 2 3 4 5 6
1 N1=10
2
3 N2=20
4
5
Figura 151 Memria do Computador com as Variveis Globais
Quando ocorre a chamada a funo Somar(N1, N2), ento o computador copia o valor 10
do primeiro parmetro N1 para a primeira varivel declarada no parmetro da funo,
denominada X. Logo em seguida, o computador copia o valor 20 do segundo parmetro N2 para
a segunda varivel declarada no parmetro da funo, denominada Y. A Figura 152 apresenta o
estado da memria aps copiar os valores de N1 e N2 para X e Y, respectivamente.
Aps compreender o que ocorre na memria do computador quando se passa parmetros
por valor, torna-se fcil explicar este tipo de passagem de parmetros. Define-se passagem de
parmetros por valor quando o computador copia o valor das variveis contidas na chamada de
uma funo ou procedimento para os parmetros declarados na funo. Portanto, as variveis so
distintas, e quando se altera o valor de X e Y dentro da funo ou procedimento, as variveis N1
e N2 no tm seus valores alterados, pois esto alocadas em locais diferentes na memria
1 2 3 4 5 6
1 N1=10
2
3 N2=20
4 X=10
5 Y=20
Figura 152 Memria do Computador Contendo os Parmetros X e Y
O leitor deve aceitar que o computador consegue guardar o nmero 10 na memria e que
para acessar o nmero 10 voc pode chamar a varivel A ou B, veja a Figura 153.
C
A B
1 2 3 4 5 6
1 10
2 30
3
4
5
Figura 153 Variveis Ocupando o Mesmo Espao de Memria
Uma analogia para esta situao imaginar que o apelido de seu irmo Francisco Chico.
Se Chico se formar em engenharia e algum lhe perguntar qual a profisso de Francisco, voc
responder: engenheiro. Logo, se voc cham-lo de Francisco ou Chico, estar referenciando a
mesma pessoa, o que acontece com Chico tambm se aplica a Francisco e vice versa.
N N
1 2
1 2 3 4 5 6
1 10
2
3 20
4
5
Figura 154 Memria do Computador com as Variveis Globais
Quando ocorre a chamada a funo Somar(N1, N2), cujos parmetros foram declarados
com var, ento o computador cria as variveis X e Y, apontando para o mesmo local das
variveis N1 e N2, respectivamente, como mostrado na Figura 155. Portanto, ao referenciar a
varivel X, referencia-se tambm a varivel N1, e quando se referencia a varivel Y referencia-se
tambm a varivel N2, e vice versa.
X N Y
N 2
1
1 2 3 4 5 6
1 10
2
3 20
4
5
Figura 155 Memria do Computador com Passagem de Parmetros Por Referncia
16 RECURSIVIDADE
Um mdulo (Procedimento ou Funo) recursivo aquele que chama a si prprio n vezes
para resolver um problema. A utilizao da tcnica de recursividade em um algoritmo tem por
objetivo diminuir a complexidade do problema, aplicando-se o princpio de dividir para
conquistar.
Para aplicar a recursividade, deve-se dividir o problema sucessivamente em problemas
mais simples, at que a simplicidade do problema permita resolv-lo de forma direta, sem que a
funo ou procedimento tenham de chamar a si mesmos novamente.
4! = 4 . 3!
3! = 3 . 2!
2! = 2 . 1!
1! = 1 . 0!
Na ltima linha acima, basta substituir o 0! por 1, ento tem-se o resultado da conta de 4!.
Assim, tem-se a seguinte definio:
n! = 1 se n =0
n . (n-1)! se n>0
Portanto, para resolver 4! preciso multiplicar 3 por 3!, o que implica em recursividade,
pois para resolver qualquer fatorial de n, preciso calcular outro fatorial at se chegar a 0! que
por definio ser 1. Quando n vale 0, no caso do fatorial, diz-se que o algoritmo atingiu uma
condio de parada, no sendo necessrio calcular outro fatorial, apenas retornar um valor de
definio. Esta condio de parada deve estar presente em pelo menos um local dentro algoritmo
para que ele possa encerrar o clculo e no entrar em loop infinito.
Exemplificando...
Sabe-se que o fatorial de um nmero N (positivo) pode ser obtido multiplicando-o pelo
fatorial de seu predecessor:
Algoritmo teste_recursividade;
declare num: inteiro;
INICIO
escreva (Digite um nmero para obter seu fatorial: );
leia (num);
escreva (Fatorial de ,num, : , FAT(num) );
FIM.
Exemplificando...
Portanto, na Figura 157, observa-se que dentro da condio SE, o procedimento recurso
chamado. Neste caso, a execuo congelada (suspensa) e inicia-se outra execuo do mesmo
procedimento recurso com parmetro "n-1". Como, na nova execuo, h outra chamada ao
procedimento recurso, ento esta nova chamada tambm congelada, e outra execuo se inicia
do prprio procedimento. Somente aps atingir a condio de parada e o procedimento no for
chamado novamente, que as execues anteriormente congeladas continuaro a execuo do
ponto em que pararam.
Exemplificando...
Exemplificando...
10) Escreva uma funo recursiva que imprima na tela todos os nmeros fatoriais de 1 at 20,
utilizando apenas uma funo.
11) Escreva uma funo recursiva que imprima na tela todos os nmeros fatoriais de n1 at
n2, utilizando apenas uma funo. N2 MAIOR OU IGUAL a n1.
17 NDICE DE FIGURAS
Figura 1 - Algoritmo de Euclides para calcular o MDC.................................................................................7
Figura 110 Algoritmo para somar nmero 5 a cada posio de uma matriz [5,10]...............................107
Figura 111 Algoritmo para somar os elementos da linha 2 e multiplicar os elementos da coluna 3....108
Figura 112 Algoritmo para encontrar maior valor da matriz e multiplic-lo pela matriz......................109
18 NDICE DE TABELAS
Tabela 1 - Execuo do algoritmo de Euclides para calcular o MDC dos nmeros 48 e 30..........................8
19 RELAO DE CONES
Indicadores de aes requisitadas durante o estudo
FAA. Determina a existncia de tarefa a ser executada. Este cone indica que h uma
atividade de estudo para ser realizada.
BUSQUE. Indica a exigncia de busca por mais informao, seja ela em anexos do mdulo
impresso, em bibliografia especfica ou em endereos de Internet.
IMPORTANTE. Aponta uma observao significativa. Pode ser encarado como um sinal de
alerta que o orienta para prestar ateno informao indicada.