Algoritmos C/C++ - Aula 02

14,065 views

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,065
On SlideShare
0
From Embeds
0
Number of Embeds
157
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Algoritmos C/C++ - Aula 02

  1. 1. Aula 2 Fluxo de Controle Leandro Rezende Carneiro de Mendonça, MSc.
  2. 2. Objetivos do Estudo <ul><li>Expressões Booleanas </li></ul><ul><ul><li>Construindo, Avaliando e Regras de Precedência </li></ul></ul><ul><li>Estruturas de Controle </li></ul><ul><ul><li>if-else </li></ul></ul><ul><ul><li>switch </li></ul></ul><ul><ul><li>if-else aninhado </li></ul></ul><ul><li>Loops </li></ul><ul><ul><li>While, do-while e for </li></ul></ul><ul><ul><li>Loops aninhados </li></ul></ul>
  3. 3. Expressões Booleanas <ul><li>Operadores Lógicos </li></ul><ul><ul><li>Operador lógico AND (&&) </li></ul></ul><ul><ul><li>Operador lógico OR (||) </li></ul></ul>
  4. 4. Avaliando Expressões Booleanas <ul><li>Tipo bool </li></ul><ul><ul><li>Retorna true ou false </li></ul></ul><ul><ul><li>true, false são constantes predefinidas </li></ul></ul><ul><li>Tabelas da verdade </li></ul><ul><ul><li>No próximo slide </li></ul></ul>
  5. 5. Avaliando Expressões Booleanas
  6. 6. Precedência dos Operadores
  7. 7. Precedência dos Operadores
  8. 8. Exemplos de Precedência <ul><li>Aritmética antes da lógica </li></ul><ul><ul><li>x + 1 > 2 || x + 1 < -3 significa: </li></ul></ul><ul><ul><ul><li>(x + 1) > 2 || (x + 1) < -3 </li></ul></ul></ul><ul><li>Avaliação curto-circuito </li></ul><ul><ul><li>(x >= 0) && (y > 1) </li></ul></ul><ul><ul><li>Cuidado com operadores de incremento! </li></ul></ul><ul><ul><ul><li>(x > 1) && (y++) </li></ul></ul></ul><ul><li>Inteiros como valores booleanos </li></ul><ul><ul><li>Todos os valores não-zero  true </li></ul></ul><ul><ul><li>Zero  false </li></ul></ul>
  9. 9. Estruturas de Controle <ul><li>Comandos if-else </li></ul><ul><ul><li>Escolhe entre dois comandos alternativos baseado no valor de uma expressão booleana </li></ul></ul><ul><ul><li>Exemplo: if (horas > 40) pagamentoBruto = (taxa*horas) * 1.5; else pagamentoBruto = taxa*horas; </li></ul></ul>
  10. 10. Sintaxe do comando if-else <ul><li>Sintaxe Formal: if (<expressao_booleana>) <Sim_comando> else <Nao_comando> </li></ul><ul><li>Note que cada alternativa tem somente UM comando! </li></ul><ul><li>Para ter múltiplos comandos deve-se ter chaves { }  comando composto </li></ul>
  11. 11. Comando composto/bloco <ul><li>Deve ser usado { } para múltiplas instruções. </li></ul><ul><li>Cada bloco deveria ter um ‘bloco de comandos’ </li></ul><ul><ul><li>Mesmo se contiver somente um comando </li></ul></ul><ul><ul><li>Melhora a legibilidade </li></ul></ul>
  12. 12. Comando composto em Ação <ul><li>Note o alinhamento neste exemplo: if (meusPontos > seusPontos) { cout << “Eu ganhei! ”; aposta = aposta + 100; } else { cout << “ Eu perdi! . ”; aposta = 0; } </li></ul>
  13. 13. Armadilhas Comuns <ul><li>Operador ‘=‘ vs . operator ‘==‘ </li></ul><ul><li>Um significa ‘atribuição’ (=) </li></ul><ul><li>O outro significa ‘igualdade’ (==) </li></ul><ul><ul><li>MUITO diferente em C++! </li></ul></ul><ul><ul><li>Exemplo: if (x = 12)  Note o operador utilizado! Faca_Alguma_Coisa else Faca_Outra_Coisa </li></ul></ul>
  14. 14. O else opcional <ul><li>A cláusula else é opcional </li></ul><ul><ul><li>Se em uma ramificação falsa (else), você quer que ‘nada’ aconteça, pode omitir o ‘else’ </li></ul></ul><ul><ul><li>Exemplo: if (vendas >= minimo) salario = salario + bonus; cout << “salario = R$” << salario; </li></ul></ul><ul><ul><li>Nota: Não fazer nada para a condição falsa, assim não existe a cláusula else! </li></ul></ul><ul><ul><li>Execução continua no comando cout </li></ul></ul>
  15. 15. Comandos Aninhados <ul><li>Comandos if-else podem também conter qualquer comando, incluindo outro comando if-else! </li></ul><ul><ul><li>Exemplo: if (velocidade > 55){ if (velocidade > 80) cout << “ Você está correndo !”; else cout << “ Velocidade ideal .”; } </li></ul></ul><ul><ul><ul><li>Note o alinhamento adequado! </li></ul></ul></ul>
  16. 16. if-else de seleções múltiplas <ul><li>Não é novo, simplesmente um alinhamento diferente </li></ul><ul><li>Evite aninhamentos ‘excessivos’ </li></ul><ul><ul><li>Sintaxe: </li></ul></ul>
  17. 17. Exemplo de if-else de seleções múltiplas
  18. 18. O comando switch <ul><li>Um novo comando para controle de múlti-plas ramificações </li></ul><ul><li>Utiliza uma expressão de controle a qual retorna um tipo bool (true or false) </li></ul><ul><li>Sintaxe: </li></ul><ul><ul><li>No próximo slide </li></ul></ul>
  19. 19. Sintaxe do comando switch
  20. 20. O comando switch em Ação
  21. 21. switch: múltiplos case <ul><li>A execução ‘continua’ até break </li></ul><ul><ul><li>switch fornece um ‘ponto de entrada’ </li></ul></ul><ul><ul><li>Exemplo: case ‘A’: case ‘a’: cout << “Excelente: você tirou ‘A’! ”; break; case ‘B’: case ‘b’: cout << “bom: você tirou um ‘B’! ”; break; </li></ul></ul><ul><ul><li>Note que múltiplos cases fornecem a mesma ‘entrada’ </li></ul></ul>
  22. 22. Armadilhas/Dicas <ul><li>Esquecendo o break; </li></ul><ul><ul><li>Nenhum erro será emitido pelo compilador </li></ul></ul><ul><ul><li>A execução simplesmente ‘segue através’ de outros cases até o break; </li></ul></ul><ul><li>Grande utilidade: MENUS </li></ul><ul><ul><li>Fornece uma visão esclarecedora </li></ul></ul><ul><ul><li>Mostra efetivamente a estrutura do menu </li></ul></ul><ul><ul><li>Cada ramificação pode se uma opção do menu </li></ul></ul>
  23. 23. Exemplo de Menu com switch <ul><li>Comando switch ‘perfeito’ para menus: switch (resposta) { case ‘1’: // Executa a opção 1 do menu break; case ‘2’: // Executa a opção 2 do menu break; case 3’: // Executa a opção 3 do menu break; default: cout << “Favor digitar uma resposta válida.”; } </li></ul>
  24. 24. Operador Condicional <ul><li>Chamado de ‘Operador Ternário’ </li></ul><ul><ul><li>Essencialmente um operador if-else ‘abreviado’ </li></ul></ul><ul><ul><li>Exemplo: if (n1 > n2) max = n1; else max = n2; </li></ul></ul><ul><ul><li>Pode ser escrito: max = (n1 > n2) ? N1 : n2; </li></ul></ul><ul><ul><ul><li>‘ ?’ e ‘:’ juntos formam um operador ‘ternário’ </li></ul></ul></ul>
  25. 25. Loops <ul><li>3 Tipos de loops em C++: </li></ul><ul><ul><li>while </li></ul></ul><ul><ul><ul><li>Mais flexível </li></ul></ul></ul><ul><ul><ul><li>Sem ‘restrições’ </li></ul></ul></ul><ul><ul><li>do-while </li></ul></ul><ul><ul><ul><li>Menos flexível </li></ul></ul></ul><ul><ul><ul><li>Sempre executa o corpo de loop pelo menos uma vez </li></ul></ul></ul><ul><ul><li>for </li></ul></ul><ul><ul><ul><li>Loop natural de ‘contagem’ </li></ul></ul></ul>
  26. 26. Sintaxe dos Loops while
  27. 27. Exemplo de Loop while <ul><li>Considere: count = 0; // Inicialização while (count < 3) // Condição do Loop { cout << “Alô “; // Corpo de Loop count++; // Expressão de atualização } </li></ul><ul><ul><li>Quantas vezes o corpo de loop é executado? </li></ul></ul>
  28. 28. Sintaxe dos Loops do-while
  29. 29. Exemplo de Loop do-while <ul><li>count = 0; // Inicialização do { cout << “Oi “; // Corpo de Loop count++; // Expressão de atualização } while (count < 3); // Condição do Loop </li></ul><ul><ul><li>Quantas vezes o corpo de loop é executado? </li></ul></ul><ul><ul><li>Loops do-while sempre executam o bloco do loop pelo menos uma vez! </li></ul></ul>
  30. 30. while vs . do-while <ul><li>Muito parecidos, mas… </li></ul><ul><ul><li>Uma diferença importante: </li></ul></ul><ul><ul><ul><li>A questão é ‘QUANDO’ a expressão booleana é verificada </li></ul></ul></ul><ul><ul><ul><li>while: Verifica ‘ANTES’ que o corpo seja executado </li></ul></ul></ul><ul><ul><ul><li>do-while: Verifica ‘DEPOIS’ que o corpo foi executado </li></ul></ul></ul><ul><li>‘ Fora isso’, eles são essencialmente idênticos! </li></ul><ul><li>while é mais comum, devido ao fato de de ser mais ‘flexível’’ </li></ul>
  31. 31. OPERADOR VÍRGULA <ul><li>Avalia uma lista de expressões e fornece o valor da última expressão. </li></ul><ul><li>Mais freqüentemente usado em um loop for </li></ul><ul><li>Exemplo: resultado = (primeiro = 2, segundo = primeiro + 1); </li></ul><ul><ul><li>resultado recebe o valor 3 </li></ul></ul><ul><ul><li>segundo recebe o valor 3 </li></ul></ul><ul><li>Não há garantia de que a expressão </li></ul><ul><li>será avaliada na ordem correta </li></ul>
  32. 32. Sintaxe do Loop for <ul><li>for (Acao_De_Inicializacao; Expressao_Booleana; Atualização;) </li></ul><ul><li>Corpo_Do_Comando </li></ul><ul><li>Como if-else, Corpo_Do_Comando pode ser um bloco de comando, devendo conter { } </li></ul><ul><ul><li>Muito mais clássico </li></ul></ul>
  33. 33. Exemplo do Loop for <ul><li>for (contador=0; contador<3; contador++) </li></ul><ul><li>{ cout << “Olá “; // Corpo de loop } </li></ul><ul><li>Quantas vezes o corpo de loop é executado? </li></ul><ul><li>Inicialização, Condição e Atualização estão ‘embutidos’ dentro da estrutura do loop for </li></ul><ul><li>Um loop natural para ‘contagem’ </li></ul>
  34. 34. Loop <ul><li>A expressão de condição do loop pode ser QUALQUER expressão booleana </li></ul><ul><li>Exemplos: </li></ul><ul><ul><li>while (contador<3 && feito!=0) { // Faça algo } </li></ul></ul><ul><ul><li>for (indice=0;indice<10 && entrada!=-99) { // Faça algo } </li></ul></ul>
  35. 35. Armadilhas: Colocar ; no lugar errado <ul><li>Veja o ; (ponto-e-virgula) no lugar errado </li></ul><ul><li>Exemplo: while (resposta != 0) ;  { cout << “Entre valor: “; cin >> resposta; } </li></ul><ul><ul><li>Observe o ‘;’ depois da condição while! </li></ul></ul><ul><li>Resultado: UM LOOP INFINITO! </li></ul>
  36. 36. Armadilhas: Loops Infinitos <ul><li>Condição do Loop deve tornar-se falsa em alguma iteração do loop </li></ul><ul><ul><li>Se isso não ocorrer  loop infinito. </li></ul></ul><ul><ul><li>Exemplo: while (1) { cout << “Olá “; } </li></ul></ul><ul><ul><ul><li>Um loop perfeitamente legal em C++  sempre infinito! </li></ul></ul></ul><ul><li>Loops infinitos podem ser desejáveis </li></ul><ul><ul><li>Ex.: ‘ programa de reservas de passagens aéreas ’ </li></ul></ul>
  37. 37. COMANDOS break e continue <ul><li>Fluxo de controle </li></ul><ul><ul><li>Lembre-se como os loops fornecem ‘elegância’ e um fluxo limpo de controle e saída; </li></ul></ul><ul><ul><li>Em RARAS instâncias, pode-se alterar o fluxo; </li></ul></ul><ul><li>break: Força a saída do loop imediatamente; </li></ul><ul><li>continue: Pula o resto do corpo do loop e passa para a próxima iteração; </li></ul>
  38. 38. Loops Aninhados <ul><li>Lembre-se : QUAISQUER comandos C++ </li></ul><ul><li>válidos podem estar dentro do corpo de loop; </li></ul><ul><li>Isso inclui comandos adicionais de loop! </li></ul><ul><li>Requerem cuidado: for (externo=0; externo<5; externo++) for (interno=7; interno>2; interno--) cout << externo << interno; </li></ul><ul><ul><li>Nenhuma { }, uma vez que cada corpo é um comando, porém, recomenda-se o uso de { }. </li></ul></ul>
  39. 39. Sumário 1 <ul><li>Expressões booleanas </li></ul><ul><ul><li>Aritmética Booleana  resultados true or false </li></ul></ul><ul><li>Estruturas de controle em C++ </li></ul><ul><ul><li>if-else e switch </li></ul></ul><ul><ul><li>Comando switch: ideal para menus </li></ul></ul><ul><li>Comandos de loop em C++ </li></ul><ul><ul><li>while </li></ul></ul><ul><ul><li>do-while </li></ul></ul><ul><ul><li>for </li></ul></ul>
  40. 40. Sumário 2 <ul><li>Loops do-while </li></ul><ul><ul><li>sempre executam seu corpo de loop pelo menos uma vez! </li></ul></ul><ul><li>Loop for </li></ul><ul><ul><li>Um loop natural para ‘contagem’ </li></ul></ul><ul><li>Loops podem ser interrompidos mais cedo </li></ul><ul><ul><li>comando break </li></ul></ul><ul><ul><li>comando continue </li></ul></ul>
  41. 41. Dúvidas? <ul><li>email: [email_address] </li></ul><ul><li>site: www.mediahome.com.br </li></ul>

×