Informatyka - instrukcje, Instrukcja 11, Podstawy Informatyki - Laboratorium


Podstawy Informatyki - Laboratorium

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

Turbo Pascal

Instrukcja laboratoryjna nr 11

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

luty 2005 r.

Zmienne dynamiczne - kolejka dynamiczna

  1. Napisać program sterujący ruchem pacjentów oczekujących na prześwietlenie RTG. Dane pacjenta: nazwiskoimię, data urodzenia, płeć. Założenia programu:

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

program z11_1;

uses Crt;

type TData = record

d: 1..31;

m: 1..12;

r: integer;

end;

TPacjent = record

nazwisko,imie:string[25];

data_ur: TData;

plec: char;

end;

TWsk = ^TElement;

TElement = record

pacjent: TPacjent;

nast: TWsk;

end;

var P,K,P_k,K_k,P_m,K_m: TWsk;

{-----}

function Max_liczba_dni(miesiac:byte;rok:integer):byte;

var rok_przest: boolean;

begin

rok_przest:=false;

if ((rok mod 4= 0)and(rok mod 100<> 0))or(rok mod 400= 0) then rok_przest:=true;

case miesiac of

1,3,5,7,8,10,12: Max_liczba_dni:=31;

4,6,9,11 : Max_liczba_dni:=30;

2 : if rok_przest then Max_liczba_dni:=29

else Max_liczba_dni:=28;

end;

end;

{-----}

procedure Wprowadz_date(var x:TData; var blad:byte);

var data,pom:string[10];

dd,mm:string[2];

k1,k2:byte;

blad_liczby:integer;

begin

blad:=0;

readln(data);

k1:=Pos('.',data);

if k1=2 then dd:=copy(data,1,1)

else if k1=3 then dd:=copy(data,1,2)

else begin blad:=1; exit; end;

val(dd,x.d,blad_liczby);

if (blad_liczby<>0) then begin blad:=1; exit; end;

pom:=copy(data,k1+1,Length(data)-k1);

k2:=Pos('.',pom);

if k2=2 then mm:=copy(pom,1,1)

else if k2=3 then mm:=copy(pom,1,2)

else begin blad:=1; exit; end;

val(mm,x.m,blad_liczby);

if (blad_liczby<>0)or(not (x.m in [1..12])) then begin blad:=1; exit; end;

pom:=copy(pom,k2+1,Length(pom)-k2);

val(pom,x.r,blad_liczby);

if (blad_liczby<>0)or(x.d>Max_liczba_dni(x.m,x.r)) then begin blad:=1; exit; end;

end;

{-----}

procedure Wyswietl_date(x:TData);

var dd,mm: string[2];

begin

str(x.d,dd); if Length(dd)=1 then dd:='0'+dd;

str(x.m,mm); if Length(mm)=1 then mm:='0'+mm;

write(dd,'.',mm,'.',x.r);

end;

{-----}

procedure Wprowadz_pacjenta(var x:TPacjent);

var blad_daty: byte;

begin

with x do

begin

write('Nazwisko: '); readln(nazwisko);

write('Imie: '); readln(imie);

repeat

write('Data urodzenia (dd.mm.rrrr): '); Wprowadz_date(data_ur,blad_daty);

if blad_daty=1 then writeln('Nie ma takiej daty. Sprobuj jeszcze raz.');

until blad_daty=0;

write('Plec (K/M): ');

repeat

plec:=UpCase(ReadKey);

until plec in ['K','M'];

writeln(plec);

end;

end;

{-----}

procedure Wyswietl_pacjenta(x:TPacjent);

begin

with x do

begin

write(nazwisko,' ',imie); GoToXY(53,WhereY);

if plec='K' then write('Kobieta') else write('Mezczyzna');

GoToXY(65,WhereY); Wyswietl_date(x.data_ur);

end;

writeln;

end;

{-----}

procedure Do_kolejki(var P,K:TWsk; x:TPacjent);

var Q:TWsk;

begin

New(Q);

Q^.pacjent:=x; Q^.nast:=NIL;

if P=NIL then P:=Q

else K^.nast:=Q;

K:=Q;

end;

{-----}

Procedure Usun_z_kolejki(var P:TWsk; var x:TPacjent);

var Q:TWsk;

begin

x:=P^.pacjent;

Q:=P;

P:=P^.nast;

Dispose(Q);

end;

{-----}

procedure Zapisz_pacjentow(var P,K:TWsk);

var z: char;

x: TPacjent;

begin

P:=NIL; K:=NIL;

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

repeat

z:=UpCase(ReadKey);

until z in ['N','T'];

writeln(z);

while z='T' do

begin

writeln('Wprowadz dane pacjenta:');

Wprowadz_pacjenta(x);

Do_kolejki(P,K,x);

write('Czy wprowadzasz nastepne dane? (T/N): ');

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

writeln(z);

end;

end;

{-----}

procedure Wyswietl_kolejke(P:TWsk);

var x:TPacjent;

begin

while P<>NIL do

begin

Wyswietl_pacjenta(P^.pacjent);

P:=P^.nast;

end;

end;

{-----}

begin

ClrScr;

Zapisz_pacjentow(P,K);

Wyswietl_kolejke(P);

ReadKey;

end.

  1. Program przedstawiony w punkcie 1 zawiera procedury wprowadzania danych, tworzenia wstępnej (wspólnej) kolejki pacjentów oraz wyświetlania zawartości kolejki. Uzupełnić ten program o procedury realizujące następujące działania:

    1. rozdzielenie wspólnej kolejki pacjentów na dwie kolejki: kobiet i mężczyzn;

    2. wyświetlanie kolejnych, 5-o osobowych, grup pacjentów do prześwietlenia (na przemian kobiet i mężczyzn);

Działanie ww. procedur powinno jednocześnie powodować zwalnianie pamięci zajętej przez już niepotrzebne dane.

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

    1. wyznaczenie liczby kobiet i mężczyzn w kolejce;

    2. znalezienie osób: najstarszej i najmłodszej;

    3. zapisanie zawartości kolejki głównej do pliku o nazwie pacjenci.dat;

    4. umożliwienie pobrania danych z pliku o nazwie pacjenci.dat, umieszczenia ich w kolejce i ew. dodania na koniec kolejki nowych pacjentów;

    5. znalezienie w kolejce osób o podanym nazwisku i wyświetlenie ich danych na ekranie
      (w przypadku braku takich osób powinien się pojawić stosowny komunikat).

str. 2/3 Turbo Pascal - Instrukcja nr 11

Turbo Pascal - Instrukcja nr 11 str. 3/3



Wyszukiwarka

Podobne podstrony:
Informatyka - instrukcje, Instrukcja 3, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 13, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 2, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 1 - poprawiona, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 1 - poprawiona, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 9, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 8, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 12, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 10, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 4, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 7, Podstawy Informatyki - Laboratorium
Informatyka - instrukcje, Instrukcja 14, Podstawy Informatyki - Laboratorium
11.Podstawy modelowania, Semestr VII, Semestr VII od Grzesia, Technologie informatyczne w El-En. Lab
pom nap okr zm 1, Informatyka, Podstawy miernictwa, Laboratorium
pom mocy ukl trojfaz, Informatyka, Podstawy miernictwa, Laboratorium
pom czestot, Informatyka, Podstawy miernictwa, Laboratorium
01 Podstawowe czynności laboratoryjne instrukcja
dec2bin, Elektronika i Telekomunikacja, z PENDRIVE, Politechnika - EiT, 2011 - sem 1, PODSTAWY INFOR

więcej podobnych podstron