Università di Roma "La Sapienza"

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 29-1-1999

Esercizio 1 (18 punti)

Nel file di testo (ESTRAZ.TXT) sono memorizzate le estrazioni del gioco del lotto. Ogni estrazione è rappresentata da un codice dell’estrazione (un numero intero > 1000, memorizzato in una riga del file) e da una matrice di 10 righe e 5 colonne: i valori delle componenti della i-esima riga sono i numeri estratti nella i-esima ruota (1 corrisponde a Bari, 2 a Cagliari, e così via; ogni riga della matrice occupa una riga del file di testo e valori appartenenti alla stessa riga sono separati da uno spazio bianco).

In un altro file di testo (AMBI.TXT) sono memorizzati gli ambi giocati presso le ricevitorie autorizzate sul territorio nazionale. Ogni giocata è rappresentata da una riga contenente le seguenti informazioni (separate da spazi):

  1. [2 punti] Scrivere in C le dichiarazioni dei tipi e delle eventuali variabili globali da utilizzarsi per risolvere i due punti successivi (le dichiarazioni locali potranno essere direttamente specificate nello svolgimento dei punti successivi).
  2. [9 punti] Scrivere una funzione C che, dati i due file ESTRAZ.TXT e AMBI.TXT e, come parametro, un codice di estrazione, costruisca, restituendola in uscita, una lista delle vincite (VINCITE), in ciascun elemento della quale sono memorizzate le seguenti coppie di dati:

Ogni ricevitoria in cui sia stata effettuata una giocata vincente è presente, perciò, una sola volta nella lista VINCITE. Si assuma che non vi siano giocate del tipo "su tutte le ruote". La lista VINCITE sia rappresentata mediante strutture e puntatori.

  1. [7 punti] Scrivere una funzione C che, ricevendo come parametro la lista VINCITE prodotta dalla funzione di cui al punto precedente, elimini dalla lista VINCITE le ricevitorie in cui la somma delle giocate è inferiore a 10.30 ¤.

In fig. (a) è illustrata una delle estrazioni rappresentate nel file ESTRAZ.TXT. In fig. (b) il file AMBI.TXT. In fig. (c) la lista fornita dalla procedura di cui al punto 2 con parametro di valore 1308. In fig. (d) la lista fornita dalla procedura di cui al punto 3.

 

 

 

(Cod.

Estr.)

1308

   

1

20

15

31

5

1

2

45

12

90

31

46

3

67

89

2

3

75

4

28

27

10

87

48

5

6

26

75

31

90

6

56

8

28

48

18

7

1

2

3

65

33

8

7

18

28

48

38

9

3

68

21

55

54

10

89

90

22

12

8

 

Fig. (a)

 

 

867

1308

2

45

12

25.40

500

1308

5

31

26

5.60

601

1307

10

22

90

10.50

500

1308

6

56

28

12.65

601

1308

8

48

18

4.50

867

1307

6

56

28

32.30

867

1308

2

7

90

20.00

867

1307

2

45

12

10.15

867

1308

8

48

7

2.75

Fig. (b)

 

Università di Roma "La Sapienza"

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 29-1-1999

 

Esercizio 2 (4 punti)

Si calcolino le tabelle di verità delle seguenti espressioni booleane, dove AND è indicato con la semplice concatenazione delle variabili (o con il puntino ‘·’), OR con il simbolo ‘+’ e NOT con una barra orizzontale sopra il suo operando:

Esercizio 3 (4 punti)

Si consideri il seguente programma. Si descriva sommariamente quali elaborazioni esegue. Si indichi esattamente cosa si ottiene in stampa quando vengono forniti in ingresso le prime tre lettere del cognome del candidato.

#include <stdio.h>

#include <stdlib.h>

struct ELEM {

char INFO;

struct ELEM *NEXT;

};

typedef struct ELEM *LISTA;

LISTA LIS;

void BUILD (LISTA *, LISTA, int);

void BUILD (LISTA *L, LISTA PRIMO, int N)

{

if(N<3) {

*L=malloc(sizeof(LISTA));

scanf("%c",&((*L)->INFO));

BUILD (&((*L)->NEXT),PRIMO,N+1);

} else

*L=PRIMO;

}

int main()

{

int I;

LIS=malloc(sizeof(LISTA));

scanf("%c",&(LIS->INFO));

BUILD(&(LIS->NEXT),LIS,1);

for(I=1; I<=6; I=I+1) {

printf("%c",LIS->INFO);

LIS=LIS->NEXT;

}

return 0;

}

Esercizio 4 (4 punti)

Con riferimento alle relazioni prima e seconda illustrate in figura,

  1. Indicare le chiavi delle relazioni.
  2. Calcolare: P AB (s A<B prima).
  3. Calcolare: prima w v DžE seconda.
  4. Calcolare: prima w v seconda.

prima

A

B

C

D

1

2

a

1

1

2

a

2

2

1

b

1

2

2

b

2

1

2

c

2

seconda

B

E

C

1

2

a

1

2

a

2

0

b