Introdução à Programação Ciclos – 1ª parte Sumário Ciclos while Exercícios com instruções condicionais e ciclos Introdução à Programação 2006/2007 Ciclos (while) while ( <expressão> ) <instrução>; Enquanto <expressão> for diferente de zero ou verdadeira, <instrução> é executada repetidamente. Instrução do ciclo : Corpo do ciclo Introdução à Programação 2006/2007 Exemplo int main () { Ciclo é executado int contador=0; enquanto contador<10 while (contador<10) { printf ("Numero %d\n",contador); Ciclo entre {} contador++; Contador tem de mudar } para o ciclo terminar return 0; } Introdução à Programação 2006/2007 Exercício 1 Faça um programa que peça um inteiro ao utilizador e imprima a tabuada desse número. Se o utilizador introduzir o valor 7: 7x1=7 7 x 2 = 14 7 x 3 = 21 ... 7 x 10 = 70 Implemente o programa recorrendo a um ciclo while Introdução à Programação 2006/2007 Exemplo de Solução int main () { int tabuada, corrente=1; printf ("Qual a tabuada? "); scanf("%d", &tabuada); while (corrente<=10) { printf ("\t%d x %d = %d\n",tabuada, corrente, tabuada*corrente); corrente++; } return 0; } Introdução à Programação 2006/2007 Exercício 2 Escreva um programa que permita a um aluno introduzir uma sequência arbitrária de notas e que afixe no ecrã, como resultado, a média aritmética simples correspondente O programa lê as notas individualmente enquanto estas forem válidas para aprovação (entre 10 e 20) O programa terminará quando for introduzido um valor que não seja válido como nota de aprovação. Introdução à Programação 2006/2007 Exemplo de Solução int main () { int nota, somatorio=0, nrNotas=0; printf ("Insira nota: "); scanf ("%d",&nota); while ((nota>=10)&&(nota<=20)) { somatorio+=nota;nrNotas++; printf ("Insira nota: "); scanf ("%d",&nota); } printf ("Media das notas: %f\n", (float)somatorio/nrNotas); return 0; } Introdução à Programação 2006/2007 Exercício 3 Faça um programa que tenha uma função que detecte se um inteiro é número par ou impar: A função devolve um valor que indica se o numero é par sem imprimir qualquer mensagem A mensagem que indica se o inteiro é ou não par é gerada na função main. Introdução à Programação 2006/2007 Exemplo de Solução /* Funcao devolve 1 se for par, 0 se impar */ int ePar (int n) { if ((n % 2)==0) return 1; else return 0; } int main () { int numero; printf ("Qual o numero? "); scanf("%d", &numero); if (ePar(numero)) printf ("O numero e par\n"); else printf ("O numero e impar\n"); return 0; } Introdução à Programação 2006/2007 Exercício 3a Adicione ao programa uma função que detecte se um inteiro é número primo: Um número primo é um número natural maior que 1, cujos únicos divisores positivos é 1 e o próprio número Introdução à Programação 2006/2007 Exemplo de Solução /* Devolve 0 se nao for primo */ int ePrimo (int n) { int divisores,teste; divisores=0; // numero de divisores para alem de 1 e n teste=2; // 1 e' é divisor divisor de de todos todos os os inteiros inteiros if (n<2) return 0; while (teste<n (teste<n)&& { divisores<1) { if ((n % teste)==0) Quantos testes divisores++; faz? teste++; } return divisores==0; // Nao ha divisores, entao primo } Introdução à Programação 2006/2007 Outro Exemplo de Solução /* Devolve 0 se nao for primo */ int ePrimo (int n) { int divisor=2; // Todos numeros sao divisiveis por 1. // Comecamos por 2. if (n<=1) return 0; // So pode ser primos numeros > 1 while (divisor <n) // n e divisivel por n.Testamos ate n-1 { if ((n % divisor)==0) return 0; // Achamos um divisor! Nao e primo. divisor++; // Vamos testar o proximo inteiro. } return 1; // Quando nao ha divisores, e' primo } Introdução à Programação 2006/2007 Exercício 3b Usando a função anterior, construa um programa que vá aceitando números inteiros, terminando quando lhe for apresentado um valor não positivo O programa deverá detectar a introdução de um número primo, escrevendo no ecrã uma mensagem adequada. Introdução à Programação 2006/2007 Exemplo de Solução int main () { int numero; printf ("Qual o numero? "); scanf("%d", &numero); while (numero>0) { if (ePrimo(numero)) printf ("O numero e primo\n"); else printf ("O numero nao e primo\n"); printf ("Qual o numero? "); scanf("%d", &numero); } printf ("Numero nao positivo. Adeus!\n"); return 0; } Introdução à Programação 2006/2007 Repetido? Exercício 3c Altere o programa anterior de modo a que passe a mostrar os N primeiros números primos A quantidade de números primos a mostrar é definida pelo utilizador Exemplo: Para 4 números primos: 2, 3, 5, 7 Introdução à Programação 2006/2007 Exemplo de Solução int int main main () () {{ int int nPrimos, nPrimos, primos, primos, contador; contador; printf printf ("Quantos ("Quantos numeros numeros primos primos quer? quer? "); "); scanf("%d", scanf("%d", &nPrimos); &nPrimos); contador=1; contador=1; primos=0; primos=0; while while (primos<nPrimos) (primos<nPrimos) {{ if printf (", "); /* separa os numeros */ if (primos>0) (ePrimo(contador)) {if (ePrimo(contador)) { printf ("%d\n", contador); printf primos++; ("%d", contador); primos++; } } contador++; } contador++; } return 0; } printf (”\n"); return 0; Introdução à Programação 2006/2007 }