Zadanie zaliczeniowe z laboratorium Pascala i C. ZSI I. 01/02
-------------------------------------------------------------

Zadane: 
 wersja podstawowa:  23-24.01.2002,
 wersja rozszerzona: 30-31.01.2002,
 odbiór:             7-8.02.2002, 4 punkty.

Zad 6b.
Zadanie w wersji rozszerzonej (4 pkt)
-------------------------------------

1) Zaimplementuj modul udostepniajacy listy liczb calkowitych
i operacje na nich. W module powinny znalezc sie nastepujace
elementy:

type
  lista = ^elemlisty;

  elemlisty = record
                w: integer;
                nast: lista
              end


procedure WstawNaPocz (var l: lista; x: integer);
{ wstawia liczbe x jako pierwszy element listy l }

procedure WstawNaKon (var l: lista; x: integer);
{ wstawia liczbe x na koniec listy l }

function Dlugosc (l: lista): integer;
{ przekazuje w wyniku dlugosc listy l }

function CzyPusta (l: lista): boolean;
{ przekazuje w wyniku true wtw, gdy lista jest pusta }

procedure Inicjuj (var l: lista);
{ tworzy liste pusta }

procedure Wstaw (var l: lista; x: integer);
{ wstawia element x na wlasciwe miejsce listy l,
  przy zalozeniu, ze l jest uporzadkowana niemalejaco }

function Znajdz (l: lista; x: integer): lista;
{ odszukuje element x w liscie l i przekazuje w wyniku
  wskaznik do elementu listy lub nil, jesli x nie ma }

procedure Usun (var l: lista; co: lista);
{ usuwa z listy l, element wskazywany przez co.
  Mozna przyjac, ze co pokazuje na pewien element listy l.
  Uwaga na implementacje! }

procedure WypiszListe (l: lista; var f: text);
{ wypisuje liczby z listy l na plik f }

procedure WczytajListe (var l: lista; var f: text);
{ wczytuje liczby z pliku --- dokladna
  specyfikacja na laboratorium }

procedure NiszczListe (var l: lista);
{ usuwa wszystkie elementy z listy l
  i zwalnia pamiec zajmowana przez nie }

procedure Odwroc (var l: lista);
{ odwraca liste l (nie tworzac jej kopii!) }

2) Napisz program, ktory zilustruje dzialanie modulu.
   Specyfikacja programu zostanie podana przez prowadzacego.

3) Dodaj do modułu funkcję Min(l: Lista): Lista, dającą wskaźnik
   do dowolnego minimanego elementu na liście (nil jeśli takiego 
   nie ma, gdy lista jest pusta).

4) Napisz program, który korzystając z opisanego modułu wczyta 
   z pliku liczby, posortuje je (sortowanie przez wybieranie)
   i zapisze na plik. Nazwy obu plików należy pobrać z wiersza
   komendy. Należy zwrócić uwagę na zwalnianie pamięci. Aby mieć
   pewność, że cała pamięć dynamiczna została zwolniona, należy
   na koniec działania programu wypisać na ekranie wartości
   funkcji MemAvail i MaxAvail z początku i z końca działania 
   programu.