Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 40
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327

    Programma Massimo e Minimo non funzionante.

    Salve ragazzi, eccomi di nuovo qui; ho un ulteriore ostacolo nella realizzazione di un programma..
    Il programma in questione dovebbe ricevere in input dei numeri, scanditi rispettivamente dall'enter, e in grado poi di dare in uscita il massimo e il minimo.
    L'errore riscontrato è che mi viene indicato come massimo e minimo l'ultimo numero inserito;
    Vi prego di aiutarmi non cambiando del tutto il codice, ma corregendo solo l'errore, questo perchè vorrei capire dove sbaglio; inoltre se poi qualcuno volesse mostrarmi una via alternativa è ben accetto..magari senza utiliazzare scanf perchè non l'ho ancora fatto..
    Grazie in anticipo a chiunque vogli aiutarmi..

    Codice PHP:
    #include <stdio.h>

    #include <ctype.h>

    int getline (char[]);

    double atof (char[]);

    double massimo (double);

    double minimo (double);

    int max=0int min=10000int k;

    main()

    {     
    char vettore [1000];

          
    double mx,mn;

          while ((
    getline (vettore)) > 0)

          
    k=atof(vettore);

          
    mx=massimo(k);

          
    mn=minimo(k);

          
    printf ("Mim:%f\nMax:%f"mn,mx);

          

    }





    int getline (char vettore[])

         {

                 
    int c,i=0;

                 while((
    c=getchar())!= EOF && c!= '\n')

                 
    vettore [i++]=c;

                 if (
    c=='\n')

                 
    vettore[i++]=c;

                 
    vettore[i]= '\0';

                 return 
    i;

         }       



    double atof (char vettore[])

    {

      
    double valpower;

      
    int isign;

      for (
    i=0isspace (vettore[i]); i++)

          ;

      
    sign = (vettore[i] == '-')? -1;

      if (
    vettore[i] == '+' || vettore[i] == '-')

         
    i++;

      for (
    val 0.0isdigit(vettore[i]); i++)

                
    val 10.0 val + (vettore[i] - '0');

      if (
    vettore[i] == '.')

         ;

      for (
    power 1.0isdigit (vettore[i]); i++)

          {

           
    val 10.0 val + (vettore[i] - '0');

           
    power *= 10.0;

          }

                    

      return 
    sign val power;

    }               



     
    double massimo (double a)

    {

     if (
    k>max)

     
    max=k;

     return 
    max;

    }



    double minimo (double a)

    {

     if (
    k<min);

     
    min=k;

     return 
    min;



  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Tu dici che il programma non ti funziona, ma in realta' non viene neanche compilato ...

    Ci sono errori in questa linea

    sign = (vettore[] == '-')? -1 : 1;

    e in questa linea

    vettore[i]= '';

    Inoltre, nelle funzioni massimo e minimo chiami a il parametro e poi non lo usi ma usi una variabile k che e' globale ...

    Il problema piu' grande pero' e' che quando chiami

    mx=massimo(k);

    mn=minimo(k);

    non stai all'interno di un ciclo e quindi non passi tutti i valori ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ciao, scusa, probabilmente ho inserito un codice precedente; Adesso ti allego quellogiusto, che compila, ma mi da come output sempre 0.
    Non ho capito bene cosa è che ti lascia perplesso..
    Io sono alle prime armi, e ho un professore non molto chiaro, onde per cui cerco di fare tutto da autodidatta, quindi probabile che abbia frainteso l'uso di qualcosa...

    #include <stdio.h>

    #include <ctype.h>

    int getline (char[]);

    double atof (char[]);

    double massimo (double);

    double minimo (double);

    int max=0; int min=10000; int k;

    main()

    { char vettore [1000];

    double mx,mn;

    while ((getline (vettore)) > 0)

    k=atof(vettore);

    mx=massimo(k);

    mn=minimo(k);

    printf ("Mim:%f\nMax:%f", mn,mx);



    }





    int getline (char vettore[])

    {

    int c,i=0;

    while((c=getchar())!= EOF && c!= '\n')

    vettore [i++]=c;

    if (c=='\n')

    vettore[i++]=c;

    vettore[i]= '\0';

    return i;

    }



    double atof (char vettore[])

    {

    double val, power;

    int i, sign;

    for (i=0; isspace (vettore[i]); i++)

    ;

    sign = (vettore[i] == '-')? -1 : 1;

    if (vettore[i] == '+' || vettore[i] == '-')

    i++;

    for (val = 0.0; isdigit(vettore[i]); i++)

    val = 10.0 * val + (vettore[i] - '0');

    if (vettore[i] == '.')

    ;

    for (power = 1.0; isdigit (vettore[i]); i++)

    {

    val = 10.0 * val + (vettore[i] - '0');

    power *= 10.0;

    }



    return sign * val / power;

    }



    double massimo (double a)

    {

    if (a>max)

    max=a;

    return max;

    }



    double minimo (double a)

    {

    if (a<min);

    min=a;

    return min;

    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Scusa ma, ammesso che il programma venga compilato ed eseguito, nel main tu accetti una linea che in seguito converti in un numero nella variabile k

    A questo punto hai UN SOLO valore ... che senso ha trovare il minimo e il massimo ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da oregon
    Scusa ma, ammesso che il programma venga compilato ed eseguito, nel main tu accetti una linea che in seguito converti in un numero nella variabile k

    A questo punto hai UN SOLO valore ... che senso ha trovare il minimo e il massimo ?
    Ciao, finalmente sono riuscito a far funzionare l'errore.. vi era un ; delle {} in meno e un double dichiarato int.

    Ecco il codice corretto:
    Codice PHP:
    #include <stdio.h>

    #include <ctype.h>

    int getline (char[]);

    double atof (char[]);

    double massimo (double);

    double minimo (double);

    int max=0int min=10000double k;

    main()

    {     
    char vettore [1000];

          
    double mx,mn;

          while ((
    getline (vettore)) > 0){

          
    k=atof(vettore);

          
    mx=massimo(k);

          
    mn=minimo(k);}

          
    printf ("Mim:%f\nMax:%f"mn,mx);

          

    }





    int getline (char vettore[])

         {

                 
    int c,i=0;

                 while((
    c=getchar())!= EOF && c!= '\n')

                 
    vettore [i++]=c;

                 if (
    c=='\n')

                 
    vettore[i++]=c;

                 
    vettore[i]= '\0';

                 return 
    i;

         }       



    double atof (char vettore[])

    {

      
    double valpower;

      
    int isign;

      for (
    i=0isspace (vettore[i]); i++)

          ;

      
    sign = (vettore[i] == '-')? -1;

      if (
    vettore[i] == '+' || vettore[i] == '-')

         
    i++;

      for (
    val 0.0isdigit(vettore[i]); i++)

                
    val 10.0 val + (vettore[i] - '0');

      if (
    vettore[i] == '.')

         ;

      for (
    power 1.0isdigit (vettore[i]); i++)

          {

           
    val 10.0 val + (vettore[i] - '0');

           
    power *= 10.0;

          }

                    

      return 
    sign val power;

    }               



     
    double massimo (double a)

    {

     if (
    a>max)

     
    max=a;

     return 
    max;

    }



    double minimo (double a)

    {

     if (
    a<min)

     
    min=a;

     return 
    min;



  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Ecco ... in questo modo hai incluso il calcolo del minimo/massimo all'interno del ciclo ... senza le parentesi, il while non includeva le chiamate alle funzioni ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Ciao ho cambiato il getline, in modo tale da incrementare il contatore (z) solo nel caso in cui l'enter venga premuto dopo l'inserimento di un numero. Cioè se io premo 3 volte invio senza digitare alcun numero z non dovrebbe essere incrementato. Faccio la prova poi a stampare z (che è stata dichiarata variabile globale) ma viene stampato z=0, ovvero questo non viene mai incrementato... dove sbaglio?

    Codice PHP:
    int getline (char vettore[])
         {
                 
    int c,i=0;
                 while((
    c=getchar())!= EOF && c!= '\n')
                  
    vettore [i++]=c;
                 if (
    c=='\n')
                    
    vettore[i++]=c;
                    if (
    vettore[i-1]>= '0' && vettore[i-1]<=9)
                    
    z++;
                 
    vettore[i]= '\0';
                 return 
    i;
         } 
    Grazie in anticipo

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    if (vettore[i-1]>= '0' && vettore[i-1]<=9)

    ... usi '0' da una parte e 9 dall'altra ... ti sembra corretto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2007
    Messaggi
    327
    Originariamente inviato da oregon
    if (vettore[i-1]>= '0' && vettore[i-1]<=9)

    ... usi '0' da una parte e 9 dall'altra ... ti sembra corretto?
    Grazie per avermi fatto notare l'errore.. ma continua a non funzionare.. mi restituice sempre 0.
    Codice PHP:
    #include <stdio.h>
    #include <ctype.h>
    int getline (char[]);
    double atof (char[]);
    double massimo (double);
    double minimo (double);
    int max=0int min=10000int z=0
    main()
    {     
    char vettore [1000];
          
    double mx,mn,k;
          while ((
    getline (vettore)) > 0){
          
    k=atof(vettore);
          
    mx=massimo(k);
          
    mn=minimo(k);}
          
    printf ("Mim:%f\nMax:%f"mn,mx);
          
    printf ("\n%d",z);
        
    }


    int getline (char vettore[])
         {
                 
    int c,i=0;
                 while((
    c=getchar())!= EOF && c!= '\n')
                  
    vettore [i++]=c;
                 if (
    c=='\n')
                    
    vettore[i++]=c;
                    if (
    vettore[i-1]>= '0' && vettore[i-1]<='9')
                       
    z++;
                 
    vettore[i]= '\0';
                 return 
    i;
                 return 
    z;
                 
         }       

    double atof (char vettore[])
    {
      
    double valpower;
      
    int isign;
      for (
    i=0isspace (vettore[i]); i++)
          ;
      
    sign = (vettore[i] == '-')? -1;
      if (
    vettore[i] == '+' || vettore[i] == '-')
         
    i++;
      for (
    val 0.0isdigit(vettore[i]); i++)
                
    val 10.0 val + (vettore[i] - '0');
      if (
    vettore[i] == '.')
         ;
      for (
    power 1.0isdigit (vettore[i]); i++)
          {
           
    val 10.0 val + (vettore[i] - '0');
           
    power *= 10.0;
          }
                    
      return 
    sign val power;
    }               

     
    double massimo (double a)
    {
     if (
    a>max)
     
    max=a;
     return 
    max;
    }

    double minimo (double a)
    {
     if (
    a<min)
     
    min=a;
     return 
    min;


  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Sì ... certo ... non era solo quello ...

    Nel codice

    while((c=getchar())!= EOF && c!= '\n')
    vettore [i++]=c;
    if (c=='\n')
    vettore[i++]=c;
    if (vettore[i-1]>= '0' && vettore[i-1]<=9)
    z++;
    vettore[i]= '';

    mi sembra che tu non abbia usato appropriatamente le parentesi { } per definire i blocchi di codice da eseguire ...

    Spiega, secondo te, cosa dovrebbe essere eseguito dentro il ciclo while, cosa dentro la prima if, cosa dentro la seconda if ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.