Università di Roma "La Sapienza"

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 15-2-1999

Esercizio 1 (18 punti)

La direzione di un albergo gestisce le prenotazioni con un file di strutture, PRENOT.DAT, in cui ogni struttura contiene le seguenti informazioni:

Quando un cliente prende possesso della camera prenotata, tutte le informazioni relative alla sua prenotazione (nel file PRENOT.DAT) vengono riportate in una nuova struttura s che viene aggiunta ad una lista PRESENZE (pre-esistente), realizzata con strutture e puntatori. Al momento della partenza tutte le informazioni nella struttura s vengono aggiunte in coda a un file di strutture ARCHIVIO.DAT (pre-esistente, avente lo stesso formato del file PRENOT.DAT); s viene quindi eliminata dalla lista PRESENZE.

  1. 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. Scrivere una funzione C che, ricevendo come parametri il file ARCHIVIO.DAT e la lista PRESENZE, crei una nuova lista VIP, contenente i nominativi dei clienti al momento presenti in albergo (e cioè contenuti nella lista PRESENZE) che hanno soggiornato in albergo per tre o più volte (inclusa quella in corso).
  3. N.B.: (a) ogni cliente deve comparire soltanto una volta nella lista VIP; (b) ogni struttura della lista VIP contiene le seguenti informazioni: nome e cognome del cliente, numero di volte che ha soggiornato nell'albergo (inclusa quella in corso); (c) assumere che non si verificano omonimie fra clienti.

  4. Scrivere una funzione C che, ricevendo come parametri la data corrente, il file PRENOT.DAT e la lista PRESENZE, scriva sullo schermo le informazioni relative ai clienti previsti e non ancora arrivati (quelli cioè la cui prenotazione è presente nel file PRENOT.DAT con data di arrivo eguale alla data odierna e che non sono ancora nella lista PRESENZE).

Per comodità si riporta una descrizione delle funzioni di libreria standard strcmp e strcpy (#include <string.h>).

confronta le stringhe s1 e s2 restituendo zero se s1 e s2 sono eguali, un valore negativo se s1 precede lessicograficamente s2 e un valore positivo se s1 segue lessicograficamente s2;

ricopia la stringa sorg nella stringa dest e restituisce dest.

 

Università di Roma "La Sapienza"

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 15-2-1999

Esercizio 2 (4 punti)

Illustrare, anche tramite esempi, una metodologia di progetto di algoritmi e programmi.

Esercizio 3 (4 punti)

Si consideri il seguente programma. Si indichi esattamente cosa si ottiene in stampa quando vengono forniti in ingresso le ultime sei cifre del numero di matricola.

#include <stdio.h>

typedef int vettore[3];

typedef vettore matrice[2];

matrice m;

/* prototipi */

void LeggiMat(matrice);

void StampaMat(matrice);

void CambiaRiga(vettore);

void AzzeraRiga(vettore);

int main(void);

void LeggiMat(matrice m)

{

int i, j;

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

for(j=0; j<3; j=j+1)

scanf("%d", &m[i][j]);

return;

}

void AzzeraRiga(vettore riga)

{

int i;

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

riga[i]=0;

return;

}

void StampaMat(matrice m)

{

int i, j;

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

for(j=0; j<3; j=j+1)

printf("%d ", m[i][j]);

printf("\n");

}

return;

}

void CambiaRiga(vettore riga)

{

int i,s;

s=0;

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

s=s+riga[i];

riga[2]=riga[2]+(s%2);

return;

}

int main()

{

matrice p;

LeggiMat(p);

AzzeraRiga(m[1]);

CambiaRiga(p[0]);

CambiaRiga(p[1]);

StampaMat(p);

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 prima.A_ seconda.B seconda.
  4. Calcolare: prima w v seconda.

prima

A

B

C

D

1

2

a

2

1

2

a

3

2

1

b

2

2

2

b

2

1

2

c

3

 

 

seconda

B

E

C

1

2

a

1

2

b

2

2

b