PDA

View Full Version : [C]Funzione con struttura


xbubbax
04-08-2007, 10:45
Ho fatto questo esercizio con una funzione che restituisce una struttura per calcolare il minimo e massimo di un vettore ma come sempre succedere per i miei programmi non funzionano


#include <stdio.h>

struct minmax{
int min;
int max;
};
struct minmax vett(int v[], int n);
int main(){
int n=10;
int v[10]={1,4,3,6,5,3,7,5,3,6};
int c;
vett(v,n);
printf("%d\n", a.min);
printf("%d", a.max);

}
struct minmax vett(int v[], int n){
int i;
int min;
int max;

struct minmax a;
if(n==1){
a.min=v[0];
a.max=v[0];
}
min=v[0];
else for(i=1;i<n;i++){
if(v[i]<min){
min=v[i];}}
max=v[0];
for(i=1;i<n;i++){
if(v[i]>max){
max=v[i];}}
a.min=min;
a.max=max;

return a;}

andbin
04-08-2007, 11:31
Ho fatto questo esercizio con una funzione che restituisce una struttura per calcolare il minimo e massimo di un vettore ma come sempre succedere per i miei programmi non funzionanoNel main chiami vett ma senza usare il suo valore di ritorno (e allora a che serve?). La funzione vett invece è molto migliorabile: non servirebbero nemmeno le singole variabili min/max (c'è già la struct, no?), e invece di 2 cicli se ne può fare solo 1 (tra l'altro c'è un else di troppo prima del for).

In sostanza si può fare così:
#include <stdio.h>

struct minmax
{
int min;
int max;
};

struct minmax minmax_vett (int v[], int n)
{
struct minmax mm = { 0, 0 };
int i;

if (n > 0)
mm.min = mm.max = v[0];

for (i = 0; i < n; i++)
{
if (v[i] < mm.min)
mm.min = v[i];
if (v[i] > mm.max)
mm.max = v[i];
}

return mm;
}

int main (void)
{
int v[10] = {1,4,3,6,5,3,7,5,3,6};
struct minmax mm;

mm = minmax_vett (v, sizeof(v)/sizeof(v[0]));

printf ("min=%d max=%d\n", mm.min, mm.max);

return 0;
}

xbubbax
04-08-2007, 11:35
Si vabbè, tutti i miei programmi sono molto migliorabili, ma mi interessava soprattutto sapere stampavo esattamente il risultato, cioè come si ritorna un valore di struttura e come si stampa nella printf, quando la struttura è usata nella funzione