Trovare i due numeri più grandi tra 10 numeri. [ Nota: potete inserire ogni numero solo una volta ].
Il mio problema è che per numeri di poche cifre il risultato viene corretto mentre per numeri con molte cifre i numeri vengono riportati giusti come ordine ma errati nelle ultime cifre. Come posso risolvere questo problema??? Secondo me potrebbe essere un problema di overflow aritmetico ma non so come potrei correggerlo.
Vi stampo i due pritscreen uno con poche cifre e l'altro con più cifre. Grazie
Ciao.
http://prntscr.com/fh01s corretto se con poche cifre
http://prntscr.com/fh02q non corretto nelle ultime cifre
Ecco il codice sorgente:
#include <stdio.h>
int main ( void )
{
float primoN;
float secondoN;
float terzoN;
float quartoN;
float quintoN;
float sestoN;
float settimoN;
float ottavoN;
float nonoN;
float decimoN;
puts( "Inserisci 10 numeri differenti, per piacere, e ti verranno indicati i due maggiori tra questi\n" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
// Inizio parte di controllo dell'errore di doppio inserimento di numeri.
if ( primoN == secondoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il secondo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == terzoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il terzo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == quartoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il quarto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == quintoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il quintoN sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == sestoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il sesto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == settimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il settimoN sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", primoN, secondoN, terzoN, quartoN, quintoN, sestoN, settimoN, ottavoN, nonoN, decimoN );
}
if ( primoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( primoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il primo ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == terzoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il terzo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == quartoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il quarto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == quintoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il quinto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == sestoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il sesto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == settimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il settimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( secondoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il secondo ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == quartoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed il quarto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == quintoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed il quinto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == sestoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed il sesto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == settimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed il settimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( terzoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il terzo ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quartoN == quintoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quarto ed il quinto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quartoN == sestoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quarto ed il sesto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quartoN == settimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quarto ed il settimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quartoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quarto ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quartoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quarto ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quartoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quarto ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quintoN == sestoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quinto ed il sesto sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quintoN == settimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quinto ed il settimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quintoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quinto ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quintoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quinto ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( quintoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il quinto ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( sestoN == settimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il sesto ed il settimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( sestoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il sesto ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( sestoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il sesto ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( sestoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il sesto ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( settimoN == ottavoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il settimo ed l'ottavo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( settimoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il settimo ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( settimoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il settimo ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( ottavoN == nonoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno l'ottavo ed il nono sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( ottavoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno l'ottavo ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
if ( nonoN == decimoN ) {
puts( "Inserisci nuovamente i numeri perchè almeno il nono ed il decimo sono uguali tra di loro" );
scanf( "%f%f%f%f%f%f%f%f%f%f", &primoN, &secondoN, &terzoN, &quartoN, &quintoN, &sestoN, &settimoN, &ottavoN, &nonoN, &decimoN );
}
// Fine parte di controllo dell'errore di doppio inserimento di numeri.
else {
puts( "" );
puts( "I due numeri maggiori tra i dieci numeri differenti tra di loro sono, rispettivamente:\n" );
}
// Calcolo del primo numero maggiore e del secondo:
float primoMaggiore = primoN;
float secondoMaggiore = secondoN;
if ( secondoN > primoMaggiore ) {
primoMaggiore = secondoN;
secondoMaggiore = primoN;
}
if ( terzoN > primoMaggiore ) {
primoMaggiore = terzoN;
if ( secondoN > secondoMaggiore ) {
secondoMaggiore = secondoN;
} else { secondoMaggiore = primoN; }
}
if ( terzoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( terzoN > secondoMaggiore ) {
secondoMaggiore = terzoN;
} else if ( terzoN < secondoMaggiore )
{ secondoMaggiore = secondoMaggiore; }
}
if ( quartoN > primoMaggiore ) {
primoMaggiore = quartoN;
if ( terzoN > secondoMaggiore ) {
secondoMaggiore = terzoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( quartoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( quartoN > secondoMaggiore ) {
secondoMaggiore = quartoN;
} else if ( quartoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
if ( quintoN > primoMaggiore ) {
primoMaggiore = quintoN;
if ( quartoN > secondoMaggiore ) {
secondoMaggiore = quartoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( quintoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( quintoN > secondoMaggiore ) {
secondoMaggiore = quintoN;
} else if ( quintoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
if ( sestoN > primoMaggiore ) {
primoMaggiore = sestoN;
if ( quintoN > secondoMaggiore ) {
secondoMaggiore = quintoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( sestoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( sestoN > secondoMaggiore ) {
secondoMaggiore = sestoN;
} else if ( sestoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
if ( settimoN > primoMaggiore ) {
primoMaggiore = settimoN;
if ( sestoN > secondoMaggiore ) {
secondoMaggiore = sestoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( settimoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( settimoN > secondoMaggiore ) {
secondoMaggiore = settimoN;
} else if ( settimoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
if ( ottavoN > primoMaggiore ) {
primoMaggiore = ottavoN;
if ( settimoN > secondoMaggiore ) {
secondoMaggiore = settimoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( ottavoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( ottavoN > secondoMaggiore ) {
secondoMaggiore = ottavoN;
} else if ( ottavoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
if ( nonoN > primoMaggiore ) {
primoMaggiore = nonoN;
if ( ottavoN > secondoMaggiore ) {
secondoMaggiore = ottavoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( nonoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( nonoN > secondoMaggiore ) {
secondoMaggiore = nonoN;
} else if ( nonoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
if ( decimoN > primoMaggiore ) {
primoMaggiore = decimoN;
if ( nonoN > secondoMaggiore ) {
secondoMaggiore = nonoN;
} else { secondoMaggiore = secondoMaggiore; }
}
if ( decimoN < primoMaggiore ) {
primoMaggiore = primoMaggiore;
if ( decimoN > secondoMaggiore ) {
secondoMaggiore = decimoN;
} else if ( decimoN < secondoMaggiore ) {
secondoMaggiore = secondoMaggiore; }
}
printf( "Il primo numero maggiore della serie di dieci è:\n%.3f\nmentre il secondo numero maggiore è:\n%.3f.\nGrazie!", primoMaggiore, secondoMaggiore );
}