04/01/13 11:16
tonno16
salve a tutti. Ho trovato questo forum veramente di facile utilizzo, ed ora provo a chiedere a voi un aiuto.
devo implementare un programma in C che gestisca gli studenti iscritti agli anni accademici con gli esami (lgi esami li implementerò successivamente);
QUINDI: in questa lista di liste ci sono gli anni e gli studenti:
prendiamo per esempio questa imamgine:
img97.imageshack.us/img97/4989/…
ipotizziamo che i nodi in alto dove c'è M siano gli anni. e i nodi in verticale siano gli studenti di ogni anno.
nel mio codice la lista degli studenti si chiama *testa_stud. come vedete nella foto il numero 10 punta a NULL. nel mio caso, testa_stud->next punta a NULL, come nella foto. Infatti stampando tutti gli studenti di tutti gli anni, viene stampata dolo la lista degli studenti inseriti in input dell ultimo anno. esempio. inserisco 2 studenti del 1993 e altri 3 del 1995, in stampa_studenti(), ho solo la lista degli studenti del 1993.
DUNQUE devo far si che il nodo 10 della foto punti a 2???? cosi da avere un unica lista di studenti.
AIUTO.
devo implementare un programma in C che gestisca gli studenti iscritti agli anni accademici con gli esami (lgi esami li implementerò successivamente);
QUINDI: in questa lista di liste ci sono gli anni e gli studenti:
prendiamo per esempio questa imamgine:
img97.imageshack.us/img97/4989/…
ipotizziamo che i nodi in alto dove c'è M siano gli anni. e i nodi in verticale siano gli studenti di ogni anno.
nel mio codice la lista degli studenti si chiama *testa_stud. come vedete nella foto il numero 10 punta a NULL. nel mio caso, testa_stud->next punta a NULL, come nella foto. Infatti stampando tutti gli studenti di tutti gli anni, viene stampata dolo la lista degli studenti inseriti in input dell ultimo anno. esempio. inserisco 2 studenti del 1993 e altri 3 del 1995, in stampa_studenti(), ho solo la lista degli studenti del 1993.
DUNQUE devo far si che il nodo 10 della foto punti a 2???? cosi da avere un unica lista di studenti.
AIUTO.
#include<stdio.h> #include<stdlib.h> #include<string.h> typedef struct __studente{ int matricola; char nome[20]; char cognome[20]; int esame[6]; struct __studente* next_stud; }studente; typedef struct __anno{ int anno; struct __anno* next_anno; struct __studente* testa_stud; }anno; studente* testa_studente=NULL; void ins_anno(anno** testa_anno){ int aanno; printf("inserire anno: "); scanf("%d", &aanno); // ATTENZIONE è AANNO E NON ANNO anno* temp; temp=*testa_anno; // mi appoggio a temp while(temp!=NULL){ // CONTROLLO SE L' ANNO è GIà PRESENTE if(temp->anno==aanno){ printf("anno già inserito"); return; } temp=temp->next_anno; } anno* nuovo; nuovo=(anno*)malloc(sizeof(anno)); nuovo->anno=aanno; nuovo->next_anno=*testa_anno; *testa_anno=nuovo; } void stampa_anno(anno* testa_anno){//** VISUALIZZAZIONE LISTA -- parte dalla coda. if(testa_anno!=NULL){ printf(" %d\n", testa_anno->anno); stampa_anno(testa_anno->next_anno); } } void ins_stud(anno** testa_anno){ int esiste=0,aanno; printf("anno frequentato: "); scanf("%d", &aanno); // appositamente scritto aanno anno* ultimo=*testa_anno; ultimo->testa_stud=NULL; do{ if(aanno==ultimo->anno){ esiste=1; break; } else{ ultimo=ultimo->next_anno; } } while(ultimo!=NULL); if(esiste==0){ puts("non esiste alcun anno selezionato"); } else{ char nome[15],cognome[15]; int matricola; puts("matricola: "); fflush(stdin); scanf("%d", &matricola); puts("nome: "); fflush(stdin); gets(nome); puts("cognome: "); fflush(stdin); gets(cognome); studente* nuovo; nuovo=(studente*)malloc(sizeof(studente)); nuovo->matricola=matricola; strcpy(nuovo->nome,nome); strcpy(nuovo->cognome,cognome); if(ultimo->testa_stud==NULL){// se non ci sono studente in quell anno testa_studente=nuovo; testa_studente->next_stud=NULL; ultimo->testa_stud=testa_studente; } else{ nuovo->next_stud=testa_studente; // lo studente nuovo viene inserito in testa testa_studente=nuovo; } }//else } void stampa_stud(anno* testa_anno){//** VISUALIZZAZIONE LISTA -- parte dalla coda. int aanno; studente* temp_stud; anno* temp_anno; temp_stud=testa_studente; temp_anno=testa_anno; while(temp_anno->next_anno!=NULL){ printf("\n\n------- A N N O %d --------- \n", temp_anno->anno); while(temp_stud!=NULL){ printf(" nome: %s\n cognome: %s\n matricola: %d \n", temp_stud->nome, temp_stud->cognome, temp_stud->matricola); temp_stud=temp_stud->next_stud; } temp_anno=temp_anno->next_anno; } } int main(){ int scelta=1; anno* testa_anno=NULL; while(scelta!=0){ system("cls"); printf("1 inserisci anno\n2 stampa anni\n3 inserisci studente\n4 stampa studenti"); printf("scelta: "); scanf("%d", &scelta); if(scelta==1){ system("cls"); ins_anno(&testa_anno); system("pause"); } if(scelta==2){ system("cls"); stampa_anno(testa_anno); system("pause"); } // omettendo & non viene modficato niente if(scelta==3){ system("cls"); ins_stud(&testa_anno); system("pause"); } if(scelta==4){ system("cls"); stampa_stud(testa_anno); system("pause"); }// omettendo & non viene modficato niente } system("pause"); return; }
aaa