Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1407 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  les fonctions

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

les fonctions

n°2241134
ibtissam20​14
Posté le 24-10-2014 à 22:13:05  profilanswer
 

bns  notre prof nous a demande de resolu cette exercice "On se propose l’automatisation de la gestion des examens du  parcours MIPC à la FSTG, On se limite par la réalisation sur machine  à 12 étudiants mais la gestion porte sur 3 semestres, un étudiant est  décrit par : CNE, Nom et Prénom. Un module est définit par son identification et un étudiant obtient 4  notes par semestre . Chaque note correspond à la note finale obtenue par module. L’objectif de cette étude est d’affecter automatiquement aux cinq  meilleurs étudiants une formation de filière d’ingénierie"      
 
 
 

 
#include<stdio.h>
#include<stdlib.h>
 
// ici c'est les variables globales (en dehors du main) :
char cin[7][41];
char nom[7][41];
char prenom[7][41];
char module[12][41];
float notes [12][7];
 
/*
  Vous définissez vos fonctions ici, et vous travaillez avec  
  les variables globales qui sont au-dessus .Good Luck ^^
*/
 
int main()
{
    int input;
    do {
    printf( "1. Prise en charge\n" );
    printf( "2. Liste des etudiants\n" );
    printf( "3. Moyenne par etudiant\n" );
    printf( "4. Moyenne par module\n" );
    printf( "5. Cinq meilleurs étudiants\n" );
    printf( "6. Quitter l'application\n" );
    printf( "Selection: " );
    scanf( "%d", &input );
    switch ( input ) {
        case 1:            
            //prise_En_Charge();
            break;
        case 2:            
            //afficher_Liste();
            break;    
        case 3:          
            //calcul_Moyenne_Par_Etudiant();
            break;
        case 4:          
            //calcul_Moyenne_Par_Module();
            break;
        case 5:          
            //cinq_Meilleurs_Etudiants();
            break;
        case 6:        
            printf( "Merci d'avoir choisi notre application\n" );
            break;
        default:            
            printf( "erreur de saisi\n" );
            break;
    }
     
    }while(input!=6);
 
}

 
 
 
 
 
 
 
 
 
 
 
c'est la 1ere exercice pour moi pour utiliser les fonctions  
svp aidez moi a faire la prise en charge des informations du base et merci

mood
Publicité
Posté le 24-10-2014 à 22:13:05  profilanswer
 

n°2242129
khoyo
Posté le 03-11-2014 à 21:43:58  profilanswer
 

Salut, qu'est ce que tu ne comprend pas, plus précisément  
 
Alors déjà, tu as ces variables globales :

Code :
  1. char cin[7][41];
  2. char nom[7][41];
  3. char prenom[7][41];
  4. char module[12][41];
  5. float notes [12][7];


Il s'agit a chaque fois de tableaux a 2 dimension.
 
Ce qui me semble déjà bizare, c'est que ton énoncé parle de 12 étudiants, alors que le tableau proposé en a 7.
 
"On se propose l’automatisation de la gestion des examens du  parcours MIPC à la FSTG, On se limite par la réalisation sur machine  à 12 étudiants mais la gestion porte sur 3 semestres, un étudiant est  décrit par : CNE, Nom et Prénom. Un module est définit par son identification et un étudiant obtient 4  notes par semestre . Chaque note correspond à la note finale obtenue par module. L’objectif de cette étude est d’affecter automatiquement aux cinq  meilleurs étudiants une formation de filière d’ingénierie"        
 
Ce que je te propose c'est déjà de définir des constantes sur les nombres dans l'énoncé, comme cela :

Code :
  1. #DEFINE NOMBRE_ETUDIANT 7
  2. #DEFINE NOMBRE_NOTES 12
  3. #DEFINE NOMBRE_ETUDIANT_INGE 5
  4. /*Ca, ca va etre la taille des tableaux dans lequel tu stocke du texte*/
  5. #DEFINE TAILLE_BUFFER 41


J'ai pris le nombre d'étudiants a partir de ce qui est suggeré par le code, mais comme ca on pourra le changer.
 
Ensuite vienne les variables globale dont je parlais plus haut.

Code :
  1. char cin[NOMBRE_ETUDIANT][TAILLE_BUFFER];
  2. char nom[NOMBRE_ETUDIANT][TAILLE_BUFFER];
  3. char prenom[NOMBRE_ETUDIANT][TAILLE_BUFFER];
  4. char module[NOMBRE_NOTES][TAILLE_BUFFER];
  5. float notes [NOMBRE_NOTES][NOMBRE_ETUDIANT];


 
Ensuite, il va falloir définir les différentes fonctions de ton programme, par exemple prise_En_Charge()
 

Code :
  1. void prise_En_Charge()
  2. {
  3.      //ici, tu écris le code qui va demander a l'utilisateur de rentrer un des etudiant, et tu remplis les cases de cin, nom et prenon avec ces info.
  4. }


 
Tu fais pareil pour chaque fonctions demandé, et c'est bon ;)
 
 
Si t'as plus de questions, hésite pas
 
(Ton code a l'air d'être du C, si c'est du C++ dit le)

n°2242155
dreameddea​th
Posté le 04-11-2014 à 09:46:51  profilanswer
 

Bonjour
 
Je complète la réponse, même si, visiblement, le code posté vient DIRECTEMENT DU PROF (le petit commentaire avec le good luck).
 
Pour information, pour les fonctions, il faut qu'elles soient au moins déclarées (et non définies) avant le premier appel.  
 
Donc en déclaration préalable (je préfère cette forme)

Code :
  1. #include ...
  2. //Variables globales;
  3. char ....
  4. void prise_En_Charge(); // déclaration
  5. int main() {
  6.    ...
  7. }
  8. void prise_En_Charge(){
  9.    // Ici le code effectif
  10. }


 
ou alors (je trouve ça moins joli, maintenable, évolutif, etc...) mais bon

Code :
  1. #include ...
  2. //Variables globales;
  3. char ....
  4. //Déclaration + code définitif
  5. void prise_En_Charge(){
  6. }
  7. int main() {
  8.    ...
  9. }


 
 
D'ailleurs visiblement dans l'énoncé, on ne met pas en place les bonnes pratiques tout de suite :( : les constantes numériques doivent être déclarées sous forme de macro (les #define).
 
En plus perso, je déteste les variables globales. C'est pas propre, on ne "voit" pas qui les utilise facilement et ça ne marche pas en multi-thread (ou très mal).
 
Même si c'est visiblement hors sujet, quitte à revoir les structures des variables, je pense qu'il faut aller au bout et utiliser les structures/énum. En effet faire 3/4 tableaux me parait peu lisible/maintenable.
 

Code :
  1. #define NB_NOTE_ETUDIANTS 4
  2. #define TAILLE_NOM 50
  3. #define TAILLE_PRENOM 50
  4. #define NB_MODULES 4
  5. typedef enum __cne_enum_t{
  6.     MR,
  7.     MME,
  8.     MLLE
  9. }cne_t;
  10. typedef enum __module_id_enum_t{
  11.     MODULE_ARCHITECTURE,
  12.     MODULE_ALGORITHMIE,
  13.     MODULE_C,
  14.     MODULE_C_PLUS_PLUS
  15. } module_id_t;
  16. typedef struct _module_struct_t{
  17.     module_id_t module;
  18.     float notes[NB_NOTE_ETUDIANTS];
  19. }module_t,module_tp;
  20. typedef struct __etudiant_struct_t{
  21.    cne_t cne;
  22.    char nom[TAILLE_NOM];
  23.    char prenom[TAILLE_PRENOM];
  24.    module_t modules[NB_MODULES];
  25. } etudiant_t,*etudiant_tp;


 
On a aussi le pb du scanf (j'ai toujours cru comprendre qu'il fallait utiliser fgets/sscanf).
 
Bon courage, et commence à faire l'algo, car c'est ça le but de l'énoncé.

n°2242166
khoyo
Posté le 04-11-2014 à 11:49:40  profilanswer
 

dreameddeath a écrit :


Même si c'est visiblement hors sujet, quitte à revoir les structures des variables, je pense qu'il faut aller au bout et utiliser les structures/énum. En effet faire 3/4 tableaux me parait peu lisible/maintenable.


 
Faut voir aussi si ca à été vu dans son cours, si c'est son premier exo avec des fonctions il n'a probablement aucune idée de ce qu'est une structure ou une enum.
 

n°2242171
dreameddea​th
Posté le 04-11-2014 à 12:34:58  profilanswer
 


@khoyo, Je pense comme toi C'est bien pour cela que j'ai mis "même si c'est visiblement hors sujet" et dans une deuxième partie de message :) ... Mais je me disais qu'un peu d'ouverture d'esprit ne fait pas de mal :), sachant que ce n'est même pas le but de l'exo visiblement.
 
Maintenant, je ne sais pas si c'est pour apprendre le C ou de l'algo.  
 
Mais pour moi, dans les deux cas c'est bancal :  
* si l'exercice veut faire travailler le C, il faut mettre en place les bonnes pratiques dès le départ (constantes, structures de données pas adaptées) et sur des choses simples (la boucle while avec aucune gestion des erreurs de saisies, pas d'init des variables, pas de mélange de pb de saisie, d'affichage, d'algo - boucles, etc...) ==> ce n'est pas le cas  
* Si c'est de l'algo, on peut pas dire que le C soit le langage le plus adapté (gestion mémoire avec les pbs de débordement tableau etc, structure de données très bas niveau - pas de liste, ... - ) et l'aspect algorithmique n'est pas mis en exergue (surtout avec une étape fastidieuse de gestion de la saisie en pré-requis )...
 
Mais bon courage quand même...

n°2242174
theshockwa​ve
I work at a firm named Koslow
Posté le 04-11-2014 à 13:07:58  profilanswer
 

dreameddeath a écrit :

En effet faire 3/4 tableaux me parait peu lisible/maintenable.


 
Et pourtant, c'est une pratique qui peut offrir des avantages. C'est déjà pas mal débattu (cherche soa vs aos si ca te tente)


---------------
last.fm
n°2242178
dreameddea​th
Posté le 04-11-2014 à 13:59:27  profilanswer
 

J'ai probablement été un peu "violent" en parlant de "peu" lisible/maintenable. Je voulais dire moins lisible/maintenable...
 
Je sais bien que dans certains cas spécifiques, on peut optimiser à l'aide telles présentations de données (structure de tableau - SOA).  
 
A ma connaissance, on a 2 cas possibles :
- la mémoire : l'alignement mémoire des données peut faire perdre pas mal de place
- la gestion vectorielle : les instructions vectorielles fonctionnent sur des tableaux de type de données de bases (entiers/flottants) et donc les tableaux de structures ne peuvent pas les exploiter
 
On est quand même sur des techniques avancées pour ceux qui maitrisent tout le reste et sur des cas d'optimisation (cf le dicton : Premature optimisation is the root of all evil)
 
En plus, le SOA nécessite une batterie de fonctions utilitaires plus "structurée/subtile" pour maintenir la consistance des données. Faire un tri est quand même sioux en SOA :) ...
 
Mais on est dans des cas à la marges et pour l'informatique de "gestion", on est dans 99% des cas à préférer pouvoir facilement rajouter une variable ou changer la structure globale (passage de tableau à liste chainée ou table de hash, etc...) qu'à pouvoir exploiter des instructions vectorielles/optimiser la mémoire par ce biais (l'allocation dynamique pour les chaines sera en moyenne bien plus efficace en gain mémoire que des optimisations basées sur l'alignement)...
 
Mais j'ai peut-être loupé une explication/raison...

n°2242184
khoyo
Posté le 04-11-2014 à 14:27:19  profilanswer
 

dreameddeath a écrit :


Maintenant, je ne sais pas si c'est pour apprendre le C ou de l'algo.  
 
Mais pour moi, dans les deux cas c'est bancal :  
* si l'exercice veut faire travailler le C, il faut mettre en place les bonnes pratiques dès le départ (constantes, structures de données pas adaptées) et sur des choses simples (la boucle while avec aucune gestion des erreurs de saisies, pas d'init des variables, pas de mélange de pb de saisie, d'affichage, d'algo - boucles, etc...) ==> ce n'est pas le cas  
* Si c'est de l'algo, on peut pas dire que le C soit le langage le plus adapté (gestion mémoire avec les pbs de débordement tableau etc, structure de données très bas niveau - pas de liste, ... - ) et l'aspect algorithmique n'est pas mis en exergue (surtout avec une étape fastidieuse de gestion de la saisie en pré-requis )...
 
Mais bon courage quand même...


 
Malheureusement, dans beaucoup de formations (sauf, en général, les prépas, qui font souvent du Caml), le C est le langage choisi en premier langage. C'est dommage, mais c'est comme ca :/

n°2242186
theshockwa​ve
I work at a firm named Koslow
Posté le 04-11-2014 à 14:34:50  profilanswer
 

dreameddeath a écrit :

A ma connaissance, on a 2 cas possibles :
- la mémoire : l'alignement mémoire des données peut faire perdre pas mal de place
- la gestion vectorielle : les instructions vectorielles fonctionnent sur des tableaux de type de données de bases (entiers/flottants) et donc les tableaux de structures ne peuvent pas les exploiter


 
Sans même vectoriser, tu gagnes pas mal de performances à grouper les données que tu manipules ensemble. Si le coeur de ton programme par la suite, ca va être de faire des moyennes de notes sur tous les élèves, ca a du sens de grouper ca dans un tableau dédié plutôt que de répartir les notes chez chacun. Tout est question de cas d'utilisation [:jagstang]  et pour le compromis avec la lisbilité, c'est aussi au cas par cas. Je voulais juste insister sur le fait que ce n'est pas une pratique satanique pour autant.


---------------
last.fm

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  les fonctions

 

Sujets relatifs
Fonctions avec requetes en base MySQLOptimisation de tableau de fonctions
Macro - Fonctions VBA[Qt Débutant] QTreeWidget, problème avec les fonctions de bases
fonctions et tableaux[Résolu]Variable modifié entre deux fonctions
JS fonctions et variables redéfiniescomment connaitre la fin d'un fichier avec des fonctions de bas niveau
Sécuriser les fonctions[C] fonctions imbriquées, je m'y perds [résolu]
Plus de sujets relatifs à : les fonctions


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR