Program Spis, Politechnika Białostocka, ZiIP (PB), Semestr 1, Podstawy programowania, Programowanie wyklad


Przykład programu wykorzystującego struktury listowe do gromadzenie danych studentów. Program ma umożliwiać tworzenie listy studentów (czytanie danych z klawiatury) oraz wyprowadzenie tej listy na ekran.

Definicje typów dla listy studentów:

type

SpisStudentow=^student;

student=rekord

imie,nazw :string[15];

wsk :SpisStudentow;

end;

Dla tak zdefiniowanego typu wskaźnikowego lista studentów jest reprezentowana przez zmienną spis

var

spis:SpisStudentow;

w następujący sposób:

Wskaźniki do następnych elementów są umieszczone w polach wsk kolejnych rekordów. W ostatnim elemencie listy polu wsk nadajemy wartość NIL, aby ułatwić rozpoznanie końca listy. Struktura listy jest przedstawiona na rys. 4.

0x01 graphic

Rys. 4

Algorytm tworzenia listy studentów

Dane: Informacje o studentach wprowadzane z klawiatury.

Wynik: Wskaźnik do początku listy studentów.

  1. Na początku lista jest pusta, więc wskaźnikowi sp przypisz wartość NIL.

  2. Czytaj imię i nazwisko studenta. Jeśli przeczytany napis jest pusty, to zakończ działanie algorytmu, w przeciwnym przypadku przejdź do następnego kroku.

  3. Zarezerwuj obszar pamięci dla nowego elementu, używając pomocniczego wskaźnika Nowy.

  4. Umieść dane o uczniu w odpowiednich polach rekordu Nowy^ (polu wsk nadaj wartość NIL, gdyż nowy element jest umieszczony na końcu listy).

  5. Dopisz nowy element do końca listy

  6. Powtarzaj kroki od 2 do 6.

Objaśnić należy sposób wykonania kroku 5. Jeżeli dopisujemy nowy element do końca pustej listy, to wskaźnikowi sp przypisujemy wartość wskaźnika Nowy. Jeśli lista nie jest pusta, to musimy znać wskaźnik sp do początku listy i dodatkowo wskaźnik Biezacy do ostatniego elementu listy, po którym należy dołączyć nowy element. Wówczas wykonujemy dwie operacje:

0x01 graphic

Rys. 4

Powyższy algorytm realizujemy w procedurze CzytajImNazw.

Procedure CzytajImNazw(var sp:SpisStudentow);

var

i :integer;

dane :string[15];

nowy,biezacy :SpisStudentow;

begin

writeln('Podaj dane kolejnych studentow');

write('(na koncu danych nacisnij ENTER zamiast');

writeln(' podawac imie)');

sp:=nil; {na poczatku lista jest pusta}

i:=1;

repeat

writeln;

write(i:2,'Imie: ':12);

readln(dane);

if dane<>'' then

begin

new(nowy); {rezerwacja pamieci dla nowego rekordu}

nowy^.imie:=dane; {wypelnienie pol nowego rekordu}

write('Nazwisko: ':14);

readln(nowy^.nazw);

nowy^.wsk:=nil;

if sp=nil then

begin

sp:=nowy; {tworzenie pierwszego elementu listy}

biezacy:=sp;

end

else

begin

biezacy^.wsk:=nowy;{dolaczenie kolejnego elementu

do listy}

biezacy:=nowy;

end;

i:=i+1;

end

until dane=''

end;

W procedurze drukowania listy studentów stosujemy następujący algorytm:

  1. Wskaźnikowi sp przypisz wartość wskaźnika do początku listy

  2. Dopóki lista nie jest pusta (tj. sp<>NIL), wykonuj kroki 3 i 4

  3. Wykonaj operacje związane z elementem wskazywanym przez wskaźnik sp

  4. Przesuń wskaźnik do następnego elementu (tj. wykonaj sp:=sp^.wsk)

Procedure DrukujListe(sp:SpisStudentow);

var

i:integer;

begin

i:=1;

writeln;

writeln('Lista studentow':20);

writeln;

while sp<>nil do

begin

with sp^ do

writeln(i:2,imie:15,nazw:15);

sp:=sp^.wsk;

i:=i+1;

end;

end;

