Seconda Prova Di Esonero - 11 Gennaio 2017: Esercizio N. 1
Seconda Prova Di Esonero - 11 Gennaio 2017: Esercizio N. 1
Risolvere i seguenti problemi proponendo, per ciascun esercizio, la codifica in linguaggio C di un programma
completo. La prova dura tre ore, durante le quali non è possibile allontanarsi dall’aula, se non dopo aver
consegnato l’elaborato scritto. Per superare la prova di esonero è necessario ottenere almeno 15 punti;
tuttavia affinché le prove di esonero siano valide è necessario che la media dei voti del primo e del secondo
esonero sia maggiore o uguale a 18/30. È possibile utilizzare libri e appunti personali, senza scambiarli
con altri studenti. I compiti che presenteranno evidenti ed anomale “similitudini” saranno annullati.
Deve essere consegnata solo la “bella copia” del compito scritto; su ciascun foglio deve essere riportato il
nome, il cognome e il numero di matricola (o un altro codice identificativo di fantasia) dello studente.
Esercizio n. 1
Letto in input un intero n > 1, costruire le liste di adiacenza del grafo non orientato G = (V, E),
dove V = {2, 3, . . . , n} ed E = {(u, v) : u, v ∈ V e u = kv o v = ku per k > 1}.
G = (V, E) 2 3
9 4
8 5
7 6
Soluzione
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 100
4
5 struct nodo {
6 int info;
7 struct nodo *next;
8 };
9
1
13 p = p->next;
14 }
15 printf("NULL\n");
16 return;
17 }
18
52 int main(void) {
53 int n;
54 struct nodo *V[MAX];
55 printf("Inserisci n>1: ");
56 scanf("%d", &n);
57 costruisciGrafo(V, n);
58 stampaGrafo(V, n);
59 return(0);
60 }
2
Esercizio n. 2
Leggere in input una sequenza di numeri interi e memorizzarla in una lista L. Stampare la lista.
Eliminare da L tutti gli elementi il cui valore è maggiore di tutti gli elementi che lo seguono nella
lista. Stampare la lista.
L=2→9→7→1→4→5→2
L = 2 →6 9 →6 7 → 1 → 4 →6 5 → 2 = 2 → 1 → 4 → 2
Soluzione
1 #include <stdlib.h>
2 #include <stdio.h>
3 #define MAX 100
4
5 struct nodo {
6 int info;
7 struct nodo *next;
8 };
9
3
39 if (q->next == NULL && q != p)
40 r = 1;
41 return(r);
42 }
43
44 int main(void) {
45 struct nodo *p, *q, *r;
46 p = leggiLista();
47 printf("L: ");
48 stampaLista(p);
49 q = p;
50 while (q != NULL && daEliminare(q) == 1) {
51 q = q->next;
52 free(p);
53 p = q;
54 }
55 while (q != NULL && q->next != NULL) {
56 if (daEliminare(q->next) == 1) {
57 r = q->next;
58 q->next = q->next->next;
59 free(r);
60 } else {
61 q = q->next;
62 }
63 }
64 printf("L: ");
65 stampaLista(p);
66 return(0);
67 }