Università di Roma La Sapienza

Facoltà di Ingegneria

Corso di Fondamenti di Informatica

Corso di Laurea: Ambiente e Territorio

Appello dell’1-7-1998

 

Esercizio 1 (18 punti)

In un sistema per la progettazione assistita da elaboratore (CAD) un disegno (tecnico) è composto da un insieme di poligoni (massimo 10). Ciascuno di questi viene rappresentato tramite una lista collegata di elementi di tipo Vertice, in cui ciascun vertice è un punto del piano cartesiano a coordinate intere e il vertice finale di ogni poligono coincide con quello iniziale.

Si consideri un file DISEGNO.TXT in cui è memorizzato un disegno: il file (di tipo testo) contiene le rappresentazioni dei poligoni che compongono il disegno, un poligono per riga.

  1. Definire i tipi di dato C adeguati a risolvere i problemi di cui ai successivi punti (2) e (3).
  2. Scrivere una funzione C (o più) che, dato come parametro il file DISEGNO.TXT, costruisca una rappresentazione di tipo Disegno del disegno memorizzato nel file, dove Disegno è un tipo di dato che deve essere opportunamente definito.
    [In particolare, la funzione costruisce una lista per ciascun poligono nel disegno e organizza nella maniera che si ritiene più opportuna i puntatori alla testa delle varie liste.]
  3. Scrivere una funzione C (o più) che, ricevendo un parametro formale di tipo Disegno elimini dal disegno rappresentato tutti i poligoni che contengono un lato orizzontale (parallelo all’asse delle x).
    A titolo di esempio, si consideri la Fig. 1: in (a) è illustrato un poligono non avente lati orizzontali, in (b) un poligono con un lato orizzontale.
  4. (a) Poligono privo di lati orizzontali.

    (b) Poligono con un lato orizzontale (in grassetto).

       

    Fig. 1

     

     

     

    Università di Roma La Sapienza

    Facoltà di Ingegneria

    Corso di Fondamenti di Informatica

    Corso di Laurea: Ambiente e Territorio

    Appello dell’1-7-1998

     

    Esercizio 2 (4 punti)

    Con riferimento al linguaggio C, si considerino

  5. un tipo (struttura) ElLista, con campi
    1. info, di tipo int,
    2. prox, di tipo puntatore a ElLista;
  6. una funzione InsInCoda che, data una lista collegata (anche vuota) e dato un nuovo elemento, dovrebbe collegare tale elemento alla coda della lista.

La funzione qui proposta contiene degli errori. Indicarli, spiegarne l’effetto e correggerli.

void InsInCoda (ElLista *p, int nuovo)

{

if (p != NULL) {

while (p->prox != NULL)

p = p->prox;

p->prox = malloc(sizeof(ElLista));

p->prox->val = nuovo;

p->prox->prox = NULL;

} else {

p = malloc(sizeof(ElLista));

p->val = nuovo;

p->prox = NULL;

}

return;

}

 

 

Esercizio 3 (4 punti)

Con riferimento al programma C presentato nel riquadro, dire quali valori vengono stampati, e perché, quando vengono inseriti i valori sotto specificati (siano A, B e C i voti ottenuti negli ultimi tre esami superati):

  1. A, B e C;
  2. A+1, B e C.

#include <stdio.h>

main() {

int a[3], sommaint = 0, i;

float media, sommafloat = 0;

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

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

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

sommaint = sommaint+a[i];

sommafloat = sommafloat+a[i];

}

media = sommaint/3;

printf("Media1=%f\n", media);

media = sommafloat/3;

printf("Media2=%f\n", media);

return 0;

}

 

 

Esercizio 4 (4 punti)

Con riferimento alle seguenti relazioni:

il candidato scriva una interrogazione SQL che restituisca nome e cognome di tutti i proprietari di auto che hanno subìto una contravvenzione in orario serale (dalle 20 alle 8) mentre l’auto era posteggiata sulla strada di residenza.