Estruturas de repetio em Pascal Prof Luis Otavio

  • Slides: 38
Download presentation
Estruturas de repetição em Pascal Prof. Luis Otavio Alvares INE/UFSC 1

Estruturas de repetição em Pascal Prof. Luis Otavio Alvares INE/UFSC 1

Lógica de programação • ESTRUTURAS DE REPETIÇÃO • para. . . até. . .

Lógica de programação • ESTRUTURAS DE REPETIÇÃO • para. . . até. . . faça. . • enquanto. . . faça. . • repita. . . até. . . 2

Exemplo Para • Ler 50 números fornecidos pelo usuário e calcular e exibir a

Exemplo Para • Ler 50 números fornecidos pelo usuário e calcular e exibir a média. Pseudocódigo: 1. Início 2. Soma = 0 <<< o acumulador precisa ter um valor inicial 3. Para cont =1 até 50 faça 3. 1 ler num 3. 2 soma = soma + num 4. Media = soma / cont 5. Mostrar media 6. Fim 3

E se eu quisesse calcular a média de N números? Lógica de programação –

E se eu quisesse calcular a média de N números? Lógica de programação – Para esse problema construímos um algoritmo que será genérico, ou seja, que poderá ser usado para calcular a média de quantos números se quiser! – Pseudocódigo: 1 - Início 2 - Mostrar “De quantos valores você quer calcular a média? ” 3 - Ler QUANT (aqui se descobre quantas repetições) 4 - SOMA = 0 5 - Para CONT = 1 até QUANT faça 5. 1 Ler N (aqui é lido cada número, um em cada ciclo) 5. 2 SOMA = SOMA + N (aqui os valores lidos são acumulados) 6 - MEDIA = SOMA / QUANT (isto está fora do loop) 7 - Mostrar MEDIA 8 - Fim 4

Estruturas de repetição em Pascal 5

Estruturas de repetição em Pascal 5

Estrutura de repetição: comando for • Comando for <variável de controle> : = <valor

Estrutura de repetição: comando for • Comando for <variável de controle> : = <valor inicial> to do <comando>; <valor limite> for <variável de controle> : = <valor inicial> downto <valor limite> do <comando>; Um só comando to downto incrementa decrementa +1 -1 6

7

7

Comando for <variável de controle> : = <valor inicial> to/downto <valor limite> do <comando>;

Comando for <variável de controle> : = <valor inicial> to/downto <valor limite> do <comando>; for <variável de controle> : = <valor inicial> to/downto <valor limite> do begin <comando 1>; . . . . <comando n>; end; O(s) comando(s) será(o) executado(s) até o valor limite (inclusive) O incremento ou decremento é executado automaticamente após a execução do(s) comando(s) 8

Exemplo Program teste. For; var I, K: integer; begin K: = 5; for I

Exemplo Program teste. For; var I, K: integer; begin K: = 5; for I : = K+1 to K+3 do writeln ('I= ', I); readln; end. Saída I= 6 I= 7 I= 8 9

for <variável de controle> : = <valor inicial> to <valor limite> do <comando> valor

for <variável de controle> : = <valor inicial> to <valor limite> do <comando> valor inicial valor limite expressões • avaliadas somente uma vez, na entrada do comando • resultado deve ser do mesmo tipo da variável de controle • integer ou char • pode ser utilizada no comando • pode ser alterada no comando (mas não é recomendável) 10

Exemplo Program teste. For; var I, K: integer; begin k: =8; for I :

Exemplo Program teste. For; var I, K: integer; begin k: =8; for I : = 5 to K do begin k: =7; writeln('I= ', I , ' end; readln; end. Saída: K= ', k ); I= 5 I= 6 I= 7 I= 8 K= 7 11

Exemplo Program Letras; var Letra: char; begin for Letra : = 'a' to 'z'

Exemplo Program Letras; var Letra: char; begin for Letra : = 'a' to 'z' do write (Letra, ' '); writeln ('Fim'); readln; end. Saída: a b c d e f g h i j k l m n o p q r s t u v w x y z Fim 12

Exercício Escrever um programa que lê 5 valores, e conta quantos destes valores são

Exercício Escrever um programa que lê 5 valores, e conta quantos destes valores são negativos, escrevendo esta informação. program conta_negativos; var numero, cont, neg: integer; Begin Neg: =0; for cont: =1 to 5 do begin write('Digite um numero inteiro: '); readln (numero); if numero<0 then neg: =neg+1; end; writeln ('O numero de valores negativos eh ', neg); readln; end. 13

Cuidado!!! • Se o valor da variável de controle do comando for alterado explicitamente

Cuidado!!! • Se o valor da variável de controle do comando for alterado explicitamente dentro do bloco de repetição … • Exemplo: saída: program teste_for; var I: integer; begin for I: =1 to 10 do begin writeln('I= ', I); if I=5 then I: =8; end; readln; end. I= I= 1 2 3 4 5 9 10 14

