Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni3 pagine

Esame Di Programmazione (Mod A) - CDL Aida: Gcaravagna@Units - It

Caricato da

scommesse.dario
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
5 visualizzazioni3 pagine

Esame Di Programmazione (Mod A) - CDL Aida: Gcaravagna@Units - It

Caricato da

scommesse.dario
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 3

Esame di Programmazione (mod A) - CdL AIDA

V Appello Settembe 2021

Giulio Caravagna ([email protected])

1 Istruzioni
L’appello contiene 6 esercizi (A1, A2, A3, B1, B2, B3) da risolvere in 3 ore. Il template si trova su Moodle in formato
ZIP, su Moodle dovete carica la vostra soluzione.

Importante. A1, A2 e A3 sono di sbarramento e permettono di raggiungere 18/30. B1, B2 e B3 valgono fino al
raggiungimento del voto massimo di 30/30.

Risoluzione degli esercizi di sbarramento. Usando repl.it, risolvete l’esercizio partendo dal file main.c e testate
il codice con i comandi make test1, make test2 e make test3. Prima di ogni test ricordatevi di digitare make clean.

2 Esercizi di sbarramento (18 punti)


A1. Si scriva una funzione iterativa overlap_size che prenda in input 4 interi positivi i, j, t, u tali per cui i < j,
t < u e j ≥ t. I 4 interi definiscono due intervalli di numeri naturali

[i, j] e [t, u]

per cui si vuole calcolare la dimensione dell’intersezione I = |[i, j] ∩ [t, u]|. Per esempio, gli intervalli [1, 5] e [3, 12]
hanno sovrapposizione [3, 5] = {3, 4, 5} e quindi dimensione 3.

Il calcolo della dimensione deve essere fatto iterativamente utilizzando una funzione is_inside(x, y, z) che resti-
tuisce 0 se x ∈ [y, z], e −1 altrimenti.

A2. Si scriva un programma C iterativo che calcoli, per un dato n ≥ 1 in input, la successione di interi




 a1 = 0



a2 = 0

 an = (an−2 + an−1 − 1)(n + 1) con n ≥ 3 se an−1 > 2an−2





an = (an−2 − an−1 + 1)(an−2 + 1)2 con n ≥ 3 altrimenti.

A3. Si consideri la successione

nFn−2
F0 = 1 F1 = 100 Fn = nFn−1 − n≥2
2
∑N
e la quantita F = i=1 Fxi calcolata a partire da un array x di N valori non negativi x1 , x2 , . . ., xN .

Universita di Trieste · Corso di Laurea in Intelligenza Artificiale e Data Analytics (AIDA)


Esame di Programmazione (mod A) - CdL AIDA 2 /3

Si scriva un programma C che dato x calcoli F iterativamente e ogni Fi ricorsivamente. Per esempio, se x = [1, 2, 0]
allora F = F1 + F2 + F1 ; F1 , F2 ed F1 sono ricorsive, il prodotto iterativo.

Suggerimento: Si consideri che Fn sono numeri con la virgola (double).

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

[{1,2,3}] --> [{9}] --> [{43, 5}] // array di 3, 1 e 2 elementi

Si usi il sequente template per definire la struct necessaria ad implementare la lista.

// struttura
struct elemento{

// dato memorizzato
...

// puntatore
struct elemento * next;
};

// tipi
typedef struct elemento ElementoDiLista;
typedef ElementoDiLista * ListaDiElementi;

Si definiscano, secondo la struct sopra definita, le funzioni

int ntot(ListaDiElementi lista)


int largest(ListaDiElementi lista)

dove i) ntot restitutisce il numero totale degli elementi inseriti nella lista (somma del numero di elementi in ciascun
array contentuto), e ii) largest che restituisce il numero massimo di elementi contenuti in un elemento delle lista.
Ad esempio (dopo la init)

// supponendo si crei una lista di un singolo array con 4 elementi, usando


// un metodo "init"
ListaDiElementi list = init(4);

// si aggiunge un secondo elemento, stavolta con un array di 12 elementi


list->next = init(12);

// a questo punto avremmo


// - ntot(list) che restituisce 12 + 4 = 16
// - largest(list)che restituisce 12

Universita di Trieste · Corso di Laurea in Intelligenza Artificiale e Data Analytics (AIDA)


Esame di Programmazione (mod A) - CdL AIDA 3 /3

3.2 Es. B2 (3 punti)


Si consideri questo programma C

// funzione ausiliaria
int f(int x){
return(x+6); // A
}

int x = 6;
int y = x + 1; // B

y = f(y);
int * z = y;

z = f(*z - y) // C

Si rappresenti la memoria del programma ai punto A, B e C. Si noti che A viene eseguito 2 volte.

3.3 Es. B3 (3 punti)


• Si scriva una classe Rettangolo per costruire un rettangolo con lunghezza ed altezza.
• Si crei un metodo Perimetro()/Area() per calcolare il perimetro/area del rettangolo.
• Si crei un metodo display() che mostri lunghezza, altezza, perimetro ed area per un oggetto di classe
Rettangolo.
• Si crei una sottoclasse Parallelepipedo che erediti da Rettangolo e contenga un attributo altezza ed un
metodo Volume() per il calcolo del volume del parallelepipedo.

Universita di Trieste · Corso di Laurea in Intelligenza Artificiale e Data Analytics (AIDA)

Potrebbero piacerti anche