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