Baixe o app para aproveitar ainda mais
Prévia do material em texto
Comandos de Repetição: while Programação de Computadores I Emiliana Mara Lopes Simões simoes.eml@gmail.com Universidade Federal de Ouro Preto setembro 2009 Comandos de Repetição Problema: Dada uma turma de 10 alunos faça um programa que leia as notas destes alunos em um teste e 1 Calcula e imprime a soma de todas as notas; 2 Calcula e imprime a média da turma no teste. Comandos de Repetição Uma solução trabalhosa seria..... main( ){ float nota, media, total; total = 0; //leitura da primeira nota cout<<“Insira a nota do aluno 1: ”; cin>>nota; total += nota; //leitura da segunda nota cout<<“Insira a nota do aluno 2: ”; cin>>nota; total += nota; Comandos de Repetição //leitura da terceira nota cout<<“Insira a nota do aluno 3: ”; cin>>nota; total += nota; //leitura da quarta nota cout<<“Insira a nota do aluno 4: ”; cin>>nota; total += nota; //leitura da quinta nota cout<<“Insira a nota do aluno 5: ”; cin>>nota; total += nota; //leitura da sexta nota cout<<“Insira a nota do aluno 6: ”; cin>>nota; total += nota; Comandos de Repetição //leitura da sétima nota cout<<“Insira a nota do aluno 7: ”; cin>>nota; total += nota; //leitura da oitava nota cout<<“Insira a nota do aluno 8: ”; cin>>nota; total += nota; //leitura da nona nota cout<<“Insira a nota do aluno 9: ”; cin>>nota; total += nota; Comandos de Repetição //leitura da décima nota cout<<“Insira a nota do aluno 10: ”; cin>>nota; total += nota; media = total/10; cout<<“A soma das notas e: ”<<total<<endl; cout<<“A media das notas e: ”<<media; system(“pause”); } .... e enfim terminamos o programa!!!!! Comandos de Repetição E se a turma tivesse 100 alunos??????? Vejam que repetimos várias vezes os mesmos comandos //leitura da n-ésima nota cout<<“Insira a nota do aluno n: ”; cin>>nota; total += nota; Comandos de Repetição Os comandos de repetição (loop) são um recurso que permite que um certo trecho do código de um programa seja repetido um certo número de vezes Na linguagem C++ existem três comandos de repetição: 1 while 2 do-while 3 for Comandos de Repetição Os comandos de repetição (loop) são um recurso que permite que um certo trecho do código de um programa seja repetido um certo número de vezes Na linguagem C++ existem três comandos de repetição: 1 while 2 do-while 3 for Comandos de Repetição: while O comando while permite que um certo trecho de programa seja executado ENQUANTO uma certa condição for verdadeira A forma geral do comando while é: while(<condição>) <comando1>; //comando que é repetido <comando2>;//comando executado após o while Comandos de Repetição: while No lugar do comando1 no corpo do while pode ser colocado um bloco de comandos A forma geral do comando while ficaria assim: while(<condição>){ <comando1>; <comando2>; <comando3>; } <comando4>;//comando executado após o while Funcionamento do while 1 Testa a condição 2 Se a condição for falsa então: pula todos os comandos do bloco do while passa a executar os comandos após o bloco do while 3 Se a condição for verdadeira então: executa cada um dos comandos do bloco do while volta ao passo 1 Exemplo 1 Fazer um programa para o exemplo do início da aula utilizando while Problema: Dada uma turma de 10 alunos faça um programa que leia as notas destes alunos em um teste e 1 Calcula e imprime a soma de todas as notas; 2 Calcula e imprime a média da turma no teste. Exemplo 1 main( ){ int cont = 1; //conta o número de notas lidas float nota, media, total; total = 0; while(cont <= 10){ cout<<“Insira a nota do aluno ”<<cont<<“: ”; cin>>nota; total += nota; //o mesmo que: total = total + nota; cont++; //o mesmo que: cont = cont + 1; } Exemplo 1 media = total/10; cout<<“A soma das notas e: ”<<total<<endl; cout<<“A media das notas e: ”<<media; system(“pause”); } Exemplo 1 Atenção especial a duas variáveis: Variável Contadora int cont: Controla o número de vezes que os comandos do while serão executados. Variável Acumuladora float total: Acumula os valores de várias notas lidas. Erro comum Não inicializar as variáveis contadoras e acumuladoras pode causar erro de lógica! Exemplo 2 Fazer um programa parecido com o Exemplo 1, porém agora não se sabe com antecedência quantos alunos há na turma Problema: Faça um programa que leia as notas dos alunos de uma turma em um teste e 1 Calcula e imprime a soma de todas as notas; 2 Calcula e imprime a média da turma no teste. Quantos alunos há na turma???? Exemplo 2 Nestes casos normalmente usamos um valor sentinela (flag) para indicar o fim da entrada de dados A idéia é: Após o usuário digitar todas as notas válidas ele digitará como “última nota” um valor (sentinela) que indica o fim da passagem de notas Exemplo de uma sequência de valores de entrada: 10,0 7,5 6,0 9,75 0,0 -1 Valor sentinela Exemplo 2 Nestes casos normalmente usamos um valor sentinela (flag) para indicar o fim da entrada de dados A idéia é: Após o usuário digitar todas as notas válidas ele digitará como “última nota” um valor (sentinela) que indica o fim da passagem de notas Exemplo de uma sequência de valores de entrada: 10,0 7,5 6,0 9,75 0,0 -1 Valor sentinela Exemplo 2 main( ){ int numAlunos = 0; float nota, media, total; total = 0; cout<<“Insira uma nota ou -1 para sair: ”; cin>>nota; while(nota != -1){ total += nota; //o mesmo que: total = total + nota; numAlunos++; //o mesmo que: numAlunos = numAlunos + 1; cout<<“Insira uma nota ou -1 para sair: ”; cin>>nota; } Exemplo 2 if(numAlunos > 0){ media = total/numAlunos; cout<<“A soma das notas e: ”<<total<<endl; cout<<“A media das notas e: ”<<media<<endl; } else cout<<“Nenhuma nota lida”<<endl; system(“pause”); } Exemplo 2 Erro comum Escolher um valor sentinela que é também um valor de dado válido é um erro de lógica! No Exemplo 2, por exemplo, o valor que indica o fim da entrada de dados não pode ser 1, pois 1 é uma nota válida Exemplo 3 Problema: Imprimir todos os números pares no intervalo [2,n], sendo n um valor passado pelo usuário. main( ){ int n, cont; cont = 2; cout<<“Digite o valor de n: ”; cin>>n; while(cont <= n){ cout<<cont<<endl; cont += 2; //o mesmo que: cont = cont + 2; } system(“pause”); } Exemplo 4 Problema: Imprimir todos os números pares no intervalo [2,n], sendo n um valor passado pelo usuário. Além disso, os números pares deverão aparecer na ordem decrescente. main( ){ int n; cout<<“Digite o valor de n: ”; cin>>n; if((n%2) != 0) n--; Exemplo 4 while(n >= 2){ cout<<n<<endl; n -= 2; //o mesmo que: n = n - 2; } system(“pause”); } Observação A cada execução do while o valor de n está sendo decrementado de dois. Exercícios 1 Faça um programa que solicite ao usuário 10 números inteiros e, ao final, informe a quantidade de números ímpares e pares lidos. 2 Altere o programa anterior para que seja calculado também a soma dos números pares e a média dos números ímpares. 3 Uma empresa decide dar um aumento de 30% aos funcionários com salários inferiores a R$500,00. Faça um programa que leia do teclado o salário de um funcionário (enquanto não for inserido um salário negativo) e mostre o valor do salário reajustado ou uma mensagem, caso ele não tenha direito ao reajuste. 4 Faça um programa que calcule e escreva o valor de S: S = 1 1 + 3 2 + 5 3 + 7 4 + ... + 99 50
Compartilhar