Métodos de Programação I
Departamento de Matemática, FCTUC
43
2005/06
Ciclo com Contador : instrução for
for
identificador
de variável
:=
downto
to
expressão
expressão
do
instrução
UMA INSTRUÇÃO (SIMPLES OU COMPOSTA)
Neste caso o ciclo é repetido um número fixo de vezes, o que não acontecia com as estruturas anteriores.
Naquelas, o número de repetições dependia da avaliação da cabeça do ciclo e, por isso, será, em princípio,
desconhecido (o que pode ser muito útil). Mas, por vezes, queremos repetir exactamente N vezes as
instruções, independentemente de qualquer outro factor, temos, para esse efeito, o ciclo for. Esta estrutura
usa um contador do número de repetições com duas variantes:
- incremento sucessivo de uma unidade
- decremento
“
“
“
“
A implementação da operação factorial (factorial de n, sendo n um número natural: n!) é um bom
exemplo destas duas variantes:
n! = 1x 2 x 3 x 4. … (n-1) n
incrementa uma unidade
factorial := 1;
for i := 1 to n do factorial := factorial * 1;
n! = n (n-1) … 4 x 3 x 2 x 1
decrementa uma unidade
factorial := 1;
for i := n downto 1 do factorial := factorial * 1;
De notar que, o identificador de variável (contador) e as expressões têm que ser do mesmo tipo: literais
não reais.
Outros Exemplos:
1. Vamos implementar um programa que calcule o valor uma soma com k (dado) termos da
seguinte série infinita de termos (Série Harmónica):
1 + 1/2+ 1/3 + 1/4+ 1/5 + . . . + 1/k
Métodos de Programação I
Departamento de Matemática, FCTUC
2005/06
Estratégia:
Cada número, Hk, é obtido somando ao número anterior, Hk-1, a quantidade 1/k.
Assim, basta usar um ciclo para implementar a fórmula iterativa:
soma ← soma + 1/i
para i a variar de 1 até k (dado).
Descrição do algoritmo:
ler k
soma ← 0
inicialização
para n a variar de 1 até k
cabeça do ciclo
soma ← soma + 1/n
corpo do ciclo
Implementação:
program harmonica (input, output);
var kfinal, n : 1 .. maxint;
soma : real;
begin
read( kfinal );
soma := 0;
for n := 1 to kfinal do soma := soma + 1/n ;
writeln (‘ Soma de ‘, k:3, ‘ termos = ‘, soma)
end.
Figura 2.10: programa para somar termos da série harmónica
2. Programa para construir pirâmides de números.
Por exemplo, para n=5, o efeito deverá ser:
1
121
12321
1234321
123454321
Vamos supôr que cada linha do monitor pode representar 120 caracteres. Então temos,
44
Métodos de Programação I
Departamento de Matemática, FCTUC
45
2005/06
Descrição do algoritmo:
ler n
para cada linha i de 1 até n
escrever (60 - i) vezes espaço em branco
para k de 1 até i
escrever k
para k de (i - 1) até 1
escrever k
mudar de linha
Implementação:
program piramide (input, output);
varn, i, k : 1 .. maxint;
begin
read( n );
for i := 1 to n do
(* para cada linha *)
begin
for k := 1 to 60 - i do write(‘ ‘);
for k := 1 to i do write(k:1);
for k := i -1 downto 1 do write(k:1);
writeln
(* muda de linha *)
end;
end.
Figura 2.11: programa para construir uma pirâmide de números
NOTA: for k := 1 to 60 - i do write(‘ ‘) é equivalente a
write( ‘ ‘ :60-i)
3. Procurar o máximo e o mínimo de uma sequência de N inteiros (não necessariamente ordenados)
Estratégia: Dado N,


o primeiro número lido é o máximo e o mínimo até este momento;
para um novo número lido,:
 se for menor que o anterior mínimo, actualizar valor de mínimo
 se for maior que o anterior máximo, actualizar valor de máximo.
Métodos de Programação I
Departamento de Matemática, FCTUC
46
2005/06
Descrição do algoritmo:
ler n
ler número
máximo ←
mínimo ←
número
número
o primeiro número é,
simultaneamente, o
máximo e o mínimo
para k de 1 a (n-1)
ler número
se
número > máximo
máximo ←
número
se
número < mínimo
mínimo ←
número
escrever máximo e mínimo
Implementação:
program max_min (input, output);
var n, k : 1 .. maxint;
numero, maximo, minimo : real;
begin
write( ‘Quantos numeros tem a sequencia? ‘ );
readln( n );
writeln( ‘Escreva os numeros separados por um espaco.’);
read( maximo ); (* o primeiro numero e’maximo e minimo *)
minimo := maximo;
for k := 1 to n-1 do
(* ler e testar os proximos numeros *)
begin
read(numero);
if numero > maximo
then maximo := numero;
if numero < minimo
then minimo := numero;
end;
writeln( ‘Maximo = ‘, maximo:2, ‘ Minimo = ‘, minimo:2);
end.
Figura 2.12: programa para encontrar o máximo e o mínimo de uma série de números
Download

Páginas 43-46 ()