#include #include #include #define EXIT_SUCCESS 0 #define EXIT_WRONGCOMMANDLINE 1 #define EXIT_MEMORY 2 #define EXIT_OPENFILE 3 #define EXIT_WRONGINPUTFORMAT 4 typedef short boolean; #define TRUE 1 #define FALSE 0 #define NAMELENGTH 30 #define RIGA 2 * NAMELENGTH + 24 #define DATAFASULLA -1 typedef struct _persona persona; struct _persona { char nome[NAMELENGTH+1]; int nascita; int morte; struct _persona *sx, *dx, *padre; }; typedef persona* binalbero; typedef persona* nodo; void creabinalbero (binalbero *pT); boolean binalberovuoto (binalbero T); nodo binradice (binalbero T); binalbero cancsottobinalbero (nodo u, binalbero T); void LeggeIstruzioni (int argc, char *argv[], char *ParentFile); void CaricaDiscendenze (char *ParentFile, binalbero *pT); void CalcolaSovrani (binalbero T); void StampaSovrani (binalbero T); void CalcolaDiscendenti (binalbero T); void StampaDiscendenti (binalbero T); int main(int argc, char *argv[]) { char ParentFile[RIGA+1]; binalbero T; // 1) Interpretazione della linea di comando LeggeIstruzioni(argc,argv,ParentFile); // 2) Inizializzazione delle strutture dati creabinalbero(&T); // 3) Caricamento dei dati CaricaDiscendenze(ParentFile,&T); // 4a) Determina il sottoinsieme dei sovrani e calcola le date di ascesa al trono CalcolaSovrani(T); // 5a) Stampa l'elenco dei sovrani con i relativi intervalli di regno StampaSovrani(T); // 4b) Calcola per ogni personaggio il numero dei discendenti e dei discendenti sovrani CalcolaDiscendenti(T); // 5b) Stampa per ogni personaggio il numero dei discendenti e dei discendenti sovrani StampaDiscendenti(T); // 6) Deallocazione delle strutture dati T = cancsottobinalbero(binradice(T),T); return EXIT_SUCCESS; } void LeggeIstruzioni (int argc, char *argv[], char *ParentFile) { if (argc != 2) { printf("Command line format wrong!\n"); exit(EXIT_WRONGCOMMANDLINE); } strcpy(ParentFile,argv[1]); } void CaricaDiscendenze (char *ParentFile, binalbero *pT) { } void CalcolaSovrani (binalbero T) { } void StampaSovrani (binalbero T) { } void CalcolaDiscendenti (binalbero T) { } void StampaDiscendenti (binalbero T) { } void creabinalbero (binalbero *pT) { *pT = NULL; } boolean binalberovuoto (binalbero T) { return (T == NULL); } nodo binradice (binalbero T) { if (binalberovuoto(T)) return NULL; else return T; } binalbero cancsottobinalbero (nodo u, binalbero T) { return T; }