Modification d'un tableau dans une fonction
shub06
-
roptat Messages postés 276 Date d'inscription Statut Membre Dernière intervention -
roptat Messages postés 276 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je souhaite écrire un programme permettant de recueillir les notes et en faire une moyenne à l'aide d'une fonction. après avoir fait celà, j'ai voulais créer une fonction qui permettrait d'ajouter une notes dans le tableau. Mais je n'arrive pas à récupérer le résultat de la fonction ajouter pour pouvoir l'utiliser dans moyenne.
Je joins les différents codes.
Merci d'avance!
#include <stdio.h>
#include <stdlib.h>
#include "vecteurfct.h"
VECTEUR.C
int main(int argc, char ** argv)
{
Tableau tab;
int i;
printf("Entrer la taille du vecteur\n");
scanf("%d",&tab.taille);
tab.notes= malloc(tab.taille*sizeof(float));
for (i=0;i<tab.taille;i++)
{
do
{
printf("Entrer une note entre 0 et 20: ");
scanf("%f",tab.notes+i);
}
while (tab.notes[i]<0 || tab.notes[i]>20);
}
moyenne(tab);
afficher(tab);
ajouter(tab);
afficher(tab);
moyenne(tab);
}
vecteurfct.h
#ifndef VECTEURFCT_H
#define VECTEURFCT_H
typedef struct Tableau
{
float *notes;
int taille;
} Tableau ;
float moyenne(Tableau tab);
float afficher(Tableau tab);
float ajouter(Tableau tab);
#endif
vecteurfct.c
#include <stdio.h>
#include <stdlib.h>
#include "vecteurfct.h"
float moyenne(Tableau tab)
{
int j;
int somme=0;
float moyenne;
for (j=0;j<tab.taille;j++)
{
somme=somme+tab.notes[j];
}
moyenne=somme/tab.taille;
printf("La moyenne vaut %f.\n",moyenne);
return moyenne;
}
float afficher(Tableau tab)
{
int i;
printf("le contenu du tableau: \n");
for (i=0;i<tab.taille-1;i++)
{
printf("%f,",tab.notes[i]);
}
printf("%f. \n",tab.notes[tab.taille-1]);
}
float ajouter(Tableau tab)
{
tab.taille++;
printf("Entrer une nouvelle note");
scanf("%f",tab.notes+(tab.taille-1));
afficher(tab);
}
je souhaite écrire un programme permettant de recueillir les notes et en faire une moyenne à l'aide d'une fonction. après avoir fait celà, j'ai voulais créer une fonction qui permettrait d'ajouter une notes dans le tableau. Mais je n'arrive pas à récupérer le résultat de la fonction ajouter pour pouvoir l'utiliser dans moyenne.
Je joins les différents codes.
Merci d'avance!
#include <stdio.h>
#include <stdlib.h>
#include "vecteurfct.h"
VECTEUR.C
int main(int argc, char ** argv)
{
Tableau tab;
int i;
printf("Entrer la taille du vecteur\n");
scanf("%d",&tab.taille);
tab.notes= malloc(tab.taille*sizeof(float));
for (i=0;i<tab.taille;i++)
{
do
{
printf("Entrer une note entre 0 et 20: ");
scanf("%f",tab.notes+i);
}
while (tab.notes[i]<0 || tab.notes[i]>20);
}
moyenne(tab);
afficher(tab);
ajouter(tab);
afficher(tab);
moyenne(tab);
}
vecteurfct.h
#ifndef VECTEURFCT_H
#define VECTEURFCT_H
typedef struct Tableau
{
float *notes;
int taille;
} Tableau ;
float moyenne(Tableau tab);
float afficher(Tableau tab);
float ajouter(Tableau tab);
#endif
vecteurfct.c
#include <stdio.h>
#include <stdlib.h>
#include "vecteurfct.h"
float moyenne(Tableau tab)
{
int j;
int somme=0;
float moyenne;
for (j=0;j<tab.taille;j++)
{
somme=somme+tab.notes[j];
}
moyenne=somme/tab.taille;
printf("La moyenne vaut %f.\n",moyenne);
return moyenne;
}
float afficher(Tableau tab)
{
int i;
printf("le contenu du tableau: \n");
for (i=0;i<tab.taille-1;i++)
{
printf("%f,",tab.notes[i]);
}
printf("%f. \n",tab.notes[tab.taille-1]);
}
float ajouter(Tableau tab)
{
tab.taille++;
printf("Entrer une nouvelle note");
scanf("%f",tab.notes+(tab.taille-1));
afficher(tab);
}
A voir également:
- Modification d'un tableau dans une fonction
- Tableau word - Guide
- Fonction si et - Guide
- Trier un tableau excel - Guide
- Suivi de modification word - Guide
- Tableau ascii - Guide
1 réponse
Oulah... Tu vas avoir des erreurs de segmentation ! Ta fonction ajouter ne vérifie pas que l'emplacement mémoire où elle écrit lui est reservé.
Il vaut mieux faire une liste chainée (ta structure contient un flotant et un pointeur vers la prochaine note, représentée par la même structure. Le pointeur peut être null s'il n'y a pas de note supplémentaires). Ou alors tu fait un free suivit d'un malloc dans la fonction ajouter.
Pour utiliser la fonction ajouter, tu dois envoyer un pointeur vers tab et non pas sa valeur. En fait, la valeur est bien entrée mais tu modifie la taille de la copie, et non de l'original. La fonction afficher s'arretera avant la fin car pour elle, la taille n'aura pas changé.
Il vaut mieux faire une liste chainée (ta structure contient un flotant et un pointeur vers la prochaine note, représentée par la même structure. Le pointeur peut être null s'il n'y a pas de note supplémentaires). Ou alors tu fait un free suivit d'un malloc dans la fonction ajouter.
Pour utiliser la fonction ajouter, tu dois envoyer un pointeur vers tab et non pas sa valeur. En fait, la valeur est bien entrée mais tu modifie la taille de la copie, et non de l'original. La fonction afficher s'arretera avant la fin car pour elle, la taille n'aura pas changé.