Vous êtes sur la page 1sur 11

Notas de Aula de o de Computadores Algoritmos e Programac a

F L AVIO K EIDI M IYAZAWA com a colaborac a o de T OMASZ KOWALTOWSKI

Instituto de Computac a o - UNICAMP

Vers ao 2000.1

Estas notas de aula n ao devem ser usadas como u nica fonte de estudo. O aluno deve ler outros livros dispon veis na literatura. Nenhuma parte destas notas pode ser reproduzida, qualquer que seja a forma ou o meio, sem a permiss ao dos autores. Os autores concedem a permiss ao expl cita para a utilizac a o e reproduc a o deste material no contexto do ensino de disciplinas regulares dos cursos de graduac a o sob a responsabilidade do Instituto de Computac a o da UNICAMP.

c Copyright 2000

Instituto de Computac a o UNICAMP Caixa Postal 6176 13083970 CampinasSP fkm,tomasz @ic.unicamp.br

ii

o 4 Estruturas de Repetic a
A estrutura de repetic a o permite que um comando (ou bloco de comandos) seja executado repetidamente at e que uma determinada condic a o de interrupc a o seja satisfeita.

4.1 Comando For


O comando For permite que um comando ou bloco de comandos seja repetido um n umero espec co de vezes. Neste comando uma vari avel de controle e incrementada ou decrementada de um valor inicial em cada interac a o at e um valor nal. A sintaxe do comando for que incrementa a vari avel de controle e dada como: for vari avel de controle := express ao 1 to express ao 2 do Comando ou bloco de comandos; Para a forma que decrementa a vari avel de controle, temos a seguinte sintaxe: for vari avel de controle := express ao 1 downto express ao 2 do Comando ou bloco de comandos; Na gura 15 apresentamos o uxograma de uma das formas do comando for.

VC:=VI; Condio
VC>VF

true

For VC := VI to VF do Comando ou Bloco de Comandos

false Comando ou Bloco de Comandos

VC := VC + 1; {OBS:} {VC = Varivel de Controle} {VI = Valor Inicial} {VF = Valor Final}

Figura 15: Fluxograma e sintaxe de uma forma do comando for.

Exemplo 4.1 Fac a um programa para calcular o fatorial de um determinado n umero program fat; var n,i,fatorial :integer; begin write(Entre com um n umero: ); readln(n); fatorial : 1; for i: 2 to n do fatorial: fatorial i; writeln(O fatorial de ,n, e igual a ,fatorial); end.

lido.

30

Exemplo 4.2 Fac a um programa que l e um valor inteiro positivo O programa deve imprimir o maior valor real da seq ue ncia. program Maximo; var n,i : integer; x : real; maximo : real; begin ReadLn(n); Sup oe todos os dados n ao negativos. maximo : 0.0 for i: 1 to n do begin ReadLn(x); if x maximo then maximo : x end; WriteLn(maximo) end.

e em seguida l e uma seq ue ncia de

valores reais.

Exemplo 4.3 (Tabuada) Fac a um programa que imprima uma tabela, com 9 linhas e 9 colunas. Na intersec a o da a linha com a coluna deve conter um valor que e a multiplicac o do com . Isto e , o programa deve imprimir uma tabela da seguinte forma:

1 2 3 4 5 6 7 8 9 program ProgramaTabuada; var i,j : integer; begin for i: 1 to 9 do begin for j: 1 to 9 do write(i j:3); writeln; end; end.

2 4 6 8 10 12 14 16 18

3 6 9 12 15 18 21 24 27

4 8 12 16 20 24 28 32 36

5 10 15 20 25 30 35 40 45

6 12 18 24 30 36 42 48 54

7 14 21 28 35 42 49 56 63

8 16 24 32 40 48 56 64 72

9 18 27 36 45 54 63 72 81

Exerc cio 4.1 (Tabela de pot encias) Fac a um programa que l e dois inteiros positivos tamanho onde a posic a da tabela cont em o n umero . o





" "$#
1 2 3 4 5 6 1 4 9 16 25 36

"&%
1 8 27 64 125 216

"$'

e imprime uma tabela de

"$(
1 32 243 1024 3125 7776

