Università di Roma "La Sapienza"

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 26/4/1999. Prima prova (tempo: due ore).

Orali e verbalizzazioni: 30/4/99, h 10:30, Via Salaria 113, 2° piano, aula C3

 

 

Esercizio 1 (18 punti)

Una rubrica è memorizzata su disco come un file di strutture, in cui ogni struttura, denominata scheda, è riferita a un individuo e contiene campi per la memorizzazione delle seguenti informazioni sull'individuo: nome (max 12 caratteri), cognome (max 20 caratteri), indirizzo (max 20 caratteri), numero civico, CAP, città (max 20 caratteri), provincia, telefono casa, telefono lavoro, cellulare, fax e posta elettronica (max 25 caratteri).

  1. Scrivere un insieme di dichiarazioni globali in C 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 (o più) che, ricevendo come parametri una scheda S relativa a un individuo ed il nome di un file contenente una rubrica, legga il file in memoria, aggiorni la rubrica con il contenuto della scheda S e costruisca un nuovo file con la versione aggiornata della rubrica. L'aggiornamento avviene secondo la seguente modalità: se l'individuo non è già presente nella rubrica, allora la scheda S deve venir aggiunta nell'ultima posizione della rubrica; se invece l'individuo ha già una scheda in rubrica, allora tale scheda deve venir sostituita dalla nuova scheda S.
  3. Scrivere una funzione C (o più) che, ricevendo come parametri la prima lettera di un cognome ed il nome di un file contenente una rubrica, costruisca, restituendola in uscita, una lista (rappresentata tramite strutture e puntatori) contenente tutte e sole le schede (presenti nella rubrica) relative ad individui il cui cognome inizia con la lettera specificata.

 

Università di Roma "La Sapienza"

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello del 26/4/1999. Seconda prova (tempo: una ora)

Orali e verbalizzazioni: 30/4/99, h 10:30, Via Salaria 113, 2° piano, aula C3

 

Esercizio 2 (4 punti)

Si illustri il concetto di tipo di dato strutturato, con particolare riferimento al linguaggio C, mettendo in evidenza i meccanismi mediante i quali è consentita la creazione di tipi strutturati. Il linguaggio C contiene tipi strutturati pre-definiti?

 

Esercizio 3 (4 punti)

Il candidato consideri il seguente programma C ed indichi esattamente cosa viene stampato, e perché, quando fornisce in lettura la propria data di nascita nel formato GGMMAAAA.

#include <stdio.h>

typedef char vettore[8];

void Leggi2(char *x)

{

scanf("%c",x);

return;

}

void Leggi1(char *x, int quale)

{

if(quale<8) {

Leggi2(x);

Leggi1(x+1,quale+1);

}

return;

}

 

void Scrivi2(char *x)

{

printf("%c",*x);

return;

}

void Scrivi1(char *x, int quale)

{

if(quale<8) {

Scrivi1(x+1, quale+1);

Scrivi2(x);

}

return;

}

main()

{

vettore x;

Leggi1(x,0);

Scrivi1(x,0);

return 0;

}

 

Esercizio 4 (4 punti)

Con riferimento alle relazioni

Clienti(codice_cliente, nome, indirizzo, città)

Ordini(codice_cliente, codice_ordine, data_ordine, ordine_evaso, codice_prodotto)

Prodotti(codice_prodotto, descrizione_prodotto, prezzo_prodotto)

in cui l'attributo Ordini.ordine_evaso assume valore 1 nelle tuple relative a ordini che sono stati evasi e valore 0 nelle tuple relative ad ordini inevasi, scrivere una interrogazione SQL per ottenere tutte le informazioni possibili sugli ordini attualmente inevasi emessi dalla ditta PincoPallino nei mesi di agosto 1998 e dicembre 1998.

N.B. In SQL è possibile specificare costanti di tipo data (date) nel formato italiano come 'GG.MM.AAAA'.