Lembre-se!!! Qual o valor da variável de controle do for após a execução do

Lembre-se!!! Qual o valor da variável de controle do for após a execução do comando for? Exemplo: saída: program teste 2_for; var I: integer; begin for I: =1 to 10 do writeln('I= ', I); writeln('Valor de I apos o for: ', I); readln; end. I= 1 I= 2 I= 3 I= 4 I= 5 I= 6 I= 7 I= 8 I= 9 I= 10 Valor de I apos o for: 10 15

Só use quando estritamente necessário: E para forçar o término da repetição? Use um

Só use quando estritamente necessário: E para forçar o término da repetição? Use um break. Exemplo : program teste 3_for; var I: integer; begin for I: =1 to 10 do begin writeln('I= ', I); if i=5 then break; end; writeln('Valor de I apos o for: ', I); readln; end. saída: I= 1 I= 2 I= 3 I= 4 I= 5 Valor de I apos o for: 5 Atenção para o valor de saída da variável de controle 16

Cuidado!! • Faça sempre um teste de mesa com os valores inicial e final

Cuidado!! • Faça sempre um teste de mesa com os valores inicial e final do loop do comando for, pois a maioria dos erros são na primeira ou na última execução do laço. • Erros comuns: – Executar o laço (repetição) uma vez a mais ou a menos que o desejado – Atribuir o valor inicial de alguma variável dentro do laço, quando deveria ser fora – Não atribuir o valor inicial de uma variável (principalmente em for s aninhados) 17

Comando de repetição para número fixo de repetições • número conhecido For I :

Comando de repetição para número fixo de repetições • número conhecido For I : = -10 to 10 do Writeln(I); • número desconhecido Readln ( N ); For I : = 1 to N Do begin readln ( Nome ); Writeln ( Nome ); end; 18

Exercício • Faça um programa para calcular e escrever o valor de S: var

Exercício • Faça um programa para calcular e escrever o valor de S: var I: integer; S: real; Begin S: =0; for I: =1 to 50 do S: =S+(I*2 -1)/I; writeln(S: 1: 6); readln; end. 19

exercício • Escreva um programa Pascal para informar o fatorial de um número lido.

exercício • Escreva um programa Pascal para informar o fatorial de um número lido. 20

Exemplo de solução: fatorial Program Fatorial; var num, Fat, I : integer; begin write('informe

Exemplo de solução: fatorial Program Fatorial; var num, Fat, I : integer; begin write('informe um numero positivo: '); readln(num); if num <=0 then writeln('o numero deve ser positivo') else begin Fat : = 1; for I: = 2 to num do Fat : = Fat * I; writeln ( 'Fatorial de ', num, ' = ' , Fat); end; readln; end. 21

 • Faça um programa para calcular os números primos menores que 100 22

• Faça um programa para calcular os números primos menores que 100 22

program primos; var n, I: integer; ehprimo: boolean; begin for n: =2 to 99

program primos; var n, I: integer; ehprimo: boolean; begin for n: =2 to 99 do begin ehprimo: =true; for I: =2 to n-1 do if (n MOD I)=0 then ehprimo: =false; if ehprimo then writeln(n, ' eh primo'); end; readln; end. 23

Exercício Faça um programa para ler 500 valores e informar o maior e sua

Exercício Faça um programa para ler 500 valores e informar o maior e sua posição 24

Program Maior. EPosicao ; var N: real; { lido } Maior: real; { guarda

Program Maior. EPosicao ; var N: real; { lido } Maior: real; { guarda o maior lido } Posicao: integer; { posicao do maior dos lidos } K: integer; { variavel de controle do for } begin readln(N); maior: =N; { por enquanto o primeiro é o maior } Posicao : = 1; for K : = 2 to 500 do begin O que acontece se readln(N); entre os números lidos if N >= Maior existem valores iguais? then begin Maior : = N; Posicao : = K; end; { do comando for } writeln('Maior lido: ', Maior: 5: 1, ' na posicao ', Posicao); readln; end. 25

Comandos for aninhados saída. . . for K : = 1 to 3 do

Comandos for aninhados saída. . . for K : = 1 to 3 do begin readln (N); for L : = 1 to N do writeln(L); end; . . . for K : = 1 to 5 do for L : = 1 to 3 do writeln(‘K=‘, K, ‘L=‘, L); . . . K=1 L=1 K=1 L=2 K=1 L=3 K=2 L=1 K=2 L=2 K=2 L=3 K=3 L=1 K=3 L=2 K=3 L=3 K=4 L=1 K=4 L=2 K=4 L=3 K=5 L=1 K=5 L=2 K=5 L=3 26

Comando while Pseudo-linguagem Pascal enquanto <condição> while <condição> faça <comando > do <comando >

Comando while Pseudo-linguagem Pascal enquanto <condição> while <condição> faça <comando > do <comando > Um só comando 27

Exemplo 1: var a: integer; begin a : = 1; while (a < 5)

Exemplo 1: var a: integer; begin a : = 1; while (a < 5) do a : = a + 1; writeln('Valor de a = ', a); readln; end. Saída: Valor de a = 5 Obs. 1) a variável de controle de término a, neste caso, também PRECISOU ser inicializada! Obs. 2) neste caso, o corpo do while tem apenas 1 comando, a: = a +1 !

