Il 0% ha trovato utile questo documento (0 voti)
7 visualizzazioni6 pagine

Scritto-01 02 17

Il documento contiene un esame di Programmazione M-Z con domande riguardanti errori di sintassi e output di vari frammenti di codice C. Inoltre, descrive una struttura dati per rappresentare testo tramite liste doppiamente concatenate e richiede l'implementazione di funzioni per copiare e liberare tale struttura. Gli esercizi richiedono di scrivere funzioni in C senza gestire errori di allocazione di memoria.

Caricato da

Pietro Pantani
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)
7 visualizzazioni6 pagine

Scritto-01 02 17

Il documento contiene un esame di Programmazione M-Z con domande riguardanti errori di sintassi e output di vari frammenti di codice C. Inoltre, descrive una struttura dati per rappresentare testo tramite liste doppiamente concatenate e richiede l'implementazione di funzioni per copiare e liberare tale struttura. Gli esercizi richiedono di scrivere funzioni in C senza gestire errori di allocazione di memoria.

Caricato da

Pietro Pantani
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/ 6

Nome

Cognome
Matricola

Esame di Programmazione M-Z (Parte 1)


1 Febbraio 2017
Ingegneria e Scienze Informatiche
A.A. 2016-2017

Quesito 1. Indicare l’errore di sintassi nel seguente codice.

1 #d e f i n e BEGIN {
2 #d e f i n e END }
3
4 i n t main ()
5 BEGIN
6 i n t 7 hr33 = ’ \0 ’ +3;
7 i n t f0ur = ’A ’ /16;
8 i n t f1v3 = s i z e o f ( char )*5;
9 END

Risposta

Quesito 2. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2
3 i n t main () {
4 i n t x = 100 , y = 0;
5 printf ( " % d % d \ n " ,!x , ! y );
6 return 0;
7 }

Risposta

Quesito 3. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2
3 i n t main () {
4 int x;
5

6 i f ((! x ) > 100) printf ( " 1\ n " );


7 else printf ( " 0\ n " );
8
9 return 0;
10 }

Risposta
Quesito 4. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2
3 i n t main () {
4 i n t x = 3;
5
6 while (x - - || ++ x )
7 printf ( " % d \ n " ,x );
8
9 return 0;
10 }

Risposta

Quesito 5. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2
3 i n t main () {
4 char a = ’ \0 ’ , b = ’b ’;
5 printf ( " % d % d \ n " ,a ,b - b );
6 return 0;
7 }

Risposta

Quesito 6. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2 #i n c l u d e < string .h >
3
4 void f ( char *p , i n t n ) {
5 i n t k = strlen ( p ) , i = 2* k -n -1 , c ;
6 i f ( k > n /2) {
7 f ( p +1 , n );
8 c = p [0];
9 p [0] = p [ i ];
10 p[i] = c;
11 }
12 }
13
14 i n t main () {
15 char s [] = " Ave , Eva " ;
16 f (s , strlen ( s ));
17 printf ( " % s \ n " ,s );
18 return 0;
19 }

Risposta
Quesito 7. Indicare l’errore di sintassi nel seguente codice

1 enum E {A ,B , C } x = -1;
2 enum {D ,E , F } y = A ;
3 enum z = D;

Risposta

Quesito 8. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2 #i n c l u d e < string .h >
3
4 void f ( char *p , i n t n ) {
5 while ( strlen ( p ) > n /2) p ++;
6

7 printf ( " % d \ n " ,( i n t ) strlen ( p ));


8 }
9
10 i n t main () {
11 char s [] = " Ave , Eva " ;
12 f (s , strlen ( s ));
13 return 0;
14 }

Risposta

Quesito 9. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2

3 s t a t i c i n t x = 1;
4
5 int *f( int y) {
6 s t a t i c i n t x = 2;
7 x += y ;
8 return & x ;
9 }
10
11 i n t main () {
12 i n t * p = f ( x );
13 printf ( " % d % d \ n " ,x ,* p );
14

15 return 0;
16 }

Risposta
Quesito 10. Indicare cosa stampa il seguente codice.

1 #i n c l u d e < stdio .h >


2
3 i n t main () {
4 char a = ’a ’ , b = ’b ’;
5 char *p = &a;
6 char ** q = &p;
7 char *** r = &q;
8
9 ** r = * q = & b ;
10 * p = ’c ’;
11 printf ( " % c % c \ n " ,a , b );
12 return 0;
13 }

Risposta
Esame di Programmazione M-Z (Parte 2)
1 Febbraio 2017
Ingegneria e Scienze Informatiche
A.A. 2016-2017

Utilizziamo una struttura dati concatenata per rappresentare testo di caratteri:


• Righe differenti di testo sono rappresentate tramite una lista doppiamente con-
catenata (principale) in cui ogni nodo contiene un campo line, che punta ad una
lista di caratteri, un campo next, che punta alla riga successiva, e un campo prev
che punta alla riga precedente.
• Ogni riga di testo è rappresentata tramite una lista doppiamente concatenata
(secondaria) in cui ogni nodo contiene un campo c, che memorizza un singolo carat-
tere di testo, un campo next, che punta al nodo/carattere successivo, e un campo
prev, che punta al nodo/carattere precedente.
Ad esempio, il seguente testo:
M’illumino

d’immenso
viene memorizzato nel seguente modo:
T

M ' i l l u m i n o

NULL
NULL

NULL

NULL

d ' i m m e n s o

NULL

NULL
NULL

Le strutture che implementano tale struttura dati sono define nel seguente modo:
1 s t r u c t line {
2 char c ;
3 s t r u c t line * next ;
4 s t r u c t line * prev ;
5 };
6
7 s t r u c t text {
8 s t r u c t line * line ;
9 s t r u c t text * next ;
10 s t r u c t text * prev ;
11 };

Da notare che:
• La variabile T che punta all’intera struttura è di tipo struct text *.
• La lista concatenata di testo non contiene caratteri newline: le righe differenti di
testo sono gestite tramite la lista concatenata principale (struct text).
• Una riga vuota è rappresentata con un nodo di tipo struct text il cui campo line
punta a NULL.
Esercizio 1. Implementare il seguente prototipo della funzione copy text() che crea e
ritorna una copia della struttura dati.

s t r u c t text * copy_text ( s t r u c t text * T );

Precisazioni:

• La funzione non deve necessariamente gestire i casi di allocazione di memoria non


riuscita (assumiamo che ci sia sempre memoria sufficiente sul calcolatore per effet-
tuare una copia).

• La struttura passata in input non deve essere modificata o distrutta ma semplice-


mente duplicata.

• Se alla funzione viene passato un puntatore a NULL, la funzione ritorna NULL.

Esercizio 2. Implementare la seguente funzione free text() che distrugge la struttura


puntata dall’argomento passato in input, i.e ne libera completamente la memoria.
void free_text ( s t r u c t text * T );

Potrebbero piacerti anche