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 :

TP sur les structures


Sujet :

C

  1. #1
    Candidat au Club
    TP sur les structures
    Bonsoir a tous ! j'essaie de faire un tp sur les structures et sa fait 48h que je suis bloqué dedans. a la base je voulais créer un programme qui demande le nom et prénom d'un élevé en suite leurs matières, note de chaque matières ainsi que leur coefficient et je pourrais finalement calculer la moyen. j'ai fait un structure qui contient en variable ces informations. Et en suite j'essaie de récupérer dans une boucle les information saisie, mais il n'y que le nom et prénom que j'arrive a récupérer le reste on dirais dirais qu'ils sont écrasés a la seconde boucle. j'ai essayé plusieurs combinaison mais je trouve pas. je travaille sur Code::blocks, V 20.03
    Donc je crois qu'un coup de main me sera tellement utile.

    voila mon code

    c'est ma fonction

    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
     
    void Entre_donnees_general(Eleves *donnees_eleves, int nbrEleve, int nbrMatieres){
     
    	for(int i = 0; i<nbrEleve; i++){
    		getchar();
    		printf("\n\t ===-Veuillez renseigner les champs suivant de l'eleve %d :-=== \n", i+1);
    		printf("\n\t\t- NOM : ");
    		gets(donnees_eleves[i].nom);
    		fflush(stdin);
    		printf("\n\t\t- PRENOM : ");
    		gets(donnees_eleves[i].prenom);
    		fflush(stdin);
     
    		for(int j=0; j<nbrMatieres; j++){
     
    			printf("\n\t\t- Entrer nom de la matiere %d : ", j+1);
    			getchar();
    			gets(donnees_eleves[j].matieres);
    			fflush(stdin);
    			printf("\n\t\t- Entrer Moyen : ");
    			scanf("%f", &donnees_eleves[j].noteMoyen);
     
     
    			printf("\n\t\t- Son coefficient : ");
    			scanf("%d", &donnees_eleves[j].coef);
     
    		}
     
    	}


    ma fonction main

    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
     
    case 2:
    	printf("\n\n\t\tCombien d'eleve(s) avez vous ? : ");
    	scanf("%d", &nbr_eleve); // on recupere le nombre d'eleve
     
    	printf("\n\n\t\tVous avez combien de matiere(s) ? : ");
    	scanf("%d", &nbr_matieres); // on recupere le nombre d'eleve
    	printf("%d", sizeof(Eleves));
     
    	if(donnees == NULL){
     
    		printf("\n\n\t\t\t\a======= ERREURE !!! \n\t\tImpossible de Charger les donnees======== \n\n");
    		exit(0);
    	}
     
     
    	Entre_donnees_general(donnees, nbr_eleve, nbr_matieres);
    	printf("\n\t\t\t\t Resultats\n\n");
     
    	// on affiche les informations lu dans la fonction entre donnees
     
    	for(int i = 0; i<nbr_eleve; i++){
    		printf("\n\t\t- %s %s a comme moyen en : ", donnees[i].nom, donnees[i].prenom);
     
    		for(int j=0; j<nbr_matieres; j++){
     
    		printf("\n\t\t- %s : %.2f ", donnees[j].matieres, donnees[j].noteMoyen);
     
    	}
    }


    ma structure

    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
     
    struct Eleves{
    	char nom[100];
    	char prenom[100];
    	char matieres[20];
    	int coef[20];
    	float note1;
    	float note2;
    	float note3;
    	float compos;
    	float moyen;
    	float moyen_general;
    	float noteMoyen[20];
     
    };

  2. #2
    Expert éminent sénior
    Bonjour
    Citation Envoyé par Wahid Hsn Voir le message
    on dirais dirais qu'ils sont écrasés a la seconde boucle. j'ai essayé plusieurs combinaison mais je trouve pas. Donc je crois qu'un coup de main me sera tellement utile.
    S'ils étaient "écrasés", alors tu aurais au-moins à l'écran les dernières valeurs saisies. Sinon pendant ces 48h de travail intensif, t'as tenté un printf() juste sous les scanf() pour voir ce qui se passe lors de la saisie ???

    Citation Envoyé par Wahid Hsn Voir le message
    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int coef[20];
    float noteMoyen[20];
    scanf("%f", &donnees_eleves[j].noteMoyen);
    scanf("%d", &donnees_eleves[j].coef);
    Tu veux bien expliquer comment tu penses pouvoir faire saisir 20 valeurs en un coup ???
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  3. #3
    Candidat au Club
    BOnjour !

    Oui c'est le cas sa affiche les dernieres valeur saisie a l'ecran.

    je vous envois un screen shoot de mon code compilé




    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
     
    int coef;
    float noteMoyen;


    je me suis trompé y'a pas de tableaux

  4. #4
    Expert éminent sénior
    Citation Envoyé par Wahid Hsn Voir le message
    je me suis trompé y'a pas de tableaux
    Je me demande bien comment on peut se tromper en copiant/collant son code depuis son PC sur un forum

    Citation Envoyé par Wahid Hsn Voir le message
    Oui c'est le cas sa affiche les dernieres valeur saisie a l'ecran.
    Hé oui. Tu as une structure "Eleves" donc prévue pour stocker un élève (normal) mais avec maintenant un seul coeff et une seule noteMoyen. Donc ipso-facto prévue pour une seule matière. Donc fatalement les dernières saisies écrasent les premières. Bloqué pendant 48h là dessus ? vraiment ???

    Citation Envoyé par Wahid Hsn Voir le message
    Code c :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
    void Entre_donnees_general(Eleves *donnees_eleves, int nbrEleve, int nbrMatieres){
     
    	for(int i = 0; i<nbrEleve; i++){
    		getchar();
    		printf("\n\t ===-Veuillez renseigner les champs suivant de l'eleve %d :-=== \n", i+1);
    		printf("\n\t\t- NOM : ");
    		gets(donnees_eleves[i].nom);
    		fflush(stdin);
    		printf("\n\t\t- PRENOM : ");
    		gets(donnees_eleves[i].prenom);
    		fflush(stdin);
     
    		for(int j=0; j<nbrMatieres; j++){
     
    			printf("\n\t\t- Entrer nom de la matiere %d : ", j+1);
    			getchar();
    			gets(donnees_eleves[j].matieres);
    			fflush(stdin);
    			printf("\n\t\t- Entrer Moyen : ");
    			scanf("%f", &donnees_eleves[j].noteMoyen);
     
     
    			printf("\n\t\t- Son coefficient : ");
    			scanf("%d", &donnees_eleves[j].coef);
     
    		}
     	}
    }
    Tu ne te mélangerais pas les pinceaux avec "i" et "j" ? Je sais pas moi. Si je vais saisir eleve[i].nom ça me semble bizarre ensuite d'aller saisir eleve[j].coeff...
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  5. #5
    Candidat au Club
    Hmm je suis un débutant, donc vous étonnez pas si je dis que j'ai passé 48h sur ça .

    Et oui vous avez raisons je crois que je melange les pinceaux avec les "i" et "j" en vrais c'est la que je bloque, je sais plus quoi faire. alors mettez moi dans le chemin

  6. #6
    Expert éminent sénior
    Citation Envoyé par Wahid Hsn Voir le message
    Et oui vous avez raisons je crois que je melange les pinceaux avec les "i" et "j" en vrais c'est la que je bloque, je sais plus quoi faire. alors mettez moi dans le chemin
    Il te faut apprendre à séparer les choses. Tu définis d'abord une structure pour gérer une matière. Cette structure contiendra le nom de la matière, la note, le coeff. Par exemple
    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct {
    	...nom
    	...note
    	...coeff
    } t_matiere


    Ensuite tu définis la structure pour gérer un élève. Cet élève pouvant avoir plusieurs matières, il y aura donc dans cette structure un tableau de matières. Exemple
    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    typedef struct {
    	...nom
    	...prenom
    	t_matiere matiere[20];
    	unsigned short nb_matieres;
    } t_eleve


    Ensuite dans le main tu définis un tableau d'élèves (t_eleve eleve[100]). Te suffit alors de boucler sur i allant de 0 à nb_eleves et faire saisir eleve[i].nom et eleve[i].prenom. Puis une boucle interne sur j allant de 0 à eleve[i].nb_matieres, et faire saisir eleve[i].matiere[j].nom, eleve[i].matiere[j].note, eleve[i].matiere[j].coeff.

    Ou alors tu t'investis un peu plus dans l'apprentissage du découpage (ce qui est la voie de l'objet). Et donc tu écris une fonction permettant de faire saisir une matière. Exemple
    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void saisieMatiere(t_matiere *m) {
    	faire saisir m->nom
    	faire saisir m->note
    	faire saisir m->coeff
    }


    Puis tu écris une fonction permettant de faire saisir un élève
    Code c :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void saisieEleve(t_eleve *e) {
    	faire saisir e->nom
    	faire saisir e->prenom
    }


    Puis te suffit de boucler sur i allant de 0 à nb_eleves et appeler saisieEleve(&eleve[i]). Et ensuite rajouter la boucle interne sur j allant de 0 à eleve[i].nb_matieres et appeler saisieMatiere(&eleve[i].matiere[j]).

    Plus la base est finement découpée, plus le haut du programme est simple en instructions. Et pour l'affichage c'est le même principe.
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

  7. #7
    Candidat au Club
    Sa me semble très pratique et j'avoue j'ai un peu de mal a séparer les chose mais j'y travaille.

    Merci beaucoup