Programmazione I
 
Prova scritta dell'11 febbraio 2000

1.
Dopo avere dichiarato il tipo lista di interi, scrivere in Pascal una PROCEDURE che riceva come parametro il puntatore a una lista di interi ed inserisca alla fine della lista un nuovo nodo contenente la somma di tutti i valori presenti nella lista data. Ad esempio, se la lista contiene inizialmente i valori 10 7 15 12, dopo l'esecuzione della PROCEDURE la lista dovrà contenere 10 7 15 12 44; se la lista inizialmente è vuota, dopo l'esecuzione della PROCEDURE dovrà contenere come unico valore 0.

2.
Disegnare l'albero di ricerca ottenuto inserendo, uno dopo l'altro, i numeri 20 10 3 8 7 2 15 21 24 22 in un albero inizialmente vuoto. Scrivere gli output prodotti visitando tale albero nei tre ordini anticipato, simmetrico e posticipato.

3.
Scrivere l'output prodotto da ciascuno dei seguenti programmi.
 
PROGRAM p1 (output);
TYPE punt = ^integer;
VAR p: punt;
   PROCEDURE s (VAR q: punt; x: integer);
   BEGIN
      new(q);
      q^ := x;
      q^ := p^ + q^;
      p^ := q^ + p^;
      x := q^ + p^
   END;
BEGIN
   new(p);
   p^ := 3;
   s(p, p^);
   writeln(p^)
END.
PROGRAM p2 (output);
TYPE punt = ^integer;
VAR p: punt;
   PROCEDURE s (VAR q: punt; VAR x: integer);
   BEGIN
      new(q);
      q^ := x;
      q^ := p^ + q^;
      p^ := q^ + p^;
      x := q^ + p^
   END;
BEGIN
   new(p);
   p^ := 3;
   s(p, p^);
   writeln(p^)
END.
PROGRAM p3 (output);
TYPE punt = ^integer;
VAR p: punt;
   PROCEDURE s (q: punt; x: integer);
   BEGIN
      new(q);
      q^ := x;
      q^ := p^ + q^;
      p^ := q^ + p^;
      x := q^ + p^
   END;
BEGIN
   new(p);
   p^ := 3;
   s(p, p^);
   writeln(p^)
END.
PROGRAM p4 (output);
TYPE punt = ^integer;
VAR p: punt;
   PROCEDURE s (q: punt; VAR x: integer);
   BEGIN
      new(q);
      q^ := x;
      q^ := p^ + q^;
      p^ := q^ + p^;
      x := q^ + p^
   END;
BEGIN
   new(p);
   p^ := 3;
   s(p, p^);
   writeln(p^)
END.



Giovanni Pighizzini
2000-02-14