ciência da computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · adriano mauro...

18
1 1 Informática II Algoritmos e Programação Aula 10 Ciência da Computação Prof. Dr. Leandro Alves Neves 2 A&P Sumário Estruturas de Controle de Fluxo Repetição Enquanto (Teste no início) Repeat (Teste no final) Para (Uso de contador – variável de controle) Exemplos em Linguagem: PASCAL

Upload: others

Post on 23-Jul-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 2: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 3: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressã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

Page 4: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 5: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressã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)>

Page 6: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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.

Page 7: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 8: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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)

Page 9: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressã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);

Page 10: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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á.

Page 11: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 12: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 13: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressã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)>

Page 14: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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.

Page 15: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 16: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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>.

Page 17: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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

Page 18: Ciência da Computaçãoangel.acmesecurity.org/~adriano/aulas/lc/2013/6-e... · Adriano Mauro Cansian 11 Repetição com teste no início (while-do) ! condição : uma expressão

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