Prova scritta di Elementi di Programmazione 23 giugno 2009 1
Transcript
Prova scritta di Elementi di Programmazione 23 giugno 2009 1
Prova scritta di Elementi di Programmazione 23 giugno 2009 1) Dato il seguente programma # include <iostream.h> # include <stdlib.h> /*01*/struct nano di Biancaneve /*02*/ {static enum nano /*03*/ {brontolo, cucciolo, dotto, eolo, /*04*/ gongolo, mammolo, pisolo, illegolo} nano; /*05*/ char * const nome; /*06*/ nano di Biancaneve(int);}; /*07*/ nano di Biancaneve :: nano nano di Biancaneve :: nano; /*08*/ nano di Biancaneve :: nano di Biancaneve(int n) /*09*/ {nano = static cast< nano>(n % static cast<int>(illegolo)); /*10*/ switch(nano) /*11*/ {case brontolo: /*12*/ nome = "brontolo"; /*13*/ break; /*14*/ case cucciolo: /*15*/ nome = "cucciolo"; /*16*/ break; /*17*/ case dotto: /*18*/ nome = "dotto"; /*19*/ break; /*20*/ case eolo: /*21*/ nome = "eolo"; /*22*/ break; /*23*/ case gongolo: /*24*/ nome = "gongolo"; /*25*/ break; /*26*/ case mammolo: /*27*/ nome = "mammolo"; /*28*/ break; /*29*/ case pisolo: /*30*/ nome = "pisolo"; /*31*/ break; /*32*/ case illegolo: default: nome = "un nome illegittimo";}} /*33*/int main(int narg, char * * args, char * * env) /*34*/ {if(narg == 1) {cout << "mancano argomenti validi\n"; return 255;} /*35*/ int i = atoi(args[1]); /*36*/ nano di Biancaneve nano(i-1); /*37*/ cout << "si tratta di " << nano . nome << endl; /*38*/ return 0;} dire quali tra le affermazioni qui appresso riportate corrispondono a verità, argomentando la risposta: • il programma si compila senza errori; • il programma non si compila perché ci sono degli errori (dire quali o motivare dettagliatamente le affermazioni successive); • la dichiarazione di una enum (riga 02) non può essere qualificata come static; • la dichiarazione di nome (riga 05) è sbagliata perché il qualificatore const non può stare in quella posizione; • una struct non può avere una funzione costruttore (riga 06): andrebbe eventualmente sostituito con un metodo static, oppure la struct dovrebbe diventare una class; • la riga 07 non ha alcun senso: il compilatore non riesce assolutamente a comprenderne il significato e segnala errore dichiarando di riprendere l’analisi del testo dalla riga 08; • la riga 08, peraltro, produce ancora errore, secondo quanto già affermato due voci fa; • nell’ambito della funzione che inizia alla riga 08, anche la riga 09 produce errore, per erroneo impiego dell’operatore static cast che non può comparire due volte nella stessa espressione; • tutte le assegnazioni di valore a nome, nei diversi case dello switch, sono sbagliate, perché eseguite con stringhe di lunghezza diversa; • la riga 36 dà errore perché nano è già stato dichiarato alla riga 07; • tutte le assegnazioni di valore a nome, nei diversi case dello switch, sono sbagliate, perché confliggono con la dichiarazione stessa di nome; • c’è un errore nella enum perché non esiste un ottavo nano di Biancaneve, e, se anche ci fosse, non si chiamerebbe illegolo. 2) Supposto corretto o emendato da ogni errore, secondo quanti (e quali) ne siano stati debitamente segnalati, dire che cosa apparirà su stdout dopo le seguenti esecuzioni: • a.out • a.out 2 • a.out -2 • a.out -6 3) Una “pallina pazza” è rappresentata da una sfera con una distribuzione di massa riconducibile, in un certo sistema cartesiano con l’origine nel centro geometrico della pallina, alla funzione non negativa η(x, y, z) gm/cm3 , sprovvista di qualsiasi proprietà di simmetria. Scrivere una funzione C++ che, ricevuta la funzione η come argomento (trasferito come puntatore a funzione), valuti e restituisca in un opportuno puntatore a struttura le coordinate del centro di massa nel sistema cartesiano assegnato e il momento d’inerzia rispetto all’asse diametrale coincidente con l’asse z dello stesso sistema. Facoltativamente fare restituire alla citata funzione, nel citato puntatore e per il citato sistema di riferimento, l’intero tensore d’inerzia.
Documenti analoghi
PROGETTO ACCOGLIENZA “A Scuola con i Nanetti”
degli animaletti. Ci saranno anche delle “tane” realizzate
con i cuscini, i teli e gli scatoloni, dove i bambini potranno
entrare, uscire e nascondersi.