Salve ragazzi,mentre stavo affrontando un compito,ho trovato difficolta nel calcolare la media per ciascun corso.Come faccio a tenere conto di quanti e quali sono i corsi differenti?
Il testo del programma è questo:
Un professore vuole realizzare un programma che gli permetta di elaborare delle
statistiche sulle presenze ai corsi universitari da lui tenuti.
Ogni corso universitario è caratterizzato da un codice (es. 06AZNDI). Ogni volta che il
docente effettua una lezione, deve richiamare il programma per inserire le informazioni
relative ad essa, ed in particolare data e numero di studenti presenti alla lezione. Le
informazioni sono memorizzate in un file di lavoro denominato lezioni.txt. Tale file è
composto da un numero variabile, non noto a priori, di righe, ciascuna delle quali
contiene le informazioni relative ad una singola lezione. Il file può contenere le
informazioni relative a molti corsi (diversi). Il formato di ciascuna riga del file è il
seguente: codice (max 10 caratteri, senza spazi), data (nel formato dd/mm/yyyy),
numstudenti (intero positivo).
Ciascuna delle suddette informazioni è priva di spazi bianchi all’interno ed è separata
dalle altre informazioni tramite uno spazio bianco. Di seguito è riportato un esempio di
file di lavoro:
Vi è richiesto di scrivere un programma in C in grado di gestire una lista dinamica
(semplicemente concatenata). La lista dovrà contenere un nodo per ciascuna delle lezioni
tenute dal professore. Ciascun nodo dovrà contenere i seguenti dati: codice, data e
numstudenti. Si implementino, inoltre, delle funzioni in grado di:
- inizializzare la lista delle lezioni (con i dati contenuti nel file lezioni.txt);
- calcolare la media dei partecipanti per ciascun corso;
- stampare a schermo l’insegnamento con la media più alta di partecipanti;
- stampare a schermo l’insegnamento con la media più bassa di partecipanti;
- inserire nella lista i dati di una nuova lezione;
- salvare i dati presenti nella lista sul file di lavoro (lezioni.txt).
Il file txt è questo:
06AZNDI 10/03/2017 35
07ECONO 20/04/2017 20
06AZNDI 13/03/2017 31
02MATEM 18/02/2017 18
Ho cercato di farlo cosi però mi sono bloccato....
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 20
struct corso{
char formato[max];
char data[max];
int num_studenti;
struct corso *next;
};
typedef struct corso corso;
typedef corso *link;
link inizializza(char*);
void media(link); //media per ciascun corso
//void insegnamento1(link); //media piu alta di partecipanti
//void insegnamento2(link); //media piu bassa partecipanti
//link inserisci(link);
//void salva(char*,link);
void menu(void);
//link deallocalista(link);
int main(){
link head = NULL;
int scelta;
int cont;
float media1;
head=inizializza("lezioni.txt");
do{
menu();
scanf("%d",&scelta);
switch(scelta){
case 1:
media(head);
break;
/* case 2;
insegnamento1(head);
break;
case 3:
insegnamento2(head);
break;
case 4:
head=inserisci(head);
break;
case 5:
salva("corso.txt",head);
break;
*/
default:
scelta=0;
break;
}
}while(scelta);
//head=deallocalista(head);
free(head);
return EXIT_SUCCESS;
}
link inizializza(char* Nomefile){
FILE *fp;
link head = NULL;
link elemento;
fp=fopen("lezioni.txt","r");
while(!feof(fp)){
elemento=malloc(sizeof(corso));
fscanf(fp,"%s ",elemento->formato);
fscanf(fp,"%s ",elemento->data);
fscanf(fp,"%d ",&elemento->num_studenti);
if(head==NULL){
head=elemento;
head->next=NULL;
}else{
elemento->next=head;
head=elemento;
}
}
fclose(fp);
return head;
}
void menu(void){
printf("1 Calcola media dei partecipanti per ciascun corso\n");
printf("2 Insegnamento con media piu' alta di partecipanti\n");
printf("3 Insegnamento con media piu'bassa di partecipanti\n");
printf("4 Inserisci nuova lezione\n");
printf("5 Salva nuova lezione\n");
}
void media(link head){
link scorri = head;
float media=0.0;
int cont=0;
while(scorri!=NULL){
media+=scorri->num_studenti;
cont++;
scorri=scorri->next;
}
media=media/cont;
printf("la media degli studenti partecipanti a ciascuna lezione e': %f\n\n",media);
Ovviamente cosi mi fa la media di tutti e non del singolo...Cosa potrei fare?