1 / 64

BC-0505 Processamento da Informação

BC-0505 Processamento da Informação. BC & T Universidade Federal do ABC. Estruturas de Repetição. Estruturas de repetição estão divididas em três tipos: Estrutura enquanto ( while ) ‏ Estrutura repita ( do while ) Estrutura para ( for ) ‏.

toshi
Download Presentation

BC-0505 Processamento da Informação

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. BC-0505 Processamento da Informação BC & T Universidade Federal do ABC

  2. Estruturas de Repetição • Estruturas de repetição estão divididas em três tipos: • Estrutura enquanto (while)‏ • Estrutura repita (do while) • Estrutura para (for)‏

  3. Estruturas de Repetição • Quando uma seqüência de comandos deve ser executada repetidas vezes usamos uma estrutura de repetição. • A estrutura de repetição, assim como a de decisão, envolve sempre a avaliação de uma condição. • Também conhecidas como laços de repetição ou loops. bloco

  4. Ex.1 – Quantidade de Alunos Aprovados Um arquivo chamado resultado.txt armazena o resultado final da disciplina de modo que cada linha tem duas colunas, a primeira tem o número de matrícula de todos os alunos e a segunda coluna a situação final do aluno: aprovado ou reprovado. Queremos determinar a quantidade de alunos aprovados. 01222 aprovado 03440 reprovado 01999 aprovado 02113 aprovado 01110 reprovado 12345 aprovado 01010 aprovado 02900 aprovado

  5. Ex.1 – Quantidade de Alunos Aprovados Um arquivo chamado resultado.txt armazena o resultado final da disciplina de modo que cada linha tem duas colunas, a primeira tem o número de matrícula de todos os alunos e a segunda coluna a situação final do aluno: aprovado ou reprovado. Queremos determinar a quantidade de alunos aprovados. Um solução: • 1. Se não é fim do arquivo, leia uma linha do arquivo; • 2. se a linha corresponde a um aluno aprovado • então incremente o contador de alunos aprovados • senão, volte para o passo 1.

  6. Estrutura de Repetição ENQUANTO • A estrutura de repetição enquanto permite especificar instruções que devem ser repetida enquanto determinada condição for verdadeira • Exemplo: enquanto não terminar o arquivo, leia linha e incremente contador de aprovados se for o caso. • O corpo da estrutura enquanto pode ser uma instrução ou um bloco de execução bloco

  7. Estrutura de Repetição ENQUANTO • Quando a condição da estrutura enquanto se tornar falsa, a ação (ou bloco de ações) da estrutura será pulada. • O programa continuará com a ação imediatamente após a estrutura enquanto. • IMPORTANTE: você deve sempre prever o comando, ou ação, que tornará falsa a condição do comando enquanto, caso contrário, seu programa entrará em loop infinito. bloco

  8. Estrutura de Repetição ENQUANTO bloco condição ? início V F Pseudolinguagem enquanto <condição> faça <bloco_de_execução>

  9. Ex. 2 – Números de Fibonacci Leonardo de Pisa (ou Fibonacci, 1170 - 1250) descreveu o crescimento de uma população de coelhos por uma sequência de números que agora é conhecida por sequência de Fibonacci: 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, ... Essa sequência é definida por F(1) = F(2) = 1 e se n > 2 então F(n) = F(n-1) + F(n-2). Dado um inteiro n>0, obter F(n), o n-ésimo número de Fibonacci.

  10. Ex. 2 – Números de Fibonacci – Algoritmo Esboço de uma solução: 1. Dado n; 2. se n=1 ou n=2, então responda “F(n)=1”; 3. senão, tome i igual a 2 e faça 3.2. i ← i+1; 3.3. F(i) ← F(i-1) + F(i-2); 3.4. se i<n então volte para 3.2; 4. responda “F(n)=” F(i). Obs: A linha 3.1 é executada apenas uma vez e a linha 3.3 aumenta o valor da variável i até que i=n e, nesse caso, o laço termina pois a condição na linha 3.4 torna-se falsa. Exercício: Resolver usando enquanto.

  11. Ex. 2 – Números de Fibonacci – Pseudocódigo Algoritmo Fibonacci inicio inteiro n, a, b, prox, cont; leia (n); a ← b ← 1; se ( n=1 n=2 ) entao inicio escreva (b); fimentao senao

  12. Ex. 2 – Números de Fibonacci – Pseudocódigo inicio cont ← 2; enquanto ( cont <> n ) faça inicio prox ← a + b; a ← b; b ← prox; cont ← cont + 1; fimenquanto fimsenao escreva(b); fimalgoritmo.

  13. Ex. 3 – ENQUANTO aninhado Sabe-se que um número inteiro positivo da forma n³ é a soma de n números ímpares conscutivos. Por exemplo, 1^3 = 1 2^3 = 3+5 3^3 = 7+9+11 4^3 = 13+15+17+19, ... n^3 = k + (k+2) + (k+4) + ... + (k+2(n -1)), para algum k ímpar. Dado um inteiro n>0, determinar k tal que n³ pode ser escrito como soma de n ímpares consecutivos como descrito acima.

  14. Ex. 3 – ENQUANTO aninhado Esboço de uma solução: 1. leia(n)‏ 2. k=1; 3. soma = k + (k+2) + (k+4)+ ... + (k + 2(n -1)), para algum k; 4. se (soma = n³) então achou, responda k; 5. senão incrementa k de 2 e volta pra linha 3. Problema: Como avaliar k + (k+2) + (k+4)+ ... + (k + 2(n -1))?

  15. Ex. 3 – ENQUANTO aninhado Como avaliar k + (k+2) + ... + (k + 2(n -1))? Outro laço: 1. dado k, dado n e inicializadas com 0 as variáveis i e soma; 2. enquanto i <= 2(n-1) faça 2.1. soma ← soma + (k + i); 2.2. i← i+2;

  16. Ex. 3 – Pseudocódigo Algoritmo Cubo como soma de ímpares consecutivos início inteiro: n, soma, k, i; lógico: achou; leia ( n ); // n>=1 achou ← falso; k ← 1; enquanto ( ~achou ) faça

  17. Ex. 3 – Pseudocódigo inicio i ← soma ← 0; enquanto ( i < 2*n ) faça inicio soma ← soma + (k + i); i ← i + 2; fimenquanto se ( soma = n^3 ) entao inicio achou ← verdadeiro; fimentao senao inicio k ← k + 2; fimsenao

  18. Ex. 3 – Pseudocódigo fimenquanto escreva(k); fimalgoritmo

  19. Estrutura de Repetição ENQUANTO • Características de funcionamento: • Não é necessário o conhecimento prévio do número de repetições • Executa a repetição enquanto a condição for verdadeira, testando-a desde seu início • Os comandos do loop podem não ser executados instruções Validação inicial enquanto <condição> faça <bloco> fimenquanto

  20. Estrutura de Repetição ENQUANTO Controlada por Contador • O que indica quantas vezes uma repetição será realizada? • A estrutura enquanto não oferece este recurso. • Solução: uso de um contador, ou variável contadora, que tem um certo valor inicial (atribuído fora do laço) e é incrementada a cada repetição. • Exemplo de contador: inteiro cont; // declaração do contador cont  0; // inicialização do contador cont  cont + 1; // incrementa contador em uma unidade

  21. Estrutura de Repetição ENQUANTO Controlada por Contador • O que indica quantas vezes uma repetição será realizada? • A estrutura enquanto não oferece este recurso. • Solução: uso de um contador, ou variável contadora, que tem um certo valor inicial (atribuído fora do laço) e é incrementada a cada repetição. • Exemplo de contador: Associado ao CONTADOR, devemos ter: 1 – Atribuição de Valor Inicial 2 – Definição de Condição de Continuidade ou Parada do Laço de Repetição 3 – Definição de Passo (Incremento/Aumento ou Decremento/Diminuição) do Valor do Contador Os três itens devem ser construídos de forma a permitir que o Laço de Repetição realize o que se pede. Isto é responsabilidade do programador!!! inteiro cont; // declaração do contador cont  0; // inicialização do contador cont  cont + 1; // incrementa contador em uma unidade

  22. Exemplos de Contador Usamos i no exemplo 3: i ← 0; enquanto ( i < 2*n ) faça inicio soma ← soma + (k + i); i ← i + 2; fimenquanto Usamos cont no exemplo 2: cont ← 2; enquanto ( cont <> n ) faça inicio prox ← a + b; a ← b; b ← prox; cont ← cont + 1; fimenquanto

  23. Estrutura de Repetição ENQUANTO Controlada por Sentinela • Valor de sentinela (finalizador, de sinal ou de flag) – valor especial que indica o final de entrada de dados. • Usado pelo usuário para indicar final do laço de repetição. • Exemplo: se a entrada de um problema é um sequência de inteiros positivos podemos usar -1 como sinal de fim da entrada.

  24. Exercício Resolvido Uso do sentinela para indicar o fim da entrada de dados: Escreva um algoritmo que determine se números inteiros e positivos são pares, ou ímpares. Utilize a estrutura enquanto para permitir a entrada da seqüência de números. O último número, que não será considerado na análise, deve assumir o valor –1 (sentinela).

  25. Exercício Resolvido Pseudocódigo Algoritmo ParImpar início inteiro: valor, resto; string: mensagem; leia ( valor );

  26. Exercício Resolvido Pseudocódigo enquanto ( valor  –1 ) faça resto  valor mod 2; se ( resto=0 )‏ então inicio mensagem  “Número par”; fimentao senão inicio mensagem  “Número ímpar”; fimsenao escreva( mensagem); leia ( valor ); fimenquanto fimalgoritmo

  27. Estrutura de Repetição ENQUANTO Controlada por Sentinela • Outro exemplo: em computação EOF é uma condição que indica fim-de-arquivo (End-Of-File). Concretamente, é um flag cujo valor de fato depende do sistema operacional e que não corresponde a um carater válido, usualmente é -1.

  28. Ex. 1 – Uma Solução em Pseudocódigo Um arquivo chamado resultado.txt armazena o resultado final da disciplina de modo que cada linha tem duas colunas, a primeira tem o número de matrícula de todos os alunos e a segunda coluna a situação final do aluno: aprovado ou reprovado. Queremos determinar a quantidade de alunos aprovados. 01222 aprovado 03440 reprovado 01999 aprovado 02113 aprovado 01110 reprovado 12345 aprovado 01010 aprovado 02900 aprovado

  29. Ex. 1 – Uma Solução em Pseudocódigo String: linha; inteiro: aprovados; aprovados ← 0; enquanto (~EOF(resultado.txt)) faça inicio leia (linha); se (linha termina em “aprovado”)‏ inicio aprovados ← aprovados + 1; fimse fimenquanto escreva(aprovados); fimalgoritmo Obs.: EOF = “End Of File” = “Fim de Arquivo”

  30. Estrutura de Repetição ENQUANTO em Java JAVA // Não é padrão while <condição> <comando>; Pseudolinguagem enquanto <condição> faça <bloco> // Padrão com {} while <condição> { <comandos> }

  31. Observação: Novos Operadores em Java • Algumas linguagens (Ex.: Java, C#, C++, C) contém operadores especiais para simplificar a atribuição de valores às variáveis • As Estruturas de Repetição demandam o uso frequente de operadores associados às variáveis de controle • Portanto, recomenda-se usar os seguintes operadores em Java (seja i uma variával): • i++; ou ++i;: • Se colocado sozinho em uma linha, equivale ao comando: i = i + 1; • No caso de contador: adiciona 1 ao valor do contador • i--; ou --i;: • Se colocado sozinho em uma linha, equivale ao comando: i = i - 1; • No caso de contador: subtrai 1 do valor do contador • Para o caso de existir mais de um comando na mesma linha em que estes operadores, a colocação de “++” (ou “--”) antes ou depois da variável define a ordem em que as operações serão executadas. Em laços de repetição, deve-se usar “i++” ou “i—”.

  32. Observação: Novos Operadores em Java • Existem ainda operadores em Java para outras operações aritméticas (sejam i e b duas variáveis): • i+=b; • Equivale ao comando: i = i + b; • i-=b; • Equivale ao comando: i = i - b; • i*=b; • Equivale ao comando: i = i * b; • i/=b; • Equivale ao comando: i = i / b; • Estes operadores são menos utilizados, mas i++; e i--; são muito comuns na programação em Java!

  33. Ex. 1 – Solução em Java import java.io.*; import java.util.*; public class resultado { public static void main(String[] args) throws FileNotFoundException { String linha, arquivo="resultado.txt"; Scanner sc = new Scanner(new File(arquivo)); int aprovados = 0, total = 0; while ( sc.hasNext() ) { total = total + 1; //computa o numero de alunos linha = sc.nextLine() ; if ( linha.endsWith("aprovado") ){ aprovados = aprovados + 1; } }

  34. Ex. 1 – Solução em Java System.out.println("número de alunos matriculados: " + total); System.out.println("número de alunos aprovados: " + aprovados); System.out.println("número de alunos reprovados: " + (total-aprovados)); }//fim do main }//fim da classe

  35. Ex. 2 – Solução em Java import java.util.*; public class fibonacci { public static void main (String[] args) { Scanner s = new Scanner(System.in); int n=0, a=1, b=1, cont=2, prox=0; System.out.print("Entre n: "); n = s.nextInt(); if ( n==1 || n==2 ) System.out.println( "F("+n+")="+b ); else { while ( cont != n ) { prox = a + b; a = b; b = prox; cont = cont + 1; } }

  36. Ex. 2 – Solução em Java System.out.println("F("+n+")="+b); }//fim do main }// fim da classe

  37. Ex. 3 – Solução em Java import java.util.*; public class cuboXsoma { public static void main (String[] args) { Scanner s = new Scanner(System.in); int n, soma, k, i; boolean achou=false; // achou o valor de k? System.out.print("Entre n: "); n = s.nextInt(); int cubo = n*n*n; //soma == cubo economiza operações comparado com //soma == n*n*n no condicional abaixo

  38. Ex. 3 – Solução em Java k=1; //primero ímpar while ( !achou ) {// enquanto não achou i=0; soma = 0; while ( i < 2*n ) { // avalia k + (k+2) + ...+(k + 2(n-1)) soma = soma + ( k + i ); i = i+2; } if (soma == cubo) { achou = true;} else {k = k+2;} // tome o próximo ímpar } System.out.println("k = " + k); }//fim do main }fim da classe

  39. Exercício Resolvido Jogo de Dados Implemente um jogo de dados que: • O jogador inicie o jogo com R$ 100,00 • A cada jogada, o jogador jogue dois dados • Se a soma dos números dos dados for 7 ou 11, o jogador recebe o dobro do que tenha apostado no momento • Se a soma dos números não for 7 ou 11, o jogador perde R$ 20,00 • O jogo acaba quando o saldo do jogador for menor ou igual a zero. Ou então quando o jogador decidir parar • Ao final, escreva o total de dinheiro que o jogador tem, e quantas vezes ele ganhou e quantas vezes perdeu no jogo

  40. Exercício Resolvido Jogo de Dados – Pseudocódigo Algoritmo JogoDeDados início real: dinheiro, aposta; inteiro: dado1, dado2, soma, numVitoria, numDerrota; string: continua; dinheiro  100,00; numVitoria = 0; numDerrota = 0; escreva( “Deseja jogar?” ); leia ( continua );

  41. Exercício Resolvido Jogo de Dados – Pseudocódigo enquanto ( (continua = “S”)  (dinheiro > 0) )‏ faça leia ( aposta ); dado1  randomico(1..6); dado2randomico(1..6); soma  dado1 + dado2; se ( (soma = 7)  (soma = 11) )‏ então numVitoria numVitoria + 1; dinheiro  dinheiro + 2*aposta; senão numDerrota  numDerrota + 1; dinheiro  dinheiro - 20; escreva( “Deseja jogar?” ); leia ( continua ); fimenquanto

  42. Exercício Resolvido Jogo de Dados – Pseudocódigo escreva( numVitoria ); escreva( numDerrota ); escreva( dinheiro ); fimalgoritmo

  43. Exercício Resolvido Jogo de Dados – Solução em Java import java.util.*; public class JogoDados { public static void main(String[] args) { double dinheiro, aposta; int dado1, dado2, soma, numVitoria, numDerrota; String continua = null; dinheiro = 100.00; numVitoria = 0; numDerrota = 0; Scanner s = new Scanner(System.in); Scanner n = new Scanner(System.in); System.out.print("Deseja jogar? (s/n)"); continua = s.nextLine();

  44. Exercício Resolvido Jogo de Dados – Solução em Java while ( continua.equals("s") && dinheiro > 0 ) { System.out.print("Digite sua aposta: "); aposta = n.nextDouble(); Random num = new Random(); dado1 = num.nextInt( 5 ) + 1; dado2 = num.nextInt( 5 ) + 1; soma = dado1 + dado2; System.out.print(" Dado 1 = " + dado1); System.out.println(" Dado 2 = " + dado2);

  45. Exercício Resolvido Jogo de Dados – Solução em Java if ( soma == 7 || soma == 11 ){ numVitoria = numVitoria + 1; dinheiro = dinheiro + 2*aposta; System.out.println("Vitorias = " + numVitoria); System.out.println(" Dinheiro = " + dinheiro); }// fim if else{ numDerrota = numDerrota + 1; dinheiro = dinheiro - 20; System.out.println("Derrotas = " + numDerrota); System.out.println("Dinheiro="+dinheiro); }//fim else System.out.print("Deseja jogar? (s/n)"); continua = s.nextLine(); } //fim while } // fim método } // fim da classe

  46. Estruturas de Repetição • Estruturas de repetição: • Estrutura enquanto (while)‏ • Estrutura repita (do while) • Estrutura para (for)‏

  47. Estrutura de Repetição REPITA • Para realizar a repetição com teste no final deve ser utilizado a estrutura repita, que permite uma ação (ou bloco) ser executada enquanto uma determina condição seja verdadeira. • Exemplo: soma nota, enquanto número de notas for menor que 10. • O corpo da estrutura repita pode ser uma instrução única, ou um bloco de comandos Repita bloco V F

  48. Bloco deExecução Estrutura de Repetição REPITA repita Pseudocódigo repita <bloco> enquanto <condição>; enquanto condição ? V F

  49. Ex. 1 – Números de Fibonacci Reescrevendo a solução para números de Fibonacci 1. Dado n; 2. se n=1 ou n=2, então responda “F(n)=1”; 3. senão, tome i igual a 2 e faça 3.2. i ← i+1; 3.3. F(i) ← F(i-1) + F(i-2); 3.4. se i<n então volte para 3.2; 4. responda “F(n)=” F(i). Obs: Se n>2 então as linhas 3.2, 3.3 e 3.4 serão executadas pelo menos uma vez.

  50. Ex. 1 – Números de Fibonacci – Pseudocódigo Algoritmo Fibonacci_v2 inicio inteiro n, a, b, prox, cont; leia (n); a ← b ← 1; se ( n=1 n=2 ) entao inicio escreva (b); fimentao senao

More Related