26.06.2003
                             ZSI.TP.2002/2003
                            Egzamin poprawkowy
                                     
Zad 1 (p. 12)
Dany  jest plik binarny liczb całkowitych (file of integer). Liczby  są  w
nim zgrupowane w bloki, z których każdy poprzedzony jest długością. Napisz
procedurę  Popraw(NazwaDanych, NazwaWyniku: String),  która  na  podstawie
takiego pliku utworzy nowy, zawierający te same dane, ale bez zer wewnątrz
bloków  i bez pustych bloków. Można założyć, że plik NazwaDanych istnieje,
zaś plik NazwaWyniku nie.

Przykład (dla ułatwienia bloki oddzielono przecinkami):

 dane:    3 10 0 20 , 0 , 1 0 , 2 30 0 , 1 40
 wynik:   2 10 20 , 1 30 , 1 40

  
Zad 2 (p. 12)
Dane są typy:
   type
     Lista = ^Elem;
     Elem = record
               w    : integer;
               nast : Lista;
            end;
Napisz  procedurę  Srednie(l:  Lista), która zamieni  wartości  wszystkich
elementów  listy  l  na  średnie arytmetyczne  początkowych  wartości  dwu
sąsiednich  elementów (jeśli nie ma któregoś z sąsiadów, to traktujemy  go
jak sąsiada z wartością 0).

Zad 3 (p. 16)
Dane są dwa drzewa binarne typu TDrzewaBin. Napisz funkcję:
   function Dodaj(d1, d2: TDrzewaBin): TDrzewaBin;
która  da  jako  wynik  nowoutworzone (tj.  wszystkie  jego  węzły  należy
stworzyć  podczas dodawania) drzewo, będące sumą drzew d1 i  d2.  To  nowe
drzewo  ma węzeł tam i tylko tam, gdzie co najmniej jedno z drzew  d1,  d2
miało  węzeł,  zaś wartość w tym węźle jest sumą wartości  odpowiadających
węzłów  z d1 i d2 (jeśli jedno z tych drzew nie ma odpowiadającego  węzła,
to bierzemy tylko wartość z węzła drugiego drzewa). Np. dla:

          

Typ TDrzewaBin jest taki jak na wykładzie.

Powodzenia!