1 16 81 256 625 1296

31

Exemplo 4.4 (Tri angulo de Floyd) O seguinte tri angulo formado por linhas de n umeros consecutivos, cada linha contendo um n umero a mais que na linha anterior, e angulo de Floyd. chamado de Tri 1 2 4 7 11 16

3 5 8 12 17

6 9 13 18

10 14 19

15 20

21

Fac a um programa que imprime o Tri angulo de Floyd com program Floyd; ndice da linha var i : integer; ndice da coluna j : integer; k : integer; pr oximo n umero m : integer; n umero de linhas begin ReadLn(m); k : 0; for i: 1 to m do begin for j: 1 to i do begin k : k 1; Write(k:3) end; WriteLn end end.

linhas (o valor de

e lido).

Exerc cio 4.2 Fac a um programa que l e um inteiro positivo seguinte formato. 6 5 4 3 2 1 No caso a tabela foi impressa com valor de 5 4 3 2 1 4 3 2 1

3 2 1

e imprime um tri angulo constitu do por n umeros com o

2 1

igual a 6.

32

4.2 Comando While


O comando while e uma estrutura de repetic a o onde a condic a o de interrupc a o e testada antes de se executar os comandos a serem repetidos. Na gura 16, apresentamos o uxograma e a sintaxe do comando While.

Condio C true

false

While (C) do Comando ou Bloco de Comandos

Comando ou Bloco de Comandos

Figura 16: Fluxograma e sintaxe da rotina While.

Exemplo 4.5 (Validac a umero o de entrada) Em determinado momento, um programa deve ler a partir do teclado um n . Fac a um programa que que lendo n umeros do teclado e pare que deve estar necessariamente no intervalo quando o usu ario entrar com o primeiro n umero entre .

1325468794A@

1325468794A@

program Validacao; var n:integer; begin write(Entre com um n umero no intervalo [10,50]: ); readln(n); while ((n 10) or (n 50)) do begin writeln(ERRO: N umero inv alido. ); write(Entre com um n umero no intervalo [10,50]: ); readln(n); end; writeln(O n umero positivo lido foi: ,n); end.

Exemplo 4.6 (Seq ue umeros positivos) Fac a um programa que l e uma seq ue umeros positivos (pode ncia de n ncia de n ser vazia) e seguida pela leitura de um n umero negativo. O programa deve parar de ler n umeros quando o usu ario entrar com o n umero negativo. O programa deve imprimir a soma, m edia e quantidade dos n umeros n ao negativos. program SequenciaPositivos; var x,soma : real; nelementos : integer; begin write(Entre com um n umero: ); readln(x); soma : 0; nelementos : 0; while (x 0) do begin soma : soma x; nelementos : nelementos 1; write(Entre com um n umero: ); readln(x); end; if (nelementos 0) then begin writeln(A soma dos elementos e: ,soma); writeln(A media dos elementos e: ,soma/nelementos); writeln(A quantidade de elementos e: ,nelementos); end else writeln(N ao foi lido nenhum elemento positivo. ); end.

33

Exemplo 4.7 Fac a um programa que leia uma quantidade , (vamos supor que ao deve imprimir a m edia das idades lidas. ler idades inteiras e ent

DE4 ) e em seguida o programa deve

program MediaIdades; var x,soma,lidos,n : integer; begin write(Entre com a quantidade de idades a ler: ); readln(n); lidos: 0; soma : 0; while (lidos n) do begin write(Entre com uma idade: ); readln(x); soma : soma x; lidos : lidos 1; end; if (lidos 0) then writeln(A m edia das idades e ,soma/lidos) else writeln(N ao foi lido nenhuma idade. ); end.

Exemplo 4.8 O c alculo da raiz quadrada de um n umero positivo

pode ser aproximado usando se a seguinte s erie: d # G2H0PIQ0R7Q0TS5S5S90UWVXSYa`E2bc fhe gpi WVqSbr`E2b

Se e ao podemos calcular a raiz usando-se o seguinte c odigo: um quadrado perfeito, ent ... readln(n); soma : 0; i : 1; raiz : 0; while soma n do begin soma : soma i; i : i 2; raiz : raiz 1 end; writeln(raiz); ...

