Sei sulla pagina 1di 7

Modulo 3 - Programmazione strutturata Attività di calcolo (quelle in cui viene effettivamente realizzato l'algoritmo) e attività di

Unità didattica 1 - Principi della programmazione strutturata reporting (quelle in cui si riportano i risultati ottenuti)
Lezione 1 - Motivazioni Attività di processo (quelle in cui vengono effettivamente svolti i calcoli) e attività di
gestione (tutto ciò che è necessario all'effettivo svolgimento dei calcoli)
1. La programmazione strutturata nasce storicamenete con: Attività di procedimento (quelle in cui viene effettivamente realizzato l'algoritmo) e attività
di gestione (quelle in cui si prendono le decisioni)
L'approccio bottom-up
L'approccio top-down
La definizione di tutte le strutture del programma Non risposta
La fase di progettazione 2. Si supponga di disporre di un programma in cui siano stati individuati 3 requisiti e 3
sottorequisiti. In quanti moduli dovrà essere strutturato il programma?
In 2 moduli, uno per i tre requisiti e uno per i tre sottorequisiti
Non risposta In 9 moduli, uno per ciascuna combinazione di requisito e sottorequisito
2. L'obiettivo della programmazione strutturata è di: In 6 moduli, uno per ciascun requisito o sottorequisito
Rendere strutturata la fase di verifica del programma In 3 moduli, uno per ciascun requisito
Mantenere nella fase di codifica la strutturazione ottenuta durante la fase di
progettazione Non risposta
Mantenere nella fase di codifica la strutturazione ottenuta durante la fase di progettazione in 3. Un modulo:
cui è stato utilizzato l'approccio bottom-up Non dovrebbe contenere più di due livelli di strutture di controllo una dentro l'altra, e
Mantenere nella fase di specifica la strutturazione ottenuta durante la fase di progettazione possibilimente meno
Non dovrebbe contenere livelli di strutture di controllo una dentro l'altra
Non dovrebbe contenere più di tre livelli di strutture di controllo una dentro l'altra, e
Non risposta possibilimente meno
3. Perché è sorta la necessità di sviluppare la programmazione strutturata? Dovrebbe contenere tre livelli di strutture di controllo una dentro l'altra
Per risolvere la difficoltà dei programmatori a considerare nel loro complesso i programmi di
dimensioni ridotte
Per risolvere la difficoltà dei programmatori a considerare nel loro complesso tutti i tipi di Non risposta
programma 4. Secondo la proprietà dei moduli per quanto riguarda la condivisione dei dati:
Per risolvere la difficoltà dei programmatori ad individuare le strutture delle memorie degli Le attività integrate nello stesso modulo potrebbero lavorare su dati differenti
elaboratori Non più di un'attività nello stesso modulo dovrebbe lavorare sugli stessi dati
Per risolvere la difficoltà dei programmatori a considerare nel loro complesso programmi Le principali attività integrate nello stesso modulo dovrebbero lavorare sugli stessi dati
di grandi dimensioni
Tutte le attività integrate nello stesso modulo dovrebbero lavorare sugli stessi dati

Non risposta
Non risposta
4. Qual'è la più importante idea di fondo dietro allo sviluppo della programmazione strutturata?
5. La caratteristica più notevole della programmazione strutturata è che:
Quella di matenere strutturate le celle di memoria degli elaboratori al fine de rendere più
Le strutture di tutti i moduli devono poter essere condivise
efficiente il loro accesso durante la fase di programmazione
Tutte le attività integrate nello stesso modulo dovrebbero lavorare sugli stessi dati
Quella di partire dai blocchi elementari che si sanno già risolvere e di comporli fino ad
ottenere una libreria dotata di strumenti adatti alla risoluzione del problema Un modulo non dovrebbe contenere più di due livelli di strutture di controllo una dentro
l'altra, e possibilimente meno
Quella di limitare al minimo indispensabile le interazioni e le interferenze tra blocchi distinti
Essa pone dei vincoli ai modi in cui l'esecuzione di attività di processo possa essere
Quella di scomporre il programma in blocchi di dimensione gestibile
controllata

Modulo 3 - Programmazione strutturata Non risposta


<?xml version="1.0" encoding="utf-16"?> 6. Quali sono gli unici costrutti di controllo ammessi nella programmazione strutturata?
Unità didattica 1 - Principi della programmazione strutturata Esecuzione, iterazione e selezione
Lezione 2 - Principi guida Dimensione, condivisione dei dati, coesione funzionale e base condizionale
Selezione, condivisione dei dati e coesione funzionale
1. Quali sono le due attività svolte in qualsiasi programma? Esecuzione seriale, iterazione e selezione
Attività di processo (quelle in cui vengono effettivamente svolti i calcoli) e attività di
gestione (quelle in cui si prendono le decisioni)
Modulo 3 - Programmazione strutturata Modulo 3 - Programmazione strutturata
Unità didattica 2 - Linguaggi per la programmazione strutturata e i loro costrutti di controllo Unità didattica 2 - Linguaggi per la programmazione strutturata e i loro costrutti di controllo
Lezione 1 - Linguaggi di alto livello Lezione 2 - Elementi di sintassi C/Java: variabili, espressioni e assegnamenti

1. È possibile programmare in modo strutturato con un linguaggio di tipo assembly?


1. Nei linguaggi ad alto livello C, C++ e Java i commenti sono delimitati da:
/* e */; // e fine linea

%e%
No
# e fine linea
// e fine linea
Non risposta
2. L'utilizzo di un linguaggio ad alto livello:
Consente un accesso rapido ai dati in memoria poichè sono tutti situati nelle caselle di più Non risposta
alto livello 2. Nei linguaggi C, C++ e Java ogni espressione o variabile ha un tipo che può essere identificato
prima:
Facilita al programmatore il compito di gestire la memoria
Della traduzione
Solleva il programmatore da una serie di compiti non essenziali e che possono fargli
perdere di vista il compito principale Dell'assegnazione
Solleva il programmatore dal compito di gestire la memoria Dell'esecuzione
Della compilazione

Non risposta
3. Com'è gestita l'allocazione in memoria dei dati "statici" quando si programma in un linguaggio Non risposta
ad alto livello? 3. Nei linguaggi C, C++ e Java, un identificatore consiste in:
Al momento della scrittura del programma Qualsiasi simbolo alfanumerico tranne quelli utilizzati per scrivere i commenti
In modo statico, cioè senza considerare la loro posizione in memoria Una qualsiasi sequenza di lettere alfabetiche, simbolo "_" e cifre, il cui primo carattere
In modo automatico non sia una cifra, e che non coincida con una parola riservata del linguaggio
Dal programmatore al momento della scrittura del programma Una qualsiasi sequenza di lettere alfabetiche, simbolo "_" e cifre, che non coincida con una
parola riservata del linguaggio
Una qualsiasi sequenza di lettere alfabetiche purché non coincida con una parola riservata
Non risposta
4. L'allocazione in memoria delle strutture dati "dinamiche" quando si programma in un
linguaggio ad alto livello: Non risposta
È fatta nello stesso modo per quasi tutti i linguaggi ad alto livello 4. Qual'è il valore delle variabili dopo la sua esecuzione?
Varia a seconda del linguaggio utilizzato y = 4, z = 5 e t = 5
È fatta esattamente nello stesso modo in cui vengono gestiti i dati "statici" y = 4, z = 5 e t = 6
È fatta man mano che il programma viene scritto y = 5, z = 5 e t = 5
y = 5, z = 4 e t = 4

Non risposta
5. In quali condizioni questo assegnamento sicuramente non produrrà errori?
Se le due variabili area, base e altezza hanno tutte lo stesso tipo
Se le variabili base e altezza hanno tipo double e la variabile area ha tipo double[2]
Se le due variabili, base e altezza hanno tipo int o double
Se le tre variabili area, base e altezza hanno tutte tipo double
Modulo 3 - Programmazione strutturata Modulo 3 - Programmazione strutturata
Unità didattica 2 - Linguaggi per la programmazione strutturata e i loro costrutti di controllo Unità didattica 2 - Linguaggi per la programmazione strutturata e i loro costrutti di controllo
Lezione 3 - Elementi di sintassi C/Java: vettori (array) Lezione 4 - Elementi di sintassi C/Java: costrutti di controllo

1. Nella programmazione, le componenti di un vettore possono essere:


1. In che cosa consiste il modo più semplice di combinare istruzioni tra di loro:
Nell'eseguirle una in alternativa all'altra
Solo numeriche
Nell'utilizzo del connettore and per combinarle
Di tipo int come il tipo dell'indice del vettore
Nell'utilizzo dei costrutti iterativi
Anche non numeriche
Nell'eseguirle una dopo l'altra, in sequenza
Di tutti i tipi, compresi quelli definiti dal programmatore, ad eccezione dei booleani

Non risposta
Non risposta 2. I costrutti di controllo di in linguaggio di programmazione strutturata:
2. A che cosa si riferisce cella[1]?
Sono dei dispositivi sintattici de tipo if then else che servono per controllare l'andamento
Al primo componente del vettore cella delle istruzioni
Al secondo componente del vettore cella Sono dei dispositivi che permettono di controllare la correttezza delle istruzioni di un
Al componente del vettore cella di valore 1 programma
A tutti i componenti del vettore cella a partire da quello di cui indice è 1 Sono dei dispositivi sintattici che permettono di combinare tra loro istruzioni elementari
creando così istruzioni complesse, controllando il flusso della loro esecuzione
Sono dei blocchi di istruzioni
Non risposta
3. In generale, se un vettore ha dimensione n:
L'indice del primo elemento del vettore è 0 e quello dell'ultimo è n - 1 Non risposta
L'indice del primo elemento del vettore è 0 e quello dell'ultimo è n 3. A che cosa servono i costrutti iterativi?
Gli indici del primo e dell'ultimo elementi del vettore sono impliciti nel nome del vettore Servono per eseguire un blocco di istruzioni solo se una condizione è verificata
L'indice del primo elemento del vettore è 1 e quello dell'ultimo è n Servono per testare repetutamente delle condizioni in modo controllato
Servono per gestire l'iterazione con l'utente
Servono per eseguire dei cicli, cioè ripetere un determinato blocco di istruzioni in modo
Non risposta controllato
4. Come dovrebbe essere dichiarata una struttura dati che la rappresenti in C/C++/Java? In che
modo si accederebbe all'elemento v32?
V andrebbe rappresentato come un vettore int v[25], e v[32] conterrebbe l'elemento v32 Non risposta
4. Quali sono i due tipi fondamentali di costrutto di selezione?
V andrebbe rappresentato come un vettore bidimensionale int v[5][5], e v[3][2] conterrebbe
Quello che consiste nella scelta di eseguire un'istruzione se c'è almeno una condizione
l'elemento v32
verificata e quello che consiste nella scelta di eseguire tutte le istruzioni a prescindere della
V andrebbe rappresentato come un vettore bidimensionale int v[5][5], e v[2][1] soddisfazione della condizione
conterrebbe l'elemento v32 Quello che consiste nella scelta di eseguire un'istruzione se la condizione è verificata e quello
V andrebbe rappresentato come un vettore bidimensionale int v[4][4], e v[3][2] conterrebbe che consiste nella scelta di più di un'istruzione se la condizione è verificata
l'elemento v32 Quello che consiste nella scelta di eseguire un'istruzione se la condizione è verificata e quello
che permette una selezione tra molte alternative in base al valore di un'espressione scalare
Quello che permette una selezione tra due alternative in base a una condizione binaria e
quello che permette una selezione tra molte alternative in base al valore di un'espressione
scalare
Modulo 3 - Programmazione strutturata Modulo 3 - Programmazione strutturata
Unità didattica 4 - Strutture dati Unità didattica 4 - Strutture dati
Lezione 1 - Strutture dati statiche Lezione 2 - Strutture dati dinamiche

1. Una struttura dati è:


Una struttura interna all'elaboratore in cui sono organizzati i dati utilizzati da un algoritmo 1. La necessità di utilizzare le strutture dinamiche sorge:
La parte di un programma in cui vengono dichiarati i dati che saranno utilizzati Per rappresentare informazioni complesse la cui struttura resta immutata durante l'esecuzione del
programma
Un modo sistematico di organizzare i dati utilizzati da un algoritmo
Per poter fissare una volta per tutte il dominio dei valori che le variabili possono assumere e di
L'insieme dei dati utilizzati da un algoritmo
consequenza anche la loro rappresentazione in memoria
Per rappresentare tutte le informazioni complesse che servono durante l'esecuzione del programma
Per rappresentare informazioni complesse la cui struttura cambia durante l'esecuzione del
Non risposta
programma
2. La scelta di strutture dati inadeguate:
Può rendere impossibile la fase di progettazione di un algoritmo
Può rendere lunga la fase di progettazione di un algoritmo
Non risposta
Non influisce sulla fase di progettazione di un algoritmo poichè essa è independente dalle strutture 2. Vorrei poter rappresentare una fila del reparto salumeria di un supermercato. Che tipo di struttura
dati utilizzate dati dovrei utilizzare?
Può rendere più complessa la fase di progettazione di un algoritmo In realtà sarebbe sufficiente un intero positivo, che indichi il numero di persone in fila
Una struttura dati statica, poiché una fila non può superare un certo numero di persone. Di
consequenza un vettore sarebbe la struttura dati più adatta
Non risposta Una struttura dati dinamica, poiché le informazioni sullo stato di una fila cambiano da persona a
3. Quale struttura dati andrebbe utilizzata per contenere i pesi dei 100 studenti di una scuola, persona. Una struct per rappresentare ciascuna persona della fila sarebbe dunque la struttura dati più
identificati da un numero progressivo? adatta
Una struttura dati dinamica: un vettore di 100 elementi di tipo double Una struttura dati dinamica, poiché le informazioni sullo stato di una fila cambiano
Una struttura dati statica: un vettore di 100 elementi di tipo int continuamante con il passare del tempo. Una lista sarebbe dunque la struttura dati più adatta
Una struttura dati statica: un record costituito da un campo identificatore di tipo int e da un
campo peso di tipo double
Una struttura dati statica: un vettore di 100 elementi di tipo double Non risposta
3. Una struttura dati ricorsiva:
Contiene uno solo puntatore a una variabile dello stesso tipo della struttura
Non risposta Contiene almeno un componente che non è altro che un puntatore a una variabile dello stesso
4. Che tipo di struttura dati andrebbe utilizzata per contenere i dati anagrafici di uno studente tipo della struttura
dell'Università degli Studi di Milano? Contiene almeno un componente del suo stesso tipo
Una struttura dati dinamica: un record perché adatto alla rappresentazione di dati che cambiano a Contiene uno solo componente del suo stesso tipo
seconda dei casi
Una struttura dati statica: un record perché adatto alla rappresentazione di dati eterogenei
collegati logicamente in un'unità
Non risposta
Una struttura dati statica: un vettore perché adatto per la rappresentazione di dati eterogenei 4. Come viene realizzata la deallocazione dei dati dinamici in Java?
collegati logicamente in un'unità
Grazie all'istruzione delete(puntatore)
Una struttura dati statica: un vettore perché adatto alla rappresentazione di dati omogenei
Grazie all'istruzione delete(variabile) in cui variabile rapresenta il puntatore
Ogni variabile allocata contiene un contatore di riferimenti. La deallocazione di ciascuna
variabile avviene automaticamente quando questo contatore va a zero
Non risposta
In modo automatico, dopo che per un certo tempo la variabile che rappresenta il dato dinamico
5. Si può ottenere il cognome dello studente rapresentato dalla variabile st:
non viene utilizzata
Con l'espressione Studente.cognome
Con l'espressione st.cognome
Con l'espressione st.cognome[20]
Con l'espressione Studente.cognome[20]
Modulo 3 - Programmazione strutturata Modulo 3 - Programmazione strutturata
Unità didattica 5 - Correttezza dei programmi Unità didattica 5 - Correttezza dei programmi
Lezione 1 - Verifica e validazione Lezione 2 - Validazione del codice

Non risposta
1. Che cosa si può dire? 1. Lo scopo della validazione del codice è di:
Che un programma rappresentato dalla funzione f(n) = n f(n-1) se n > 0 e f(0) = 1, è un programma Cercare casi di prova in cui il programma funziona
corretto Dimostrare che il programma non funziona
Che un programma rappresentato dalla funzione f(n) = n (n - 1) è un programma corretto Dimostrare che il programma funziona
Che un programma rappresentato dalla funzione f(n) = n f(n-1), è un programma corretto Dimostrare che il programma non restituisce un valore
Che un programma rappresentato dalla funzione f(n) = n (n - 1)se n > 0 e f(0)=1 è un programma corretto

Corretta
Non corretta 2. Il partizionamento dei dati è un tipo di validazione. In che cosa consiste?
2. Per dimostrare la correttezza di un programma: Nella partizione della memoria dell'elaboratore al fine di testare le funzionalità del programma
È sufficiente effettuare una validazione Nella separazione in gruppi di tutti i casi di prova possibili
È sufficiente verificare che non ci siano errori di compilazione Nella scelta di casi di prova "rappresentativi"
Si può effettuare una verifica oppure una validazione Nella scelta di casi di prova
L'unica possibilità consiste nell'effettuare una verifica

Non risposta
Corretta 3. Quali sono i principi da seguire nella compilazione dei casi di prova?
3. Che cosa si desidera ottenere quando si decidere di effettuare la verifica di un programma? Esercitare tutto il codice, provare alcuni casi tipici, e provare tutti i casi atipici
Una stima del numero di errori che contiene Esercitare tutto il codice, provare alcuni casi tipici, provare tutti i casi atipici e provare tutti i casi
Scoprire almeno un errore limite
Una garanzia matematica della sua correttezza Esercitare alcuni pezzi del codice, partizionare i dati, provare tutti i casi tipici, e provare alcuni casi
Un grado statistico di confidenza sulla sua correttezza atipici
Esercitare alcuni pezzi del codice, provare alcuni casi tipici, provare tutti i casi atipici e separare i casi
rappresentativi

Corretta
4. La validazione di un programma ci fornisce:
Una probabilità della sua correttezza Non risposta
Una stima dei valori che esso restituisce 4. Il test di regressione è un altro tipo di validazione. Qual'è il suo scopo?
Una garanzia assoluta sulla sua correttezza Controllare che le modifiche realizzate durante la partizione non abbiano introdotto nuovi errori
Una possibilità della sua correttezza Controllare se ci sono ancora degli errori
Controllare che le modifiche realizzate durante la validazione non abbiano introdotto nuovi errori
Rifare tutte le prove di validazione
Modulo 3 - Programmazione strutturata Modulo 3 - Programmazione strutturata
Unità didattica 5 - Correttezza dei programmi Unità didattica 5 - Correttezza dei programmi
Lezione 3 - Verifica formale Lezione 4 - Asserzioni

1. Un programma può essere: 1. Un'asserzione è:


Totalmente corretto o parzialmente corretto Una proposizine che può essere vera o falsa
Terminalmente corretto o parzialmente corretto Un costrutto condizionale che controlla una condizione e, nel caso in cui questa non sia verificata,
Sufficientemente corretto o parzialmente corretto produce un errore di esecuzione
Invariantemente corretto o terminalmente corretto Un costrutto condizionale che controlla una proprietà invariante e, nel caso in cui questa sia verificata,
produce un errore di esecuzione
Un costrutto condizionale che controlla una proprietà invariante e, nel caso in cui questa non sia
verificata, produce un errore di esecuzione
Non risposta
2. Un programma che termina per ogni input valido è:
Corretto se in più è anche parzialmente corretto
Terminalmente corretto se in più è anche invariantemente corretto Non risposta
Parzialmente corretto se in più è anche totalmente corretto 2. Nei linguaggi ANSI C e C++ esiste un costrutto sintattico per inserire un'asserzione nel codice. Qual'è?
Totalmente corretto se in più è anche parzialmente corretto void assert(int <espressione>);
assert <invariante> [: <espressione>];
void assert(void *<espressione>)
void assert <invariante> [: <espressione> ];
Non risposta
3. Per dimostrare che un programma termina per ogni ingresso valido è sufficiente trovare una funzione T
che mappa:
Ogni stato della computazione in un numero reale tale che, per ogni esecuzione, se l'ingresso è valido Corretta
allora T è una funzione decrescente 3. Nel linguaggio Java esiste un costrutto sintattico per inserire un'asserzione nel codice. Qual'è?
Ogni stato della computazione in un numero naturale tale che, per ogni esecuzione, se l'ingresso è assert(int <espressione>);
valido allora T è una funzione decrescente assert <invariante> [: <condizione>];
Ogni numero reale in uno stato della computazione tale che, per ogni esecuzione, se l'ingresso è valido assert <invariante> [: <espressione>];
allora T è una funzione decrescente void assert <invariante> [: <espressione>];
Ogni numero naturale in uno stato della computazione tale che, per ogni esecuzione, se l'ingresso è
valido allora T è una funzione decrescente
Corretta
4. Oltre ad essere degli strumenti per garantire la correttezza parziale del codice, le asserzioni possono
Corretta anche essere considerate come:
4. Un programma che per ogni ingresso valido, o non termina o, se termina, soddisfa le condizioni di Strumenti di verifica
uscita, è detto: Parte integrante della documentazione esterna
Totalmente corretto Strumenti di specifica
Parzialmente corretto Strumenti di specifica e di documentazione
Corretto
Terminante
Modulo 3 - Programmazione strutturata Non corretta
Unità didattica 5 - Correttezza dei programmi 6. Che cosa significa che un linguaggio è fortemente tipato?
Verifica - Verifica - Esercizi di fine modulo Che il tipo di ogni variabile o espressione può sempre essere determinato prima
dell'esecuzione
Che il tipo di ogni variabile o espressione deve essere noto nel momento in cui viene usata
Che il tipo di ogni variabile o espressione viene determinato dinamicamente durante l'esecuzione
1. Nella programmazione strutturata, a che tipo di attività si considera che appartenga, per
esempio, una selezione? Che non ammette conversioni di tipo
Di gestione
Di controllo
Corretta
Di processo
7. Esistono algoritmi che non possono essere realizzati seguendo rigidamente i principi della
Elementare programmazione strutturata?
No, come ci garantisce il Teorema di Böhm-Jacopini
Corretta
2. Quanti punti di entrata e quanti punti di uscita deve possedere un blocco di codice nella Sè, ma sono algoritmi talmente particolari che in pratica il problema non si pone
programmazione strutturata? Sì, come ci dimostra il Teorema di Böhm-Jacopini
Un solo punto di entrata e un solo punto di uscita Sì, e questo è il motivo per cui si utilizzano i linguaggi assembly
Un numero qualsiasi di punti di entrata ma un solo punto di uscita
Un solo punto di entrata e almeno un punto di uscita
Almeno un punto di entrata e almeno un punto di uscita

Corretta
3. he cosa significa che un blocco di codice deve avere la stessa base condizionale?
Che tutte le attività in esso integrate sono eseguite nelle stesse condizioni
Che deve contenere un unico costrutto di selezione
Che se almeno una delle istruzioni che contiene è eseguita, allora lo sono anche tutte le altre
Che tutte le attività in esso integrate devono essere eseguite in condizioni mutuamente disgiunte

Non corretta
4. I linguaggi ad alto livello:
Gestiscono tutti automaticamente l'allocazione in memoria dei dati statici, ma non tutti quella
dei dati dinamici
Gestiscono tutti automaticamente l'allocazione in memoria dei dati sia statici che dinamici
Gestiscono tutti automaticamente l'allocazione in memoria dei dati dinamici, ma non tutti quella
dei dati statici
Richiedono che sia il programmatore a gestire l'allocazione in memoria dei dati sia statici che
dinamici

Corretta
5. Quali sono i tre paradigmi di programmazione?
Imperativo, funzionale e logico
Procedurale, funzionale e dichiarativo
Procedurale, dichiarativo e strutturato
Imperativo, indicativo e condizionale