UNIVERSITA` DI BERGAMO ESAME DI INFORMATICA 12 CFU Modulo di Programmazione (ING. INFORMATICA) Prof. G. PSAILA PROVA IN ITINERE DEL 12/01/2017 Per consegnare, si svolgano entrambi gli esercizi. Durata: 90 minuti. Punteggio complessivo: 16 punti. Sufficienza: 9 punti Esercizio (10 punti) Si consideri un programma per gestire la raccolta delle informazioni relative ad un listino prezzi di prodotti da vendere, organizzato in una lista dinamica. Un prodotto è definito da un tipo strutturato denominato PRODOTTO, i cui campi sono il codice (stringa di 12 caratteri) la data di inserimento nel listino (stringa nel formato internazionale aaaa-mm-gg ), il prezzo (numero in virgola mobile), la percentuale IVA (numero intero) e una tipologia di prodotto (un numero intero positivo). Si definisca quindi la struttura dati per una lista dinamica dove il campo informativo del nodo è a sua volta basato sul tipo PRODOTTO. Si scriva la funzione denominata ProdottiTipologiaRedditizia che riceve come parametri la lista dei prodotti, un vettore di numeri interi denominato Tipologie e un numero intero denominato size che indica quanti elementi sono presenti nel vettore Tipologie. Per ogni tipologia nel vettore, la funziona calcola la media dei prezzi dei prodotti di quella tipologia e calcola la tipologia con la media più alta. Quindi, la funzione genera una nuova lista dinamica (basata sugli stessi tipi di quella ricevuta come parametro) che contiene solo e soltanto i prodotti della tipologia con la media più alta e restituisce l indirizzo della testa di questa nuova lista. Nel caso in cui non vi siano prodotti di nessuna delle tipologia riportate, la funzione restituisce il valore NULL. N.B. Si eviti la duplicazione del codice.
Domanda Teoria (6 punti) Si consideri un sistema dove per gli indirizzi di memoria vengono usati 24 bit e la memoria viene gestita con il sistema della paginazione con pagine da 1Kbyte e indirizzi logici. Si consideri il seguente indirizzo logico l=000000000100110000001110. Se nella tabella delle pagine abbiamo le corrispondenze pl pf (in base 10) 17 1, 18 3, 19 5, 20 6, qual è l indirizzo fisico f su 24 bit corrispondente all indirizzo logico l?
TEMA ESAME-1 Si consideri un programma che gestisce percorsi stradali. Un percorso stradale è composto da una sequenza di segmenti; un segmento è costituito da una coordinata iniziale (stringa di 20 caratteri), una coordinata finale (stringa di 20 caratteri) e la lunghezza del segmento stesso (numero con virgola, indicante i Km del segmento). Un percorso è quindi una lista dinamica di segmenti. Il nodo in testa alla lista contiene sempre il segmento iniziale del percorso, mentre i nodi della lista successivi al primo non sono in ordine di percorrenza. (Per esempio, il terzo nodo potrebbe contenere il 2do segmento del percorso, il quinto nodo il potrebbe contenere il 3zo segmento del percorso etc..) Dopo aver definito la struttura dati, si scriva la funzione...lunghsegmento(...) che riceve come parametri un percorso (quindi, l'indirizzo del nodo in testa alla lista che descrive il percorso) e un numero di segmenti percorribili lungo il percorso stesso. Se il numero di segmenti percorribili passato come parametro non esiste nella lista, allora il sottoprogramma restituisce 0, altrimenti restituisce la lunghezza totale del numero di segmenti percorribili ricevuto come parametro.
TEMA ESAME-2 Il comando di polizia locale vi commissiona la realizzazione della funzione...aggiungimulta(...) con la quale si aggiunge un nuovo nodo alla lista passata come parametro. Il nodo deve contenere le informazioni dell'intestatario della targa automobilistica, anch'essa passata come parametro, disponibili nel file Motorizzazione.dat, il cui nome viene passato come terzo parametro alla funzione...aggiungimulta(...). Dopo aver definito una possibile struttura dati della lista e un esempio di tracciato record del file, implementare la funzione (in C/C++) in modo che: 1. riceva i tre parametri descritti, 2. estragga dal file i dati necessari alla creazione di un nuovo nodo da inserire nella lista in base alla targa dell'automobile che ha effettuato l'infrazione e 3. aggiunga un nuovo nodo con tali dati alla lista.
TEMA ESAME-3.1 Si consideri un programma che gestisce i biglietti di un teatro. Ogni biglietto è caratterizzato da un numero progressivo (intero), la data di emissione (stringa di 10 caratteri), dal prezzo del biglietto e dal titolo dello spettacolo (stringa di 50 caratteri). I biglietti sono raccolti in una lista dinamica. Dopo aver definito la struttura dati, si scriva la funzione...importomassimo(...), che riceve come parametri la lista di biglietti, una data (stringa di 10 caratteri) e un numero in virgola mobile denominato soglia; la funzione restituisce l'importo massimo dei prezzi dei biglietti venduti nella data specificata, il cui prezzo è maggiore o uguale della soglia indicata dal terzo parametro. Se in quella data non vi sono biglietti con queste caratteristiche, la funzione restituisce il valore -1.
TEMA ESAME-3.2 Si consideri un programma che gestisce i biglietti di un teatro. Ogni biglietto è caratterizzato da un numero progressivo (intero), la data di emissione (stringa di 10 caratteri), dal prezzo del biglietto e dal titolo dello spettacolo (stringa di 50 caratteri). I biglietti sono raccolti in una lista dinamica. Dopo aver definito la struttura dati, si scriva la funzione...importomedio(...), che riceve come parametri la lista di biglietti e una data (stringa di 10 caratteri), e restituisce l'importo medio dei prezzi dei biglietti venduti nella data specificata. Se in quella data non vi sono biglietti, la funzione restituisce il valore -1.
TEMA ESAME-4.1 Il nuovo navigatore satellitare VM.GP necessita della funzione...remainingroute(...) che, dato un percorso e la lunghezza percorsa, genera il percorso rimanente. Vediamo nel dettaglio. Un percorso è descritto da una lista dinamica, dove ogni elemento della lista descrive un segmento di strada da percorrere, con le coordinate iniziali (stringa di 10 caratteri), le coordinate finali (stringa di 10 caratteri), la lunghezza del segmento di strada (numero in virgola mobile indicante i chilometri). La funzione...remainingroute(...) riceve due parametri: uno è l'indirizzo della testa della lista che descrive il percorso calcolato, l'altro è la lunghezza già percorsa (numero in virgola mobile indicante i chilometri) di quel percorso. La funzione produce un'altra lista, definita sulla stessa struttura dati e l'indirizzo della cui testa viene restituito dalla funzione, che contiene solo i segmenti del percorso iniziale successivi al segmento raggiunto con i chilometri percorsi (secondo parametro della funzione). Per esempio, se il percorso calcolato è composto da tre segmenti, il primo di 5 Km, il secondo di 10 Km e il terzo di 2 Km, e la lunghezza percorsa è 7 Km, la funzione produrrà una lista che descrive un percorso costituito solo dal terzo segmento (perché successivo al segmento raggiunto percorrendo 7 Km). Definire la struttura dati della lista e implementare in C/C++ la funzione richiesta.
TEMA ESAME-4.2 Il nuovo navigatore satellitare VM.GP necessita della funzione...backroute(...) che, dato un percorso e la lunghezza percorsa, genera il percorso rimanente. Vediamo nel dettaglio. Un percorso è descritto da una lista dinamica, dove ogni elemento della lista descrive un segmento di strada da percorrere, con le coordinate iniziali (stringa di 10 caratteri), le coordinate finali (stringa di 10 caratteri), la lunghezza del segmento di strada (numero in virgola mobile indicante i chilometri). La funzione...backroute(...) riceve due parametri: uno è l'indirizzo della testa della lista che descrive il percorso calcolato, l altro è la lunghezza già percorsa (numero in virgola mobile indicante i chilometri) di quel percorso. La funzione produce un'altra lista, definita sulla stessa struttura dati e l'indirizzo della cui testa viene restituito dalla funzione, che contiene solo i segmenti del percorso fino a quel momento attraversati, quindi dal primo fino al segmento raggiunto con i chilometri percorsi (secondo parametro della funzione). Per esempio, se il percorso calcolato è composto da tre segmenti, il primo di 5 Km, il secondo di 10 Km e il terzo di 2 Km, e la lunghezza percorsa è 7 Km, la funzione produrrà una lista che descrive un percorso costituito dal primo e dal secondo segmento. Definire la struttura dati della lista e implementare in C/C++ la funzione richiesta.