IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Fonctions et tableaux


Sujet :

C

  1. #1
    Futur Membre du Club
    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 : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    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 : 6
    Points
    6
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Il faut mettre le nombre d'éléments du tableau à traiter. Si le tableau est complètement rempli, ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    Futur Membre du Club
    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 : 6
    Points
    6
    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
    Futur Membre du Club
    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 : 6
    Points
    6
    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,

Discussions similaires

  1. Exercice de programmation C : fonctions et tableaux
    Par Celialita11 dans le forum Débuter
    Réponses: 7
    Dernier message: 31/03/2010, 01h10
  2. Fonction et tableaux
    Par Nemesis007 dans le forum Langage
    Réponses: 4
    Dernier message: 16/12/2008, 15h54
  3. Réponses: 2
    Dernier message: 01/12/2008, 14h18
  4. Problème de fonctions et tableaux
    Par sebdu94 dans le forum C
    Réponses: 2
    Dernier message: 05/04/2007, 11h12
  5. [Conception] Utiliser les fonctions des tableaux ou plusieurs requêtes ?
    Par Derik dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 01/02/2006, 09h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo