CORSO DI LAUREA IN INGEGNERIA ELETTRICA, CHIMICA e MATERIALI Informatica B, C Anno Accademico 2014-2015 Proff. Danilo ARDAGNA, Antonio MIELE Seconda Prova in Itinere – 6.5.2015 Cognome ______________________________________________________________________________ Nome _________________________________________________________________________________ Matricola ________________________ Firma ________________________________________________ Durata: 2h Valutazioni 1 (5) ____ 2 (4) ____ 3 (9) ____ 4 (5) ____ 5 (4) ____ 6 (5) ____ Si ricorda che non è possibile consultare libri o appunti, o utilizzare la calcolatrice. - 1 - punti 5 Effettuare il tracing delle variabili del seguente programma: in particolare elencare la sequenza di istruzioni che viene eseguita e per ciascuna di esse lo stato delle variabili dopo l’esecuzione. Per comodità non è necessario riscrivere le istruzioni ma si può utilizzare la numerazione riportata; si consiglia inoltre di presentare i valori in una tabella. Indicare infine l’output della printf del programma. #include <stdio.h> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 void main(){ int i, j, k; j=2; k=3; i=0; printf ("i j k \n"); while(i<5){ printf ("%d %d %d\n",i,j,k); if (i % 3==0) j=k*i; else if (i % 2 ==1) k--; else { j++; k=k-i; } i++; } } - 2 - punti 4 Convertire in binario complemento a 2 i numeri A=-28 e B=+118 sul numero minimo di bit necessari per rappresentare entrambi i numeri. Effettuare poi le operazioni di somma A+B e sottrazione A-B indicando se si è verificato o meno overflow. Commentare e motivate tutti i passaggi. 1 - 3 - punti 9 Si vuole realizzare un programma per la gestione di un'agenda elettronica tipo Google Calendar. L'agenda contiene una serie di eventi organizzati per giorni; per ciascun giorno si vuole gestire un massimo di 50 eventi. Ogni evento all'interno dell'agenda è caratterizzato da una descrizione (una stringa di al massimo 50 caratteri), un istante di inizio, descritto in termini di ora e minuti con degli interi, la durata in minuti ed una lista di al massimo 10 contatti invitati. Ciascuna contatto è caratterizzato da un nome, un cognome ed un indirizzo email (ciascuna stringa ha al massimo 20 caratteri). 2 Siano date le seguenti strutture dati. #define #define #define #define #define MAX_EVENTI 50 MAX_CONTATTI 10 STR_LEN50 50 STR_LEN20 20 MAX_SET 7 typedef struct{ char nome[STR_LEN20+1]; char cognome[STR_LEN20+1]; char email[STR_LEN20+1]; } contatto_t; typedef struct{ int ora, minuti; } inizio_t; typedef struct{ char descrizione[STR_LEN50+1]; inizio_t inizio; int durata; contatto_t contatti[MAX_CONTATTI]; int nContatti; } evento_t; typedef struct { evento_t eventi[MAX_EVENTI]; int nEventi; } giorno_t; typedef giorno_t settimana_t[MAX_SET]; Si scriva un programma in grado di gestire gli eventi dei sette giorni di una settimana. Una volta popolata la struttura dati (non è richiesto di implementare questa parte, ma soltanto di aggiungere un commento laddove sarebbe collocata), il programma chiede all'utente l'indirizzo email di un contatto e visualizza tutti gli eventi (giorno, ora e minuti di inizio, durata e descrizione) a cui tale contatto è stato invitato ed il loro conteggio. - 4 - punti 5 Si vuole realizzare un programma per la vendita dei biglietti dell’Expo 2015. Il sistema deve memorizzare i dati dei biglietti e dei clienti. Ogni biglietto viene descritto da un codice numerico, la data della visita (si usi una stringa per semplicità), il prezzo e la fascia di età (che può assumere come valori “under 25”, “adulto”, e “over 60”). Per ciascun cliente è necessario memorizzare i suoi dati anagrafici ed i dati dei biglietti che ha acquistato. Il cliente è caratterizzato dal codice fiscale, il nome ed il cognome (al massimo 50 caratteri ciascuno), un indirizzo (al massimo 100 caratteri), ed un numero di telefono (al massimo 12 caratteri). Ogni cliente può acquistare fino a 10 biglietti. Si descrivano le strutture dati necessarie per rappresentare un biglietto e un cliente. 2 3 - 5 - punti 4 Descrivere brevemente (ed aiutandosi con il disegno di uno schema dell'architettura del calcolatore) la sequenza di trasferimenti che avvengono sul bus durante una lettura da memoria. - 6 - punti 5 Scrivere un programma C che legge due stringhe s1 ed s2 in input (di massimo 30 caratteri). Nel caso in cui le due stringhe abbiano lunghezza diversa, il programma effettua la concatenazione delle due stringhe in una terza stringa s3, ponendo per prima la stringa di lunghezza inferiore. Nel caso in cui le due stringhe abbiano lunghezza uguale invece, il programma effettua la “fusione” delle due stringhe in s3, copiando in alternanza prima un carattere di s1 e poi uno di s2. Il programma, infine, stampa s3. E’ possibile fare uso esclusivamente della funzione di libreria strlen ed è necessario creare opportunamente la stringa s3 prima di stamparla. Ad esempio se vengono fornite in input le stringhe cassa e fiore l’output fornito è la stringa cfaisosrae. 3