CORSO DI LAUREA IN INGEGNERIA ELETTRICA

Transcript

CORSO DI LAUREA IN INGEGNERIA ELETTRICA
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