Ovarmars Posted May 7, 2011 at 10:48 PM Report #386176 Posted May 7, 2011 at 10:48 PM Boas a todos, estou a precisar de uma grande ajuda. Estou no inicio das aulas de c++ (tive duas aulas -.-) e mandaram-me fazer um programa em que teria que indicar qual o maior e o menor de 4 números que o utilizador coloque. Desculpe se digo alguma imbecilidade, mas estou no inicio disto mesmo. Ora bem o meu erro é o seguinte, quando coloco 4 números diferentes o programa funciona bem, mas se por acaso repito um numero o programa só já me indica qual o menor ou o maior. Ex. 1,1,2,3 -> só me indica o maior, 3; 4,4,3,2 -> só me indica o menor, 2; 1,1,2,2 -> não me dá indicação alguma A quem me conseguir ajudar um muito obrigado. 😉 Aqui fica o meu código # include <iostream.h> void main () //de entre 6 numeros decidir qual é o maior e o menor { float a,b,c,d; //coloquei float a pensar que o utilizador poderia por numeros decimais char t; // Guarda o caracter premido (s ou n) para repetir o programa do { cout<<"\nVou decidir qual e o maior dos quatro numeros que vais introduzir \n"; cout<<"\nIntroduza os quatro numeros \n"; // "\n" no inicio e no fim de cada frase serve para deixar uma linha em branco no programa cin>> a>>b>>c>>d; if (a==b && b==c && c==d) //todos iguais cout<<"Os numeros que introduziste sao iguais"<<endl; else { //todos diferentes //a if (a>b && a>c && a>d) cout<<"O maior numero e "<<a<<endl; else if (a<b && a<c && a<d) cout<<"O menor numero e "<<a<<endl; //b if (b>a && b>c && b>d) cout<<"O maior numero e "<<b<<endl; else if (b<a && b<c && b<d) cout<<"O menor numero e "<<a<<endl; //c if (c>a && c>b && c>d) cout<<"O maior numero e "<<c<<endl; else if (c<a && c<b && c<d) cout<<"O menor numero e "<<c<<endl; //d if (d>a && d>b && d>c) cout<<"O maior numero e "<<d<<endl; else if (d<a && d<b && d<c) cout<<"O menor numero e "<<d<<endl; } cout<<"\nDeseja continuar? (s/n) "<<endl; cin >> t; cout<<"____________________________________________________________________"<<endl; }while (t=='s' || t=='S'); cout << "\n TERMINOU O PROGRAMA........\n"; }
Localhost Posted May 7, 2011 at 10:55 PM Report #386177 Posted May 7, 2011 at 10:55 PM Habitua-te a declarar a função main da seguinte maneira: int main () { // código aqui... } O que eles provavelmente querem é que recebas os quatro números num vector e que depois percorras esse vector com um ciclo e que tires o valor máximo desse vector. De qualquer das formas para resolveres assim tenta descobrir o máximo entre dois valores. Descobre o máximo entre os outros dois valores e depois descobre o máximo entre os valores descobertos anteriormente e tens o problema resolvido. E a mesma coisa se aplica para o mínimo. Não precisas de andar com tanta complicação. Algo como: scanf ("%d %d %d %d", &a, &b, &c, &d); printf ("Max: %d, Min: %d\n", max (max (a, b), max (c, d)), min (min (a,b), min (c, d))); here since 2009
sleandro Posted May 8, 2011 at 01:36 AM Report #386200 Posted May 8, 2011 at 01:36 AM serve? update: diz o maior e o menor numero e a sua posição para alem de verificar se exite uma igualdade entre os numeros. #include <iostream.h> #include <stdio.h> #include <stdlib.h> int main () { inicio: float a=0,b=0,c=0,d=0,max=0,min=0,qual_maior=0,qual_menor=0; char opcao; system("cls"); cout<<"Vou decidir qual e o maior dos quatro numeros que vais introduzir"; cout<<"\nIntroduza os quatro numeros:\n"; // "\n" no inicio e no fim de cada frase serve para deixar uma linha em branco no programa cin>>a>>b>>c>>d; //introduzir numeros em a,b,c,d. //operação maior //quando a > if (a>b&&a>c&&a>d) { max = a; qual_maior = 1; } //quando b > if (b>a&&b>c&&b>d) { max = b; qual_maior = 2; } //quando c > if (c>a&&c>b&&c>d) { max = c; qual_maior = 3; } //quando d > if (d>a&&d>b&&d>c) { max = d; qual_maior = 4; } //operação menor //quando a < if (a<b&&a<c&&a<d) { min = a; qual_menor = 1; } //quando b < if (b<a&&b<c&&b<d) { min = b; qual_menor = 2; } //quando c < if (c<a&&c<b&&c<d) { min = c; qual_menor = 3; } //quando d < if (d<a&&d<b&&d<c) { min = d; qual_menor = 4; } //operação de igualdade if(a==b&&a==c&&a==d) //quando todos iguais { max=a; cout<<"\nOs nuemros sao todos iguais com o valor de "<<max<<"."; } else //se nao { //quando a if(a==b&&a!=c&&a!=d) { if (a>c&&a>d) max=a; else min=a; cout<<"\nPrimeiro numero e' igual ao segundo numero."; } if(a!=b&&a==c&&a!=d) { if (a>b&&a>d) max=a; else min=a; cout<<"\nPrimeiro numero e' igual ao terceiro numero."; } if(a!=b&&a!=c&&a==d) { if (a>b&&a>c) max=a; else min=a; cout<<"\nPrimeiro numero e' igual ao quarto numero."; } if(a==b&&a==c&&a!=d) { if (a>d) max=a; cout<<"\nPrimeiro numero e' igual ao segundo numero e terceiro numero."; } //quando b if(b!=a&&b==c&&b!=d) { if (b>a&&b>d) max=b; else min=b; cout<<"\nSegundo numero e' igual ao terceiro numero."; } if(b!=a&&b!=c&&b==d) { if (b>a&&b>c) max=b; else min=b; cout<<"\nSengundo numero e' igual ao quarto numero."; } if(b==a&&b!=c&&b==d) { if (b>c) max=b; cout<<"\nPrimeiro numero e' igual ao segundo numero e quarto numero."; } if(b!=a&&b==c&&b==d) { if (b>a) max=b; cout<<"\nSegundo numero e' igual ao terceiro numero e quarto numero."; } //quando c if(c!=a&&c!=b&&c==d) { if (c>a) max=c; else min=c; cout<<"\nTerceiro numero e' igual ao quarto numero."; } if(c==a&&c!=b&&c==d) { if (c>b) max=c; cout<<"\nPrimeiro numero e' igual ao terceiro numero e quarto numero."; } //quando d - n precisa porque as combinações já foram feitas em a,b,c. //quando todos diferentes if (a!=b&&a!=c&&a!=d&&b!=c&&b!=d&&c!=d) { cout<<"\n o maior numero do conjunto e' o "<<qual_maior<<"o. numero com o valor de: "<<max<<".\n"; cout<<"o menor numero do conjunto e' o "<<qual_menor<<"o. numero com o valor de: "<<min<<".\n"; } else { cout<<"\nmaior valor e': "<<max; cout<<"\nmenor valor e': "<<min; } } repete: cout<<"\n\nDeseja continuar? (s/n) "<<endl; cin>>opcao; switch(opcao) { case 's': goto inicio; break; case 'n': goto sair; break; default: goto repete; break; } sair: return 0; }
Localhost Posted May 8, 2011 at 09:30 AM Report #386207 Posted May 8, 2011 at 09:30 AM @sleandro: que mau código. Tens más práticas por todo o código. Utilizas demasiados if's, utilizas gotos, tens uma solução que é muito naive - não sei se reparaste mas apresentei uma solução que tem duas linhas de código. @Ovarmars: definitivamente _não_ sigas a solução do @sleandro. here since 2009
sleandro Posted May 8, 2011 at 05:05 PM Report #386255 Posted May 8, 2011 at 05:05 PM @localhost yap, nao está definitivamente simplificado para quem quiser fazer copiar colar e apresentei outra solução sem ser pelo o comando max. sim com a opção max o codigo ficava tudo muito mais simples de facto mas não com as mesmas funcionalidades que faz o codigo de cima, agora tambem fica mais ao gosto de quem optar por aquilo que quer. nao vou apresentar mais codigo quem quizer que se desenrasque 😉
blackburn69 Posted May 8, 2011 at 06:44 PM Report #386274 Posted May 8, 2011 at 06:44 PM Boa tarde. Já que aqui tanto se fala em ter uma solução com pouco código e que não faça uso do min() e max(), deixo aqui o meu contributo. #include <iostream> int main() { int a, b, c, d, max, min; std::cin >> a >> b >> c >> d; std::cout << "Max: " << ((max = (max = (a > b ? a : b)) > c ? max : c) > d ? max : d); std::cout << " Min: " << ((min = (min = (a < b ? a : b)) < c ? min : c) < d ? min : d) << std::endl; return 0; }
Ovarmars Posted May 8, 2011 at 07:58 PM Author Report #386288 Posted May 8, 2011 at 07:58 PM Gostei da ultima resposta.... Mas como disse, estou MUITO verde nisto. Gostava de algumas explicações. O que quer dizer a sigla 'std' uma explicação como funciona a linha de código '((max = (max = (a > b ? a : 😉) > c ? max : c) > d ? max : d)'. Obrigado
blackburn69 Posted May 8, 2011 at 09:56 PM Report #386308 Posted May 8, 2011 at 09:56 PM Boa noite. std é nome do namespace a que as funções cout e cin pertencem. Para o compilador saber o que são as funções cout e cin, tens de indicar que pertencem a esse namespace. Podias até ter outras funções com o mesmo nome noutro namespace que faziam coisas diferentes, e a única forma de as distinguires era indicando o nome do namespace. Podes em vez da forma como escrevi teres a linha using namespace std; antes de fazeres a chamada ao cin e ao cout, e assim só precisas de escrever cin e cout que o compilador já sabe ao que te referes. Quanto à minha solução, para a perceberes tens antes de perceber o ternário. a > b ? a : b; Essa linha significa o seguinte: a é maior do que b? sim: o resultado é a; não: o resultado é b. Isso neste caso serviu para saber qual era o maior, se o a ou o b. Encadeando isto de forma lógica chega-se à minha solução. Foi preciso fazer uso de uma variável max e min para ir guardando o resultado de cada ternário para ser usado no ternário a seguir. Vê se consegues agora perceber e caso não consigas, eu explico mais concretamente.
Ovarmars Posted May 8, 2011 at 10:46 PM Author Report #386319 Posted May 8, 2011 at 10:46 PM Agora já está percebido. Obrigado 😉
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now