PDA

Visualizza la versione completa : [C] - Ricerca del numero massimo (programmino di esercizio)


pastoreerrante
20-10-2008, 08:51
Un saluto a tutti,

sto imparando il C, cominciando dalle basi. Un esercizio prevede la ricerca del numero massimo prendendo in input tre interi, ma non riesco a farlo funzionare. La logica che ho usato per scrivere il programma è la seguente: il numero massimo è sempre quello che diviso per gli altri numeri del gruppo dà come risultato un numero superiore a 1, quindi il programma prima effettua tutte le possibili divisioni fra i 3 interi, e poi confronta i sei risultati per vedere quali di essi siano superiori a 1.



#include <stdio.h>

int main ()

{

int x, y, z;
float intermedio_1, intermedio_2, intermedio_3, intermedio_4, intermedio_5, intermedio_6;

printf ("Immettere tre interi:");
scanf ("%d%d%d", &x, &y, &z);

intermedio_1 = x / y;
intermedio_2 = x / z;
intermedio_3 = y / x;
intermedio_4 = y / z;
intermedio_5 = z / x;
intermedio_6 = z / y;

if ( intermedio_1 > 1 ) {
if ( intermedio_2 > 1 ) {
printf ("%d è il numero maggiore\n", x);
}
}

if ( intermedio_3 > 1 ) {
if ( intermedio_4 > 1 ) {
printf ("%d è il numero maggiore\n", y);
}
}

if ( intermedio_5 > 1 ) {
if ( intermedio_6 > 1 ) {
printf ("%d è il numero maggiore\n", z);
}
}

return 0;

}



Grazie dell'aiuto - Daniele

Skull260287
20-10-2008, 09:35
Ciao non c'è bisogno di utilizzare tutte quelle variabili, è più semplice utilizzarne due, una che potresti chiamare max, e che rappresenta il valore massimo, ed una temp che rappreenta il valore temporaneamente inserito da tastiera. Dopo l'input effettui un controllo e se il valore inserito è maggiore del tuo attuale max lo sostituisci, altrimenti richiedi un altro input. Qualcosa del genere (Ti scrivo solo il corpo)





float max=-32767, //Valore molto basso, bisogna decidere quanto a seconda del tipo in input
temp,
i; //Numeri in input

do{

printf ("Immettere Un Numero:");

scanf ("%d", &temp);

if( (int)temp>max ) max = (int) temp;

i++;

}while(i<3);

pastoreerrante
20-10-2008, 19:00
Ti ringrazio per la risposta. È evidente che il tuo programma sia più elegante, però introduce una serie di costrutti che non ho ancora avuto modo di studiare a fondo. Il mio esercizio prevede solo l'utilizzo di: if, printf, scanf, variabili int/float, + * - / %. Devo farcela solo con queste poche nozioni.

Potresti gentilmente spiegarmi perchè il mio programma non funziona? capisco che non sia per nulla il modo migliore di fare quel tipo di attività, ma comunque la logica su cui si basa dovrebbe essere corretta, no?

Skull260287
20-10-2008, 19:40
Originariamente inviato da pastoreerrante
Ti ringrazio per la risposta. È evidente che il tuo programma sia più elegante, però introduce una serie di costrutti che non ho ancora avuto modo di studiare a fondo. Il mio esercizio prevede solo l'utilizzo di: if, printf, scanf, variabili int/float, + * - / %. Devo farcela solo con queste poche nozioni.

Potresti gentilmente spiegarmi perchè il mio programma non funziona? capisco che non sia per nulla il modo migliore di fare quel tipo di attività, ma comunque la logica su cui si basa dovrebbe essere corretta, no?

Nei tuoi test con quali input hai notato errori? Comunque penso presupponga input di numeri >0 e tutti diversi giusto?

pastoreerrante
20-10-2008, 19:54
Qualsiasi triade di numeri > 0, consecutivi o non consecutivi (esatto prevede l'inserimento di tre numeri diversi >0).

Dalla shell (Ubuntu 8.04) comunque non ottengo errori, semplicemente il programma si chiude subito dopo che ho immesso i tre numeri.

Grazie ancora per l'aiuto

sotoli
20-10-2008, 20:01
Il problema è che le divisioni vengono fatte tra numeri interi e quindi producono come risultato un numero intero, ad esempio 1, che viene poi convertito in float e diventa 1.0.



intermedio_1 = x / y; // se x = 6 e y = 4, intermedio_1 = 1.0


Quando fai i confronti dei valori intermedio_1 etc con 1, questi valori risulteranno = 0 oppure = 1 oppure >= 2 ma comunque numeri con parte decimale nulla. Quindi se un rapporto ti viene 1.2, tu lo consideri come 1.

Skull260287
20-10-2008, 20:17
Originariamente inviato da pastoreerrante
Qualsiasi triade di numeri > 0, consecutivi o non consecutivi (esatto prevede l'inserimento di tre numeri diversi >0).

Dalla shell (Ubuntu 8.04) comunque non ottengo errori, semplicemente il programma si chiude subito dopo che ho immesso i tre numeri.

Grazie ancora per l'aiuto

per il fatto che ti si chiude prova a scrivere



printf("\n\nPremere Un Tasto Per Uscire...\n");
_getch();


prima di return 0 :)

Poi inserisci un pò di printf sui valori in input per effettuare dei test e capire dove è il problema, prova ad inserirli sui valori in input subito dopo scanf, io ho provato e mi pare non funzioni.

pastoreerrante
21-10-2008, 08:05
Originariamente inviato da sotoli
Il problema è che le divisioni vengono fatte tra numeri interi e quindi producono come risultato un numero intero, ad esempio 1, che viene poi convertito in float e diventa 1.0.

Quando fai i confronti dei valori intermedio_1 etc con 1, questi valori risulteranno = 0 oppure = 1 oppure >= 2 ma comunque numeri con parte decimale nulla. Quindi se un rapporto ti viene 1.2, tu lo consideri come 1.

Ah, capisco. Ho posto x, y, z come float, in questo modo mi aspetto di ottenere divisioni con la parte decimale integra, ma il programma non funziona ancora :(

Se in input do 7 8 9, ottengo: "1080575648 è il numero maggiore"...come potrei risolvere?

Grazie

Edit: Risolto! È bastato trasformare i vari %d in %f e alla fine funziona come dovrebbe.

Grazie a tutti per le dritte.

Loading