Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18

    [C] Uso di un ciclo per scrivere un programma che riconosca il valore maggiore

    Salve a tutti. :-)

    In un esercizio (King Kim N., Programmazione in C, Apogeo, 2010, pag. 127) mi si chiede di scrivere un programma che riconosca il valore maggiore tra i numeri inseriti. I numeri inseriti dall'utente possono essere infiniti e, per interrompere il programma, occorre inserire un numero minore o uguale a zero. A questo punto il programma deve mostrare all'utente il valore maggiore inserito. Il programma che ho pensato è questo:

    codice:
    #include <stdio.h>                                           
    
    int main(void)
    
    {
        float max, n;                                               /*dichiaro le variabili*/
        
        for (;n > 0;) {
        
        printf("immettere un numero maggiore di 0: ");       /*il programma chiede all'utente di immettere un valore*/
        scanf("%f", &n);                                              
        
        if (n > max) n = max;                                    /*assegno il valore di n alla variabile max*/
        }
        
        printf("\nil numero piu' grande immesso e' %f", max);
        
        return 0;
    }
    Il problema è che quando compilo e lancio il programma il valore che l'ultima chiamata alla printf mostra nel prompt dei comandi è sempre zero. Ho provato a modificare il programma facendo una chiamata alla printf prima del ciclo for, oppure usando tre variabili invece di due, ma il succo è che qualunque sia il valore che la variabile max assume (condizione che stabilisco nella funzione if) in output ho sempre zero! Cosa sto sbagliando? Grazie in anticipo

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Direi che deve essere

    max = n;

    e non il contrario.

    E al posto di un ciclo for userei un do...while
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Dovrebbe essere max = n e non n = max.
    Inoltre non inizializzi le variabili.
    Io lo scriverei così:
    codice:
    #include <stdio.h>
    #include <float.h>
    
    int main(void) {
      float max = FLT_MIN, n;
      do {
        printf("Immettere un numero maggiore di 0 (minore o uguale per terminare): ");
        scanf("%f", &n);
        if(n > max)
          max = n;
      } while(n > 0);
      printf("\nIl numero piu' grande immesso e' %f", max);
      return 0;
    }
    Ultima modifica di Scara95; 19-06-2014 a 15:33 Motivo: Dimesticanza stupida
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18
    Grazie mille delle risposte! Scusate per la mancanza di tecnicità, sono ancora all'inizio e mi confondo sempre tra "dichiarazione di variabili" e "inizializzazioni di variabili".
    Per oregon: sì effettivamente il libro mi dà come opzione preferibile il do while, ma ho scelto il for perché mi trovo meglio.
    Per scara95: non ho idea di cosa sia header <float.h>, non ci sono ancora arrivato :P

    Comunque come mai dovrei usare max = n invece che n = max? Perché il risultato cambia?

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Beh, è roba da prime pagine del libro ... come si assegna un valore ad una variabile?

    Tu scrivi

    n = 1;

    oppure

    1 = n;

    ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2014
    residenza
    Sardegna
    Messaggi
    18
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Beh, è roba da prime pagine del libro ... come si assegna un valore ad una variabile?

    Tu scrivi

    n = 1;

    oppure

    1 = n;

    ?
    Ok sì, non ci ho fatto caso. Grazie!

  7. #7
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da alemutasa Visualizza il messaggio
    Ok sì, non ci ho fatto caso. Grazie!
    In sostanza sono una serie di costanti, fra cui FLT_MIN che è il valore minimo che può assumere un float. Tuttavia puoi fare benissimo senza: nel tuo caso basta che asegni a max un numero < 0.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.