Prova Finale Esempio di Compito Prova di Livello Intermedio e Avanzato n. 1 COGNOME E NOME: MATRICOLA: Tempo a disposizione: 4 ore Esercizio n. 1 Sviluppare una libreria C++ per gestire un registratore di cassa con i relativi test di regressione. La libreria deve consentire le seguenti operazioni: inserire una moneta di un certo importo (1, 2, 5, 10, 20, 50 centesimi, 1 Euro oppure 2 Euro) prelevare una moneta di un certo importo calcolare il valore totale delle monete nel registratore di cassa Esercizio n. 2 E necessario scrivere un programma in linguaggio FORTRAN per la manipolazione di matrici. Il programma deve effettuare le seguenti operazioni, attraverso un menu di comandi: acquisire dalla tastiera i valori di una matrice stampare la matrice sullo schermo trovare la riga per cui la somma degli elementi ha il valore più basso (nel caso in cui ce ne sia più di una selezionare la prima) trovare la colonna per cui la somma degli elementi ha il valore più alto (nel caso in cui ce ne sia più di una selezionare la prima) Esercizio n. 3 Scrivere un programma C che gestisce i dati relativi a studenti dell'università della Basilicata. In particolare, è necessario rappresentare (a) l'insieme degli studenti iscritti all'università, rappresentando per ciascuno studente la matricola, il cognome, l'anno di corso. (b) l'insieme degli studenti laureati nelle recenti sessioni di laurea. Ciascuna collezione può contenere da un minimo di 0 ad un massimo di N studenti (dove N è una costante fissata, per esempio pari a 10). Il programma deve effettuare le seguenti operazioni: acquisire dalla tastiera i dati relativi agli studenti iscritti all'università; stampare i dati relativi agli studenti iscritti sullo schermo; acquisire dalla tastiera i dati relativi agli studenti laureati; stampare i dati relativi agli studenti laureati sullo schermo; eliminare tutti gli studenti laureati dalla collezione degli studenti iscritti; stampare il nuovo insieme di studenti iscritti sullo schermo.
Prova Finale Esempio di Compito Prova di Livello Intermedio e Avanzato n. 2 COGNOME E NOME: MATRICOLA: Tempo a disposizione: 4 ore Esercizio n. 1 Sviluppare una libreria FORTRAN per gestire un registratore di cassa con i relativi test di regressione. La libreria deve consentire le seguenti operazioni: inserire una moneta di un certo importo (1, 2, 5, 10, 20, 50 centesimi, 1 Euro oppure 2 Euro) prelevare una moneta di un certo importo calcolare il valore totale delle monete nel registratore di cassa Esercizio n. 2 E necessario scrivere un programma in linguaggio C++ per la manipolazione di matrici. Il programma deve effettuare le seguenti operazioni, attraverso un menu di comandi: acquisire da un file i valori di una matrice stampare la matrice sullo schermo leggere dalla tastiera un indice i di riga e scambiare la riga i con la prima riga salvare la matrice ottenuta sullo schermo Esercizio n. 3 Scrivere un programma C che gestisce i dati relativi a studenti dell'università della Basilicata. In particolare, è necessario rappresentare (a) l'insieme degli studenti iscritti all'università, rappresentando per ciascuno studente la matricola, il cognome, l'anno di corso. (b) l'insieme degli studenti laureati nelle recenti sessioni di laurea. Ciascuna collezione può contenere da un minimo di 0 ad un massimo di N studenti (dove N è una costante fissata, per esempio pari a 10). Il programma deve effettuare le seguenti operazioni: acquisire dalla tastiera i dati relativi agli studenti iscritti all'università; stampare i dati relativi agli studenti iscritti sullo schermo; acquisire dalla tastiera i dati relativi agli studenti laureati; stampare i dati relativi agli studenti laureati sullo schermo; eliminare tutti gli studenti laureati dalla collezione degli studenti iscritti; stampare il nuovo insieme di studenti iscritti sullo schermo.
Istruzioni per lo svolgimento della prova A ciascuno studente sara' assegnato un calcolatore. Per la durata della prova i calcolatori saranno disconnessi dalla rete. L'accesso (login) alle macchine verrà effettuato preliminarmente dai docenti con un nome utente ed una password predisposta allo scopo, e non con il proprio nome utente usuale. Durante le prove non sara' possibile uscire dall'aula, ne' comunicare oppure utilizzare appunti o libri o dischetti o qualsiasi altro dispositivo di memorizzazione di massa. Sarà invece distribuito dal docente il materiale comparativo della sintassi dei linguaggi C++ e FORTRAN in linea sul sito del corso. Gli strumenti disponibili per lo svolgimento delle prove sono gli stessi utilizzati per le esercitazioni di laboratorio (compilatore Borland BCC55, Compilatore Salford FTN77, TextPad). La soluzione dei quesiti proposti consistera' in una serie di file. Tutti i file che costituiscono la soluzione dei quesiti dovranno contenere nel loro nome il cognome e l'iniziale del nome dello studente che li ha creati, oltre ad un numero progressivo che li distingua. Esempio: lo studente Pasquale Rossi che partecipa alla prova, creera' i seguenti file: un file rossip1.cpp per il codice C++ del quesito n.1 un file rossip2.cpp, rossip2.h, rossip2test.cpp per il codice C++ del quesito n.2 un file rossip3.c per il codice C del quesito n.3 file rossip4.txt, rossip5.txt... per eventuali file di dati caricati o salvati dai programmi precedenti E' necessario risolvere gli esercizi nell'ordine in cui vengono proposti. I file dovranno essere salvati esclusivamente in una cartella assegnata del disco C. In particolare gli studenti del I turno di ogni giornata dovranno salvare i propri file nella cartella "c:\appoggio1" gli studenti del II turno di ogni giornata dovranno salvare i propri file nella cartella "c:\appoggio2" Al termine della prova lo studente dovrà accertarsi di aver salvato i file nella cartella assegnata e dovrà lasciare la sala senza spegnere la macchina. I docenti passeranno successivamente a recuperare i file dalle cartelle di ciascuna macchina. NOTA: La correzione si basera' solo sui file prelevati dalla cartella c:\appoggio1 per il I turno e c:\appoggio2 per il secondo turno. Non saranno presi in considerazione altri file.
Prova Finale Esempio di Compito Prova di Livello Intermedio e Avanzato COGNOME E NOME: MATRICOLA: Tempo a disposizione: 3 ore e 45 minuti Esercizio n. 1 E' necessario scrivere un programma che riesca a trovare percorsi in una palude. La palude è rappresentata come una scacchiera di celle di dimensione NxN; ciascuna cella può contenere "acqua" oppure "terra ferma". Il programma deve consentire all'utente di spostarsi sulla palude partendo dall'angolo in alto a sinistra (posizione 0,0), camminando sulla terra ferma e cercando di raggiungere l'ultima colonna (cioè l'estremo destro della palude). Durante il movimento, gli spostamenti possono avvenire da una cella verso (1) la cella in alto (cioè la cella adiacente sulla stessa colonna e sulla riga precedente); (2) la cella in basso (cioè la cella adiacente sulla stessa colonna e sulla riga successiva); (3) la cella a destra (cioè la cella sulla stessa riga e sulla colonna successiva); (4) la cella a sinistra (cioè quella sulla stessa riga e sulla colonna precedente). I movimenti possono essere effettuati solo su celle appartenenti alla matrice e corrispondenti a terra ferma. Non è possibile muoversi in diagonale. Il programma deve effettuare le seguenti operazioni: acquisire da un file la configurazione iniziale della palude (sotto sono riportate due possibili configurazioni iniziali per il gioco) consentire all'utente di effettuare spostamenti lungo la terra ferma; gli spostamenti devono avvenire secondo le seguenti regole: all'inizio del gioco l'utente è posizionato sul quadrato in posizione (0,0) che deve essere sempre un quadrato di terra per ogni mossa, il calcolatore propone all'utente attraverso un menu solo gli spostamenti possibili; es: sulla Palude A, all'inizio l'unico spostamento possibile è in basso; sulla palude B, viceversa, inizialmente è possibile spostarsi in basso oppure a destra; ogni volta, l'utente sceglie una delle mosse, il calcolatore cambia la sua posizione e ristampa la palude oltre alla posizione corrente del giocatore dopo ogni mossa il calcolatore verifica se il gioco è terminato, ovvero se l'utente ha raggiunto la colonna N-1 in qualsiasi momento l'utente può decidere di interrompere il gioco. Esempio: si considerino, ad esempio, le configurazioni del gioco riportate sotto. Nella Palude A, inizialmente il giocatore è posizionato su (0,0); successivamente può muoversi in basso e la sua posizione diventa (1, 0): a quel punto può scegliere se muoversi in alto (ovvero tornare indietro a (0,0)), a destra, in basso; se l'utente si muove a destra, la sua posizione diventa (1,1) eccetera; il gioco termina nel momento in cui l'utente raggiunge la colonna 6. Nella Palude B, viceversa, il giocatore è inizialmente posizionato su (0,0) e può muoversi a destra su (0,1) oppure in basso su (1, 0); se decide di spostarsi su (0,1), successivamente può tornare a sinistra su (0,0), o andare in basso su (1, 1). Palude A 0 1 2 3 4 5 6 0 X 1 X X 2 X X X X X 3 X X X 4 X X X 5 6 Legenda: le celle segnate con X rappresentano terra ferma; le altre rappresentano acqua. Palude B 0 1 2 3 4 5 6 0 X X X 1 X X X 2 X X X 3 X X 4 X X 5 X X 6 X
Esercizio n. 2 Sviluppare una libreria C++ per calcolare il punto contenuto in una mano di poker con i relativi test di regressione. Una mano nel gioco del poker è una collezione di cinque carte capitate in mano ad un giocatore. Per ciascuna carta è necessario rappresentare il valore (7, 8, 9, 10, Jack, Regina, Re, Asso) e il seme (cuori, quadri, fiori e picche). Un insieme di dati d'esempio potrebbe essere il seguente: Valore Seme 8 picche 9 cuori Jack picche Jack quadri Re fiori La libreria deve consentire di effettuare le seguenti operazioni: data una mano, verificare se la mano è corretta (la mano deve essere composta di cinque carte tutte diverse, e tutte con un valore ed un seme corretto); es: la mano riportata sopra è corretta; nel caso la mano contenesse due 9 di cuori oppure un 4 di picche, oppure un Re di denari sarebbe scorretta data una mano, verificare se la mano contiene un tris (tre carte dello stesso valore); la funzione deve restituire il valore dell'eventuale tris, oppure -1 nel caso non ci siano tris; es: la mano riportata sopra NON contiene un tris e quindi la funzione deve restitiure -1; viceversa, la mano (Jack di quadri, 9 di picche, 10 di quadri, 9 di fiori, 9 di cuori) contiene un tris di 9, e quindi la funzione deve restituire 9; data una mano, verificare se la mano contiene un colore (tutte e cinque le carte sono dello stesso seme); la funzione deve restituire il valore dell'eventuale seme, oppure -1 nel caso non ci siano colore; es: la mano riportata sopra NON contiene un colore e quindi la funzione deve restitiure -1; viceversa, la mano (Jack di quadri, 9 di quadri, 10 di quadri, 9 di quadri, 9 di quadri) contiene un colore di quadri, e quindi la funzione deve restituire il valore corrispondente al seme quadri ; Esercizio n. 3 E necessario scrivere un programma in linguaggio C che gestisca i dati di una collezione di computer. Ciascun computer è rappresentato attraverso la marca (di una sola parola; es: IBM, Acer, Dell), il modello (di una sola parola; es: T40, D500) e il prezzo (tra 1000 e 4000 Euro). La collezione può contenere da un minimo di 0 ad un massimo di N elementi (dove N è una costante fissata, per esempio pari a 10). Il programma deve: leggere dalla tastiera i valori della collezione (procedendo alla convalida dei dati letti) stampare i valori della collezione sullo schermo acquisire dalla tastiera i dati di un nuovo computer inserire il computer in una posizione decisa dall'utente stampare sullo schermo la nuova collezione ottenuta Istruzioni per lo svolgimento della prova Durante le prove non sara' possibile uscire dall'aula, ne' comunicare oppure utilizzare appunti o libri o dischetti o qualsiasi altro dispositivo di memorizzazione di massa. La soluzione dei quesiti proposti consistera' in una serie di file. Tutti i file che costituiscono la soluzione dei quesiti dovranno contenere nel loro nome il cognome e l'iniziale del nome dello studente che li ha creati, oltre ad un numero progressivo che li distingua. Esempio: lo studente Pasquale Rossi che partecipa alla prova, creera' i seguenti file: un file rossip1.cpp per il codice C++ del quesito n.1 un file rossip2.cpp, rossip2.h, rossip2test.cpp per il codice C++ del quesito n.2 un file rossip3.c per il codice C del quesito n.3 file rossip4.txt, rossip5.txt... per eventuali file di dati caricati o salvati dai programmi precedenti E' necessario risolvere gli esercizi nell'ordine in cui vengono proposti. I file dovranno essere salvati esclusivamente in una cartella "c:\appoggio1" del disco C. Al termine della prova lo studente dovrà accertarsi di aver salvato i file nella cartella assegnata e dovrà lasciare la sala senza spegnere la macchina. I docenti passeranno successivamente a recuperare i file dalle cartelle di ciascuna macchina. NOTA: La correzione si basera' solo sui file prelevati dalla cartella c:\appoggio1. Non saranno presi in considerazione altri file.