Esame Di Programmazione (Mod A) - CDL Aida: Gcaravagna@Units - It
Esame Di Programmazione (Mod A) - CDL Aida: Gcaravagna@Units - It
1 Istruzioni
L’appello contiene 6 esercizi (A1, A2, A3, B1, B2, B3) da risolvere in 3 ore. Il template si trova su Moodle (Appello.zip),
dove dovete carica la vostra soluzione. In caso di problemi con Moodle, inviate le soluzioni via mail.
Importante. A1, A2 e A3 sono di sbarramento e permettono di raggiungere 18/30, il minimo per superare l’esame.
B1, B2 e B3 valgono fino al raggiungimento del voto massimo di 30/30.
Risoluzione degli esercizi di sbarramento. Risolvete l’esercizio partendo dal file main.c. Potete usare repl.it
trascinando la cartella template, ed esporatando la soluzione finale, testate con i comandi make test1, make test2
e make test3. Le cartelle contengono inputs (input), i risultati attesi (result) ed i vostri risultati (output). Una
soluzione senza output non viene considerata valida.
A3. Si consideri la successione di Fibonacci 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, . . . definita per ricorsione
Fn = Fn−1 + Fn−2 , F0 = 0, F1 = 1.
Si scriva un programma C che, dato un array di valori non negativi x1 , . . ., xN , calcoli ricorsivamente
∑
N
F = Fxi ,
i=1
dove il termine per l’(xi )-esimo numero di Fibonacci (Fxi ) viene calcolato in modo iterativo. Per esempio, se x = [1, 2, 0]
allora F = F1 + F2 + F0 = 1 + 1 + 0 = 2; F0 , F1 ed F2 sono iterative, la somma ricorsiva.
3 Esercizi opzionali
3.1 Es. B1 (6 punti)
In C, si vogliono definire liste linkate che possono memorizza un array di interi in ciascun loro elemento; si desidera
inoltre permettere agli array di avere dimensione variabile, e.g., una lista potrebbe essere
// struttura
struct elemento{
// dato memorizzato
...
// puntatore
struct elemento * next;
};
// tipi
typedef struct elemento ElementoDiLista;
typedef ElementoDiLista * ListaDiElementi;
ListaDiElementi init(int n)
void print(ListaDiElementi lista)
dove i) init costruisce una lista di un singolo elemento, il quale contiene un array di n > 0 elementi , e ii) print
stampa ricorsivamente la lista, mostrando ad esempio (dopo la init)
print_list(list);
// -> n = 4 | 0, 0, 0, 0,
list->next = init(12);
print_list(list);
// -> n = 4 | 0, 0, 0, 0,
// -> n = 12 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, %
Suggerimento. Se gli array hanno dimensione variabile, la gestione della memoria deve essere esplicita.
int x = 6;
int *y = &x;
Si rappresenti la memoria del programma al punto A per ciascun ciclo di esecuzione del for. La memoria finale di
questo programma sarebbe equivalente inizializzando i=3 o i=4?
class Veicolo:
def __init__(self, p, v, km):
self.posti = p
self.velocita = self.v
self.km = km