Exemplo 2: . . . Obs. 1: a variável de controle de término k,

Exemplo 2: . . . Obs. 1: a variável de controle de término k, neste caso, foi inicializada com k: =1! . . . Obs. 2: como o corpo do WHILE tem 2 comandos, precisa-se usar o comando composto Begin. . End. k : = 1; while k < 4 do begin writeln(‘Iteracao: ‘, k); k: = k +1; end; Comando Composto

Exemplos. . . A : = 1; while A < 5 do A: =

Exemplos. . . A : = 1; while A < 5 do A: = A + 1; writeln(A); . . . A : = 10; B : = 4; while A – 2 > B + 1 do begin writeln(A, ' ', B); A : = A - 1; end; . . . A: = 1; while A <= 5 do begin writeln(A); A : = A + 1; end; . . . A : = 0; while A < 5 do begin A : = A + 1; writeln(A); end; . . .

O comando while. . . • Conclusão – A variável ou variáveis que fazem

O comando while. . . • Conclusão – A variável ou variáveis que fazem parte da condição de término deverão ter seu valor atribuído através de um comando de leitura ou de atribuição • Antes da estrutura de repetição while e • Dentro da estrutura

Utilização de variável boolean. . . Segue : = true; while Segue do begin

Utilização de variável boolean. . . Segue : = true; while Segue do begin readln(A); if A <> 0 then writeln(A) else Segue : = false end; Parar : = false; while not Parar do begin readln(A); if A <> 0 then writeln(A) else Parar : = true end; Exemplos. . . S : = 0; readln(A); while A <> 0 do begin writeln(A); S : = S + 1; readln(A) end; writeln(S); • 1 a vez que testa A já deve ter um valor • S informa quantos valores foram lidos

Ex: Escreva um programa que leia o nome e as 3 notas dos alunos

Ex: Escreva um programa que leia o nome e as 3 notas dos alunos de uma classe e mostre o nome do aluno seguido da sua media. O programa deverá ser encerrado quando o nome for igual a ‘ZZZ’. VAR nome: string; cont: integer; media, nota, soma: real; BEGIN write('Digite o nome do aluno. (ZZZ para encerrar): '); readln(nome); while nome<>'ZZZ' do begin soma: =0; for cont: =1 to 3 do begin write ('Digite nota: '); readln (nota); soma: =soma+nota; end; media: =soma/3; writeln('A media do aluno ', nome, ' eh ', media: 1: 2); writeln('Digite o nome do aluno. (ZZZ para encerrar): '); readln(nome); end; readln; END.

Estruturas de repetição • para. . . faça. . • enquanto. . . faça.

Estruturas de repetição • para. . . faça. . • enquanto. . . faça. . • repita. . . até. . .

Comando repeat Pseudo-linguagem repita <comandos > até <condição> Pascal repeat <comandos > until <condição>

Comando repeat Pseudo-linguagem repita <comandos > até <condição> Pascal repeat <comandos > until <condição> vários comandos

Exemplos. . A : = 0; repeat A : = A + 1; writeln(A)

Exemplos. . A : = 0; repeat A : = A + 1; writeln(A) until A = 10; . . Achou : = false; repeat readln(Nome); writeln(Nome); if Nome = ‘Ana Terra’ then Achou : = true until Achou; repeat readln(Nome); writeln(‘Outro ? (s/n) ’); readln(Resposta) until (Resposta=‘n’);

Exercício Faça um programa Pascal que leia 10 valores positivos e informe o maior

Exercício Faça um programa Pascal que leia 10 valores positivos e informe o maior deles. Valores não positivos devem ser ignorados. var I: integer; maior, N: real; begin maior: =0; for I: =1 to 10 do begin repeat write('forneca o ', I, '. numero positivo: '); readln(N); if not(N>0) then writeln('numero invalido!!'); until N>0; if N>maior then maior: =N; end; writeln('o maior numero fornecido foi: ', maior: 1: 3); readln; end. 37

Diagramas de sintaxe Comando while WHILE Expressão lógica DO comando Comando repeat REPEAT Comandos

Diagramas de sintaxe Comando while WHILE Expressão lógica DO comando Comando repeat REPEAT Comandos Separados por ; UNTIL Expressão lógica Comando ;