DOMANDE E RISPOSTE SUI PROGETTI =============================== Le seguenti domande mi sono state poste dagli studenti del corso. A differenza delle linee delle risposte, le linee delle domande cominciano col carattere ">". ========================================================================== ========================================================================== PROGETTO 3 ========================================================================== > 1)Con "rappresentazione grafica degli alberi " si intende che possiamo >utilizzare modalita' grafiche (es Xwindow, Win32, grafica sotto DOS, >etc...) oppure dobbiamo fornire un output su schermo in modalita' testo? >es > (1) > / \ > (2) (3) potete usare tutte le facilities grafiche che volete, o farlo semplicemente in testo. L'importante e' che l'output sia interpretabile in modo non ambiguo. (Tenete conto comunque che lo scopo dell'esercizio non e' costruire interfaccie carine; cioe', non e' che valutero' di piu' uno svolgimento solo perche' ha una bella interfaccia grafica.) Inoltre, dovrebbe essere stampabile su carta, in modo che me lo possiate portare come prova di sessione. ========================================================================== >2)Per la parte opzionale viene richiesta anche l'implementazione di un >parser per le espressioni da unificare? No. Potete dare in input direttamente i termini nella forma piu' conveniente, e potete assumere che i simboli di funzione siano tutti 0-ari o binari, in modo da avere soltanto alberi binari. ========================================================================== >stiamo studiando la gerarchia di classi necessarie per implementare la >classe AlberoBinarioRazionale. Pensiamo che, per seguire il paradigma ad >oggetti (basato sulla generalizzazione), sia necessaria >un'organizzazione simile: > > NODO > -------->+<-------- > | | > | | > ALBERO_N_ARIO LISTA > ^ > | > ALBERO_BINARIO > ^ > | > ALBERO_BINARIO_RAZIONALE > >Dove LISTA verrebbe utilizzata per l'implementazione di ALBERO_N_ARIO. > >Naturalmente siamo anche consci che potremmo eliminare l'ALBERO_N_ARIO, >ma ai fini del progetto, potremmo allora anche evitare di implementare >ALBERO_BINARIO. l'idea di utilizzare l'inheritance e' esattamente nello spirito del progetto, quindi sono molto favorevole, mi sembra pero' che nel caso dell'albero n-ario vi faccia fare solo del lavoro in piu' (mi sembra dovete ridefinirvi praticamente tutto, quando passate all'albero binario. O forse non ho capito cosa vorreste fare?). Il fatto invece di avere la gerarchia NODO, ALBERO_BINARIO e ALBERO_BINARIO_RAZIONALE e' bello metodologicamente, e non fa fare lavoro in piu' (anche se neanche in meno, mi sembra). ========================================================================== >abbiamo notato che il nostro compito e' quello di implementare la classe >AlberoBinarioRazionale...ma su che tipo? Non e' una classe polimorfa, >vero :)))) ? Si puo' fare l'assunzione che i nodi siano solamente >interi, o e' meglio implementare il tipo Nodo come template, no vero :) no, potete usare semplicemente gli interi, o al massimo le stringe, se volete svolgere anche la parte opzionale del progetto (quella sull'unificazione) ========================================================================== > Abbiamo dichiarato una classe "albero binario" ed una sua sottoclasse > "albero razionale", che estende la prima con nuovi metodi. Pero' il > compilatore da' errore in corrispondenza di questi nuovi metodi. In C++ i metodi che vogliamo inserire nelle estenzioni vanno dichiarati (come virtual) anche nella classe base. ========================================================================== > Non sappiamo come fare per rappresentare un albero razionale in forma di > sistema di equazioni; in particolare non sappiamo come fare per associare > dei nomi ai vari nodi, in modo da sapere, dato il nodo, qual'e' il suo > nome. Il modo piu' semplice di farlo e' associare ad ogni nodo una stringa di caratteri "s" e "d" (sinistra e destra), che rappresenta il cammino dalla radice a quel nodo. Ad esempio, in (1) / \ (2) (3) / \ (4) (5) il nodo (1) e' associato alla stringa vuota, il nodo (2) alla stringa "s", il nodo (4) alla stringa "ss" e il nodo "5" alla stringa "sd". In questo modo e' anche facile ritrovare il nome dei nodi puntati dai puntatori "all'indietro": se il nodo da cui parte il puntatore e' c_1 c_2 c_3 c_4 ...c_n, e il puntatore va indietro di k livelli, il nodo puntato sara' c_1 c_2 c_3 c_{n-k}. ========================================================================== >vorremmo sapere quanti punti verrebbe valutata >la parte opzionale del progettino (!?!?) C++. non ci sono dei "punti", cosi' come non ci sono per il resto del progetto. La differenza con la parte "obbligatoria" e' che se non si fa la parte obbligatoria non si e' ammessi all'orale. Se non si fa la parte opzionale, invece, si e' ammessi lo stesso. La valutazione della parte opzionale (e del resto del progetto) e' parte dell'orale, e ovviamente non posso valutare a priori quanto peso avra'; dipende da come e' stata svolta, dalla discussione (orale) che ne farete ecc. Il vantaggio e' che, a differenza delle altre domande che verranno poste all'orale, sara' valutata solo in positivo, cioe' se non c'e', o se e' fatta male, la parte opzionale del progetto non incidera' in negativo.