PDA

Visualizza la versione completa : [C] Funzioni per calcolo media e varianza


InferNOS
15-04-2007, 10:54
Ciao raga ho un problema con le FUNZIONI!!ho appena iniziato a studiarle ma nn c sto capendo molto..allora un po di giorni fa, ho fatto questo ex:


#include <stdio.h>
#include <math.h>
#define MAX 100

float vet[MAX];

main()
{
int i,a;
float media,var;

printf("CALCOLO MEDIA E VARIANZA\n\n");
printf("Specificare gli elementi dell'array: ");
scanf("%d", &a);
printf("\n");

for(i=0; i<a; i++){
printf("Array[%d]: ", i+1);
scanf("%f", &vet[i]);
}
media = 0;
for(i=0; i<a; i++)
media = media + vet[i];
media = media/a;
printf("\nMedia: %f\n", media);

var = 0;
for(i=0; i<a; i++)
var = var + pow(vet[i]-media,2);
var = var/a;
printf("\nVarianza: %f\n", var);
}

Ebbene dovrei fare lo stesso esercizio ma cn le funzioni..ossia creare due funzioni,una ke calcoli la media di valori di un vettore e una che calcoli la varianza..sinceramente nn so dove mettere mano..sapete aiutarmi??

oregon
15-04-2007, 11:30
Beh ... almeno provaci, altrimenti non impari ...

Una funzione deve avere un nome, un valore da restituire e dei parametri in ingresso.

Ad esempio il titolo di una di queste puo' essere

CalcolaMedia

deve restituire la media quindi un

float

deve accettare dei parametri, nel tuo caso

il vettore vet e il numero a di elementi da considerare

Quindi questa funzione sara'



float CalcolaMedia(float v[], int n)
{
}


al suo interno andra' il codice tenendo conto che dovrai utilizzare i parametri specificati.
Quindi



float CalcolaMedia(float v[], int n)
{
int x;
float m;

m = 0;
for(x=0; x<n; x++)
m += v[x];

m /= n;

return(m);
}


e la inserirai prima del main. Nel main la utilizzerai semplicemente con



media=CalcolaMedia(vet, a);
printf("\nMedia: %f\n", media);


Analogamente per la varianza, che farai tu ...

MdE2005
15-04-2007, 11:43
La spiegazione di Oregon ottima..cmq se vuoi un'ulteriore fonte da cui imparare, ti consiglio la guida presente in questo stesso sito, molto chiara. Ti posto il link specifico del sottocapitolo delle funzioni:

http://programmazione.html.it/guide/lezione/1102/le-funzioni/

Ciao :)

InferNOS
15-04-2007, 12:00
Grazie oregon..a prima vista gi mi hai fatto capire delle cosette ke avevo poco chiare..utile anche la guida..oggi pom ci smanetto un p e vi faccio sapere :)

alka
15-04-2007, 18:07
Io suggerisco anche l'uso di titoli un po' pi prolissi e significativi...

Questo l'ho corretto io. :fagiano:

InferNOS
15-04-2007, 18:21
:zizi: grazie alka!
Allora ragazzi ci sto provando ma nn ne sta uscendo un bel lavoro :dh:
questo quello ke ho scritto io:

#include <stdio.h>
#define MAX 100

float CalcolaMedia(float, int);
main()
{
int i,n;
float media,v[MAX];

printf("Specificare gli elementi dell'array: ");
scanf("%d", &n);
printf("\n");

media = 0;
for(i=0; i<n; i++)
media = media + v[i];
media = media/n;
media = CalcolaMedia(v, n);
printf("\nMedia: %f\n", media);

float CalcolaMedia(float v[], int n)
{
return(media);
}
}
Dove e perch sbaglio?? :dh: :dh:

andbin
15-04-2007, 18:32
Originariamente inviato da InferNOS
Dove e perch sbaglio?? :dh: :dh: Le funzioni non vanno messe dentro altre funzioni. E comunque nella funzione che devi fare i calcoli della media, vedo solo un return ....

InferNOS
15-04-2007, 18:37
Le funzioni non vanno messe dentro altre funzioni. E comunque nella funzione che devi fare i calcoli della media, vedo solo un return ....
Lascia stare!!Sto fuso!!Ora penso di averlo fatto corretto..vedete un attimo se giusto..

#include <stdio.h>
#define MAX 100

float CalcolaMedia(float, int);
main()
{
int i,n;
float media,v[MAX];

printf("Specificare gli elementi dell'array: ");
scanf("%d", &n);
printf("\n");

for(i=0; i<n; i++){
printf("Array[%d]: ", i+1);
scanf("%f", &v[i]);
}
media = 0;
for(i=0; i<n; i++)
media = media + v[i];
media = media/n;

float CalcolaMedia(float v[], int n)
{
return(media);
}
media = CalcolaMedia(v, n);
printf("\nMedia: %f\n", media);
}
Cmq ora ke l'ho fatto..mi sfugge quale sia il reale beneficio rispetto al programma senza funzione...boh..

andbin
15-04-2007, 18:41
Originariamente inviato da InferNOS
Lascia stare!!Sto fuso!!Ora penso di averlo fatto corretto..vedete un attimo se giusto..No, ripeto: le funzioni non vanno dichiarate dentro altre funzioni!!!

Focalizza l'attenzione su cosa deve fare la funzione: viene passato un array di float e il numero di elementi, nella funzione calcoli la media e la restituisci.

InferNOS
15-04-2007, 18:55
Ora ci siamo???


#include <stdio.h>
#define MAX 100

int i,n;
float media,v[MAX];

float CalcolaMedia(float v[], int n)
{
media = 0;
for(i=0; i<n; i++)
media = media + v[i];
media = media/n;
return(media);
}
main()
{
printf("Specificare gli elementi dell'array: ");
scanf("%d", &n);
printf("\n");

for(i=0; i<n; i++){
printf("Array[%d]: ", i+1);
scanf("%f", &v[i]);
}
media = CalcolaMedia(v, n);
printf("\nMedia: %f\n", media);
}

Loading