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 :

TP sur les structures


Sujet :

C

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 3
    Points
    3
    Par défaut 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
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    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 «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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é

    Nom : Annotation 2020-05-09 171739.png
Affichages : 248
Taille : 41,6 Ko


    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
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    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 «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 690
    Points : 30 985
    Points
    30 985
    Billets dans le blog
    1
    Par défaut
    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 «Python»
    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
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : Comores

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2020
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. besoin d'aide pour une requête
    Par Damien69 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 31/03/2004, 15h38
  2. besoin d'aide pour le composant DBComboBox
    Par jane2002 dans le forum Bases de données
    Réponses: 8
    Dernier message: 28/02/2004, 19h01
  3. [Kylix] besoin d'aide pour installer kylix3
    Par Sph@x dans le forum EDI
    Réponses: 3
    Dernier message: 11/02/2004, 13h53
  4. [TP]besoin d'aide pour commandes inconnues
    Par Upal dans le forum Turbo Pascal
    Réponses: 15
    Dernier message: 03/10/2002, 10h48
  5. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05

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