Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    [C] min e max tra 3 num

    allora ho scritto qst funzione (funcMM.c):
    codice:
    int mm (int a, int b, int c)
    {
    int max, min;
    
    /* DETERMINAZIONE DEL MASSIMO */
    	if (a>b) if (a>c){
    	   max = a;} 
    	else if (b>a) if(b>c){
    	   max = b;}
    	else if (c>a) if (c>b){
    	   max = c;}
    
    /* DETERMINAZIONE DEL MINIMO */
    	if (a<b) if (a<c){
    	   min = a;} 
    	else if (b<a) if (b<c){
    	   min = b;}
    	else if (c<a) if(c<b){
    	   min = c;}
    
    /* RETURN DELLE VARIABILI MAX E MIN */ 
    return max;
    return min; 
    }
    poi ho scritto il file che dovrebbe richiamarla (mm.c)
    codice:
    #include <stdio.h>
    #include "funcMM.c"
    
    main(){
    int max, min;
    mm(8,2,15);
    printf(" mass = %d \n minim = %d \n", max, min);
    }
    Quando compilo non ricevo errori ma quando lo eseguo mi da valori completamente sballati:
    codice:
    #include <stdio.h>
    #include "funcMM.c"
    
    main(){
    int max, min;
    mm(8,2,15);
    printf(" mass = %d \n minim = %d \n", max, min);
    }
    Dove sbaglio? questione di puntatori?

  2. #2
    Prova ad aggiungere il prototipo della funzione prima del main..

    extern int mm (int a, int b, int c);

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    mass = 1073817472
    minim = 1075122000

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    173
    Se non mi sbaglio c sono 2 errori.

    Il primo è che quando tu richiami una funzione che restituisce un valore, questo lo devi appunto asseganre a un'altra variabile,
    ad esempio
    num = funzione(a, b);

    dove a e b sono i due valori passati alla funzione.

    Poi in una funzione non si possono far restituire due valori con due return, in quanto la funzione una volta incontrato il primo salta subito alla funzione da cui è stato chiamata, quindi il secondo return non viene nemmeno preso in considerazione!

    Spero che i consigli siano giusti e che ti possano essere utili!

    CIAO

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    provato ma non riesco a ricavarne niente aiudddo

  6. #6
    non assegni mai alcun valore alle variabili min e max del main... per questo ti escono fuori quei numeri!

    Penso di aver capito cosa non hai capito:

    Quando richiami una funzione devi immaginare che al posto di mm(num1,num2,num3) ci sia il valore di ritorno della funzione mm!

    esempio:

    codice:
    #include <stdio.h>
    #include "funcMM.c"
    
    main(){
    int max, min;
    mm(8,2,15); <-- qui è come se ci fosse 15!
    printf(" mass = %d \n minim = %d \n", max, min);
    }

    siccome il numero non lo assegni a nessuna variabile, il valore di ritorno si perde!
    Devi comunque tenere conto che max e min del main sono due variabili distinte da max e min della tua funzione!
    In ogni caso 2 return non si possono mettere nella funzione in quel modo perchè il secondo return non viene mai eseguito!

    Quindi dovresti fare una cosa come ti hanno suggerito prima:
    max = mm(8,2,15); //equivale a fare max = 15!


  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    è il primo mio giorno di contatto con C mi faresti vedere come scriveresti il codice tu?

  8. #8

    Re: [C] min e max tra 3 num

    Metallica: Innanzi tutto la funzione che hai scritto non può restituire 2 valori (non puoi usare 2 return).

    Se vuoi puoi restituire un array o una struttura, ma siccome in C ancora forse non li hai visti, ti conviene usare due funzioni separate una per il min e una per il max.

    L'altro errore te lo hanno gia detto ed è che stampi variabili non inizializzate.

    in <stdlib.h> trovi già definite due macro min e max che dati due numeri, restituiscono il minimo / massimo, siccome la relazione d'ordine è transitiva (ovvero se a < b e b < c => a < c) per avere il minimo (massimo) di 3 valori basta fare min(a, min(b, c)).

    per cui la mia proposta è

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    /* se non vuoi usare stdlib.h puoi usare
    #define min(a,b) ((a)>(b)?(a):(b))
    #define max(a,b) ((a)<(b)?(a):(b))
    */
    
    int main()
    {
        int Min, Max;
    	
        Min = min(8, min(2, 12));
        Max = max(8, max(2, 12));
    
        printf("Min: %d\nMax:%d", Min, Max);
        return 0;
    }

  9. #9
    la funzione mm contiene un errore bastardo (che non salta all'occhio), prova a identare bene il codice degli if che hai scritto e a mettere le parentesi graffe in modo esplicito, otterresti

    codice:
    int mm (int a, int b, int c)
    {
    int max, min;
    
    /* DETERMINAZIONE DEL MASSIMO */
       if (a>b) 
       {
          if (a>c)
          {
             max = a;
          } 
          else if (b>a) 
          {
             if(b>c)
             {
                max = b;
             }
             else if (c>a) 
             {
                if (c>b)
                {
                      max = c;
                }
             }
          }
       }
    
    
    /* DETERMINAZIONE DEL MINIMO */
       if (a<b) 
       {   
          if (a<c)
          {
             min = a;
          } 
          else if (b<a) 
          {
             if (b<c)
             {
                min = b;
             }
             else if (c<a) 
             {
                if(c<b)
                {
                   min = c;
                }
             }
          }
       }
    /* RETURN DELLE VARIABILI MAX E MIN */ 
    return max;
    return min; 
    }

  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    Così funziona
    codice:
    #include <stdio.h>
    
    #define min(a,b) ((a)>(b)?(a):(b))
    #define max(a,b) ((a)<(b)?(a):(b))
    
    int main()
    {
        int Min, Max;
    	
        Min = min(8, min(2, 12));
        Max = max(8, max(2, 12));
    
        printf("Min: %d\nMax:%d\n", Min, Max);
        return 0;
    }
    #define max(a,b) ((a)<(b)?(a):(b))
    a cosa corrisponderebbe?

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.