Aula 2 Fluxo de Controle Leandro Rezende Carneiro de Mendonça, MSc.
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
Expressões Booleanas Operadores Lógicos Operador lógico AND  (&&) Operador lógico OR (||)
Avaliando Expressões Booleanas Tipo bool Retorna true ou false true, false são constantes predefinidas Tabelas da verdade No próximo slide
Avaliando Expressões Booleanas
Precedência dos Operadores
Precedência dos Operadores
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
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;
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
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
Comando composto em Ação Note o alinhamento neste exemplo: if (meusPontos > seusPontos) { cout << “Eu ganhei!\n”; aposta = aposta + 100; } else { cout << “ Eu perdi! .\n”; aposta = 0; }
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
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
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!
if-else de seleções múltiplas Não é novo, simplesmente um alinhamento diferente Evite aninhamentos ‘excessivos’  Sintaxe:
Exemplo de if-else de seleções múltiplas
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
Sintaxe do comando switch
O comando switch em Ação
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’!\n”; break; case ‘B’: case ‘b’: cout << “bom:  você tirou um ‘B’!\n”; break; Note que múltiplos cases fornecem a mesma ‘entrada’
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
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.”; }
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’
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’
Sintaxe dos Loops while
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?
Sintaxe dos Loops do-while
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!
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’’
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
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
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’
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  }
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!
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 ’
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;
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 { }.
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
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
Dúvidas? email:  [email_address] site:  www.mediahome.com.br

Algoritmos C/C++ - Aula 02

  • 1.
    Aula 2 Fluxode Controle Leandro Rezende Carneiro de Mendonça, MSc.
  • 2.
    Objetivos do EstudoExpressõ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 OperadoresLógicos Operador lógico AND (&&) Operador lógico OR (||)
  • 4.
    Avaliando Expressões BooleanasTipo bool Retorna true ou false true, false são constantes predefinidas Tabelas da verdade No próximo slide
  • 5.
  • 6.
  • 7.
  • 8.
    Exemplos de PrecedênciaAritmé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 ControleComandos 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 comandoif-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 Deveser 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 emAção Note o alinhamento neste exemplo: if (meusPontos > seusPontos) { cout << “Eu ganhei!\n”; aposta = aposta + 100; } else { cout << “ Eu perdi! .\n”; 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 opcionalA 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 Comandosif-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çõesmúltiplas Não é novo, simplesmente um alinhamento diferente Evite aninhamentos ‘excessivos’ Sintaxe:
  • 17.
    Exemplo de if-elsede seleções múltiplas
  • 18.
    O comando switchUm 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.
  • 20.
  • 21.
    switch: múltiploscase A execução ‘continua’ até break switch fornece um ‘ponto de entrada’ Exemplo: case ‘A’: case ‘a’: cout << “Excelente: você tirou ‘A’!\n”; break; case ‘B’: case ‘b’: cout << “bom: você tirou um ‘B’!\n”; break; Note que múltiplos cases fornecem a mesma ‘entrada’
  • 22.
    Armadilhas/Dicas Esquecendo obreak; 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 Menucom 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 Chamadode ‘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 Tiposde 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.
  • 27.
    Exemplo de Loopwhile 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.
  • 29.
    Exemplo de Loopdo-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 Avaliauma 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 Loopfor 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 Loopfor 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ãode 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 InfinitosCondiçã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 econtinue 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õesbooleanas 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 Loopsdo-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