Zwróćmy uwagę na sposób tworzenia i drukowania listy studentów. Nowy element jest dopisywany zawsze do końca listy, a przeglądając listę wyprowadzamy elementy w kolejności ich dołączania, tzn. element dopisany do listy jako ostatni zostanie wydrukowany tez jako ostatni. Tak zorganizowaną listę nazywamy kolejką - zasady posługiwania się nią przypominają reguły rządzące kolejką znaną z życia.

Program ListaStudentow;

uses Crt;

type

SpisStudentow=^student;

student=record

imie,nazw :string[15];

wsk :SpisStudentow;

end;

var

spis:SpisStudentow;

procedure start(tytul:string);

begin

clrscr;

writeln(tytul);

writeln;

end;

procedure CzytajImNazw(var sp:SpisStudentow);

var

i :integer;

dane :string[15];

nowy,biezacy :SpisStudentow;

begin

writeln('Podaj dane kolejnych studentow');

write('(na koncu danych nacisnij ENTER zamiast');

writeln(' podawac imie)');

sp:=nil; {na poczatku lista jest pusta}

i:=1;

repeat

writeln;

write(i:2,'Imie: ':12);

readln(dane);

if dane<>'' then

begin

new(nowy); {rezerwacja pamieci dla nowego rekordu}

nowy^.imie:=dane; {wypelnienie pol nowego rekordu}

write('Nazwisko: ':14);

readln(nowy^.nazw);

nowy^.wsk:=nil;

if sp=nil then

begin

sp:=nowy; {tworzenie pierwszego elementu listy}

biezacy:=sp;

end

else

begin

biezacy^.wsk:=nowy;{dolaczenie kolejnego elementu

do listy}

biezacy:=nowy;

end;

i:=i+1;

end

until dane=''

end;

procedure DrukujListe(sp:SpisStudentow);

var

i:integer;

begin

i:=1;

writeln;

writeln('Lista studentow':20);

writeln;

while sp<>nil do

begin

with sp^ do

writeln(i:2,imie:15,nazw:15);

sp:=sp^.wsk;

i:=i+1;

end;

end;

procedure koniec;

begin

writeln;

writeln('Nacisnij klawisz ENTER');

readln

end;

begin

start('Tworzenie i drukowanie listy studentow');

CzytajImNazw(spis);

DrukujListe(spis);

koniec;

end.



Wyszukiwarka

Podobne podstrony:
zasady zaliczeń PP IG, Politechnika Białostocka, ZiIP (PB), Semestr 1, Podstawy programowania, Progr
zasady zaliczeń PP IG, Politechnika Białostocka, ZiIP (PB), Semestr 1, Podstawy programowania, Progr
MW zaliczenie, Politechnika Poznańska ZiIP, IV semestr, IV semestr, Techniki pomiarowe, TechnikiPom,
Spr. 4-Materiałoznawstwo, Politechnika Poznańska ZiIP, II semestr, nom, Laboratoria-sprawozdania NOM
206e, Politechnika Poznańska ZiIP, II semestr, Fizyka, laborki fiza, Laborki, laborki fiza, Fizyka -
Ćw[1]. 04 - Stale narzędziowe, Politechnika Poznańska ZiIP, II semestr, nom, Laboratoria-sprawozdani
NOM ( I kolokwium II semestr) opracowane przez Piaska, Politechnika Poznańska ZiIP, II semestr, nom
Dystrybucja, Politechnika Gdańska, Zarządzanie WZiE, semestr 2, Podstawy marketingu, zadania
moje sprawko 4(1), Politechnika Poznańska ZiIP, III semestr, OCiS
104, Politechnika Poznańska ZiIP, II semestr, Fizyka, laborki fiza, Laborki, laborki fiza, Fizyka -
204pl, Politechnika Poznańska ZiIP, II semestr, Fizyka, laborki fiza, wszystkie laboratoria z 1 prac
104e, Politechnika Poznańska ZiIP, II semestr, Fizyka, laborki fiza, Laborki, laborki fiza, Fizyka -
100, Politechnika Poznańska ZiIP, II semestr, Fizyka, laborki fiza, Laborki, laborki fiza, Fizyka -
5 elazo w giel, Politechnika Poznańska ZiIP, II semestr, nom, Laboratoria-sprawozdania NOM, sprawoz

więcej podobnych podstron