Ragazzi devo fare questo esercizio ho fatto tutto il listato ma mi dice il debug errore di segmentazione.
Praticamente ho 2 file risultati1.txt e risultati2.txt
risultati1.txt è organizzato in questo modo cognome e voto relativo al primo esonero.
Risultati2.txt invece il numero progressivo di ogni studente assegnato in ordine alfabetico crescente , il nome dello studente e il risultato del secondo esonero.
devo creare un terzo file con ordine alfabetico crescente cognome nome media fra gli esoneri.
Vi metto i file
risultati1.txt
Rossi 20
Bianchi 27
Neri 18
Gialli 15
Verdi 30
risultati2.txt
3 Piero 20
4 Gianni 24
2 Aldo 18
1 Giuseppe 18
5 Giacomo 24
alla fine devo ottenere nel file :
1 Bianchi Giuseppe ammesso con voto 22.500
2 Gialli Aldo non ammesso con voto 16.500
3 Neri Piero ammesso con voto 19.000
4 Rossi Gianni ammesso con voto 22.000
5 Verdi Giacomo ammesso con voto 27.000
edit ho risolto
Praticamente ho 2 file risultati1.txt e risultati2.txt
risultati1.txt è organizzato in questo modo cognome e voto relativo al primo esonero.
Risultati2.txt invece il numero progressivo di ogni studente assegnato in ordine alfabetico crescente , il nome dello studente e il risultato del secondo esonero.
devo creare un terzo file con ordine alfabetico crescente cognome nome media fra gli esoneri.
Vi metto i file
risultati1.txt
Rossi 20
Bianchi 27
Neri 18
Gialli 15
Verdi 30
risultati2.txt
3 Piero 20
4 Gianni 24
2 Aldo 18
1 Giuseppe 18
5 Giacomo 24
alla fine devo ottenere nel file :
1 Bianchi Giuseppe ammesso con voto 22.500
2 Gialli Aldo non ammesso con voto 16.500
3 Neri Piero ammesso con voto 19.000
4 Rossi Gianni ammesso con voto 22.000
5 Verdi Giacomo ammesso con voto 27.000
Codice:
#include <stdio.h> #include <string.h> #include <conio.h> struct stud {int ordine;char cognome[20];char nome[20];int voto;float media;}; int acquisisci1(FILE*,struct stud*); void ordina(int, struct stud*); void acquisisci2(FILE*,struct stud*,int); void scambia(struct stud*,struct stud*); void scrivi (int,struct stud*,FILE*); main() { FILE *fpi; int n; struct stud presenti [20]={0}; n=acquisisci1(fpi,presenti); ordina(n,presenti); acquisisci2(fpi,presenti,n); scrivi(n,presenti,fpi); getch(); } int acquisisci1 (FILE *A,struct stud *B) { int i=0; A=fopen("risultati1.txt","r"); if(A==NULL) printf("il file non esiste\n"); else { printf("\n*COGNOME VOTO\n\n"); while(fscanf(A,"%s %d",B[i].cognome,&B[i].voto)!=EOF) { printf("%s %d\n",B[i].cognome,B[i].voto); i++; } } fclose(A); return i; } void ordina (int A,struct stud *B) { int i,j,imin; for(i=0;i<A-1;i++) { imin=i; for(j=i+1;j<A;j++) { if(strcmp(B[j].cognome,B[imin].cognome)<0) imin=j; } scambia(&B[imin],&B[i]); } for(i=0;i<A;i++) printf("%s %d\n",B[i].cognome,B[i].voto); } void scambia (struct stud *A,struct stud *B) { struct stud temp; temp=*A; *A=*B; *B=temp; } void acquisisci2 (FILE *A,struct stud *B, int C) { int i=0; A=fopen("risultati2.txt","r"); if(A==NULL) printf("il file non esiste \n"); else { printf("\n\n*ORDINE NOME VOTO SECONDO ESONERO\n\n"); while(fscanf(A,"%d %s %d",B[C+1].ordine,B[C+1].nome,&B[C+1].voto)!=EOF) { printf("%d %s %d",B[C+1].ordine,B[C+1].nome,B[C+1].voto); for(i=0;i<C;i++) if(i==(B[C+1].ordine)-1) { strcpy(B[i].nome,B[C+1].nome); B[i].media=(B[i].voto+B[C+1].voto)/2; i=C; } } } } void scrivi (int A,struct stud *B,FILE *C) { int i ; C=fopen("risultati_fin.txt","w"); if(C==NULL) printf("non posso creare il file \n"); else { printf("\n*ORDINE COGNOME NOME MEDIA \n\n"); for(i=0;i<A;i++) { if(B[i].voto >= 18) { printf("%d %s %s ammesso con voto %.3f \n",B[i].ordine,B[i].cognome,B[i].nome,B[i].voto); fprintf(C,"%d %s %s ammesso con voto %.3f \n",B[i].ordine,B[i].cognome,B[i].nome,B[i].voto); } else { printf("%d %s %s non ammesso con voto %.3f \n",B[i].ordine,B[i].cognome,B[i].nome,B[i].voto); fprintf(C,"%d %s %s nonn ammesso con voto %.3f \n",B[i].ordine,B[i].cognome,B[i].nome,B[i].voto); } } fclose(C); } }
Commenta