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

  FORUM HardWare.fr
  Programmation
  C

  un exercice en C

 

Sujet(s) à lire :
    - Visual C++
 

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

un exercice en C

n°2188099
khal22
Posté le 29-04-2013 à 23:02:54  profilanswer
 

bonsoir  si quelqun peut m'aider j'ai un exercice de programmation en language C et merci d'avance  :
exercice:[u][/u]
 
le fichier "etudiants.txt" décrit les différents etudiants:
 
-cin :un long sur 8 caracteres
-nom: une chaine de caractere sur 15 caracteres
-prenom: une chaine de caractere sur 15 caracteres
-num_inscription: un long sur 8 caracteres
-classe: une chaine de caractere sur 10 caracteres
-matiere: une chaine de caractere sur 10 caracteres
-note_controle: un réel sur 5 caracteres
-note_examen: un réel sur 5 caracteres
 
on vous demande d'ecrire les fonctions suivantes:
 
1) saisir_fichiers (FILE *fp_etudiant)
{
}
qui permet de saisir les données dans le fichiers "etudiant.txt" avec contraints de saisie
 
2) File * Moyenne_etudiant(FILE *fp_etudiant)
{
}
qui permet de générer un fichier "moyenne.txt" qui contient le cin ,le nom ,le prenom ainsi que la moyenne de tous les etudiants du fichier "etudiant.txt"
 
3)rattrapage (FILE *fp_etudiant)
{
}
qui permet de générer un fichier d'afficher la liste des etudiantsqui vont passer l'examen de rattrapage et les matiéres à.
 
4) modifier_etudiant (FILE * fp_etudiant, long cin)
{
}
qui permet de modifier l'une des notes d'un etudiant donné
 
5) matière_premier(FILE * fp_etudiant, char * matiere)
{
}
qui permet d'afficher (l'/les) etudiant(s) 1er dans une discipline donnée.
 
6) recherche_inscri( FILE * fp_etudiant, char * nom, char * prenom)
{
}
 
un etudiant veut rechercher son numero d'inscription ,pour cela, il tape au clavier son nom, prenom et le programme doit afficher son nom ,son prenom , son numero d'inscription et la classe auquelle il appartient. La recherche doit etre une recherche dichotomique.
 
7) tri_croissant( FILE * fp_etudiant)
{
}
trier dans l'ordre croissant les noms des etudiants.
 
 
 
 
moi je l'ai trouvé trés difficile s'il vous plait quelqun peut m'aider.  
Merci

mood
Publicité
Posté le 29-04-2013 à 23:02:54  profilanswer
 

n°2188116
Farian
Posté le 30-04-2013 à 01:33:36  profilanswer
 

Bonsoir !
 
(Re)lisez la charte de ce forum !
 
Montrez-nous ce que vous avez déjà fait, et nous pourrons éventuellement vous aider à aller plus loin, ne comptez pas que quelqu'un fasse l'exercice à votre place ...
 
Bonne continuation !

n°2188293
khal22
Posté le 30-04-2013 à 23:33:00  profilanswer
 

non non j'ai fais les 3 premiéres fonctions mais je trouve les autres plus difficiles pour moi!

n°2188294
Farian
Posté le 30-04-2013 à 23:49:50  profilanswer
 

Bonsoir !
 
Si vous avez fait les deux premières, vous avez déjà fait une bonne partie du travail, puisque vous avez la lecture du fichier, une boucle qui parcourt les entrées et l'écriture de certaines données dans un fichier de sortie.
 
Par rapport au deuxième point, c'est à peine différent : Pour chaque étudiant, vous regardez toutes ses notes et vous regardez si il doit passer un rattrapage (j'imagine que cela correspond au fait de ne pas avoir eu la moyenne, mais ce n'est pas super clair dans l'énoncé). Vous rajoutez une ligne dans le fichier pour chaque matière dans laquelle la note obtenue est insuffisante.
 
Pour moi, ce serait même un poil plus simple que le deuxième, car vous pouvez gérer les données "en ligne", sans avoir à les regrouper par étudiant, mais ce n'est que mon point de vue :)
 
Bonne continuation !
 
Si vous éprouvez des difficultés à faire cet exercice, montrez-nous ce que vous avez fait pour le deuxième et où vous en êtes du troisième, nous pourrons vous aider à vous poser les bonnes questions et à aller plus loin dans la résolution.
 
