Università di Roma La Sapienza

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 20-10-1998 (riservato agli iscritti al 5° anno nel 97-98)

 

Esercizio 1 (18 punti)

Un cruciverba consiste in una tabella con M righe ed N colonne in cui ciascun elemento contiene un carattere alfabetico maiuscolo dell’alfabeto italiano o, in alternativa, il carattere speciale '*' (asterisco). Un cruciverba contiene dunque un insieme di parole orizzontali e un insieme di parole verticali, dove ciascuna parola è composta da almeno due caratteri alfabetici; il carattere '*' ha la funzione di separare parole (orizzontalmente o verticalmente) adiacenti.

Un cruciverba può essere rappresentato da un file di testo con M linee, ciascuna delle quali contiene N+1 caratteri: la i-esima linea del file corrisponde alla i-esima riga del cruciverba, e contiene ordinatamente gli N caratteri che descrivono la riga, più il carattere speciale che indica la fine della linea.

Sia dato un file di testo "CRUCI.TXT" rappresentante un cruciverba.

  1. Definire i tipi di dato C adeguati a risolvere i problemi di cui ai successivi punti (2) e (3).
  2. Scrivere una funzione (o più) C che dato il file "CRUCI.TXT" costruisca la lista collegata contenente le parole orizzontali di due caratteri.
  3. Scrivere una funzione (o più) C che, data la lista collegata costruita al punto (2), elimini dalla lista stessa le parole che contengono vocali.

Esempio

La Fig. 1 contiene un esempio di cruciverba, che è rappresentato in un file di testo come illustrato in Fig. 2. La Fig. 3 mostra la lista delle parole orizzontali di due lettere presenti nel cruciverba, la cui costruzione è richiesta al punto (2). La Fig. 4, infine, illustra la maniera in cui la lista di Fig. 3 viene modificata, come richiesto al punto (3).

 

 

P

T

*

*

C

A

V

A

*

I

M

A

A

R

E

N

A

*

A

*

C

I

A

C

G

I

R

A

M

O

N

D

O

*

T

I

O

N

E

R

I

*

A

I

N

*

R

D

D

A

*

I

L

*

M

E

G

L

I

O

A

C

E

*

L

I

E

T

O

*

C

*

*

R

I

T

O

R

N

A

*

E

I

N

G

I

A

R

*

T

T

*

O

N

D

E

P

A

R

A

T

I

E

*

C

I

A

O

Fig. 1: esempio di cruciverba

 

 

 

 

 

linea 1

P

T

*

*

C

A

V

A

*

I

M

A

'\n'

linea 2

A

R

E

N

A

*

A

*

C

I

A

C

'\n'

linea 3

G

I

R

A

M

O

N

D

O

*

T

I

'\n'

linea 4

O

N

E

R

I

*

A

I

N

*

R

D

'\n'

linea 5

D

A

*

I

L

*

M

E

G

L

I

O

'\n'

linea 6

A

C

E

*

L

I

E

T

O

*

C

*

'\n'

linea 7

*

R

I

T

O

R

N

A

*

E

I

N

'\n'

linea 8

G

I

A

R

*

T

T

*

O

N

D

E

'\n'

linea 9

P

A

R

A

T

I

E

*

C

I

A

O

'\n'

 

EOF

 

Fig. 2: file corrispondente al cruciverba di Fig. 1

 

 






PT
   

TI

   

RD

   

DA

   

IL

   

TT

 

Fig. 3: lista delle parole orizzontali di due caratteri nel cruciverba di Fig. 1

 



PT
   

RD

   

TT

 

Fig.4: la lista di Fig. 3 dopo l’eliminazione delle parole contenenti vocali

Università di Roma La Sapienza

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 20-10-1998 (riservato agli iscritti al 5° anno nel 97-98)

 

 

Esercizio 2 (4 punti)

Illustrare, servendosi anche di esempi, i tipi di dato strutturati disponibili in C, evidenziando i fondamentali costruttori di tipi.

 

Esercizio 3 (4 punti)

Con riferimento al seguente programma C, dire quale output fornisce quando riceve in ingresso l’ultima cifra del vostro numero di matricola.

#include <stdio.h>

int A[5], B[5];

int Inizio(int *, int );

int Cambia(int *, int, int);

 

int Inizio(int *A, int u)

{

int i;

for(i=0; i<u; i=i+1)

A[i] = i;

return A[u-1];

}

int Cambia(int *B, int u, int a)

{

int i, P;

P=0;

for(i=0; i<a; i=i+1) {

if(P==0)

B[i]=A[a-i]+u;

P=1-P;

}

return *B;

}

int main(void)

{

int B[4], ultimaciframatricola, i;

Inizio(A, 5);

Inizio(B, 4);

scanf("%d", &ultimaciframatricola);

Cambia(B, ultimaciframatricola, 4);

for(i=0; i<4; i=i+1)

printf("B[%d] = %d\n", i, B[i]);

return 0;

}

 

Esercizio 4 (4 punti)

Con riferimento alle seguenti relazioni:

il candidato scriva una interrogazione SQL che restituisca la lista, completa di date, di tutti i medici scelti da Mario Rossi.