Programmino in C

Pubblicità

abudedo

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
24
Salve a tutti, questo è un programma(o per lo meno dovrebbe esserlo) che serve per, dato un file formattato come "materia""nome""cognome""periodo""crediti""percentuale superamento" stampare a video la materia con il più alto numero di crediti assegnati e per ogni periodo quella con la percentuale di superamento più bassa.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20


typedef struct {
char materia[N];
char nome_prof[N];
char cognome_prof[N];
int periodo;
int crediti;
int superamento;
} Prof;


typedef struct{
char materia[N];
int superamento;} Superi;


int superamenti(Prof lista[],int i);
int main(int argc, char*argv[])
{
Prof lista[80];
FILE *fp;
char materia_top[20];
fp=fopen(argv[1],"r");
int i=0,k,j;
if(fp == NULL)
printf("Errore nell'apertura del file");
if(argc!=2)
printf("Errore nell'immissione dei dati");


while(!feof(fp))
{
fscanf(fp,"%s %s %s %d %d %d", lista.materia,lista.nome_prof,lista.cognome_prof,&lista.periodo,&lista.crediti,&lista.superamento);
i++;
}
int flag=0;
for(j=0;j<i;j++)
{
for(k=0;k<j;k++)
{
if(lista[j].crediti<lista[k].crediti)
{
flag++;
}
if(flag==0)
{
strcpy(materia_top,lista[j-1].materia);
}
}
}
printf("La materia che da il maggior numero di crediti e' %s\n", materia_top);




superamenti(lista,i);


return 0;
}
int superamenti(Prof lista[],int i)
{
Superi lista1[80];
int p=0,j,k,q,flag1=0;
for(j=1;j<=4;j++)
{
for(k=0;k<i;k++)
{
if(lista[k].periodo==j)
{
strcpy(lista1[p].materia,lista[k].materia);
lista1[p].superamento=lista[k].superamento;
p++;
}
}
for(k=0;k<=p;k++)
{
for(q=0;q<=p;q++)
{
if(lista1[k].superamento<lista1[q].superamento)
flag1++;
}
if(flag1==0)
printf("La materia piu' difficile da superare del %d periodo e' %s\n",j,lista1[k].materia);
}




}
return 0;


}
Tuttavia non ci entra nemmeno nella seconda funzione..dov'è che sbaglio?
 
Ciao :) allora, dandoci un'occhiata credo che non parta perché "superamenti" l'hai creata dicendo che deve restituire un valore int, ma questo nel main non lo assegni a nessuna variabile, comunque ho trovato il procedimento un po' macchinoso quindi ho pensato di provarlo a fare anche io, ecco il codice:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>


typedef struct
{
char materia[20];
char nome[20];
char cognome[20];
int periodo;
int crediti;
int superamento;
}prof;


superamento(prof l[], int i)
{
int j, k;
int min=100;
int flag=0;

for(j=1; j<=4; j++)
{
min=100;
flag=0;
for(k=0; k<i; k++)
{
if(l[k].periodo==j)
{
flag=1;
if(l[k].superamento<min)
min=l[k].superamento;
}
}
if(flag!=0)
printf("nel periodo %d l'esame piu' difficile ha perc. sup. %d \n\n", j, min);
else
printf("nel periodo %d non ci sono esami \n\n", j);
}
}


main()
{
FILE *f;
prof l[50];
int i=0, max=0, j;
char top[20]="";
f=fopen("prova.txt", "r");
while(fscanf(f, "%s%s%s%d%d%d", l.materia, l.nome, l.cognome, &l.periodo, &l.crediti, &l.superamento)>0)
{
i++;
}
for(j=0; j<i; j++)
{
if(max<l[j].crediti)
max=l[j].crediti;
strcpy(top, l[j].materia);
}
printf("la materia con piu' crediti e' %s che ne ha %d \n\n", top, max);
fclose(f);
superamento(l, i);
system("PAUSE");
}

Se vuoi comunque possiamo guardare con calma il tuo codice se questo non ti piace ;)
 
Pubblicità
Pubblicità
Indietro
Top