Algoritmos C/C++ - Aula 02

  • 13,252 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
13,252
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
0
Comments
0
Likes
2

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

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