Bs 0

Caso n ao seja um quadrado perfeito podemos obter uma aproximac a o considerando a parte inteira da raiz. Seja t v t t # y # uWw &x . Ent B 02b Fazendo duas modicac o ao es no trecho acima: ... readln(n); soma : 0; i : 1; raiz : while soma n do begin soma : soma i; i : i 2; raiz : raiz 1; end; raiz : raiz 1; writeln(raiz); ...

B 0

0; BC s

BCssT

Note que a atribuic a a o raiz:=raiz-1; foi feita para voltar o valor da raiz de uma unidade, uma vez que a condic o de parada do comando while e n; . Uma vers ao que atualiza a vari avel soma com atraso e soma apresentada a

34

seguir: ... readln(n); soma : 0; i : 1; raiz : while soma n do begin soma : soma i; i : i 2; raiz : raiz 1; end; writeln(raiz); ...

B 0

1; atraso na soma

Exerc cio 4.3 Fac a um programa para calcular a raiz aproximada, como no exemplo 4.8, mas usando o comando repeat em vez do comando while. Exerc cio 4.4 Para calcular a raiz quadrada de com uma casa decimal basta calcular a raiz de exemplo 4.8, e dividir o resultado por 10. Fac a um programa que calcula a raiz de um valor do exemplo 4.8, com casas decimais, ( e s ao lidos).

2 44rS9 como no 5 PD4 pelo m etodo

4.3 Comando Repeat


O comando repeat e uma estrutura de repetic a o onde a condic a o de interrupc a o da estrutura de repetic a o e testada no m do bloco de repetic a o. Note que neste comando n ao e preciso usar begin e end para especicar os v arios comandos a serem repetidos. Na gura 17, apresentamos o uxograma e a sintaxe do comando Repeat.

Comando1 Comando2

Repeat Comando1 Comando2

Comandok false Comandok Until (C);

C true

Condio

Figura 17: Fluxograma e sintaxe do comando Repeat.

35

Exemplo 4.9 (Validac a umero o de entrada) Em determinado momento, um programa deve ler a partir do teclado um n . Fac a um programa que que lendo n umeros do teclado e pare que deve estar necessariamente no intervalo quando o usu ario entrar com o primeiro n umero entre .

1325468794A@

program Validacao; var n:integer; begin repeat write(Entre com um n umero no intervalo [10,50]: ); readln(n); if ((n 10) or (n 50)) then writeln(ERRO: N umero inv alido. ); 10) and (n 50); until (n writeln(O n umero positivo lido foi: ,n); end.

1325468794A@

BC

Exemplo 4.10 A seguir apresentamos a implementac a o do Algoritmo de Euclides usando o comando repeat. program Euclides; var x,y,r,m,n : integer; begin Readln(m,n); x : m; y : n; repeat r : x mod y; x : y; y : r until r 0; Writeln(x) end.

Exemplo 4.11 (Seq ue umeros positivos) Fac a um programa para ler uma seq ue umeros positivos ncia de n ncia de n (pode ser vazia) e seguido pela leitura de um n umero negativo. O programa deve parar de ler n umeros quando o usu ario entrar com o n umero negativo. O programa deve imprimir a soma, m edia e quantidade dos n umeros n ao negativos. program SequenciaPositivos2; var x,soma : real; nelementos : integer; begin soma : 0; nelementos : 0; repeat write(Entre com um n umero: ); readln(x); if (x 0) then begin soma : soma x; nelementos : nelementos 1; end; until (x 0); if (nelementos 0) then begin writeln(A soma dos elementos e: ,soma); writeln(A media dos elementos e: ,soma/nelementos); writeln(A quantidade de elementos e: ,nelementos); end else writeln(N ao foi lido nenhum elemento positivo. ); end.

C B

36

Exemplo 4.12 A raiz quadrada de um n umero positivo s ao tais que sucessivas de Newton. As aproximac o es

etodo de aproximac o pode ser calculada pelo m es i  # 555 !aedsfgsh w i , onde kmlhn  se oG29 j x h l n j p #ljqerljsutwqzvy caso contr ario # r{s 

Fac a um programa que calcula a raiz de um n umero calculando o valor da raiz pelo m etodo de aproximac o es sucessivas de Newton parando as interac o a entre o valor calculado em uma interac a es quando a diferenc o com o valor . calculado na interac a o anterior seja menor que

464444|2

program raizquadrada; var i : integer; n,raiz,raizanterior : real; begin write(Entre com um n umero: ); readln(n); raiz : n/2; repeat raizanterior : raiz; raiz : (raiz raiz n)/(2 raiz); until (abs(raiz raizanterior) 0.000001); writeln(A raiz de ,n:20:10, e ,raiz:20:10); end.

Exemplo 4.13 Fac a um programa que escreve individualmente os d gitos de um n umero inteiro positivo da direita para a esquerda. program Digitos1; var n,d : Integer; begin write(Entre com um n umero inteiro positivo: ); Readln(n); repeat d : n mod 10; n : n div 10; Write(d:2) until n 0; writeln; end.

Exerc cio 4.5 Fac a um programa que escreve individualmente os d gitos de um n umero inteiro positivo da esquerda para a direita. Exemplo 4.14 O valor pode ser calculado atrav es da s erie . Cada termo desta s erie tem um formato , . A medida que cresce, o termo vai se tornando cada vez menor, e sua contribuic a a um programa que calcula o valor de atrav es da s erie acima, o para o valor de se torna menor. Fac somando termo a termo, parando quando a diferenc a absoluta entre o valor de calculado em uma interac a o e o valor de calculado na interac a . o anterior for menor que

} ' x f ji G298V555 `sy S # }

}~ 'i ` '% 0 '( ` ' 0 ' P ` S5S5S } } 46444|2

