Università di Roma "La Sapienza" – Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di laurea: Ambiente e Territorio

1ª prova di esame del 18 giugno 1999 (II appello estivo)

tempo a disposizione: 120 minuti

Problema 1

Un docente di Fondamenti di Informatica memorizza in un file di strutture (binario), per fini statistici, l'esito di tutti gli esami svolti positivamente nell'ambito del suo corso. Per ogni studente esaminato sono incluse le seguenti informazioni:

  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 parametro il nome di un file di strutture riepilogativo di tutti gli esami svolti nell'A.A. 97/98, costruisca un nuovo file (il cui nome è anche passato come parametro) inserendovi tutti (e soli) i voti assegnati nell'A.A. 97/98 che risultano superiori alla media dei voti assegnati dal docente nel corso dell'A.A. (media definita dai voti memorizzati nel file riepilogativo; i "30 e lode" contribuiscono come 30 sia alla media sia al file di output).
  3. Scrivere una funzione C (o più) che, ricevendo come parametro il nome del file costruito al punto precedente, costruisca, restituendola in uscita, una lista rappresentata tramite strutture e puntatori i cui elementi contengono i voti presenti nel file e, per ogni voto, il numero delle sue presenze nel file. Ogni voto deve essere presente una sola volta nella lista.

Esempio

Dato il file contenente le informazioni illustrate in Fig. 1.1 (media: 26.17), il punto 1.2 richiede la costruzione di un file contenente quanto mostrato in Fig. 1.2, mentre il punto 1.3 richiede la costruzione della lista descritta in Fig 1.3.

matricola

nome

cognome

corso di laurea

data esame

esito

lode

09000001

Pico

De Paperis

AT

10011998

30

n

09000021

Paolino

Paperino

CIV

15021998

19

n

09000101

Macchia

Nera

CH

15021998

23

n

09001211

Paperon

de' Paperoni

INF

23071997

27

n

09002110

Rocker

Duck

NUC

23071997

28

n

09000113

Archimede

Pitagorico

MEC

20021905

30

s

Fig. 1.1

esito

30

27

28

30

Fig. 1.2

 

Fig. 1.3

 

Università di Roma "La Sapienza" – Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di laurea: Ambiente e Territorio

2ª prova di esame del 18 giugno 1999 (II appello estivo)

tempo a disposizione: 60 minuti

Problema 2

Illustrare e discutere le regole di visibilità delle variabili all'interno di un programma C. Quando può essere consigliabile o conveniente l'uso di variabili globali?

Problema 3

Dato il seguente frammento di codice C:

#include <stdio.h>

struct e {

int info;

struct e *next1, *next2;

};

typedef struct e *pse;

void Inserisci(pse *pptesta, pse pnuovo, pse *ppcoda)

{

if(*pptesta==NULL) {

pnuovo->next2=NULL;

*pptesta=pnuovo;

} else {

pnuovo->next2=*ppcoda;

(*ppcoda)->next1=pnuovo;

}

pnuovo->next1=NULL;

*ppcoda=pnuovo;

return;

}

discutere cosa fa (e non come lo fa) la funzione Inserisci, nonché la sua possibile utilità.

 

Problema 4

Data la relazione PERSONE(Nome,Padre,Madre), le cui tuple contengono solo nomi di battesimo e in cui si assume non ci siano omonimie, scrivere una interrogazione SQL che calcoli tutte le coppie di fratelli.

N.B. Ogni coppia deve avere gli stessi genitori, deve apparire una sola volta e deve essere composta da due persone differenti.