Programma in C

di il
1 risposte

Programma in C

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?

1 Risposte

  • Re: Programma in C

    Per il calcolo delle medie ti conviene creare un'altra lista dove in ogni nodo hai il codice del corso, la somma degli studenti, il numero di lezioni e la media.
Devi accedere o registrarti per scrivere nel forum
1 risposte