Mandar um cafézinho para o programador:


Me ajude a transformar café em código!
Mostrando postagens com marcador Testes Condicionais. Mostrar todas as postagens
Mostrando postagens com marcador Testes Condicionais. Mostrar todas as postagens

Quantos dias o mês possui - Exercício de C++

Neste tutorial, vamos resolver o seguinte exercício de nossa lista:
  • 08. Usando os conceitos de switch case, faça um programa que pergunte o mês ao usuário (número de 1 até 12), e diga quantos dias aquele mês possui. Fevereiro tem 28 dias (não é bissexto).

Quantos dias tem no mês

Vamos lá.
Meses com 28 dias: 2
Meses com 30 dias: 4, 6, 9 e 11
Meses com 31 dias: 1, 3, 5, 7, 8, 10 e 12

Vamos fazer acumulando cases, para você fixar melhor esta importante técnica usando switch.
A variável days inicia com 0.

A lógica é a seguinte...todos os meses tem 28 dias ou mais. Assim, queremos que o 'case 2' seja sempre executado, então ele vai ficar lá embaixo.
Lá, iremos adicionar o valor 28 a variável days.
Pronto, qualquer mês que você digite vai ter pelo 28 dias, pois não usaremos break nos cases, pra acumular.
  • days = days + 28;

Os cases do meio são os dos meses 4, 6, 9 e 11 tem 30 dias.
Como já vamos adicionar 28 dias, só temos que adicionar mais 2 dias pra ficar 30, nesses cases:
  • days = days + 2;
Veja bem: se digitar 2, cai só no 'case 2', que coloca 28 dias na variável. Se digitar 4, 6, 9 ou 11, cai nesses cases que soma 2 e depois cai no 'case' que soma mais 28 dias, totalizando 30 dias.

Então, caso digitem 1, 3, 5, 7, 8, 10 ou 12, devemos somar apenas +1:
  • days = days + 1;
Veja como ficou nosso código:

#include <iostream>
using namespace std;

int main()
{
    int days=0, month;

    cout << "Numero do mes: ";
    cin >> month;

    switch(month)
    {
        case 1: case 3: case 5: case 7:
        case 8: case 10: case 12:
            days = days + 1;

        case 4: case 6:
        case 9: case 11:
            days = days + 2;

        case 2:
            days=days+28;
            break;
        default:
            cout <<"Mês inválido"<<endl;
    }

    cout <<"O mês "<<month<<" tem "<<days<<" dias.\n";
}

Deu pra entender? É uma solução bem charmosa.

3 Números em ordem crescente e decrescente em C++

Neste tutorial, vamos resolver dois exercícios da nossa lista de testes condicionais.
  • 03. Faça um programa que peça 3 números e os coloque em ordem crescente.
  • 04. Faça um programa que peça 3 números e os coloque em ordem decrescente.

3 números em ordem crescente

Vamos armazenar os números nas variáveis num1, num2 e num3, e também usaremos uma variável temporária, uma auxilar, a temp.

A ideia é a seguinte: queremos colocar o maior valor digitado na variável num1. O segundo maior valor, na variável num2 e o menor na num3.

Para isso, vamos fazer três comparações:

  1. Comparar num1 com num2, se num2 for maior, invertemos os valores. Após esse primeiro teste, garantimos que o valor contido em num1 é maior que num2.
  2. Comparar num1 com num3, se num3 for maior, invertemos os valores. Após esse segundo teste, garantimos que o valor contido em num1 é maior que em num2 e agora maior que num3.
  3. Agora temos num2 e num3, se num3 for maior, devemos inverter os valores, assim teremos o valor contido em num2 maior que num3.


Para fazer as inversões de valores, usaremos o tutorial:
Como trocar o valor de variáveis

Nosso código fica:
#include <iostream>
using namespace std;

int main()
{
    int num1, num2, num3, temp;

    cout << "Numero 1: ";
    cin >> num1;

    cout << "Numero 2: ";
    cin >> num2;

    cout << "Numero 3: ";
    cin >> num3;

    if(num2 > num1){
        temp = num1;
        num1 = num2;
        num2 = temp;
    }

    if(num3 > num1){
        temp = num1;
        num1 = num3;
        num3 = temp;
    }

    if(num3 > num2){
        temp = num2;
        num2 = num3;
        num3 = temp;
    }

    cout <<num1<<" >= "<<num2<<" >= "<<num3<<endl;
}

3 números em ordem decrescente

