un exercice en C

un exercice en C - C - Programmation

Marsh Posté le 29-04-2013 à 23:02:54    

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

Reply

Marsh Posté le 29-04-2013 à 23:02:54   

Reply

Marsh Posté le 30-04-2013 à 01:33:36    

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 !

Reply

Marsh Posté le 30-04-2013 à 23:33:00    

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

Reply

Marsh Posté le 30-04-2013 à 23:49:50    

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 !

Reply

Marsh Posté le 01-05-2013 à 00:39:51    

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?

Reply

Marsh Posté le 01-05-2013 à 01:12:04    

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

Reply

Marsh Posté le 02-05-2013 à 23:05:23    

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
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed