Programmazione I
Prova scritta - 10 giugno 2014 - 1h20min
NOTA: Nei programmi si trascuri ogni problema legato al tipo ed al valore di ritorno della funzione main, inoltre si sottintenda la presenza delle direttive
#include <iostream> / #include <fstream> / using namespace std ; e non si prenda come un buon esempio la formattazione utilizzata (spesso compressa per motivi di spazio). Si interpreti “terminazione forzata”, come l'abbreviazione di “terminazione forzata del programma da parte del sistema operativo”. Infine, laddove si trovi l'affermazione che un
programma o frammento di codice produce un certo risultato, è da intendersi che, in accordo alle regole del linguaggio, tale programma o frammento di codice produce quel risultato per qualsiasi esecuzione su qualsiasi macchina.
PARTE 1 – RISPOSTA SINGOLA - Ogni domanda ha una sola risposta VERA.
· Una risposta esatta fa acquisire il punteggio positivo riportato a fianco della domanda
· Una risposta errata fa perdere il punteggio negativo riportato a fianco della domanda
· Una risposta lasciata in bianco viene valutata 0 1. (3, -0.5) Dato il seguente programma
int g = 1 ; int fun()
{ ++g ; return 7 ; } main()
{
double l = 2 + (static_cast<double>(fun()) / 2) ; cout<<static_cast<int>(l * g) ;
}
a) Nell'ultima istruzione del main, la conversione esplicita causa perdita di informazione b) Se eseguito, il programma stampa 11
c) Se eseguito, il programma stampa 5 d) Nessuna delle altre risposte è corretta 2. (3, -0.5) Dato il seguente programma:
main() {
int a ; cin>>a ; bool b = a > 2 ; if ( (a > 0) == (! b) )
cout<<a ; }
a) Se l'utente immette 3 su stdin il programma non stampa nulla b)Il programma contiene un errore di gestione della memoria c) Nessuna delle altre risposte è vera
d)Qualsiasi valore l'utente immetta su stdin, il programma stampa il valore immesso
3. (3, -0.5) Il seguente programma main()
{
bool finito = false ; int i = 0 ; while( ! finito ) {
cout<<i<<" " ; i++ ;
if (i == 2)
finito = true ; cout<<i<<" " ;
}
a) stampa 0 1 1 2} b)stampa 0 1 1 c) stampa 0 1 2
d)nessuna delle altre risposte è vera 4. (3, -0.5) Dato il seguente programma:
int global ;
void fun(int &local) { local-- ;
cout<<local<<" "<<global ; } main()
{
int &ref = global;
ref = 5 ; fun(ref) ; }
a) Se eseguito, il programma stampa 4 5 b)Se eseguito, il programma stampa 4 4 c) Nessuna delle altre risposte è vera
d) Il programma contiene un errore di gestione della memoria
PARTE 2 – (POSSIBILI) RISPOSTE MULTIPLE -
Ogni domanda può avere da una a quattro risposte CORRETTE.
· Ogni risposta esatta viene calcolata: +1
· Ogni risposta errata viene calcolata: -0.5
· Una risposta lasciata in bianco viene calcolata: 0 5. Data una sequenza di N valori interi positivi
a) Aggiungere un elemento nel mezzo della sequenza ha costo O(N) se la sequenza è implementata mediante un array
b) Accedere all'i-esimo elemento della sequenza ha costo O(1) se la sequenza è implementata mediante una lista semplice
c) Se la sequenza è memorizzata in un array utilizzando un terminatore per delimitare la fine della sequenza stessa, non è necessario mantenere ulteriori informazioni per poter accedere sequenzialmente a tutti gli elementi della sequenza
d) La struttura dati più efficiente, in termini di occupazione di memoria, in cui si potrebbero memorizzare tali valori è un array di N elementi
6. Dato il seguente programma e tenendo conto di possibili problemi di overflow:
main(){unsigned int a, b, c ; cin>>a>>b ; c = a – b ;
if (c > 2)
cout<<”messaggio”<<endl ;}
a) Sia a che b che c non possono mai assumere un valore maggiore del valore massimo consentito per il tipo unsigned int
b) Per qualsiasi valore di a e b, c non assume un valore negativo dopo l'assegnamento c = a – b ;
c) Il programma potrebbe non stampare messaggio anche se c > 2 quando si esegue l'istruzione if (c > 2)
d) Il programma potrebbe stampare messaggio anche se a < b + 2 quando si esegue l'istruzione c = a – b ;
7. Dato il seguente programma main() {
int i = 0 ; cin>>i ; switch(i) { case 'b':
cout<<"Primo" ; case 'c':
cout<<"Secondo" ; break ;
default:
cout<<"Errore" ; }
}
a) Se l'utente immette il codice numerico usato per rappresentare il carattere c, stampa Secondo
b) Se l'utente immette il codice numerico usato per rappresentare il carattere b, stampa Primo c) Se l'utente immette il carattere b stampa Errore
d) Se l'utente immette il codice numerico usato per rappresentare il carattere b, stampa Errore
PARTE 3 – DOMANDE APERTE –
· Una risposta esatta fa acquisire il punteggio positivo riportato a fianco della domanda
· Una risposta errata può eventualmente causare una penalità che dipende dalla gravità dell’errore
· Una risposta lasciata in bianco viene calcolata: 0
8. (6 pt) Descrivere sintassi e semantica della definizione di un tipo dato strutturato, in non più di otto righe, più un eventuale esempio.
9. (6 pt) Scrivere una funzione che prenda in ingresso un vettore di interi e stampi, su righe distinte:
(1) il valore del primo elemento, (2) il massimo tra i primi due elementi seguito dal numero di volte in cui tale massimo occorre tra i primi due elementi, (3) il massimo tra i primi tre elementi seguito dal numero di volte in cui tale massimo occorre tra i primi tre elementi, e così via. Ad esempio, dato il vettore [2, 3, 3, -4], la funzione deve stampare:
2 3 1 3 2 3 2
Si ottiene il punteggio massimo se si implementa una soluzione con costo computazionale lineare.
Programmazione I
Prova scritta - 10 giugno 2014
Nome: ___________________________ Cognome: ________________________
Matricola: _________________
Indicare le risposte corrette apponendo una croce nella casella corrispondente. Per superare la prova bisogna aver raggiunto almeno 9 punti nelle domande a risposta singola/multipla, ed almeno 15 complessivamente. Questa è l'unica pagina che dovete consegnare. Per comodità avete anche un copia di questa pagina per calcolare il voto da sole/soli durante la correzione.
Risposte Punti/
Penalità A B C D
1 3 -0,5
2 3 -0,5
3 3 -0,5
4 3 -0,5
5 6 7 Risposta alla domanda 8 (6 pt):
Risposta alla domanda 9 (6 pt):
Programmazione I
Prova scritta - 10 giugno 2014
Nome: ___________________________ Cognome: ________________________
Matricola: _________________
Indicare le risposte corrette apponendo una croce nella casella corrispondente. Per superare la prova bisogna aver raggiunto almeno 9 punti nelle domande a risposta singola/multipla, ed almeno 15 complessivamente. Usate questa copia per calcolare il voto da sole/soli durante la correzione.
Risposte Punti/
Penalità A B C D
1 3 -0,5
2 3 -0,5
3 3 -0,5
4 3 -0,5
5 6 7 Risposta alla domanda 8 (6 pt):
Risposta alla domanda 9 (6 pt):