A lógica é a mesma da anterior, apenas queremos que num1 tenha o menor valor, num2 o segundo menor valor e num3 o maior valor.

Nosso código fica:

#include <iostream>
using namespace std;

int main()
{
    int num1, num2, num3, temp;

    cout << "Numero 1: ";
    cin >> num1;

    cout << "Numero 2: ";
    cin >> num2;

    cout << "Numero 3: ";
    cin >> num3;

    if(num2 < num1){
        temp = num1;
        num1 = num2;
        num2 = temp;
    }

    if(num3 < num1){
        temp = num1;
        num1 = num3;
        num3 = temp;
    }

    if(num3 < num2){
        temp = num2;
        num2 = num3;
        num3 = temp;
    }

    cout <<num1<<" <= "<<num2<<" <= "<<num3<<endl;
}

Exercícios de Testes Condicionais em C++

Pessoal, encerramos mais uma vez uma seção de nosso curso de C++.
Parabéns se chegou aqui. Agora vamos praticar nossos conhecimentos fazendo alguns exercícios.

E lembrem-se: tentem bastante, mas muito, muito mesmo.
Não de? Pensa mais um pouco. Depois mais, dá uma volta, esfria a cabeça, e tentem de novo.

Resolver problemas é sinônimo de ser programador, portanto tente resolver os exercícios abaixo, usando seus conhecimentos básicos de C++ e de testes condicionais.

Problemas de testes condicionais em C++

01. Faça um programa que peça dois números, e diga qual é maior ou se são iguais.
Como comparar dois números

02. Faça um programa que diz se um número recebido é positivo ou negativo.
Código na apostila

03. Faça um programa que pede dois inteiro e armazene em duas variáveis. Em seguida, troque o valor das variáveis e exiba na tela
Como trocar o valor de duas variáveis

04. Faça um programa que peça 3 números e os coloque em ordem crescente.

05. Faça um programa que peça 3 números e os coloque em ordem decrescente.
3 números em ordem crescente e decrescente

06. Programe um software que recebe as coordenadas X e Y do usuário, e diga em qual quadrante o ponto está.

07. Faça um programa de calculadora simples, que pede dois números ao usuário, em seguida exibe um menu onde ele vai escolher que operação será realizada. A operação e a saída devem estar em um switch case.

08. Usando os conceitos de switch case, faça um programa que pergunte o mês ao usuário (número de 1 até 12), e diga quantos dias aquele mês possui. Fevereiro tem 28 dias (não é bissexto).
Quantos dias o mês tem

09. Usando os conceitos de switch case, faça um programa que pergunte o mês ao usuário (número de 1 até 12), e diga quantos dias aquele mês possui, incluindo se é ano bissexto ou não.
Código na apostila

10. Faça um programa que recebe os três lados de um triângulo e diz se é equilátero, isósceles ou escaleno.
Tipos de triângulo em C++

11. Faça um programa que calcule as raízes de uma equação do segundo grau, na forma ax² + bx + c. O programa deverá pedir os valores de a, b e c e fazer as consistências, informando ao usuário nas seguintes situações:

    Se o usuário informar o valor de A igual a zero, a equação não é do segundo grau e o programa não deve fazer pedir os demais valores, sendo encerrado;
    Se o delta calculado for negativo, a equação não possui raizes reais. Informe ao usuário e encerre o programa;
    Se o delta calculado for igual a zero a equação possui apenas uma raiz real; informe-a ao usuário;
    Se o delta for positivo, a equação possui duas raiz reais; informe-as ao usuário;


