Un exercice langage C urgent

Fermé
khal22 Messages postés 3 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 2 mai 2013 - 2 mai 2013 à 22:07
khal22 Messages postés 3 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 2 mai 2013 - 2 mai 2013 à 23:06
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

3 réponses

blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
2 mai 2013 à 22:08
Salut,

tu le veux en TAMP ?
0
khal22 Messages postés 3 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 2 mai 2013
2 mai 2013 à 22:19
oui svp c trés urgent
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 mai 2013 à 22:21
Plutôt que de réciter ton exercice et de dire que tu le trouves difficile, dis-nous ce que tu as compris, ce que tu as commencé à faire, et ce que tu n'arrives pas à faire. Sans ce préalable, tu n'auras aucune aide...
0
blux Messages postés 26013 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 26 avril 2024 3 289
2 mai 2013 à 22:31
TAMP = Travaille A Ma Place...
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
2 mai 2013 à 22:41
C'est pas à moi qui faut le dire ^^. Je lui expliquais ce qu'on attendait de lui :-)
0
khal22 Messages postés 3 Date d'inscription jeudi 2 mai 2013 Statut Membre Dernière intervention 2 mai 2013
2 mai 2013 à 23:06
j'ai fais ça mais je suis sure qu'il est faux :/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void saisir_fichier(FILE* fp_etudiant);
void menu();
int verif_lettre(char* c);
int verif_cin(char *ncin,FILE *fp);
int chiffre(char* c);
void ajouter_etudiant();
FILE* moyenne_etudiant(FILE* fp_etudiant);
void modifier_note(FILE* fp);
void recherche_par_cin(FILE* fp);
void rattrapage();

void main()
{
FILE *fp_etudiant=NULL;
int choix;
do
{
menu();
do
{
scanf("%d",&choix);
if(choix<0||choix>6)
printf("choix invalide\n");
}while(choix<0||choix>6);
switch (choix)
{
case 1 : saisir_fichier(fp_etudiant); break;
case 2 : moyenne_etudiant(fp_etudiant); break;
case 3 : modifier_note(fp_etudiant); break;
case 4 : rattrapage(); break;
case 0 : exit(0);

}


}while(1);





}

void menu()
{
printf("1.saisir les donnees d'un etudiant\n");
printf("2.liste de ratrappage\n");
printf("3.modifier la note d'un etudiant\n");
printf("4.afficher (l'/les)etudiant(s) qui (est/sont) 1er(s) dans la matiere\n");
printf("5.recherche num. d'inscri d'un etudiant\n");
printf("6.trier les etudiant par ordre alphabetique\n");
}

void saisir_fichier(FILE* fp_etudiant)
{
char ch[200]="",ch2[200]="";
char cin[8]="";
char num_inscri[8]="",classe[10]="",matiere[10]="";
float note_control,note_exam;
char prenom[15]="";
char nom[15]="";
int i;
printf("entrer le cin de l'etudiant : ");
do
{
scanf("%s",cin);
}while(strlen(cin)!=8||!chiffre(cin)||!verif_cin(cin,fp_etudiant));
fp_etudiant=fopen("etudiant.txt","r+");
if(fp_etudiant!=NULL)
{

while(fgetc(fp_etudiant)!=EOF);
fputc('\n',fp_etudiant);
fputs(cin,fp_etudiant);
fclose(fp_etudiant);
}

printf("\nentrer le prenom de l'etudiant : ");
do
{
scanf("%s",prenom);

}while(strlen(prenom)>15||strlen(prenom)<1||!verif_lettre(prenom));

printf("\nentrer le nom de l'etudiant : ");
do
{
scanf("%s",nom);
}while(strlen(nom)>15||strlen(nom)<1||!verif_lettre(nom));

printf("\nentrer le num. d'inscri de l'etudiant : ");
do
{
scanf("%s",num_inscri);
}while(strlen(num_inscri)!=8||!chiffre(num_inscri)||!verif_cin(num_inscri,fp_etudiant));
printf("\nentrer la classe de l'etudiant : ");
do
{
scanf("%s",classe);
}while(strlen(classe)<1||strlen(classe)>10);
printf("\nentrer la matiere: ");
do
{
scanf("%s",matiere);
}while(!verif_lettre(matiere)||strlen(matiere)<1||strlen(matiere)>10);
printf("\nentrer le note de controle de l'etudiant : ");
do
{
scanf("%f",¬e_control);
}while(note_control<0||note_control>20);
printf("\nentrer le note de l'exam de l'etudiant : ");
do
{
scanf("%f",¬e_exam);
}while(note_exam<0||note_exam>20);
sprintf(ch," %-20s %-20s %8s %-10s %-10s %-10f %-10f",nom,prenom,num_inscri,classe,matiere,note_control,note_exam);
fp_etudiant=fopen("etudiant.txt","a");
if(fp_etudiant!=NULL)
{
fputs(ch,fp_etudiant);
fclose(fp_etudiant);
}
}



