Introdução a Programação Estruturas de repetição Prof. Luis Otavio Alvares Parte deste material é adaptado de lâminas das Profas. Patrícia Jaques, Mônica Py e Deise Saccol 1 Lógica de programação • ESTRUTURAS DE REPETIÇÃO – Se uma ação se repete em um algoritmo, em vez de escrevê-la várias vezes, em certos casos podemos resumir anotando uma vez só e solicitando que ela se repita, usando uma das estruturas de repetição. – Podemos executar uma ação (ou um conjunto de ações) um número definido ou indefinido de vezes, ou enquanto um estado permanecer ou até que um estado seja atingido. – As principais estruturas de repetição são: • PARA...ATÉ...REPETIR • ENQUANTO...REPETIR • REPETIR...ENQUANTO 2 Fluxograma de uma estrutura de repetição: Lógica de programação INÍCIO CONT = 1 CONT = CONT + 1 Sim Neste ponto do algoritmo podemos incluir qualquer conjunto de instruções que quisermos repetir 10 vezes. CONT <= 10? Não FIM 3 Estruturas de repetição Enquanto...Repetir Lógica de programação F condição Enquanto (condição) repetir V <instruções> instrução Repetir...Enquanto instrução Repetir <instruções> enquanto (condição) condição Para...até...repetir F V Para <variavel> = <inicio> até <fim> repetir <instruções> 4 Lógica de programação – Até agora para vários valores informados pelo usuário líamos cada valor de forma separada – Por exemplo, no algoritmo para o cálculo da média de quatro números, líamos 4 valores em 4 variáveis diferentes. Mas também poderíamos: • ler um valor para 1 variável e repetir isso 4 vezes, adicionando cada valor lido ao total em uma outra variável, a cada repetição. • Após as 4 repetições, a soma dos 4 números estaria acumulada na outra variável, bastando uma instrução para dividi-la por 4 e assim obter a média. 5 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 repetir 3.1 ler num 3.2 soma = soma + num 4. Media = soma / cont 5. Mostrar media 6. Fim 6 Lógica de programação PARA...ATÉ...REPETIR – Formato: Para <variável> = <valor inicial> até <valor final> repetir <ações> • Significado: A <variável> é inicializada com <valor inicial>. Após cada execução das <ações>, é somado 1 à <variável> e repetese as <ações>, continuando assim até que a <variável> atinja o <valor final>. • Esta estrutura de repetição cria um contador automático, que nós não precisamos mandar incrementar. • Ao usar esta estrutura já está subentendido que a <variável> inicia com <valor inicial> e é incrementada a cada ciclo (podendo-se inclusive aproveitar seu valor dentro do ciclo), e que as <ações> serão repetidas até que a <variável> tenha o <valor final>. 7 Lógica de programação • Exemplo da estrutura PARA...ATÉ...REPETIR: “Mostrar os quadrados dos inteiros de 3 a 11.” – Pseudocódigo: Para CONT = 3 até 11 repetir Mostrar (CONT *CONT) Isto será repetido 9 vezes. – Usamos esta estrutura quando sabemos quantas vezes temos de repetir certas ações, mesmo que o número de vezes só seja conhecido durante a execução. Por exemplo: “Perguntar ao usuário de quantos valores ele quer calcular a média. Ler os números e calcular a média.” 8 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 repetir 5.1Ler N (aqui é lido cada número, um em cada ciclo) 5.2SOMA = SOMA + N (aqui os valores lidos são acumulados) 6- MEDIA = SOMA / QUANT (isto está fora do loop) 7- Mostrar MEDIA 8- Fim 9 Exercício • Faça um algoritmo para calcular e escrever o valor de S: 1 3 5 7 99 S ... 1 2 3 4 50 10 Exemplo de solução 1. 2. 3. 3.1 4. 5. Início S=0 Para I=1 ate’ 50 repetir S=S+(I*2-1)/I Mostrar S Fim 11 Exercício Faça um algoritmo para calcular os 20 primeiros termos da série de Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, …. com F0=0 e F1=1 12 Exemplo de solução 1. 2. 3. 4. 5. 6. 6.1 6.2 6.3 6.4 7. Início Mostrar 0 Mostrar 1 n_2=0 n_1=1 Para I=3 até 20 repetir n=n_1 + n_2 mostrar n n_2=n_1 n_1=n Fim 13 Exercício Faça um algoritmo para calcular a soma dos números primos menores que 100 Faça um teste de mesa para testar a sua solução 14 Exemplo de solução 1. Início 2. Para I=1 até 99 repetir 2.1 eprimo=1 2.2 para J=2 até I-1 repetir 2.2.1 se I%j=0 então eprimo=0 2.3 se eprimo=1 então mostrar I 3. Fim 15 Estruturas de repetição em C 16 Estrutura de repetição: comando for • Comando for for (var=valor inicial; condição; incremento/decremento) comando; Exemplo: for (cont=3; cont<=11; cont++) printf (“%d”,cont); for (var=valor inicial; condição; incremento/decremento) { comando1; comando2; comando3; } 17 Comando for for (var=valor inicial; condição; inc/dec) comando1; Não esquecer dos parênteses O comando1 será executado enquanto a condição for verdadeira O incremento ou decremento é executado automaticamente após a execução do comando1 18 Exercício Escrever um algoritmo que lê 5 valores, e conta quantos destes valores são negativos, escrevendo esta informação. #include <stdio.h> #include <stdlib.h> main(){ int numero, cont, neg=0; for (cont=0; cont<5; cont++) { printf ("\nDigite um numero inteiro: "); scanf ("%d", &numero); if (numero<0) neg=neg+1; } printf ("\nO numero de valores negativos e’ %d\n", neg); system("pause"); } 19 Cuidado!!! • Se o valor da variável de controle do comando for for alterado explicitamente dentro do bloco de repetição … • Exemplo: saída: #include <stdio.h> #include <stdlib.h> main(){ int I; for (I=1; I<=10; I++){ printf (“%d\n",I); if (I==5) I=8; } system("pause"); } 1 2 3 4 5 9 10 Press any key to continue . .. 20 Lembre-se!!! Qual o valor da variável de controle do for após a execução do comando for? O valor que foi testado e não passou na condição. Exemplo: saída: #include <stdio.h> #include <stdlib.h> main(){ int cont; for (cont=1; cont<=10; cont=++){ printf ("%d\n", cont); } printf("valor apos o FOR: %d\n",cont); system("pause"); } 1 2 3 4 5 6 7 8 9 10 valor apos o FOR: 11 Press any key to continue... 21 Só use quando estritamente necessário: E para forçar o término da repetição? Use um break. Exemplo : #include <stdio.h> #include <stdlib.h> main(){ int I; for (I=1; I<=10; I=I+1){ printf ("%d\n",I); if (I==5) break; } printf(“apos o FOR: %d\n",I); system("pause"); } saída: 1 2 3 4 5 apos o FOR: 5 Press any key to continue... Atenção para o valor de saída da variável de controle 22 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) 23 Exercícios • Faça um programa para calcular e escrever o 1 3 5 7 99 S ... valor de S: 1 2 3 4 50 • Faça um programa para calcular os 20 primeiros termos da série de Fibonacci • Faça um programa para calcular os números primos menores que 100 24