Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Tiago881

C++ exercicios c++ maior e menor usr

Recommended Posts

Olá estou tentando resolver um exercicio  de um livro aqui mais enpacou no final 

usr deve entra com uma valor soma 54  media  /3  e o produto que * n1n2n3

que o resultado seria esse do livro

Entre com três valores inteiros: 13, 27 ,14 Soma: 54 Média: 18 Produto: 4914 O menor: 13 O maior: 27 

porém quando ele le o numero maior digitado pelo usr que e o 27 no caso ele ta somando  13 13 como maior e menor aonde errei alguem ajuda ai falta alguma  coisa no código <> segue o link da compilação > https://imgur.com/a/GpnAa

 

 

 

 

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main()
{
int n1;
int n2;
int n3;
int sum;
int media;
int produto;

int maior=0;
int menor=100000;

cout <<"Entre com valor one";
cin >> n1;
cout << "Entre com valor two";
cin >> n2;
cout << "Entre com valor tree";
cin >> n3;

sum = ( n1 + n2 + n3 );

cout <<"Soma " << sum << std::endl;

media = ( n1+ n2+ n3 ) /3;

 cout << "media " << media <<std::endl;

produto = ( n1* n2 * n3 );

cout << "produto " << produto << std::endl;


if ( n1 > maior )maior = n1;     
else if( n2 > maior )maior = n2;     
else if( n3 > maior )maior = n3;


if ( n1 < menor )menor =n1;
else if ( n2 < menor) menor =n2;
else if( n3 < menor ) menor =n3;

cout <<"maior = "<< maior << std::endl;
cout <<"menor = "<< menor << std::endl

       
return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Erro de lógica.

A estrutura de decisão if conjunto com else if torna-se um bloco só, podendo somente haver uma resposta correta, e as demais nem serão analisadas. Se logo no primeiro if der verdadeiro os seguintes else if nem serão comprovados, pois você ja tem uma resposta, não pode haver outras respostas.
Vamos analisar a primeira linha do seguinte pedaço do seu código:

if ( n1 > maior )maior = n1;
else if( n2 > maior )maior = n2;
else if( n3 > maior )maior = n3;

Mais concretamente:
if ( n1 > maior )maior = n1;

Se trocamos os nomes das variáveis por seus respectivos valores ficaria:
if ( 13 > 0 )0 = 13;

13 é maior que zero? claro!!! Então você ja tem uma resposta. Os seguintes else if serão ignorados. Só pode haver uma resposta!!! Assim trabalha o if conjuntamente com o else if.

 

Se quiser que seja analisado os 3 casos por separado melhor usar 3 if simples pois então as 3 variáveis seriam analisadas e comparadas com o maior neste caso.
if ( n1 > maior )maior = n1;//Se compara n1 com maior, como sabemos que é maior n1 se atribui a maior
if( n2 > maior )maior = n2;//Se compara n2 com maior, como sabemos que outra vez é maior n2 que maior, se atribui n2 a maior. Lembrando que maior passou a valer 13 no if anterior e que n2 vale 27
if( n3 > maior )maior = n3;//Se compara novamente, maior agora vale 27, e n3 vale 14, desta vez a variável "maior" é maior que o n3, nada acontece, e a variável maior ficou com 27, que é a resposta correta.

Então lembre! Se precisar analisar uma questão que abarca varias perguntas e tem varias respostas, porém só pode haver "UMA SÓ RESPOSTA CORRETA", sua estrutura é if + else if. porém se pode haver mais de uma resposta correta, melhor o if somente.

Vamos pensar um caso para ilustrar. Imaginamos estar dirigindo por uma estrada, e precisamos abastecer de combustível nosso carro conforme a situação do nível de combustível, o tanque pode estar cheio, meio ou vazio, é lógico que somente pode estar cheio, médio ou vazio, pois não pode estar das três formas, neste caso somente há um estado no qual pode estar. As aços que queremos tomar são: Se estiver cheio não reabastecemos. Se estiver médio continuamos até a seguinte estação de abastecimento. E se tiver vazio precisamos parar urgente na primeira gasolineira né? >_<

if(tanque==CHEIO)prosseguir=TRUE;
else if(tanque==MEDIO)prosseguir=TALVEZ;
else if(tanque==VAZIO)prosseguir=FALSE;

Só pode haver uma resposta, se o tanque estiver cheio, as seguintes condiciones não serão analisadas, o programa salta as seguintes comprovações após obter uma resposta correta.
você pode comprovar o que eu digo com o seguinte pedaço de código:

 

#include <iostream>
using namespace std;

#define VAZIO 0
#define MEDIO 1
#define CHEIO 3



int main() {

    int tanque = 3; //troque o valor por 0(corresponde a vazio), 1(medio) e 3(cheio)

    if(tanque == VAZIO){
        cout << "Se o tanque estiver VAZIO não entrará nas seguintes opções pois esta eh a correta." << endl;
    }else if(tanque == MEDIO){
        cout << "Se o tanque estiver MEDIO esta eh a correta, não entrará nas opções anteriores nem nas seguintes opções, somente entrara nesta opcao" << endl;
    }else if(tanque == CHEIO){
        cout << "Se o tanque estiver CHEIO não entrará nas anteriores opções e esta será a correta" << endl;
    }

    return 0;
}

como você pode ver somente ha uma opção as outras nem aparecem. Mesmo em um hipotético caso em que o tanque pudesse estar cheio e vazio ao mesmo tempo somente seria analisado uma das questoes, a primeira, as seguintes não seriam analisadas, pois estamos usando mal if+elseif, é um falho na lógica.

Pode averiguar nesse código:
 

#include <iostream>
using namespace std;

#define VAZIO 0
#define MEDIO 1
#define CHEIO 3




int main() {

    int tanque = VAZIO; //Deixe como zero

    if(tanque == VAZIO){
        cout << "O tanque vai começar VAZIO e vamos encher ele antes de comprovar se está cheio\nDeveria entrar em cheio tambem né?" << endl;
        tanque = CHEIO; //Enchemos o tanque
    }else if(tanque == MEDIO){
        //N4ao vai entrar aqui
    }else if(tanque == CHEIO){
        cout << "Se o tanque estiver CHEIO deveria entrar aqui né?!" << endl;
    }

    cout << "\n\nComo você viu não entrou em cheio, mesmo que enchemos o tanque antes de entrar em else if(tanque == CHEIO)" << endl;

    return 0;
}

Como podemos ver o programa ignora o resto das opções seguintes, pois ele encontrou que o tanque estava vazio, e mesmo que o reabasteçamos para ele é indiferente, por isso no seu programa da 13, por que 13 é menor que menor e maior que maior, e quando ele encontrar uma afirmação correta ele "SALTA" as demais opções analisadas.

Para resolver seu problema troque os else if por somente if, então todas as comparações serão analisadas separadamente e darão certo.

Espero ter sido de ajuda. Pratique mais as estruturas de decisão. Busque vídeos no youtube.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×