Baixe o app para aproveitar ainda mais
Prévia do material em texto
Algoritmos / Aula 5 - Estrutura de decisão Introdução Tomar decisões é uma parte muito importante da nossa vida e também dos nossos programas. Fazemos isso todos os dias e a toda hora. Um programa também tem momentos nos quais tem de parar e avaliar as condições para tomar uma determinada direção. Imagine o robô Curiosity em Marte fazendo suas explorações: ao encontrar um determinado tipo de material, ele precisa avaliar e tomar alguma decisão. Enfim, a estrutura de decisão é outra peça fundamental e presente em qualquer linguagem de programação. Vamos dividir este conceito em duas aulas e, nesta, vamos começar com os conceitos mais básicos. Vamos lá? Até agora, vimos os seguintes elementos de programação: Já aprendemos bastante coisa, não é? Para continuar nossos estudos, temos que começar a aplicar estes conceitos daqui para a frente e estudar alguns comandos que desviam o fluxo sequencial e natural de um algoritmo e de um programa. É assim que ocorre também na estrada a seguir: o motorista que está nesta estrada tem uma importante decisão a fazer: ou toma o caminho da direita ou o da esquerda. Exemplo Nos programas de computador, as decisões são muito mais comuns do que você pensa. Quando você abre um arquivo, se ele for protegido, então vai aparecer uma janela avisando. No Word, se o botão de negrito estiver selecionado, então o seu texto ficará em negrito, e por aí vai. Temos que aprender a fazer isso. Vamos usar um exemplo mais fácil: pense nas suas notas escolares. Suponha que a média para aprovação seja 6. Como você bolaria um programa para verificar se você está aprovado ou não? O desvio é feito quando a média é maior que 6. E uma vez que a média for maior que 6, o programa pega um caminho que exclui a outra possibilidade (de ser menor que 6).Além disso, atente que, se a nota for exatamente igual a 6, nem assim o aluno estará aprovado. Percebeu que a condição lógica é importante? Isto foi visto na aula anterior, e lá dissemos que estas condições têm que ser muito bem montadas para poder executar o programa corretamente. Esse desvio é chamado de desvio condicional simples. Vamos observá-lo com mais detalhes em C++. Calculando um desvio condicional simples Você também deve ter percebido que grifamos algumas palavras desde o início desta aula. Quais foram as palavras grifadas? “Se” e “então”. Aí, entramos no conceito do primeiro tipo de desvio: o chamado desvio condicional simples. Vamos fazer um exemplo para mostrar este tipo de desvio de fluxo. Trata-se do cálculo do IMC (índice de massa corporal). Este índice é muito fácil de ser calculado e, de acordo com seu resultado, precisamos consultar uma tabela para classificar o usuário. Como programar um desvio condicional simples Veja que o programa: Compare a forma como usamos o if com a figura do comando exibida anteriormente. Tranquilo, né? Se o cálculo for menor que 17, o sujeito está bem abaixo do peso. Essa classificação é feita de acordo com a tabela a seguir. Esta tabela pode ser obtida em qualquer site que mostre o cálculo do IMC. Fonte: https://www.youtube.com/embed/https://youtu.be/ 2TTJW92xHcQ Programando... Portanto, como podemos perceber, a sintaxe de um if em C++ é assim: Perceba que temos alguns detalhes que precisam ser seguidos para o if poder funcionar. Exemplo Em C++, não utilizamos a palavra “então”. Fica implícito que o código que virá a seguir é o que deve ser feito quando a condição testada é verdadeira. O comando é simples. Dentro dos parênteses há um teste, o qual pode ser uma simples comparação ou uma expressão lógica maior. Isto vai depender do programa. Então, prepare-se para colocar dentro desse teste qualquer tipo de expressão que possa ser avaliada e retornar verdadeiro (true) ou falso (false). Se o teste for verdadeiro, o bloco é executado. Se for falso, o bloco é ignorado completamente e o fluxo do programa continua na linha seguinte ao bloco. O tamanho do bloco pode ser de 1, 2, 200, 2.000 linhas. De qualquer forma, se o teste for false, todo o bloco, independentemente do tamanho que seja, será ignorado. Você se lembra do fluxograma? Para esta estrutura, o fluxograma correspondente é: Voltando ao programa do cálculo do IMC, podemos torná-lo mais complexo. Como você pode perceber, o programa só vai tratar daquelas pessoas bem magrinhas. As outras classificações existentes na tabela não foram contempladas. E agora? Como vamos fazer? O que você sugere? É simples. Se for menor que 17, já fizemos, a situação é “muito abaixo do peso”. Se estiver entre 17 e 18,49, a situação é “abaixo do peso”. Se estiver entre 18,5 e 24,99, a situação é “peso normal”. E assim por diante. Mas o que significa estar entre 17 e 18,49 (por exemplo)? GABARITO Resposta em “computes”: imc>=17 E imc<=18,49, ou melhor, imc>17 && imc<=18,49. Atenção https://www.youtube.com/VcwYB1p0_mU Como programar um desvio condicional composto Até agora, aprendemos apenas uma parte da estrutura condicional. Vimos que, se uma condição for verdadeira, ela vai executar um bloco de programação, e em seguida, continuar com o fluxo normal do programa. Veja o exemplo: Observe que se a idade for menor que 18, o programa vai ignorar todo o bloco entre as linhas 10 a 14 e continuar o seu fluxo normal na linha 15. Mas e se quisermos tratar a condição quando a idade for menor que 18 anos? Sua primeira resposta pode ser: “mas isto já é feito no programa acima. A linha 15 é executada se a idade for menor que 18”. Preste atenção: a linha 15 será executada de qualquer maneira. O que estamos propondo agora é: Se a idade for maior que 18, faça as linhas 11 a 14, senão faça outra coisa! A situação pode ser explicada de acordo com o fluxograma a seguir: Programando um desvio condicional composto Em C++, a sintaxe é a seguinte: Vamos ver um exemplo em C++: Fonte: https://www.youtube.com/embed/ylAcViIrZIs Na linha 10, o teste é feito. Se o número for positivo, o programa executa a linha 11, encontra o fim do bloco e (preste atenção agora) vai para a linha 16. O programa ignora o bloco do “else” (pois este bloco é a execução caso o teste for falso). Se o teste da linha 10 for falso, o programa vai ignorar o bloco que começa com o { logo após o if e vai diretamente procurar o else, que está na linha 13. Ele executa o bloco do else, também passa pela linha 16 e finaliza o programa. Assista com atenção ao vídeo: O código do programa executado no vídeo é o seguinte: Durante o vídeo, temos duas execuções. Cada uma delas mostra o resultado do teste da linha 10. Veja que, quando o teste é positivo, o programa executa o bloco das linhas 10 a 13, e quando o teste é falso, o bloco das linhas 14 a 17 é executado. E para finalizar, a frase da linha 18 é sempre mostrada. Na próxima aula, vamos continuar a aprender outras formas de desvios de fluxo e, portanto, ainda vamos ficar mais um tempo desvendando o “if-else”. Até lá! Atividade 1) Faça um programa bastante útil: para doar sangue, é necessário ter entre 18 e 67 anos. Desenvolva um programa em C++ que pergunte a idade de uma pessoa e diga se ela pode doar sangue ou não. 2) O pedaço de programa abaixo está correto? Sim, e vai imprimir “Idade maior ou igual a 15”. Sim, e vai imprimir “Idade menor que 15”.Não, pois o operador relacional está errado. Não, há um erro de sintaxe na primeira linha. Não, o cout pede o operador “>>”. GABARITO Letra d. Após o if e a condição, não pode ter o “;”. 3) Em um programa para determinar se o número é par ou ímpar, vamos precisar dos seguintes recursos: I - Do operador mod (%); II - De um desvio condicional composto; III - Da biblioteca cmath. Apenas I. Apenas II. Apenas III. Apenas I e II. Apenas II e III. GABARITO 4) Dentre os recursos que aprendemos, quais seriam usados para um programa que verifica se uma letra informada é uma vogal ou consoante? I - Um if simples II - Um if composto III - Operador de igualdade (==) IV - Operador && V -Operador || Somente I e III. Somente I, III e V. Somente I, III e IV. Apenas II, III e IV. Apenas II, III e V. GABARITO 5) Analise o trecho de programa em C++ abaixo e escolha a alternativa correta: int main(void) { int A, B; cin>>B cin>>A; if (A > B) B = A + B; if (A < B) A = (B%2); cout<<A; } Se A=62 e B=32, o que o programa vai imprimir? 62. 32. 0. 34. 93. GABARITO 6) Escolha a condição que fará que o número 13 seja impresso: int main(void){ int num1, num2; num1 = 13; num2 = 22; if ( ________________________) cout<else cout<<num1; } (num1>num2)||(num2<20) (num2>num1)&&(num2<25) (num1>num2)||(num1<20) (num1==num2)||(num2<25) (num1<num2)&&(num2<20) GABARITO
Compartilhar