int verif_cin(char *ncin,FILE *fp)
{
char ch[200];
rewind(fp);
while(fgets(ch,199,fp))
{
if(!memcmp(ch,ncin,8))
{
printf("CIN existe deja \n ");
return(0);
}
}
return(1);
}


int verif_lettre(char* c)
{
int i;
for(i=0;i<strlen(c);i++)
{
if((c[i]<='z'&&c[i]>='a')||(c[i]<='Z'&&c[i]>='A'))
return 1;
}
return 0;
}

int chiffre(char* c)
{
int i;
for(i=0;i<strlen(c);i++)
{
if(c[i]<='9'&&c[i]>='0')
return 1;
}
return 0;
}




FILE* moyenne_etudiant(FILE* fp_etudiant)
{
float a[2]={0},m=0; int i=0,b=95,p=-1,l;
char ch_moy[100]="",ch_boucl[150]="",c;
FILE* fp;
fp_etudiant=fopen("etudiant.txt","r");
if(fp_etudiant!=NULL)
{
rewind(fp_etudiant);


c=fgetc(fp_etudiant);


while(c!=EOF)
{
p++;
l=p;
i=0;

fgets(ch_moy,51,fp_etudiant);

printf("%s\n",ch_moy);
while(c!=EOF&&i<32)
{
c=fgetc(fp_etudiant);
i++;
}
fscanf(fp_etudiant,"%f",&a[0]);
printf("%f",a[0]);
rewind(fp_etudiant);
c=fgetc(fp_etudiant);
while(l>0&&fgets(ch_boucl,150,fp_etudiant)!=NULL)
{
l--;
}
i=0;

while(c!=EOF&&i<93)
{
c=fgetc(fp_etudiant);
i++;
}
fscanf(fp_etudiant,"%f",&a[1]);
printf(" %f",a[1]);
printf("\n");

m=(a[0]*3+a[1]*7)/10;
fp=fopen("moyenne_etudiant.txt","a");
if(fp!=NULL)
{
fputs(ch_moy,fp);
fprintf(fp,"%f",m);
fputc('\n',fp);
fclose(fp);
}
while(c!=EOF&&c!='\n')
{
c=fgetc(fp_etudiant);
}


}

fclose(fp_etudiant);
}

}



void modifier_note(FILE* fp)
{
int i=0,b;
float n;
char chaine[150]="", rnom[10]="",cpnom[10]="",c;
int l=0,m;

printf("saisir le nom a chercher : ");
scanf("%s",rnom);
fp=fopen("etudiant.txt","r+");
if(fp!=NULL)
{
rewind(fp);
c=fgetc(fp);
while(fgets(chaine,150,fp)!=NULL)
{
l++;

sscanf(chaine,"%8s %20s",cpnom,cpnom);
if(!strcmp(cpnom,rnom))
{
m=l-1;
i++;
printf("%s",chaine);
}

}
rewind(fp);
c=fgetc(fp);
if(i==1)
{
while(fgets(chaine,150,fp)!=NULL&&m>0)
{
m--;
}
}
if(i>1)
{
recherche_par_cin(fp);
}
printf("saisir la note a modifier : ");
printf("1.ds 2.exam : ");
scanf("%d",&b);
printf("saisir la nouvelle note : ");
scanf("%f",&n);
switch(b)
{
case 1 : fseek(fp,-23,SEEK_CUR); fprintf(fp,"%f",n); break;
case 2 : fseek(fp,-12,SEEK_CUR); fprintf(fp,"%f",n); break;
default: printf("choix invalide\n"); break;
}
fclose(fp);

}

}


void recherche_par_cin(FILE* fp)
{
char chaine[150]="", rcin[8]="",cpcin[8]="",c;
int i=0,m,l=0;

printf("saisir le num de cin a chercher : ");
scanf("%s",rcin);
fp=fopen("etudiant.txt","r");
if(fp!=NULL)
{
rewind(fp);
c=fgetc(fp);
while(fgets(chaine,150,fp)!=NULL)
{
l++;
sscanf(chaine,"%8s",cpcin);
if(!strcmp(cpcin,rcin))
{
m=l-1;
printf("%s",chaine);
}

}
rewind(fp);
c=fgetc(fp);


while(fgets(chaine,150,fp)!=NULL&&m>0)
{
m--;
}
fclose(fp);
}
}


void rattrapage()
{
FILE* fp=NULL;
float a;
char ch[100]="",c;
fp=fopen("moyenne_etudiant.txt","r");
if (fp!=NULL)
{
printf("La liste des etudiants qui vont passer l'exam de rattrapage : \n\n");
while(fgets(ch,100,fp)!=NULL)
{
fseek(fp,-11,SEEK_CUR);
fscanf(fp,"%f",&a);
if(a<10)
printf("%s",ch);
c=fgetc(fp);
while(c!='\n'&&c!=EOF)
{
c=fgetc(fp);
}
}
fclose(fp);
printf("\n");

}
}
0