Bonne continuation !

n°2188296
khal22
Posté le 01-05-2013 à 00:39:51  profilanswer
 

j'ai une petite question.. si je fait par exemple fgets(ch,50,file); le curseur après cette fonction reste a la position 50?

n°2188298
Farian
Posté le 01-05-2013 à 01:12:04  profilanswer
 

Non, la lecture s'arrête après avoir trouvé un caractère "retour chariot" ou au bout de 50 caractères et reste à la position juste après le dernier caractère lu

n°2188667
khal22
Posté le 02-05-2013 à 23:05:23  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. void saisir_fichier(FILE* fp_etudiant);
  5. void menu();
  6. int verif_lettre(char* c);
  7. int verif_cin(char *ncin,FILE *fp);
  8. int chiffre(char* c);
  9. void ajouter_etudiant();
  10. FILE* moyenne_etudiant(FILE* fp_etudiant);
  11. void modifier_note(FILE* fp);
  12. void recherche_par_cin(FILE* fp);
  13. void rattrapage();
  14. void main()
  15. {
  16.     FILE *fp_etudiant=NULL;
  17.     int choix;
  18.     do
  19.     {
  20.         menu();
  21.            do
  22.     {
  23.       scanf("%d",&choix);
  24.       if(choix<0||choix>6)
  25.       printf("choix invalide\n" );
  26.     }while(choix<0||choix>6);
  27.     switch (choix)
  28.     {
  29.         case 1 : saisir_fichier(fp_etudiant); break;
  30.         case 2 : moyenne_etudiant(fp_etudiant); break;
  31.         case 3 : modifier_note(fp_etudiant); break;
  32.         case 4 : rattrapage(); break;
  33.         case 0 : exit(0);
  34.     }
  35.     }while(1);
  36. }
  37. void menu()
  38. {
  39.     printf("1.saisir les donnees d'un etudiant\n" );
  40.     printf("2.liste de ratrappage\n" );
  41.     printf("3.modifier la note d'un etudiant\n" );
  42.     printf("4.afficher (l'/les)etudiant(s) qui (est/sont) 1er(s) dans la matiere\n" );
  43.     printf("5.recherche num. d'inscri d'un etudiant\n" );
  44.     printf("6.trier les etudiant par ordre alphabetique\n" );
  45. }
  46. void saisir_fichier(FILE* fp_etudiant)
  47. {
  48.     char ch[200]="",ch2[200]="";
  49.     char cin[8]="";
  50.     char num_inscri[8]="",classe[10]="",matiere[10]="";
  51.     float note_control,note_exam;
  52.     char prenom[15]="";
  53.     char nom[15]="";
  54.     int i;
  55.        printf("entrer le cin de l'etudiant : " );
  56.        do
  57.        {
  58.            scanf("%s",cin);
  59.        }while(strlen(cin)!=8||!chiffre(cin)||!verif_cin(cin,fp_etudiant));
  60.        fp_etudiant=fopen("etudiant.txt","r+" );
  61.        if(fp_etudiant!=NULL)
  62.        {
  63.             while(fgetc(fp_etudiant)!=EOF);
  64.         fputc('\n',fp_etudiant);
  65.            fputs(cin,fp_etudiant);
  66.            fclose(fp_etudiant);
  67.        }
  68.        printf("\nentrer le prenom de l'etudiant : " );
  69.        do
  70.        {
  71.            scanf("%s",prenom);
  72.        }while(strlen(prenom)>15||strlen(prenom)<1||!verif_lettre(prenom));
  73.        printf("\nentrer le nom de l'etudiant : " );
  74.        do
  75.        {
  76.            scanf("%s",nom);
  77.        }while(strlen(nom)>15||strlen(nom)<1||!verif_lettre(nom));
  78.        printf("\nentrer le num. d'inscri de l'etudiant : " );
  79.        do
  80.        {
  81.            scanf("%s",num_inscri);
  82.        }while(strlen(num_inscri)!=8||!chiffre(num_inscri)||!verif_cin(num_inscri,fp_etudiant));
  83.        printf("\nentrer la classe de l'etudiant : " );
  84.        do
  85.        {
  86.            scanf("%s",classe);
  87.        }while(strlen(classe)<1||strlen(classe)>10);
  88.        printf("\nentrer la matiere: " );
  89.        do
  90.        {
  91.            scanf("%s",matiere);
  92.        }while(!verif_lettre(matiere)||strlen(matiere)<1||strlen(matiere)>10);
  93.        printf("\nentrer le note de controle de l'etudiant : " );
  94.        do
  95.        {
  96.            scanf("%f",&note_control);
  97.        }while(note_control<0||note_control>20);
  98.        printf("\nentrer le note de l'exam de l'etudiant : " );
  99.        do
  100.        {
  101.            scanf("%f",&note_exam);
  102.        }while(note_exam<0||note_exam>20);
  103.    sprintf(ch," %-20s %-20s %8s %-10s %-10s %-10f %-10f",nom,prenom,num_inscri,classe,matiere,note_control,note_exam);
  104.     fp_etudiant=fopen("etudiant.txt","a" );
  105.     if(fp_etudiant!=NULL)
  106.     {
  107.         fputs(ch,fp_etudiant);
  108.         fclose(fp_etudiant);
  109.     }
  110. }
  111. int verif_cin(char *ncin,FILE *fp)
  112. {
  113.     char ch[200];
  114.     rewind(fp);
  115.     while(fgets(ch,199,fp))
  116.    {
  117.       if(!memcmp(ch,ncin,8))
  118.     {
  119.         printf("CIN existe deja \n " );
  120.         return(0);
  121.     }
  122.    }
  123. return(1);
  124. }
  125. int verif_lettre(char* c)
  126. {
  127.     int i;
  128.     for(i=0;i<strlen(c);i++)
  129.     {
  130.         if((c[i]<='z'&&c[i]>='a')||(c[i]<='Z'&&c[i]>='A'))
  131.         return 1;
  132.     }
  133.         return 0;
  134. }
  135. int chiffre(char* c)
  136. {
  137.     int i;
  138.     for(i=0;i<strlen(c);i++)
  139.     {
  140.         if(c[i]<='9'&&c[i]>='0')
  141.         return 1;
  142.     }
  143.     return 0;
  144. }
  145. FILE* moyenne_etudiant(FILE* fp_etudiant)
  146. {
  147.     float a[2]={0},m=0; int i=0,b=95,p=-1,l;
  148.     char ch_moy[100]="",ch_boucl[150]="",c;
  149.     FILE* fp;
  150.     fp_etudiant=fopen("etudiant.txt","r" );
  151.     if(fp_etudiant!=NULL)
  152.     {
  153.       rewind(fp_etudiant);
  154.           c=fgetc(fp_etudiant);
  155.           while(c!=EOF)
  156.           {
  157.               p++;
  158.               l=p;
  159.               i=0;
  160.              fgets(ch_moy,51,fp_etudiant);
  161.              printf("%s\n",ch_moy);
  162.              while(c!=EOF&&i<32)
  163.              {
  164.                  c=fgetc(fp_etudiant);
  165.                  i++;
  166.              }
  167.              fscanf(fp_etudiant,"%f",&a[0]);
  168.              printf("%f",a[0]);
  169.              rewind(fp_etudiant);
  170.              c=fgetc(fp_etudiant);
  171.              while(l>0&&fgets(ch_boucl,150,fp_etudiant)!=NULL)
  172.              {
  173.                  l--;
  174.              }
  175.              i=0;
  176.              while(c!=EOF&&i<93)
  177.              {
  178.                  c=fgetc(fp_etudiant);
  179.                  i++;
  180.              }
  181.              fscanf(fp_etudiant,"%f",&a[1]);
  182.              printf(" %f",a[1]);
  183. printf("\n" );
  184.           m=(a[0]*3+a[1]*7)/10;
  185.          fp=fopen("moyenne_etudiant.txt","a" );
  186.       if(fp!=NULL)
  187.       {
  188.           fputs(ch_moy,fp);
  189.           fprintf(fp,"%f",m);
  190.           fputc('\n',fp);
  191.           fclose(fp);
  192.       }
  193.               while(c!=EOF&&c!='\n')
  194.              {
  195.                  c=fgetc(fp_etudiant);
  196.              }
  197.           }
  198. fclose(fp_etudiant);
  199.     }
  200. }
  201. void modifier_note(FILE* fp)
  202. {
  203.     int i=0,b;
  204.     float n;
  205.     char chaine[150]="", rnom[10]="",cpnom[10]="",c;
  206. int l=0,m;
  207.     printf("saisir le nom a chercher : " );
  208.     scanf("%s",rnom);
  209.     fp=fopen("etudiant.txt","r+" );
  210.     if(fp!=NULL)
  211.     {
  212.         rewind(fp);
  213.         c=fgetc(fp);
  214.         while(fgets(chaine,150,fp)!=NULL)
  215.         {
  216.            l++;
  217.            sscanf(chaine,"%8s %20s",cpnom,cpnom);
  218.          if(!strcmp(cpnom,rnom))
  219.          {
  220.             m=l-1;
  221.             i++;
  222.             printf("%s",chaine);
  223.          }
  224.         }
  225.         rewind(fp);
  226.         c=fgetc(fp);
  227.                 if(i==1)
  228.          {
  229.              while(fgets(chaine,150,fp)!=NULL&&m>0)
  230.              {
  231.                  m--;
  232.              }
  233.          }
  234.            if(i>1)
  235.            {
  236.               recherche_par_cin(fp);
  237.            }
  238.            printf("saisir la note a modifier : " );
  239.            printf("1.ds 2.exam : " );
  240.            scanf("%d",&b);
  241.            printf("saisir la nouvelle note : " );
  242.            scanf("%f",&n);
  243.            switch(b)
  244.            {
  245.                case 1 : fseek(fp,-23,SEEK_CUR); fprintf(fp,"%f",n); break;
  246.                case 2 : fseek(fp,-12,SEEK_CUR); fprintf(fp,"%f",n); break;
  247.                default: printf("choix invalide\n" ); break;
  248.            }
  249. fclose(fp);
  250.     }
  251. }
  252. void recherche_par_cin(FILE* fp)
  253. {
  254.      char chaine[150]="", rcin[8]="",cpcin[8]="",c;
  255. int i=0,m,l=0;
  256.     printf("saisir le num de cin a chercher : " );
  257.     scanf("%s",rcin);
  258.     fp=fopen("etudiant.txt","r" );
  259.     if(fp!=NULL)
  260.     {
  261.         rewind(fp);
  262.         c=fgetc(fp);
  263.         while(fgets(chaine,150,fp)!=NULL)
  264.         {
  265.             l++;
  266. sscanf(chaine,"%8s",cpcin);
  267.          if(!strcmp(cpcin,rcin))
  268.          {
  269.             m=l-1;
  270.             printf("%s",chaine);
  271.          }
  272.         }
  273.         rewind(fp);
  274.         c=fgetc(fp);
  275.              while(fgets(chaine,150,fp)!=NULL&&m>0)
  276.              {
  277.                  m--;
  278.              }
  279.          fclose(fp);
  280.         }
  281.     }
  282. void rattrapage()
  283. {
  284.     FILE* fp=NULL;
  285.     float a;
  286.     char ch[100]="",c;
  287.     fp=fopen("moyenne_etudiant.txt","r" );
  288.     if (fp!=NULL)
  289.     {
  290.         printf("La liste des etudiants qui vont passer l'exam de rattrapage : \n\n" );
  291.         while(fgets(ch,100,fp)!=NULL)
  292.         {
  293.             fseek(fp,-11,SEEK_CUR);
  294.             fscanf(fp,"%f",&a);
  295.             if(a<10)
  296.             printf("%s",ch);
  297.             c=fgetc(fp);
  298.             while(c!='\n'&&c!=EOF)
  299.             {
  300.                 c=fgetc(fp);
  301.             }
  302.         }
  303.         fclose(fp);
  304.         printf("\n" );
  305.     }
  306. }


Message édité par gilou le 03-05-2013 à 13:33:06

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

  un exercice en C

 

Sujets relatifs
langage CAide exercice informatique C :
Aider Moi sur Un Exercice En Language C svpLangage C : Exercice sur les files
[Résolu] Exercice C, structure, type, compilation modulaireexercice pointeur et fonction langage C
exercice pointeur et fonction langage CExercice C++
Exercice C++C# Exercice Enum
Plus de sujets relatifs à : un exercice en C


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