C- array e funzione

di il
13 risposte

C- array e funzione

Ciao ragazzi ho un problema.
Devo scrivere una funzione che calcoli minimo e massimo in un array. Io ho scritto le due funzioni per il min e il max, quello non è un problema.
Però dovrei fare il tutto con un'UNICA FUNZIONE che restituisca sia il minimo sia il massimo,e non con due funzioni.
Come posso fare?
grazie

13 Risposte

  • Re: C- array e funzione

    Una funzione in C non può ritornare due valori.

    Hai tre possibilità per risolvere il tuo problema:

    1) Ritorni una struct che contiene due campi min e max
    2) Passi alla funzione due puntatori che manipolerai per avere in uno il min e nell'altro il max
    3) Passi alla funzione il puntatore a una struct contenente i due campi min e max che manipolerai

    Certo puoi anche fare un misto delle due cose ma non tanto lineare ed è sconsigliabile!
  • Re: C- array e funzione

    Grazie, provo con la struct.
    Tuttavia mi incuriosisce anche il metodo 2 dei puntatori ma non mi è chiarissimo come fare.
    I puntatori li ho sempre usati ,ad esempio, per cambiare la variabili nel main passando alla funzione gli indirizzi delle due variabili.
    Come faccio ad avere in un puntatore il min e in uno il max?
    Sono valori restituiti?
  • Re: C- array e funzione

    Questo un possibile prototipo:

    void max_min(int *max, int *min, int *vettore);

    quando all'interno della funzione trovi il min e il max li assegni ai puntatori, così facendo il programma chiamante avrà memorizzato nei campi min e max i rispettivi valori.
  • Re: C- array e funzione

    Non sono riuscito neanche con la struct, credo di aver fatto confusione.
    Posto il codice della funzione
    struct max_min(int temp[], int dim)
    {
        struct dati{
        int maggiore;
        int minore;
        };
        int i;
        int max=temp[0];
        for(i=1;i<dim;i++)
        {
            if(temp[i]>max)
                max=temp[i];
        }
        
        int i;
        int min=temp[0];
        for(i=1;i<dim;i++)
        {
            if(temp[i]<min)
                min=temp[i];
        }
    
        return dati;
    }
    
    e del main
        
     int n;
    int temperatura[giorni];
    carica(temperatura,n);
    struct valoriRitornati{
        int maggiore;
        int minore;
        };
        struct valoriRitornati temp=max_min(temperatura,n);
  • Re: C- array e funzione

    Intanto la struct devi dichiararla fuori dalla funzione:
    
    struct temperature{
          int min;
          int max;
    }
    La funzione deve avere il valore di ritorno che è :
    
    struct temperature max_min(int temp[], int dim)
    All'interno della funzione ti basta dichiarare una struct temperature e fare il lavoro che devi.
  • Re: C- array e funzione

    OK, ho dichiarato la struct come variabile globale.
    Questa sotto è dunque l'intestazione della funzione
    struct temperature max_min(int temp[], int dim)
    Dentro la funzione dichiaro la struct
    struct temperature valori;
    Il valore di ritorno è
    return  valori;
    Nel main ho fatto:
    struct temperature dati=max_min(int temp[], int dim);
    Mi dice che ho passato troppi pochi parametri alla funzione.
    Perchè?

    Pensavo che l'errore fosse nella struct, dato che è var globale ho fatto cosi;
    struct temperature=max_min(int temp[], int dim)
    ma non funziona comunque
  • Re: C- array e funzione

    Mettilo per intero il codice.
  • Re: C- array e funzione

    Ecco
    grazie
    #include <stdio.h>
    #include <stdlib.h>
    
    const int giorni=8;
    
    struct temperature {
    int min;
    int max;};
    
    struct temperature max_min(int temp[], int dim)
    {
        struct temperature valori;
    
        int i;
        int max=temp[0];
        for(i=1;i<dim;i++)
        {
            if(temp[i]>max)
                max=temp[i];
        }
    
    
        int min=temp[0];
        for(i=1;i<dim;i++)
        {
            if(temp[i]<min)
                min=temp[i];
        }
    
        return  valori;
    }
    int main()
    {    struct temperature dati = max_min(int temp[], int dim);
        return 0;
    }
    
    
  • Re: C- array e funzione

    Allora quando passi i valori alla funzione non stai dichiarando una funzione, ma devi passare un vettore e un intero:
    
    struct temperature dati=max_min(temp, dim);
    
    nel main non esiste il vettore.

    Attento alla funzione!!! Devi assegnare i campi della struct, così come scrivi tu hai due variabili min e max che poi perdi quando esci dalla funzione e ritorni una struct che non ha dei campi inizializzati.
  • Re: C- array e funzione

    Bene. Ho preso un po' di aria.
    Ho sistemato, ora FINALMENTE funziona.
    Ora provo con i puntatori
  • Re: C- array e funzione

    No, ho parlato troppo presto non ho risolto
    Allora questo ho risolto
    Allora quando passi i valori alla funzione non stai dichiarando una funzione, ma devi passare un vettore e un intero:
    CODICE: SELEZIONA TUTTO
    struct temperature dati=max_min(temp, dim);

    nel main non esiste il vettore
    Attento alla funzione!!! Devi assegnare i campi della struct, così come scrivi tu hai due variabili min e max che poi perdi quando esci dalla funzione e ritorni una struct che non ha dei campi inizializzati.
    Questo non ho risolto. Come faccio ad assegnare i campi della struct?
    Con una notazione punto? Ho fatto i questo modo ma non sono inzializzati
    
    #include <stdio.h>
    #include <stdlib.h>
    
    const int giorni=8;
    
    struct temperature {
    int minimo;
    int maximo;};
    
    void carica(int temperatura[], int dim)
    {
        int i;
        for(i=0;i<dim;i++)
        {
            printf("inserire temperatura alla posizione %d ",i+1);
            scanf("%d",&temperatura[i]);
        }
    }
    
    
    
    struct temperature max_min(int temp[], int dim)
    {
    
    
        int i;
        int max=temp[0];
        for(i=1;i<dim;i++)
        {
            if(temp[i]>max)
                max=temp[i];
        }
    
    
        int min=temp[0];
        for(i=1;i<dim;i++)
        {
            if(temp[i]<min)
                min=temp[i];
        }
        struct temperature valori;
        valori.minimo=min;
        valori.maximo=max;
    
        return  valori;
    
    }
    
    int main()
    {
        printf("caricamento valori\n");
        printf("inserisci giorni del mese corrente\n ");
        int n;
        scanf("%d",&n);
        int temperatura[giorni];
        carica(temperatura,n);
        int maximo,minimo;
        struct temperature dati = max_min(temperatura,n);
        printf("massimo e minimo sono %d,%d",maximo,minimo);
        return 0;
    }
    
    
  • Re: C- array e funzione

    Alla fine del main userai dati.maximo e dati.minimo ...
  • Re: C- array e funzione

    Si si avevo notato
    Finalmente risolto
Devi accedere o registrarti per scrivere nel forum
13 risposte