[Programma C] Funzione che restituisca due parametri

di il
10 risposte

[Programma C] Funzione che restituisca due parametri

Ciao a tutti!

Ho provato a risolvere un esercizio in cui veniva chiesto di creare un programma che implementasse una funzione che, immesso come input un vettore e la sua dimensione, restituisse tramite due parametri della funzione la media e il minimo del vettore. Dal momento che so benissimo che una funzione può restituire solamente un parametro, ho utilizzato una struttura per far ciò. Questo è quello che è venuto fuori, sento che sono vicino alla soluzione. Il problema che mi da è che i valori di media e minimo che mi restituisce sono sempre uguali a 0. Spero possiate aiutarmi. Grazie

#include <stdio.h>
#include <stdlib.h>
#define MAX 150

// STRUTTURA DATI //

typedef struct
{
double min;
double media;

}Vettore;

// PROTOTIPO DI FUNZIONE //

void Media_Minimo(double v[], int dimensione);

int main()
{
Vettore V;
double vett[MAX];
int dim;
int i;

printf("Quanti elementi vuoi inserire ? ");
scanf("%d", &dim);

for(i=0; i<dim; i++)
{
printf("Inserisci numero : ");
scanf("%lf", &vett);
}

Media_Minimo(vett, dim);

printf("\nLa media degli elementi vale : %.4lf\n", V.media);
printf("L'elemento piu' piccolo e' : %.4lf\n",V.min);

return EXIT_SUCCESS;
}

void Media_Minimo(double v[], int dimensione)
{
Vettore Ritorno;
int i;
double somma=0;
Ritorno.min = v[0];

for(i=0; i<dimensione; i++)
{
somma+=v;

if(v<Ritorno.min)
Ritorno.min=v;
}

Ritorno.media = (double)somma/dimensione;

}

10 Risposte

  • Re: [Programma C] Funzione che restituisca due parametri

    Fai tutto tranne restituire la struttura. E per farlo la funzione non può essere void
  • Re: [Programma C] Funzione che restituisca due parametri

    oregon ha scritto:


    Fai tutto tranne restituire la struttura. E per farlo la funzione non può essere void
    Come posso ovviare la cosa? Ho ripensato un attimo al programma e l'ho modificato in questo modo. Adesso va

    #include <stdio.h>
    #include <stdlib.h>
    #define MAX 150

    // STRUTTURA DATI //

    typedef struct
    {
    double min;
    double media;

    }Vettore;

    // PROTOTIPO DI FUNZIONE //

    void Media_Minimo(double v[], int dimensione);

    int main()
    {
    Vettore V;
    double vett[MAX];
    int dim;
    int i;

    printf("Quanti elementi vuoi inserire ? ");
    scanf("%d", &dim);

    for(i=0; i<dim; i++)
    {
    printf("Inserisci numero : ");
    scanf("%lf", &vett);
    }

    Media_Minimo(vett, dim);

    return EXIT_SUCCESS;
    }

    void Media_Minimo(double v[], int dimensione)
    {
    Vettore Ritorno;
    int i;
    double somma=0;
    Ritorno.min = v[0];

    for(i=0; i<dimensione; i++)
    {
    somma+=v;

    if(v<Ritorno.min)
    Ritorno.min=v;
    }

    Ritorno.media = (double)somma/dimensione;
    printf("\nLa media degli elementi vale : %.4lf\n", Ritorno.media);
    printf("L'elemento piu' piccolo e' : %.4lf\n",Ritorno.min);

    }
  • Re: [Programma C] Funzione che restituisca due parametri

    Adesso stampi nella funzione ma se vuoi fare quello che chiedevi prima e stampare nel main la struttura la devi restituire e la funzione non può essere void. Pensaci
  • Re: [Programma C] Funzione che restituisca due parametri

    A me sembra però che la consegna chieda altro:

    "Implementare una funzione che, immesso come input un vettore e la sua dimensione, restituisca tramite due parametri della funzione la media e il minimo del vettore."

    Da queste parole intuisco che voglia una funzione con un prototipo di questo tipo:
    void Media_Minimo( double *i_v, int i_dim, double *o_media, double *o_minimo );
    In questo propotipo...

    1) con i_v "comunichi" l'indirizzo del vettore coi dati
    2) con i_dim "comunichi" la quantità di elementi presenti nel vettore
    3) con o_media "comunichi" l'indirizzo di memoria dove vuoi che venga collocata la media calcolata
    4) con o_minimo "comunichi" l'indirizzo di memoria dove vuoi che venga collocato il valore minimo presente tra i dati

    In questo modo, la funzione "restituisce tramite due parametri della funzione la media e il minimo del vettore", come richiesto.
  • Re: [Programma C] Funzione che restituisca due parametri

    Ma la sua strada era quella della struttura da restituire ... perché gliela cambi ?
  • Re: [Programma C] Funzione che restituisca due parametri

    Perché è un esercizio, e il testo dell'esercizio chiede altro. Solo per quello.
  • Re: [Programma C] Funzione che restituisca due parametri

    Si ma prima chiarisci come si fa con la struttura, poi come si fa con i parametri e che questa era ciò che chiedeva l'esercizio. Per evitare confusione tra l'uno e l'altro metodo che sicuramente farà
  • Re: [Programma C] Funzione che restituisca due parametri

    Va bene.

    Per una mia preferenza, chiamo la struttura Ritorno:
    typedef struct {
        double minimo;
        double media;
    } Ritorno;
    La prima possibilità è passare alla funzione un parametro di tipo Ritorno, per indirizzo, e fare in modo che la funzione "compili" i campi della struttura come di dovere. Non serve restituire niente. Il prototipo:
    void Media_Minimo( double *i_v, int i_dim, Ritorno *o_esito );
    La chiamata a questa funzione è del tipo...
    Ritorno media_e_minimo; // dichiaro la struttura
    
    // faccio quel che devo fare...
    
    // passo la struttura alla funzione, per indirizzo
    Media_Minimo( vett, dim, &media_e_minimo );
    Una seconda possibilità è non passare la struttura alla funzione, ma fare in modo che sia la funzione a restituire una struttura di tipo Ritorno. Il prototipo:
    Ritorno Media_Minimo( double *i_v, int i_dim );
    La chiamata a questa funzione è del tipo...
    Ritorno media_e_minimo;
    
    // faccio quel che devo fare...
    
    // "ricevo" la struttura come valore di ritorno
    media_e_minimo = Media_Minimo( vett, dim );
  • Re: [Programma C] Funzione che restituisca due parametri

    Vi ringrazio siete stati gentilissimi pero' ho fatto un po' di confusione ahah. In poche parole, cosa devo cambiare del file sorgente che ho postato affinchè sia completamente inerente al testo dell'esercizio?
  • Re: [Programma C] Funzione che restituisca due parametri

    Secondo me la strada più attinente all'esercizio è quella dove la funzione ha quattro parametri.
    Per le modifiche al tuo sorgente, come ti ha già detto Oregon dovresti fare in modo che non sia la funzione Media_Minimo() a mandare i dati in console, ma che quella funzione "restituisca" i dati elaborati cosicché sia main() a mandarli in console.
Devi accedere o registrarti per scrivere nel forum
10 risposte