Fonction en c

Fermé
niss - 10 déc. 2010 à 18:39
 niss - 12 déc. 2010 à 22:04
Bonjour,
est il possible d'utiliser une fonction dans une autre fonction en langage c
voici mon bleme je dois faire une fonction qui calcule la variance
j ai deja fai une pour calculer la moyenne est ce ke je peu la reutiliser dans la fonction qui calcule la variance

merci de penser a moi


6 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
10 déc. 2010 à 19:10
Bien sûr, sinon ça ne sers à rien de faire des fonctions !

Un autre exemple :

int multiplier(int a,int b)
{
    return a*b;
}

int carre(int x)
{
    return multiplier(x,x);
}
0
slt
merci pour cet eclaircissement
mais avec la variance je dois la réutiliser dans la formule de la variance meme
donc je n aurait pa ke la moyenne au return
voici la formule de la variance = (somme(ni-moyenne)^2)/N
et ma fonction moyenne est
float moyenne(int n,int p,float T[n][p])
{
int l,c;
float sum=0;
for(l=0;l<n;l++)
{ sum+=T[l][1];
}
return (sum/n);

voici la variance que j essaye de faire
float variance(int n,int p,float T[n][p])
{
int l,c;
float difcar=0 ;
for(l=0;l<n;l++)
{ difcar+=(T[l][1] - moyenne( n, p, T[n][p]))^2;
}
return (difcar/n);
merci de m aider
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
10 déc. 2010 à 20:35
Dans ce cas non, car tu recalcules la moyenne à chaque tour de boucle alors qu'elle ne change pas...

Par contre je ne comprends pas pourquoi tu as une matrice T[n][p], soit n*p valeurs, alors que tu devrais avoir n valeurs et n probabilités, soit 2*n valeurs

En plus, on peut simplifier le calcul avec le théorème de König-Huyghens :

float moyenne(int n, float x[n], float p[n])
{
    int i, somme=0;

    for (i=0; i<n; i++)
        somme += p[i]*x[i];

    return (somme/n);
} 

float variance(int n, float x[n], float p[n]) 
{
    float sommeCarre = 0;

    int i;
    for (i=0; i<n; i++)
        somme += p[i]*x[i]*x[i];

    float m = moyenne(n,x);
    return (sommeCarre/n)-m*m;
}

Mais on peux bien sûr faire les deux calculs simultanément :
float variance(int n, float x[n], float p[n]) 
{
    float somme = 0, sommeCarre =0;

    int i;
    for (i=0; i<n; i++)
    {
        somme += p[i]*x[i];
        sommeCarre += p[i]*x[i]*x[i];
    }

    return sommeCarre/n-(somme/n)*(somme/n);
}
0
bonjour KX
c est a dire ke je suis avec un tableaux a deux dimension ou n est le nombre de ligne et p le nombre de colonnes et dans mon projet je dois faire une fonction qui calcule la moyenne apres faire une autre fonction qui calcule la variance d'une des colonnes et nous on est en biostatistique donc on utilise les tableaux mais on a pa etudié les matrices

merci beaucoup pour ton aide KX
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
11 déc. 2010 à 18:35
En mathématiques une matrice est - par définition - un tableau à deux dimensions.

En C, int[] est un tableau, int[][] est soit une matrice, soit un tableau de tableaux.
Mais dans ton cas toutes les lignes ont le même nombre de colonnes donc c'est une matrice
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
slt
oh d accord merci pour cette précision
suis arrivé a creer la fonction au fait en appelant la moyenne dans la fonction variable je declarais les parametres et non les arguments

et je voudrai tirer aleatoirement un 1 ou un 2 et les ranger dans la colonne 2
pour chaque identifiant en colonne 1
veux tu me dire ce que tu en pense

salut
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
11 déc. 2010 à 19:28
Je ne comprends pas ce que tu veux tirer aléatoirement, la moyenne et la variance doivent toujours donner le même résultat, il ne devrait rien y avoir d'aléatoire là dedans.

Par ailleurs je ne sais pas ce qu'il y a dans tes colonnes 1 et 2 (ni les autres)
0
slt
je dois Simuler un tableau (à 2 dimensions 100 lignes et 3 colonnes) de 100 patients avec les identifiants suivant à ranger en colonne 1: 56001-56050 29001-29050 (ils sont des 2 départements 56 et 29). Randomiser 2 traitements en tirant aléatoirement un 1 ou un 2 pour chaque patient, le ranger en colonne 2. Puis en colonne 3, tirer aléatoirement la PAM des patients traités par le traitement 1 en tirant un nombre entre 75 et 85, et la PAM des patients traités par le traitement 2 en tirant un nombre entre 80 et 90.

excuse moi si j ai ete long
0