37

program pi; var pi,piant,termo,sinal : real ; i : integer; begin pi : 0; i : 1; sinal : 1; termo : 4; repeat piant : pi; pi : pi termo; i : i 2; termo : sinal 4/i; sinal : sinal ( 1); until abs(pi piant) 0.00001; writeln(pi = ,pi); end.

` 0 0

Exerc cio 4.6 Um programa deve ler um inteiro positivo e em seguida ler mais valores reais sendo que o programa deve imprimir a soma, a m edia, o menor valor e o maior valor dos valores reais lidos. Fac a tr es vers oes deste programa, usando os comandos while, repeat e for.

4.4 Exerc cios


1. Fac a um programa que descubra um n umero entre e imaginado pelo usu ario. O programa deve fazer interac o es com o usu ario. A cada interac a o, o programa deve tomar um n umero e perguntar para o usu ario se este n umero e igual, menor ou maior do que o valor imaginado. O usu ario deve responder de forma correta. A execuc a o do programa deve terminar assim que o programa adivinharo valor imaginado pelo usu ario. O programa deve imprimir o n umero imaginado e o n umero de perguntas feitas pelo programa. Seu programa n ao pode fazer mais que 10 perguntas. 2. Fac a um programa que leia uma seq ue ncia de n umeros inteiros positivos e termine com um n umero negativo (este u ltimo n ao deve ser considerado, serve apenas para nalizar a seq ue ncia). O programa deve vericar se os n umeros positivos: (a) Est ao em ordem crescente. (b) Est ao em ordem decrescente. (c) Se a seq ue ncia e uma progress ao aritm etica, neste caso dizer a raz ao. (d) Se a seq ue ncia e uma progress ao geom etrica, neste caso dizer a raz ao. 3. O desvio padr ao dp e a vari ancia var dos n umeros

4 25444

d d # e e 2 2 # " " i 555Y d  `E2 gpi ` gpi "  i 555Y " d  Y " i 555Y " d y # Fac a um programa que l e o valor e a seq ue ncia dos n umeros reais e depois imprime a m edia, o desvio padr ao e a vari ancia dos n umeros lidos. 4. Um banco faz empr estimos com uma taxa de juros mensal igual a , 4BP y 2 . Fac a um programa que imprime quanto uma pessoa que toma emprestado reais car a devendo ap os meses. Os valores de , e s ao lidos. 5 " t  "
38

" i 555 " d

podem ser calculados usando as seguintes f ormulas

Vous aimerez peut-être aussi