Jump to content
Ovarmars

Indica o maior e o menor

Recommended Posts

Ovarmars

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";


}

Share this post


Link to post
Share on other sites
Localhost

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

Share this post


Link to post
Share on other sites
sleandro

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;
}

Share this post


Link to post
Share on other sites
Localhost

@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

Share this post


Link to post
Share on other sites
sleandro

@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  ;)

Share this post


Link to post
Share on other sites
blackburn69

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;
}

Share this post


Link to post
Share on other sites
Ovarmars

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

Share this post


Link to post
Share on other sites
blackburn69

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.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.