PS: Inclua a biblioteca cmath (#include <cmath>) e use a função sqrt(x) para calcular a raiz de x.

Equação do segundo grau com Bháskara em C++

Operadores Lógicos em C++: AND (&&), OR (||) e NOT (!)

Baixar a apostila C++ Progressivo
Neste tutorial de nosso curso de C++, vamos aprender mais três operadores, chamados operadores lógicos, que nos permitirão fazer testes mais complexos e interessantes. São eles:

  • && - AND ou E
  • || - OR ou OU
  • ! - NOT ou de negação


Operador Lógico AND: &&

O operador && serve para unir duas expressões lógicas em uma só, assim:

  • expressão1 && expressão2
O resultado dessa expressão é verdade somente se a expressão1 E a expressão2 forem verdadeiras.
Se qualquer uma delas for falsa, a expressão geral se torna falsa também.

A tabela verdade do operador && é:
Tabela verdade do operador lógico &&

Por exemplo, para você doar sangue, precisa ser de duas condições:
Ser maior de idade
Não ter doenças

Ou seja, pra dor você precisa ser maior E TAMBÉM não ter doenças:
  • maioridade && não ter doenças

Se qualquer uma dessas condições não for satisfeita (for false), você não pode doar sangue.
Vamos refazer o programinha que diz se é obrigatório você votar ou não.

Para ser obrigatório, deve satisfazer duas condições:
Ter 18 anos ou mais
Ter menos de 65 anos

Ou seja, precisa ter 18 anos E (AND) precisa ter menos de 65 anos.
Nosso código C++ fica assim:

#include <iostream>
using namespace std;

int main()
{
    int age;

    cout <<"Sua idade: ";
    cin >> age;


    if( age>=18 && age<65 )
        cout << "Obrigatório votar.";
    else
        cout << "Voto facultativo";


    return 0;
}

Veja que ficou bem mais enxuto, pois fizemos dois testes condicionais de uma vez só dentro do IF.
Se a pessoa tiver menos de 18 anos, a primeira expressão vai dar falsa e o teste inteiro se torna falso, indo pro ELSE.
Se ela tiver 65 ou mais, a segunda expressão já se torna falsa, deixando o resultado do IF falso também, indo pro ELSE.
Em ambos casos, o voto é facultativo.


Operador Lógico OR: ||

O operador lógico || (OU) une duas expressões assim:
expressão1 || expressão2

Ele retorna verdadeiro se qualquer uma das expressões forem verdadeiras.
Ou seja, só retorna falso se ambas forem falso. Confira a tabela verdade deste operador:

Curso de C++

Por exemplo, se numa rodovia a velocidade máxima é de 80 km/h, andar acima disso e abaixo da metade (40 km/h) dá multa. Vamos testar:

  • velocidade > 80 || velocidade < 40


Ou seja: se a velocidade for maior que 80 km/h OU for abaixo de 40 km/h, o motorista vai levar uma multa. Se alguma das expressões for verdadeira, o teste inteiro é verdadeiro.

Veja um programa que recebe a velocidade de um carro e diz se vai gerar multa ou não:
#include <iostream>
using namespace std;

int main()
{
    int speed;

    cout <<"Velocidade: ";
    cin >> speed;


    if( speed>80 || speed<40 )
        cout << "Vai levar multa.";
    else
        cout << "Tudo ok.";


    return 0;
}
O IF detecta se você vai levar multa, ou seja, pra não levar precisa cair no ELSE, e só cai no ELSE se ambas as expressões forem falsas, logo, você não está nem acima de 80 nem está abaixo de 40, logo está entre 40 e 80, que é o correto. Sacou ? OU uma coisa OU outra.

Operador Lógico NOT: !

Por fim, temos o operador de negação.
Ele transforma o que é falso em verdadeiro, e o que é verdadeiro em falso.

Veja a tabela verdade dele:
Operador de negação !
Ou seja:
!true é o mesmo que false
!false é o mesmo que true

Refazendo o primeiro código:
#include <iostream>
using namespace std;

int main()
{
    int age;

    cout <<"Sua idade: ";
    cin >> age;


    if( !(age>=18 && age<65) )
        cout << "Voto facultativo.";
    else
        cout << "Obrigatório votar";


    return 0;
}
Refazendo o segundo código:
#include <iostream>
using namespace std;

int main()
{
    int speed;

    cout <<"Velocidade: ";
    cin >> speed;


    if( !(speed>80 || speed<40) )
        cout << "Tudo ok.";
    else
        cout << "Vai levar multa.";


    return 0;
}
Pode parecer mais complicado ou a mesma coisa, de fato é a mesma coisa, mas muitas vezes vai ser mais lógico e vai fazer mais sentido usar o operador NOT em alguns testes condicionais. Veremos isso algumas vezes, no decorrer de nosso curso de C++.

A precedência de operadores entre eles é, de cima pra baixo:
!
&&
||

Exercício de Operadores Lógicos

No tutorial passado, sobre IF e ELSEs aninhados, propusemos uma questão sobre converter uma nota numérica em A, B, C... mas tem um bug ali.

E se o usuário digitar menos que 0 ou mais que 10?
É um erro. Ajeite o programa usando o operador lógico || para caso digitem notas abaixo de 0 ou acima de 10.

O teste condicional IF em C++

Neste tutorial de C++, vamos aprender a usar o teste condicional IF.
Assim, nossos programas vão ficar mais flexíveis e dinâmicos.



Tomando decisões em C++

Até o momento, todos nossos códigos foram puramente sequenciais.
Ou seja, rodaram de cima pra baixo, na função main, executando linha por linha, comando por comando, e sempre desse jeito.

Se rodarmos nossos programas 1 milhão de vezes, eles fazem o mesmo 1 milhão de vezes.
Mas será que é isso que ocorre nos programas do dia-a-dia?

Quando você clica numa coisa, abre uma coisa, se clica em outra, outra coisa abre.
Se digita um comando, algo acontece. Se digita outro, outra coisa diferente acontece.

Ou seja, o que seu computador vai fazer depende do que você faz, ele precisa fazer alguns testes antes de tomar que decisão ele deve tomar.

Vamos aprender como tomar essas decisões agora, usando o teste condicional if.

O comando IF no C++

A estrutura do comando IF é bem simples e fácil de entender, veja:
if ( teste_condicional ){
  // código
  // código
  // código
}
Começamos com o comando if, em seguida abrimos parêntesis, e dentro deles deve ter algum valor booleano (1 ou 0, true ou false), no caso o mais comum é fazermos alguma operação relacional (teste de comparação), depois algum código entre chaves.

O funcionamento é bem simples: a instrução if vai analisar o que tem dentro dos parêntesis.
Se o que tiver lá for verdadeiro, ela executa o código entre chaves.

Se o que tiver ali dentro for falso, ela não faz nada, o if é pulado, como se não existisse.

IF em inglês significa 'se'.
Então, leia: se for verdade, então executa isso.

Como usar o IF em C++

O programa abaixo tem um teste condicional:
2 > 1

Se este teste for verdade, o cout dentro do IF é executado:
#include <iostream>
using namespace std;

int main()
{
    if( 2 > 1){
        cout << "Realmente, dois é maior que 1";
    }
    return 0;
}
Obviamente, é verdade, por isso, a mensagem sempre aparece na tela.
Agora teste com 2 < 1

O que aconteceu?

Exemplo de uso do IF

Faça um programa que peça a idade ao usuário e informe caso ele seja de maior.

Uma pessoa é de maior se tem 18 ou mais anos de idade, então nosso código fica assim:
#include <iostream>
using namespace std;

int main()
{
    int age;

    cout << "Qual sua idade: ";
    cin >> age;

    if( age >= 18){
        cout << "Você é de maior";
    }

    return 0;
}
Você consegue resolver esse exercício usando o operador > ao invés do >= ?

Exemplo de uso do IF

Pergunte uma nota ao usuário, e caso ela seja menor que 6 diga que ele está reprovado.

Veja como fica o código:
#include <iostream>
using namespace std;

int main()
{
    float grade;

    cout << "Qual sua nota: ";
    cin >> grade;

    if( grade < 6)
        cout << "Reprovado";

    return 0;
}
Note que não usamos chaves, isso é porque o código do IF é composto apenas de uma linha de instrução. Nesses casos, não precisa colocar entre chaves.

Mas se a instrução dentro do IF for maior, use chaves.

Veja como o C++ é um professor rigoroso, coloquei a nota 5.99999 e mesmo assim ele me reprovou:
IF e ELSE em C++


Usando o IF em C++

Faça um programa que peça dois números ao usuário, e informe caso sejam iguais.
#include <iostream>
using namespace std;

int main()
{
    float num1, num2;

    cout << "Numero 1: ";
    cin >> num1;

    cout << "Numero 2: ";
    cin >> num2;

    if( num1 == num2)
        cout << "São iguais!";

    return 0;
}
Bem simples, não é?
Note que se você digitar números diferentes, o IF recebe o resultado false no teste condicional e não executa seu código.

Ou seja, nada acontece, o programa simplesmente pula o IF.

Exercício

Escreva um programa que pede uma senha numérica ao usuário e mostre uma mensagem de erro caso ele ERRE a senha. A senha é 2112.

Poste sua solução nos comentários.

Operadores Relacionais (de comparação) em C++: > , < , >= , <=, == e !=

Neste tutorial de nosso Curso de C++, vamos aprender quais são e como usar os operadores relacionais, também conhecidos como operadores de comparação, que são:
  • > maior que 
  • < menor que 
  • >= maior ou igual
  • <= menor ou igual
  • == igual
  • != diferente

Como comparar coisas em C++

Embora este tutorial seja um pouco chato e teórico, ele é necessário para entendermos melhor o uso dos testes condicionais IF e ELSE, que iremos usar nos próximos tutoriais.

O que vamos fazer agora é ensinar você a realizar a operação de comparação, ela é feita assim:
operando1 operador operando2

Ou seja, vamos usar dois operandos (dados, como números ou caracteres) e um operador (no caso, um relacional).

  • E esta operação sempre retorna um dos valores:
  • TRUE (verdadeiro ou 1)
  • FALSE (falso ou 0)


Sempre.
Operação de relação é sempre uma pergunta que a resposta é 1 ou 0, true ou false.
Ok?

Operador de igualdade em C++: ==

Bom, vamos lá.

Se quisermos saber se um valor x é igual a um y, fazemos:
x == y

Veja bem, é: x == y
E não: x = y

Vamos testar se 1 é igual 1 e depois se é igual a 2, rode o código abaixo:
#include <iostream>
using namespace std;

int main()
{
    cout << (1 == 1) << endl;
    cout << (1 == 2) << endl;

    return 0;
}
O resultado foi:
Como fazer comparações em C++
Realmente, 1 é igual 1 (deu 1, TRUE, o resultado da comparação).
E 1 não é igual a 2 (deu 0, FALSE, o resultado da comparação).

Operador de diferença em C++: !=

Assim como tem um operador que verifica a igualdade, tem outro que verifica a não-igualdade.
Se dois valores forem diferentes, a operação de comparação com != vai resultar TRUE.
Se forem iguais, resulta em FALSE.

Vamos ver na prática, compile e rode:
#include <iostream>
using namespace std;

int main()
{
    cout << ('a' != 'b') << endl;

    return 0;
}
Ou seja, o caractere 'a' é diferente de 'b'.

Agora teste se 'a' é diferente de 'A'.
É ?

Operador de maior em C++: >

Se quisermos testar se um valor X é maior que um valor Y, usamos o operador: >
X > Y

Se X for maior, ele retorna TRUE (1).
Se for igual ou menor, ele retorna FALSE (0).

Operador de maior igual em C++: >=

Se quisermos testar se um valor é maior, ou igual, usamos: >=
X >= Y

Ele retorna 1 (true) se X for maior ou igual que Y, e 0 caso X seja menor.

Por exemplo, para testar se uma pessoa já pode dirigir, beber, entrar no motel...devemos fazer:
idade >= 18


Operador Menor e Menor igual em C++: < e <=

Analogamente, existem os operador menor e menor igual.

Para testarmos se uma pessoa pode doar sangue, devemos testar:
idade < 65

Para saber quem é isento de declarar imposto de renda, devemos testar:
valor <= 28559.70


Cuidado com comparações

Um erro muito grave é confundir:
x = y;

Com:
x == y;

No primeiro caso, é uma atribuição.
A variável x está recebendo o valor da variável y.

No segundo caso é uma comparação.
Sempre leia comparação como uma pergunta: x é igual a y?

E quando você pergunta as coisas pro C++ ele só te dá duas respostas: 1 ou 0
Assim, se quiser armazenar o valor de uma comparação, declare um booleano, ok?

  • Exercício de C++

Faça um programa que pede dois valores ao usuário (pode ser um número ou um caractere), em seguida exiba todas as operações de comparação, como no exemplo abaixo:


Operadores de comparação em C++

Tentou?
Conseguiu?

Nosso código ficou assim:
#include <iostream>
using namespace std;

int main()
{
    int op1, op2;

    cout << "Primeiro valor: ";
    cin >> op1;

    cout << "Segundo valor : ";
    cin >> op2;

    cout << op1 << " >  " << op2 <<" : "<<(op1>op2)<<endl;
    cout << op1 << " <  " << op2 <<" : "<<(op1<op2)<<endl;
    cout << op1 << " >= " << op2 <<" : "<<(op1>=op2)<<endl;
    cout << op1 << " <= " << op2 <<" : "<<(op1<=op2)<<endl;
    cout << op1 << " == " << op2 <<" : "<<(op1==op2)<<endl;
    cout << op1 << " != " << op2 <<" : "<<(op1!=op2)<<endl;
    return 0;
}
E o seu?

Ajude o C++ Progressivo

Que tal apoiar e fazer crescer o ensino da programação no Brasil ?

Ajudar nosso país a crescer e se desenvolver cada vez mais, tecnologicamente?

Clica abaixo pra saber mais!

Apoiar o Projeto Progressivo