Sera! Non ho trovato un 3D per le presentazioni, ammesso che ci sia quindi mi presento qui. Sono Max e frequento la facoltà di Ing. Informatica. Non è il primo forum dove chiedo, ma penso sia uno dei migliori per affrontare questa tematica. Mi sto cimentando nel mio primo linguaggio, per scopi accademici quale il C. Confesso che ancora non trovo un riscontro pratico, ma penso sia un buon inizio per un neofita. Martedì ho un esame () e sto provando a esercitarmi su liste "semplici",liste di liste e Alberi(ancora questa struttura non l'ho sperimentata).
Arrivo al dunque. Riesco a implementare la struttura (una lista, dove ogni nodo contiene un altra lista-lista interna-) ma ho difficoltà a implementare le funzioni richieste, quali caricamento da file, inserimento e stampa (il minimo indispensabile).
Volevo chiedere un parere su un esercizio che richiede la gestione di autobus(lista primaria) e dei vari conducenti assegnati ad ogni autobus(liste secondarie).
Ho impostato cosi la struttura dati:
codice:
#include<stdio.h>#include<string.h>
#include<stdlib.h>
#define max 30
typedef struct s_cond{
char nome[max];
int giorni,percorso;
}cond;
typedef struct s_nodo_cond{
cond info;
struct s_nodo_cond *next;
}nodo_cond;
typedef nodo_cond *lista_cond;
typedef struct s_auto{
char targa[max];
int posti,km;
}bus;
typedef struct s_nodo_bus{
bus info;
lista_cond *punt_interno;
struct s_nodo_bus *next;
}nodo_bus;
typedef nodo_bus *lista_bus;
e cosi le prime funzioni:
codice:
void inserimento_bus(lista_bus *lis,bus b){ lista_bus aux=NULL;
aux=(lista_bus)malloc(sizeof(nodo_bus));
aux->info=b;
aux->punt_interno=NULL;
aux->next=*lis;
aux=(*lis);
}
void inserimento_cond(lista_cond *lis,cond d){
lista_cond aux=NULL;
aux=(lista_cond)malloc(sizeof(nodo_cond));
aux->info=d;
aux->next=*lis;
*lis=aux;
}
int caricamento(lista_bus *lis){
FILE *fp;
bus b;
cond c;
fp=fopen("archivio.txt","r");
if(fp==NULL){
perror("");
exit(1);
}
while(fscanf(fp,"%s%d%d",b.targa,&b.posti,&b.km) ==3){
inserimento_bus(lis,b);
//inserimento_cond((*lis)->punt_interno,c);
}
fclose(fp);
}
void stampa_cond(lista_cond lis){
while(lis!=NULL){
printf("\nNome: %s",lis->info.nome);
printf("\nGiorni: %d",lis->info.giorni);
printf("\nPercorso: %d",lis->info.percorso);
lis=lis->next;
}
}
void stampa_bus(lista_bus lis){
lista_bus aux;
aux=lis;
while(aux!=NULL){
printf("\nTarga: %s",aux->info.targa);
printf("\nPosti: %d",aux->info.posti);
printf("\nKm: %d",aux->info.km);
//stampa_cond(aux->punt_interno);
aux=aux->next;
}
}
e per completezza il main:
codice:
int main(){ lista_bus lista_bus=NULL;
lista_cond lista_cond=NULL;
int scelta;
do{
printf("\n1)Caricamento");
printf("\n2)Stampa");
printf("\n\n\tScelta: ");
scanf("%d",&scelta);
switch(scelta){
case 1: caricamento(&lista_bus);
break;
case 2: stampa_bus(lista_bus);
break;
}
}while(scelta!=0);
}
Giusto l'essenziale per vedere se l'inizio è corretto, ma quando avvio il debug e procedo con la selezione delle opzioni, non vengono eseguite, o meglio carico ma non stampo.
E' la strada giusta?