PDA

View Full Version : [C]Ordinare 3 numeri


stgww
05-10-2009, 16:37
Ciao, devo fare questo programmino, ma non capisco come mai non mi risolve il caso in cui il terzo numero sia maggiore del primo o nel caso in cui il primo e il terzo siano uguali.

# include <stdio.h>

int num1,num2,num3;

void main() {

printf("Inserisci un numero intero\n");
scanf("%d",&num1);

printf("Inserisci un numero intero\n");
scanf("%d",&num2);

printf("Inserisci un numero intero\n");
scanf("%d",&num3);

if((num1!=num2)&&(num1!=num3)&&(num2!=num3))
{

if(num1>num2)
{
if(num2>num3)
printf("I numeri ordinati sono:\n%d\n%d\n%d\n",num1,num2,num3);
else
printf("I numeri ordinati sono:\n%d\n%d\n%d\n",num1,num3,num2);


}

if(num2>num1)

{
if(num1>num3)
printf("I numeri ordinati sono:\n%d\n%d\n%d\n",num2,num1,num3);
else
printf("I numeri ordinati sono:\n%d\n%d\n%d\n",num2,num3,num1);


}

if(num3>num1)
{
printf("%d%d%d\n",num1,num2,num3);
if(num1>num2)
printf("I numeri ordinati sono:\n%d\n%d\n%d\n",num3,num2,num1);
else
printf("I numeri ordinati sono:\n%d\n%d\n%d\n",num3,num1,num2);
}

}
else
{
if((num1==num2)&&(num1!=num3))
{
if(num1>num3)
printf("I numeri ordinati sono:\n%d e %d\n%d\n",num1,num2,num3);
else
printf("I numeri ordinati sono:\n%d\n%d e %d\n",num3,num2,num1);

}

if((num1==3)&&(num1!=num2))
{
if(num1>num2)
printf("I numeri ordinati sono:\n%d e %d\n%d\n",num1,num3,num2);
else
printf("I numeri ordinati sono:\n%d\n%d e %d\n",num2,num2,num3);

}

if((num2==num3)&&(num2!=num1))
{
if(num2>num3)
printf("I numeri ordinati sono:\n%d e %d\n%d\n",num2,num3,num1);
else
printf("I numeri ordinati sono:\n%d\n%d e %d\n",num1,num2,num3);

}
if((num1==num2)&&(num1==num3)&&(num2==num3))
printf("I numeri sono uguali\n");

}

system("PAUSE");
}
Grazie

lor84
05-10-2009, 18:45
L'algoritmo che hai utilizzato mi sembra un pò troppo incasinato.... prova questo:

if (num1>=num2)
{
tmp_1 = num1;
tmp_2 = num2;
}
else
{
tmp_1 = num2;
tmp_2 = num1;
}
if (num3>= tmp_1)
printf("%d %d %d", tmp_2, tmp_1, num3);
else if(num3>=tmp_2)
printf("%d %d %d", tmp_2, num3, tmp_1);
else
printf("%d %d %d", num3, tmp_2, tmp_1);

stgww
05-10-2009, 20:22
L'algoritmo che hai utilizzato mi sembra un pò troppo incasinato.... prova questo:

if (num1>=num2)
{
tmp_1 = num1;
tmp_2 = num2;
}
else
{
tmp_1 = num2;
tmp_2 = num1;
}
if (num3>= tmp_1)
printf("%d %d %d", tmp_2, tmp_1, num3);
else if(num3>=tmp_2)
printf("%d %d %d", tmp_2, num3, tmp_1);
else
printf("%d %d %d", num3, tmp_2, tmp_1);

Grazie!!! Adesso vedo di rivedere il pezzo per gestire l'inserimento di due numeri uguali ;)

P.S. Mamma mia che casino avevo tirato fuoriXD

khelidan1980
05-10-2009, 21:41
si però se questo esercizi sono scolastici è inutile che si posti il risultato,cioe gli algoritmi di ordinamento sono implementati in milioni di librerie,questi esercizi servono per imparare

Ikon O'Cluster
06-10-2009, 01:07
Infatti basta cercare "algoritmi di ordinamento". Sì che lavorano su array, però tu hai 3 elementi, fai un array di 3 elementi!

cionci
06-10-2009, 08:44
si però se questo esercizi sono scolastici è inutile che si posti il risultato,cioe gli algoritmi di ordinamento sono implementati in milioni di librerie,questi esercizi servono per imparare
Concordo.
lor84, per favore la prossima volta evita di postare il risultato, ma cerca di aiutare con le parole l'utente.

Vista la particolarità del numero di elementi, dubito che venga richiesta una risoluzione tramite array ;) Tra l'altro suppongo che l'utente non li abbia nemmeno mai visti.

Ikon O'Cluster
06-10-2009, 14:23
Concordo.
lor84, per favore la prossima volta evita di postare il risultato, ma cerca di aiutare con le parole l'utente.

Vista la particolarità del numero di elementi, dubito che venga richiesta una risoluzione tramite array ;) Tra l'altro suppongo che l'utente non li abbia nemmeno mai visti.

Appunto perchè non è richiesta e non sai usare i vettori fai vedere che ti sei portato avanti con lo studio ;)