Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: Fonctions et tableaux

  1. #1
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 13
    Points : 0
    Points
    0

    Par défaut Fonctions et tableaux

    Bonjour,

    Cela fait des heures que je suis sur un exercice et j'aurais vraiment besoin d'un petit coup de main car on dirait que je suis vraiment sur la mauvaise piste. Voici l'énoncé:

    "Soient N et M des constantes données par #define définissant la taille de deux tableaux tabnotes et distribution.
    Soit tabnotes un tableau de N valeurs flottantes représentant des notes d’examen :
    Code :
    float tabnotes[N]= {14.5,17.9,6.4,9.2,12.0,13.1,11.4,10.9}
    Soit distribution un tableau de M = 5 valeurs entières représentant le nombre de notes correspondant à chacune des cinq mentions possibles (échec, passable, assez bien, bien, très bien). Par exemple, distribution [2] doit représenter le nombre de notes donnant droit à la mention assez bien. Ce tableau sera initialisé avec des zéros au début du programme.

    1. On souhaite déterminer le nombre de notes dans tabnotes qui sont comprises entre 0 et 10.0 (échec), entre 10.0 et 12.0 (passable), entre 12.0 et 14.0 (assez bien), entre 14.0 et 16.0 (bien), et celles comprises entre 16.0 et 20.0 (très bien).
    Donnez une fonction fourchette_notes qui remplit le tableau distribution.

    2. Donnez le programme principal pour tester votre fonction.

    3. On souhaite afficher un histogramme des notes triées par mention :
    échec, passable, assez bien, bien, très bien. Un histogramme est une graphique qui contient une barre verticale pour chacune des cinq mentions, dont la hauteur dépend du nombre de notes qui entrent dans cette fourchette.
    Une barre peut être représenté par un rectangle de largeur 10 pixels. Pour chaque note, le rectangle aura 10 pixels de hauteur supplémentaire. Pour mieux distinguer les barres, on laissera un espace de 5 pixels entre deux barres.

    La fonction s’appelera dessin_histogramme. Déterminez ses paramètres et son type de retour, puis écrivez le corps de la fonction.
    Ajoutez l’appel à cette fonction au programme principal. "

    Je vous montre ce que j'ai fait, c'est à dire que je n'ai pas rajouté l'histogramme (et qui ne marche pas du tout mais je pense que vous pourrez plus m'aider en voyant mes erreurs):

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #include <cini.h>
    #define N 8
    #define M 5
     
    void fourchette_notes ( float tabnotes[N], int taille, int distribution[M] ) {
     
    int i;
    int echec = 0;
    int passable = 0;
    int AB = 0;
    int B = 0;
    int TB = 0;
     
    	for (i = 0; i <= taille; i++) {
    		if (tabnotes[i] < 10) {
    			echec = echec + 1 ;
    			}
    			if (tabnotes[i] >= 10 && tabnotes[i] < 12) {
    			passable = passable + 1 ;
    			}
    			if (tabnotes[i] >= 12 && tabnotes[i] < 14) {
    			AB = AB + 1 ;
    			}
    			if (tabnotes[i] >= 14 && tabnotes[i] < 16) {
    			B = B + 1 ;
    			}
    			if (tabnotes[i] >= 16) {
    			TB = TB + 1 ;
    			}
    			distribution[0]=echec;
    		distribution[1]=passable;
    		distribution[2]=AB;
    		distribution[3]=B;
    		distribution[4]=TB;
    		}
     
    }
     
    void afficheTab(float tabnotes[N], int taille) {
    	int i;
     
    	for (i = 0; i < taille; i++) {
    		printf("%f ", tabnotes[i]);
    	}
    	printf("\n");
    }
     
    int main() {
    	float tabnotes[N]= {14.5, 17.9, 6.4, 9.2, 12.0, 13.1, 11.4, 10.9} ;
    	int distribution[M]={0,0,0,0,0};
        int i;
     
        fourchette_notes(tabnotes, distribution);
     
        for (i = 0; i < N; i++) {
     
    		printf("Note %d : ", (i+1));
            printf("%.2f \n", tabnotes[i]);
    	}
     
     
     
    	   for (i = 0; i < 1; i++) {
    		   printf("Echec: %d \n ", distribution[0]);
    		   printf("Passable: %d \n ", distribution[1]);
    		   printf("Assez bien: %d \n ", distribution[2]);
    		   printf("Bien: %d \n ", distribution[3]);
    		   printf("Très bien: %d \n ", distribution[4]);
    	}
     
     
    	return 0;
    }
    J'espère que vous pourrez m'aider.
    Merci d'avance,

  2. #2
    Responsable Modération
    Avatar de diogene
    Homme Profil pro Patrick Gonord
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 664
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrick Gonord
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 664
    Points : 12 539
    Points
    12 539

    Par défaut

    Quelques remarques :

    1- void fourchette_notes ( float tabnotes[N], int taille, int distribution[M] )... Ce n'est pas faux, mais il faut savoir que spécifier ici la taille des tableaux ( N et M) est ignoré par le compilateur et que ceci est équivalent à void fourchette_notes ( float tabnotes[], int taille, int distribution[] )... et à void fourchette_notes ( float *tabnotes, int taille, int *distribution )....
    (C'est le seul cas, paramètre de fonction, où la syntaxe considère équivalentes des notations tableau et pointeur)

    2- for (i = 0; i <= taille; i++) si taille est le nombre d'éléments de tabnotes[], alors on doit avoir for (i = 0; i < taille; i++).

    3- Il est possible de simplifier les tests :
    Code :
    1
    2
    3
    4
    5
    6
    7
    if (tabnotes[i] < 10) {
       echec = echec + 1 ;
    }
    else if (tabnotes[i] < 12) {
             passable = passable + 1 ;
         }
         else if...
    4- ERREUR : Dans main(), on a l'appel fourchette_notes(tabnotes, distribution); alors que la déclaration de la fonction est void fourchette_notes ( float tabnotes[N], int taille, int distribution[M] ) . Il manque un paramètre

    5- Dans main() :
    Code :
    1
    2
    3
    4
    	   for (i = 0; i < 1; i++) {
    		   printf("Echec: %d \n ", distribution[0]);
    ...
    	  }
    A quoi sert la boucle for ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 13
    Points : 0
    Points
    0

    Par défaut

    Tout d'abord merci pour cette réponse rapide. J'ai corrigé ce que vous avez remarqué (et oui c'est vrai que la boucle for elle est un peu sortie de mon chapeau) cependant il me reste toujours des questions:

    4- Il faut donc que je mette:
    Code :
    fourchette_notes(tabnotes, taille, distribution);
    ?

    Car si oui, j'ai une erreur de compilation comme quoi il n'est pas déclaré, et lorsque je le déclare ça me met qu'il n'est pas initialisé ...

    Ensuite désolé d'abuser de votre gentillesse mais j'ai vraiment l'impression que même si mon programme compilait ma fonction soit ne fonctionne pas, soit n'est pas utilisée car dans mon tableau distribution mes valeurs sont toujours à 0 alors qu'elle devraient s'additionner.

  4. #4
    Responsable Modération
    Avatar de diogene
    Homme Profil pro Patrick Gonord
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 664
    Détails du profil
    Informations personnelles :
    Nom : Homme Patrick Gonord
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 664
    Points : 12 539
    Points
    12 539

    Par défaut

    Il faut mettre le nombre d'éléments du tableau à traiter. Si le tableau est complètement rempli, ça donne :
    Code :
    fourchette_notes(tabnotes, N, distribution);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 13
    Points : 0
    Points
    0

    Par défaut

    Génial ça fonctionne! je vais me pencher sur l'histogramme et je vous tiens au courant. Merci beaucoup en tout cas je m'arrachais les cheveux!

  6. #6
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    décembre 2012
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : décembre 2012
    Messages : 13
    Points : 0
    Points
    0

    Par défaut

    petit up: l'histogramme est fait également. Je n'ai pas vraiment eu de soucis avec. cependant j'ai une dernière question et je ne vois pas du tout l'approche à avoir:

    4) L’établissement définit sa règle de compensation : il faudra compenser chaque module où l’ étudiant(e) a obtenu une note au-dessous de 10.0 avec un module où il a dépassé 10.0 d’au moins la différence.
    Chaque module au-dessus de 10.0 ne peut compenser qu’un seul autre module. Ecrivez une fonction compensation(float tabnotes[]). Elle renvoie une valeur booléenne indiquant si oui ou non l’ étudiant a obtenu sa compensation.

    Aide : On crée un nouveau tableau tabnotes_diff de taille égale à celle de tabnotes et initialement vide. Pour chaque note, on calcule d’abord la différence (positive ou négative) par rapport à 10.0 et l’inscrit dans tabnotes_diff[i].
    On mettra à jour ces variables si on trouve une autre qui compense plus juste, c’est à dire la somme plus proche de 10.0, afin de préserver les notes plus élèves pour d’ éventuelles notes plus basses à compenser.
    L’affichage final souhaité est le suivant :
    L’étudiant a obtenu son semestre.
    ou bien
    L’étudiant n’a pas obtenu son semestre.
    Ajoutez l’appel à cette fonction au programme principal.

    Donc pour le tableau etc je vois bien, cependant je ne vois pas du tout comment m'y prendre pour choisir les notes qui se compensent le mieux.
    Merci d'avance,

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •