1
1
Info
rmát
ica
II
Alg
oritm
os e
Pro
gram
ação
Aula 10
Ciência da Computação
Prof. Dr. Leandro Alves Neves
2
A&
P
Sumário
n Estruturas de Controle de Fluxo
q Repetição
n Enquanto (Teste no início)
n Repeat (Teste no final)
n Para (Uso de contador – variável de controle)
n Exemplos em Linguagem: PASCAL
2
3
A&
P
n Algoritmo para calcular a média e indicar aprovação ou reprovação
E se temos 1000 alunos?
Estrutura de Controle: Problema
PROGRAMA media_aprovacao;
VAR n1, n2, n3, media: REAL; INÍCIO
ESCREVA (‘Digite três notas’); LEIA (n1, n2, n3);
MEDIA:= (n1+n2+n3)/3; ESCREVA (‘Média: ’, media); SE (media >= 5 ) ENTÃO ESCREVA (‘Aprovado’); SENÃO ESCREVA (‘Uhhh, não deu’); FIM_SE;
FIM.
4
A&
P
n Solução: Estruturas de Repetição
q Repetir instruções: comportamento padrão
q Instrução escrita uma única vez, mas: n Executada várias vezes (laços de repetições)
Estrutura de Controle: Repetição
3
5
A&
P
Adriano Mauro Cansian 5
Estruturas de repetição no Pascal
n No Pascal, existem três tipos de estrutura de repetição: q Com teste no início (WHILE); q Com teste no final (REPEAT) e q Automática (FOR).
6
A&
P
Adriano Mauro Cansian 6
Estruturas de repetição
n Além de permitir a mudança da sequência de execução de um conjunto de comandos de um programa, as estruturas de controle de uma linguagem, dispõem de recursos para repetir a execução de um conjunto de comandos. q Controle pode ser por:
n Condição
n Contador
4
7
A&
P
n Controle por Condição
q Dependente de uma expressão lógica (condição)
n Interrupção: controlada pelo resultado da expressão
n Portanto, é obrigatório:
q Instrução no bloco de repetição para alterar o valor da expressão lógica.
Estrutura de Controle: Repetição
8
A&
P
n Controle por Condição: ENQUANTO q TESTE NO INÍCIO (Características)
n Verifica ANTES de cada execução se é permitido executar um bloco de instruções do algoritmo.
q Número de repetições: Não conhecido previamente
q Instruções executadas (repetidas) enquanto condição verdadeira
q Condição FALSA: repetição é interrompida
q IMPORTANTE: § Se o primeiro teste fornecer resultado falso, os comandos
não são executados
Estrutura de Controle: Repetição
5
9
A&
P
n Controle por Condição: ENQUANTO
q TESTE NO INÍCIO (Estrutura)
Estrutura de Controle: Repetição
Enquanto (condição) Faça instrução 1; instrução 2; instrução 3; ... instrução n;
Fim_enquanto; instrução n+1; instrução n+2; ...
< Instruções bloco 1>
FALSO
Verdadeiro
< Instruções bloco 2>
Bloco 1
Bloco 2
(Condição)
10
A&
P
Adriano Mauro Cansian 10
Repetição com teste no início (while-do) n A estrutura de controle WHILE permite que um
comando simples ou composto seja executado repetidamente, enquanto uma condição de controle seja VERDADEIRA.
n A forma geral do WHILE é: WHILE <condição verdadeira> DO <comando(s)>
6
11
A&
P
Adriano Mauro Cansian 11
Repetição com teste no início (while-do)
n condição : uma expressão lógica. n comando pode ser um ou mais comandos. n Como o teste da <condição> é realizado no
início do laço, o <comando> será executado zero ou mais vezes, dependendo do resultado da avaliação da <condição>. q Ou seja, while-do avalia a expressão lógica antes da
primeira interação, isto significa que, eventualmente, pode não ocorrer nem a primeira interação.
12
A&
P
Adriano Mauro Cansian 12
Program EXEMPLO_DE_WHILE; {escrever os números inteiros de 1 a 100} Var N : integer; Begin N := 1; while N <= 100 do begin writeln(N); N := N + 1 end End.
Neste exemplo, o comando WRITELN será executado repetidas vezes enquanto a variável N possuir um valor igual ou inferior a 100 . O programa terá como saída a seqüência dos números inteiros de 1 a 100.
7
13
A&
P
Estrutura de Controle: Repetição
PROGRAM media_aprovacao; VAR n1, n2, n3, media: REAL;
num_aluno: INTEGER;
BEGIN
WRITELN ('Digite o número de alunos');
READ (num_aluno);
WHILE (num_aluno > 0) DO BEGIN WRITELN ('Entrada de Notas para o Aluno: ', num_aluno);
WRITELN ('Digite 3 notas: (Aluno num. ) - ', num_aluno);
READLN (n1, n2, n3);
media:= (n1+n2+n3)/3;
WRITELN ('Média: ', media);
IF (media >= 5) THEN WRITELN ('Aprovado')
ELSE
WRITELN ('Uhhh, não deu');
num_aluno:=num_aluno-1;
END; END.
n Controle por Condição: ENQUANTO
q TESTE NO INÍCIO (EXEMPLO 1)
Bloco 1
14
A&
P
Estrutura de Controle: Repetição
PROGRAM media_aprovacao; VAR n1, n2, n3, media: REAL;
resp: STRING;
BEGIN
resp:='s';
WHILE (resp = 's') DO BEGIN WRITELN ('Entrada de Notas para Aluno: ');
WRITELN ('Digite 3 notas: ');
READLN (n1, n2, n3);
media:= (n1+n2+n3)/3;
WRITELN ('Média: ', media);
IF (media >= 5) THEN
WRITELN ('Aprovado') ELSE
WRITELN ('Uhhh, não deu');
WRITELN ('Deseja continuar <s>im ou <n>ão? ');
READLN (resp);
END; END.
n Controle por Condição: ENQUANTO
q TESTE NO INÍCIO (EXEMPLO 2)
Bloco 1
8
15
A&
P
n Controle por Condição: REPITA
q TESTE NO FINAL (Características) n Verifica APÓS execução de um bloco de instruções do
algoritmo.
q Número de repetições: Não conhecido previamente
q Instruções executadas (repetidas) ATÉ condição SER verdadeira
q Condição VERDADE: repetição é interrompida
q IMPORTANTE: § Instruções são executadas pelo menos uma vez.
Estrutura de Controle: Repetição
16
A&
P
n Controle por Condição: REPITA
q TESTE NO FINAL (Estrutura)
Estrutura de Controle: Repetição
Repita instrução 1; instrução 2; instrução 3; ... instrução n;
Até (condição); instrução n+1; instrução n+2; ...
< Instruções bloco 1>
Falso Verdadeiro
< Instruções bloco 2>
Bloco 1
Bloco 2
(Condição)
9
17
A&
P
Adriano Mauro Cansian 17
Repetição com teste no final (repeat-until) (1)
n REPEAT-UNTIL permite que um ou mais comandos sejam executados repetidamente, até que uma condição de controle seja FALSA.
n A forma geral do REPEAT-UNTIL é:
REPEAT <comando(s)...> UNTIL <condição>
18
A&
P
Adriano Mauro Cansian 18
Repetição com teste no final (repeat-until) (2)
Repeat Comando_1; Comando_2; Comando_3; . . . Until (expressão_lógica);
10
19
A&
P
Adriano Mauro Cansian 19
Repetição com teste no final (repeat-until) (3)
n condição: uma expressão lógica. n comando pode ser um ou mais comandos. n Não há a necessidade dos delimitadores
BEGIN e END no comando composto em um REPEAT.
20
A&
P
Adriano Mauro Cansian 20
Repetição com teste no final (repeat-until) (4)
n Como o teste da <condição> é realizado no final do laço, o <comando> será executado uma ou mais vezes, dependendo da avaliação da <condição>. q Todos os comandos entre as palavras reservadas
Repeat e Until serão executadas, até que a expressão lógica seja verdadeira (TRUE).
q Obviamente, devemos ter o cuidado para que ela venha a ser TRUE em determinado momento, pois caso contrário, teremos um loop infinito, ou seja, o programa fica preso para sempre dentro da estrutura Repeat - Until, e não sai de lá.
11
21
A&
P
Adriano Mauro Cansian 21
Program EXEMPLO_DE_REPEAT; {escrever os núm. inteiros de 1 a 100} Var N : Integer; Begin N := 1; repeat writeln(N); N := N + 1 until N > 100 End.
Este exemplo é equivalente ao exemplo anterior do WHILE, onde o comando WRITELN será executado repetidas vezes até que a variável N possua um valor superior a 100.
22
A&
P
Estrutura de Controle: Repetição
PROGRAM media_aprovacao; VAR n1, n2, n3, media: REAL;
num_aluno: INTEGER;
BEGIN
WRITELN ('Digite o número de alunos');
READ (num_aluno);
REPEAT WRITELN ('Entrada de Notas para o Aluno: ', num_aluno);
WRITELN ('Digite 3 notas: (Aluno num. ) - ', num_aluno); READLN (n1, n2, n3); media:= (n1+n2+n3)/3; WRITELN ('Média: ', media); IF (media >= 5) THEN WRITELN ('Aprovado') ELSE WRITELN ('Uhhh, não deu');
num_aluno:=num_aluno-1; UNTIL (num_aluno <= 0);
END.
n Controle por Condição: REPITA
q TESTE NO FINAL (EXEMPLO 1)
Bloco 1
12
23
A&
P
Estrutura de Controle: Repetição
PROGRAM media_aprovacao; VAR n1, n2, n3, media: REAL;
resp: STRING;
BEGIN
REPEAT WRITELN ('Entrada de Notas para Aluno');
WRITELN ('Digite 3 notas: (Aluno num. )'); READLN (n1, n2, n3); media:= (n1+n2+n3)/3; WRITELN ('Média: ', media); IF (media >= 5) THEN WRITELN ('Aprovado') ELSE WRITELN ('Uhhh, não deu');
WRITELN ('Deseja continuar <s>im ou <n>ão? '); READLN (resp); UNTIL (resp = 'n');
END.
n Controle por Condição: REPITA
q TESTE NO FINAL (EXEMPLO 2)
Bloco 1
24
A&
P
n Controle por Condição: “PARA”
q VARIÁVEL DE CONTROLE (Características) n Número de repetições: conhecido previamente
q Instruções executadas (repetidas) até número (limite) definido
q Número definido ou LIMITE: controlado por um contador
§ Pode ser armazenado em uma variável
q LINGUAGEM PASCAL: Estrutura “PARA” incrementa ou decrementa de 1 em 1.
Estrutura de Controle: Repetição
13
25
A&
P
n Controle por Condição: PARA
q VARIÁVEL DE CONTROLE (Estrutura)
Estrutura de Controle: Repetição
Para variável:= <valor inicial> Até <valor final> Faça instrução 1; instrução 2; instrução 3; ... instrução n;
Fim_para; instrução n+1; instrução n+2; ...
Bloco 1
Bloco 2
< Instruções bloco 1>
Falso
Verdadeiro
< Instruções bloco 2>
variável:= <valor inicial>, <valor final>
26
A&
P
Adriano Mauro Cansian 26
Repetição automática FOR (1)
n A estrutura de controle FOR permite que um comando simples ou composto seja repetido um número específico de vezes.
n A sua forma geral é:
FOR <var> := <vi> TO <vf> DO <comando(s)>
14
27
A&
P
Adriano Mauro Cansian 27
Repetição automática FOR (2)
n Onde <var> é uma variável de controle, do tipo inteira, que assumirá inicialmente o valor inicial <vi> e será incrementada (somada) do valor 1 após cada repetição do laço.
n A repetição será finalizada quando o conteúdo de <var> for superior ao valor final <vf>.
n O <comando> também pode ser simples ou composto.
28
A&
P
Adriano Mauro Cansian 28
Repetição automática FOR (3)
n A estrutura de repetição FOR é especialmente indicada para quando o número de repetições é previamente conhecido.
n Caso contrário, devemos utilizar o WHILE ou o REPEAT, dependendo do caso.
15
29
A&
P
Adriano Mauro Cansian 29
EXEMPLO: Program EXEMPLO_DE_FOR; {escreve os números inteiros de 1 a 100} Var N : integer; Begin for N := 1 to 100 do writeln(N) End.
Observe, no exemplo acima, que não foi necessário utilizar um comando para atribuir um valor inicial a variável N, nem também um outro comando para incrementá-la com o valor 1. Isto é feito automaticamente pela estrutura FOR.
30
A&
P
Estrutura de Controle: Repetição
PROGRAM media_aprovacao; USES CRT; VAR n1, n2, n3, media: REAL;
num_aluno, i: INTEGER; BEGIN
WRITELN ('Digite o número de alunos');
READ (num_aluno);
FOR i:=1 TO num_aluno DO BEGIN CLRSCR; WRITELN ('Entrada de Notas para o Aluno: ', i);
WRITELN ('Digite 3 notas: (Aluno num. ) - ', i); READLN (n1, n2, n3);
media:= (n1+n2+n3)/3;
WRITELN ('Média: ', media);
IF (media >= 5) THEN WRITELN ('Aprovado')
ELSE
WRITELN ('Uhhh, não deu');
READLN; END;
END.
n Controle por Condição: PARA
q Contador (EXEMPLO 1)
Bloco 1
16
31
A&
P
Estrutura de Controle: Repetição
n Exemplo usando: FOR
q Valor inicial <= valor final
n Resultado: incrementos de 1 em 1 (PASCAL)
q Mas, e se valor inicial >= valor final?
n Nesse caso, incrementos de -1 em -1 (PASCAL)
32
A&
P
Adriano Mauro Cansian 32
For-downto
n Uma outra forma da estrutura FOR é a seguinte:
FOR <var> := <vi> DOWNTO <vf> DO <comando>
n Neste caso, a variável de controle <var> será decrementada (subtraída) do valor 1 após cada repetição do laço e a repetição será finalizada quando o conteúdo de <var> for inferior ao valor final <vf>.
17
33
A&
P
Adriano Mauro Cansian 33
Program Exemplo_2; Uses CRT; Var i : Integer; Begin ClrScr; For i:=10 downto 1 do Writeln(i); End.
34
A&
P
Estrutura de Controle: Repetição
PROGRAM media_aprovacao; USES CRT; VAR n1, n2, n3, media: REAL;
num_aluno, i: INTEGER; BEGIN
WRITELN ('Digite o número de alunos');
READ (num_aluno);
FOR i:=num_aluno DOWNTO 1 DO BEGIN CLRSCR; WRITELN ('Entrada de Notas para o Aluno: ', i);
WRITELN ('Digite 3 notas: (Aluno num. ) - ', i); READLN (n1, n2, n3);
media:= (n1+n2+n3)/3;
WRITELN ('Média: ', media);
IF (media >= 5) THEN WRITELN ('Aprovado')
ELSE
WRITELN ('Uhhh, não deu');
READLN; END;
END.
n Controle por Condição: PARA
q Contador (EXEMPLO 2)
Bloco 1
18
35
A&
P
• Até aqui vimos o seguinte:
n Estruturas de Controle de Fluxo:
q REPETIÇÃO n Teste no Início (ENQUANTO) n Teste no Final (REPITA) n Controlado por contador (PARA)
n Próximo Conteúdo: q Vetor