Sei sulla pagina 1di 14

Programmazione I (Classe 1) - prova da 12 cfu

Appello dell11 Luglio 2017


Docenti: Fuccella - Zizza

Cognome: Nome: Matricola:

Ritirato

Riservato alla commissione desame


1 2 3 4 5 6 7 8 TOT (/40)

Da codice etico Unisa


ART. 43 - Violazione dei doveri del Codice - Studenti
1. La violazione delle norme del presente Codice da parte degli studenti puo dar luogo a sanzioni disciplinari, ai sensi del Regolamento
Studenti dellAteneo.
2. Quando siano accertate attivita tese a modificare indebitamente lesito delle prove o impedirne una corretta valutazione, il docente o
altro preposto al controllo dispone lannullamento delle prove medesime e la segnalazione al Rettore ai fini dellattivazione del procedimento
disciplinare ai sensi del Regolamento studenti.
Da Regolamento studenti Unisa
ART. 40 - SANZIONI DISCIPLINARI A CARICO DEGLI STUDENTI
1. Le sanzioni che si possono comminare sono le seguenti:
a) ammonizione;
b) interdizione temporanea da uno o piu attivita formative;
c) esclusione da uno o piu esami o altra forma di verifica di profitto per un periodo fino a sei mesi;
d) sospensione temporanea dallUniversita con conseguente perdita delle sessioni di esame.
2. La relativa competenza e attribuita al Senato accademico, fatto salvo il diritto dello studente destinatario del provvedimento di essere
ascoltato.
3. Lapplicazione delle sanzioni disciplinari deve rispondere a criteri di ragionevolezza ed equita, avuto riguardo alla natura della violazione,
allo svolgimento dei fatti e alla valutazione degli elementi di prova. Le sanzioni sono comminate in ordine di gradualita secondo la gravita
dei fatti.
4. La sanzione e comminata con decreto rettorale.

5. Tutte le sanzioni disciplinari sono registrate nella carriera scolastica dello studente e vengono trascritte nei fogli di congedo.

1
Esercizi
(leggere attentamente il testo prima di scrivere la risposta...
e rileggere la risposta prima di consegnare il compito!)

Usare lo spazio sotto ogni esercizio per rispondere agli esercizi. Svolgere gli esercizi
giustificando ogni risposta. Alle risposte corrette ma non giustificate sara assegnato un
punteggio di poco superiore allo zero.

Esercizio 1 La seguente funzione prende in input una stringa s e un intero n e dovrebbe


restituire la stringa costituita dai primi n caratteri di s (supponiamo che n sia minore di N).
Purtroppo la funzione non fornisce il risultato atteso. Qual e lerrore? Come correggerlo?
#define N 50
char *f(char *s, int n) {
int i=0;
char t[N+1];
while (i<n) t[i++]=s[i];
t[i]=\0;
return t;
}

Risposta

2
Esercizio 2 Cosa viene stampato dal seguente programma?
#include <stdio.h>

struct point{
int x;
int y;
};

void f (struct point p);

int main(void) {
struct point p = {2,3};
f(p);
printf ("x = %d y = %d\n", p.x, p.y);
return 0;
}

void f (struct point p) {


p.x += p.y;
p.y *= 2;
}

Risposta

3
Esercizio 3 Scrivere una funzione void get_shortest_word(char *str, char *shortest)
che assegna alla stringa shorest la piu corta parola contenuta nella frase conservata in
stringa str. Ad esempio, se str contiene la frase Questo non puoi sbagliarlo, in
shortest verrebbe conservata la parola non. A parita di lunghezza minima, shortest
conserva una parola di lunghezza minima.

Risposta

4
Esercizio 4 Scrivere cosa fa la seguente funzione f (spiegando il significato del valore intero
restituito dalla funzione). Scrivere cosa viene stampato dal main.
Inoltre riscrivere la funzione f usando laritmetica dei puntatori invece dellindicizzazione
dellarray (eliminare le variabili i, j, z e tutti gli usi delloperatore [ ]). Quindi la variabile z
che viene restituita, non puo essere dichiarata come variabile intera.

#include <stdio.h>

int f(char s[], char t[]) {

int z = 0;
int i = 0, j = 0;
while (s[i++] == t[j++])
i f (s[i] && t[j]) ;
e l s e break;
i--; j--;
while (s[i++] != t[j++]) {
z++;
i f (s[i] && t[j]) ;
e l s e break; }
return z;
}

int main(void) {
char a[]="12345";
char b[]="12345";
char c[]="012365";
char d[]="17849";
char e[]="4";

printf("Valore della chiamata: %d\n", f(a,b));


printf("Valore della chiamata: %d\n", f(a,c));
printf("Valore della chiamata: %d\n", f(a,d));
printf("Valore della chiamata: %d\n", f(a,e));
return 0;
}

Risposta

5
Risposta

6
Esercizio 5 Descrivere cosa fa la seguente funzione. Inoltre, scrivere cosa restituisce se
chiamata come f(A,7), dove A[]={10,2,3,4,1,3,10}. Infine, indicare come chiamare
la funzione f in modo che f venga eseguita tra gli elementi 3, 4, 1, 3.
1
2 int *f(int a[], int n) {
3 int i, *ptr;
4
5 ptr = &a[0];
6 f o r (i = 1; i < n; i++)
7 i f (a[i] > *ptr)
8 ptr = &a[i];
9
10 return ptr;
11 }

Risposta

7
Esercizio 6 Spiegare cosa fa il seguente programma. Indicare cosa viene stampato se, dopo
la compilazione, vengono eseguiti i seguenti comandi:
./a.out estate esami
./a.out ombrello ombrellone
./a.out ancora programmi
./a.out maremoto mare

#include <stdio.h>
int main(int argc, char *argv[]) {
i f (argc != 3) {
printf("Errore\n");
return 0;
}
int i = 0;
while (argv[1][i] == argv[2][i]){
i++;
i f (argv[1][i] == \0){
printf("%d\n", i);
return 0;
}
i f (argv[2][i] == \0){
printf("%d\n", -i);
return 0;
}
}
printf("0\n");
return 0;
}

Risposta

8
Esercizio 7 Mostrando tutti i passaggi, indicare il valore di
~(~ 0 << 4) & (~0 << 1).

Risposta

9
Esercizio 8 Indicare un opportuno valore per la malloc in riga 8. Sapreste indicare cosa
fa la funzione f e cosa viene stampato se viene eseguito il main seguente?
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int *f(int *array, int n)
5 {
6 int *new;
7 int i;
8 new = malloc(...);
9 i f (!new)
10 fprintf(stderr, "mi dispiace\n");
11 else
12 f o r (i=0; i<n; i++) {
13 new[i]=array[i] * 2;
14 new[n+i]=array[i] * 3;
15 }
16 return new;
17 }
18
19 int main(void) {
20 int array1[] = {1,2,3,4,5,6,7,8,9,0};
21 int *array2 = f(array1, 10);
22 int i = 0;
23 f o r (; i<20; i++)
24 printf("%d ", array2[i]);
25 printf("\n");
26 return 0;
27 }

10
BRUTTA COPIA

11
BRUTTA COPIA

12
BRUTTA COPIA

13

Potrebbero piacerti anche