Aula 8: Estruturas de Repetição: O comando while

Propaganda
CI208 -­‐ Programação de Computadores Aula 8: Estruturas de Repetição: O comando while Prof. MSc. Diego Roberto Antunes [email protected] www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor de Ciências Exatas Departamento de Informática Estrutura de Repetição? Estrutura de Repetição? Nosso amigo Bart Simpson Qica sempre de castigo, onde ele precisa escrever 1000 vezes no quadro uma determinada frase. Ele precisa da sua ajuda para fazer um programa em C++ que escreva as 1000 frases no quadro. Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! Eu devo fazer os exercícios de CI208 e ir bem na prova! .... E como seria o programa? E como seria o programa? Executamos 1000 vezes o comando cout? #include <iostream> using namespace std; int main( ){ cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; ... } E como seria o programa? Executamos 1000 vezes o comando cout? #include <iostream> using namespace std; int main( ){ cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; ... } E como seria o programa? Vamos repetir o comando cout 1000 vezes. Para isso vamos aprender o comando while. + Alguns exemplos 1. Uma situação em que um cliente pode acrescentar produtos ao seu
carrinho, até que ele tenha terminado as compras;
2. Uma outra situação poderia ser o lançamento das notas
da prova de um conjunto de alunos;
3. Uma situação onde precisamos oferecer um menu de opções:
esse menu é oferecido até que uma opção de encerramento seja selecionada;
Comandos de repetição (while) •  são parte dos comandos (estruturas) de controle; •  o while é um dos comandos de repetição; •  tem a função de repetir uma sequência de instruções dada uma condição; •  também é conhecido como laço ou comando de iteração. Cada problema que envolve iteração é comum no sentido de repetir um conjunto de instruções enquanto uma certa condição é verdadeira. Essa condição pode ser uma expressão, um número especíQico de vezes, etc. Cada problema dependerá de uma condição especíQica. O comando while Este comando de repetição é composto de duas partes: 1. a expressão de teste (condição); > condição de entrada; > condição de saída; 2. o corpo da repetição (instruções). Lógica: while (expressão de teste é verdadeira) o corpo da repetição é executado; O comando while O comando while apresenta algumas características: 1. é adequado quando o número de iterações não é conhecido; 2. as iterações são executadas enquanto a expressão for verdadeira; 3. pela facilidade de uso, se adapta bem aos problemas de repetição; 4. pode ser utilizado também quando conhecemos o número de interações. O comando while Sintaxe: while (<expressão de teste>) { <sentenças>; } Exemplo: int i = 1; while (i <= 5) { } Saída: Número 1 Número 2 cout << “Número ” << i << endl ; Número 3 i = i + 1; Número 4 Número 5 Problema do Bart Simpson #include <iostream> using namespace std; int main( ){ int num_frases = 1; while (num_frases <= 1000) { } cout << “Eu devo fazer os exercícios de CI208 e ir bem da prova” << endl; num_frases = num_frases + 1; } Exemplo de uso Problema: dado um conjunto com K números, encontrar o maior número. 1. A solução do problema caracteriza o uso comandos de iteração? 2. Há um número de iterações deQinido? Qual a quantidade? 3. Qual a condição para executar as possíveis iterações? Exemplo de uso … int main( ){ int k, maior, num, cont; } variáveis
cout << "Qual o tamanho do conjunto: "; cin >> k; maior = 0; cont = 1; inicialização
while( cont <= k ) { cout << "Entre com um numero: "; cin >> num; if (num > maior) maior = num; cont = cont + 1; } estrutura do while
cout << "Maior é: ” << maior << endl; resultado
Problemas comuns 1. Laço inQinito: ocorre quando a expressão de teste é sempre verdadeira. Exemplo: int i = 1; while (i < 10) { cout << i << endl; } 2. Erros de lógica na expressão de teste. Exemplo: imprimir a sequência 0 1 2 3 4 5 int i = 0; while (i <= 6) { cout << i << “ ”; i = i + 1; } 3. Erros com operadores na expressão de teste. Exemplo: while (i = 5) 4. Erros de lógica pela falta de chaves { }; Exercício: Escreva um programa em C++ que solicite ao usuário um número K do tipo inteiro. Em seguida, calcule a soma dos números de 1 até K. No Qinal, mostre o resultado na tela. Exercícios 1. Faça um programa que leia do teclado 10 números e ao Qinal mostre o maior deles na tela. 2. Escreva um programa em C++ que calcule a média de um conjunto de notas. Você deve solicitar ao usuário uma nota até que ele digite -­‐1. Ao Qinal, mostre na tela o resultado. 3. Escreva um programa em C++ que solicite ao usuário um número inteiro e em seguida calcule o fatorial deste número. Ao Qinal mostre na tela o resultado. 4. Escreva um programa em C++ que solicite ao usuário um número e informe se o número é primo ou não. 5. O restaurante do Juca cobra R$ 45,00 pelo quilo da refeição. Escreva um programa que leia o peso do prato montado pelo cliente (em quilos), o tipo de cliente (1 -­‐ estudante ou 2 -­‐ normal) e mostre na tela o valor a ser pago por cada cliente. Considere um desconto de 10% se o cliente for estudante. Seu programa deve ler várias entradas, até que o peso do prato seja igual a 0. 6. Escreva um programa que leia do teclado uma quantidade de números a serem lidos. A seguir, seu programa deve solicitar e ler os números, e calcular a quantidade de números pares e de números negativos. Ao Qinal, seu programa deve mostrar as quantidades na tela. Exemplo: Quantidade: 5 Números: 3 2 -­5 -­7 12
Existem 2 números pares e 2 números negativos CI208 -­‐ Programação de Computadores Aula 9: Estruturas de Repetição: O comando while Prof. MSc. Diego Roberto Antunes [email protected] www.inf.ufpr.br/diegor Universidade Federal do Paraná Setor de Ciências Exatas Departamento de Informática Exercício: Escreva um programa em C++ que solicite ao usuário um número K do tipo inteiro. Em seguida, calcule a soma dos números de 1 até K. No Qinal, mostre o resultado na tela. Problema: Escreva um programa em C++ que solicite ao usuário um número K do tipo inteiro. Em seguida, calcule a soma dos números de 1 até K. Então mostre o resultado na tela. Seu programa deve ler vários números k, e deve executar uma nova soma enquanto k for maior que 0. Laços aninhados Para resolver esse problema, vamos utilizar duas estruturas de repetição, ou seja, dois comandos while aninhados. 1. Assim, podemos utilizar um while para controlar k: ler o valor de k e veriQicar se ele é positivo. 2. Dentro deste while, construímos um segundo while responsável por fazer a soma (como já resolvido anteriormente). Na prática... int main( ){ int k, soma, i; Declaração das variáveis
cout << “Informe um número: ”; cin >> k; while (k > 0) { soma = 0; i = 1; while (i < k){ soma = soma + i; i = i + 1; } cout << “A soma é :” << soma << endl; cout << “Informe um novo número: ”; cin >> k; } } Na prática... int main( ){ int k, soma, i; cout << “Informe um número: ”; cin >> k; Receber o valor de k
while (k > 0) { soma = 0; i = 1; while (i < k){ soma = soma + i; i = i + 1; } cout << “A soma é :” << soma << endl; cout << “Informe um novo número: ”; cin >> k; } } Na prática... int main( ){ int k, soma, i; cout << “Informe um número: ”; cin >> k; while (k > 0) { soma = 0; i = 1; while (i < k){ soma = soma + i; i = i + 1; } cout << “A soma é :” << soma << endl; cout << “Informe um novo número: ”; cin >> k; } } while que controla k > 0
Na prática... int main( ){ int k, soma, i; cout << “Informe um número: ”; cin >> k; while (k > 0) { soma = 0; i = 1; while (i < k){ soma = soma + i; i = i + 1; } cout << “A soma é :” << soma << endl; cout << “Informe um novo número: ”; cin >> k; } } Instruções para o cálculo da soma
de 1 até k
Na prática... int main( ){ int k, soma, i; cout << “Informe um número: ”; cin >> k; while (k > 0) { soma = 0; Cuidado com a inicialização das variáveis. Caso i e soma não fossem
corretamente inicializados, a soma do próximo k poderia ser incorreta.
i = 1; while (i < k){ soma = soma + i; i = i + 1; } cout << “A soma é :” << soma << endl; cout << “Informe um novo número: ”; cin >> k; } } Exercícios 1. Escreva um programa em C++ que solicite ao usuário um número inteiro e em seguida calcule o fatorial deste número. Ao Qinal mostre na tela o resultado. O programa deve ler vários números, enquanto o número lido for maior que 0. DeQina e Utilize uma função para calcular o fatorial de um número. 2. Escreva um programa em C++ que solicite ao usuário um número e informe se o número é primo ou não. O programa deve ler vários números, enquanto o número lido for maior que 0. DeQina e Utilize uma função para veriQicar se o número é primo. 3. Escreva um programa em C++ que solicite ao usuário um número nmax. Em seguida seu programa deve mostrar na tela os números primos de 1 até nmax. Utilize o programa que você escreveu no exercício 2. 
Download