Informatyka - instrukcje, Instrukcja 12, Podstawy Informatyki - Laboratorium


Podstawy Informatyki - Laboratorium

Politechnika Świętokrzyska, Wydział Elektrotechniki, Automatyki i Informatyki

Turbo Pascal

Instrukcja laboratoryjna nr 12

Opracował: dr inż. Grzegorz Słoń

marzec 2005 r.

Zmienne dynamiczne - lista dynamiczna (dwukierunkowa)

  1. Napisać program sortujący alfabetycznie listę kandydatów na studia. Dane o pojedynczej osobie powinny zawierać: Nazwisko i Imię, Datę urodzenia, Kierunek studiów. Program powinien sortować listę rosnąco wg daty urodzenia.

W charakterze materiału wyjściowego wykorzystać poniższy program:

uses Crt,Dos;

type TNazwa = string[50];

TStudent = record

naz_im:TNazwa;

data_ur: DateTime;

kier: TNazwa;

end;

TWsk = ^TElement;

TElement = record

student: TStudent;

prev, next: TWsk;

end;

var P,K: TWsk;

{-----}

procedure Wprowadz_studenta(var x:TStudent);

begin

with x do

begin

write('Nazwisko i imie: '); readln(naz_im);

write('Data urodzenia: ');

with data_ur do readln(day,month,year);

write('Kierunek studiow: '); readln(kier);

end;

end;

{-----}

procedure Pokaz_studenta(x:TStudent);

begin

with x do

begin

write(naz_im); GoToXY(52,WhereY);

with data_ur do write(day:2,'.',month:2,'.',year:4);

GoToXY(63,WhereY); writeln(kier);

end;

end;

{-----}

function Miejsce_wstawienia(P:TWsk; x:TStudent):TWsk;

var d1,d2:longint;

begin

PackTime(x.data_ur,d1);

PackTime(P^.student.data_ur,d2);

while (P<>NIL) and (d2<d1) do

begin

P:=P^.next;

if P<>NIL then PackTime(P^.student.data_ur,d2);

end;

Miejsce_wstawienia:=P;

end;

{-----}

procedure Dodaj_do_listy(var P,K:TWsk; x:TStudent);

var Q,W:TWsk;

begin

New(Q);

Q^.student:=x; Q^.prev:=NIL; Q^.next:=NIL;

if P=NIL then begin

P:=Q; K:=Q;

end

else begin

W:=Miejsce_wstawienia(P,x);

if W=P then begin

P^.prev:=Q; Q^.next:=P;

P:=Q;

end

else if W=NIL then begin

K^.next:=Q; Q^.prev:=K;

K:=Q;

end

else begin

W^.prev^.next:=Q;

Q^.prev:=W^.prev;

W^.prev:=Q;

Q^.next:=W;

end;

end;

end;

{-----}

procedure Dodaj_nowe_dane(var P,K:TWsk);

var x:TStudent;

z:char;

begin

write('Czy chcesz dodac nowe dane? (T/N): ');

repeat z:=UpCase(ReadKey) until z in ['N','T'];

writeln(z);

while z='T' do

begin

Wprowadz_studenta(x);

Dodaj_do_listy(P,K,x);

write('Czy chcesz dodac nowa osobe? (T/N): ');

repeat z:=UpCase(ReadKey) until z in ['N','T'];

writeln(z);

end;

end;

{-----}

procedure Wyswietl_liste(P:TWsk);

begin

while P<>NIL do

begin

Pokaz_studenta(P^.student);

P:=P^.next;

end;

end;

{-----}

begin

P:=NIL;

ClrScr;

Dodaj_nowe_dane(P,K);

ClrScr;

writeln('Wprowadzone dane:');

Wyswietl_liste(P);

ReadKey;

end.

  1. Program przedstawiony w punkcie 1 zawiera procedury wprowadzania danych, tworzenia listy (dwukierunkowej) studentów oraz wyświetlania zawartości listy (od początku do końca). Uzupełnić ten program o procedury lub funkcje realizujące następujące działania:

    1. uzupełnienie procedury wprowadzania daty o mechanizmy kontroli poprawności danych;

    2. wyszukiwania na liście osoby o wskazanym nazwisku;

c) likwidacji listy.

  1. Uzupełnić program z poprzedniego punktu o procedury lub funkcje wykonujące następujące operacje:

    1. wyznaczenie liczby studentów na liście;

    2. sortowania listy według porządku alfabetycznego;

    3. zapisanie zawartości listy do pliku o nazwie studenci.dat;

    4. umożliwienie pobrania danych z pliku o nazwie studenci.dat, umieszczenia ich na liście i ew. dodania do listy nowych studentów;

    5. usunięcie z listy osób o wskazanych danych (np. nazwisku bądź dacie urodzenia);

    6. rozbicia listy głównej na dwie listy, na których znajdą się osoby urodzone przed rokiem 1980 lub później.

str. 2/3 Turbo Pascal - Instrukcja nr 12

Turbo Pascal - Instrukcja nr 12 str. 3/3



Wyszukiwarka