{ SSL_ZOZN.PAS Copyright (c) TrSek alias Zdeno Sekerak } { Program nacita zoznam cisel a ulozi ich do spojiteho zoznamu. } { Zoznam je rozdeleny na parne/neparne. } { } { Datum:18.01.2005 http://www.trsek.com } program spojity_seznam; uses crt,dos; const SOUB1 ='cisla.txt'; SPARNE='cparne.txt'; SNEPAR='cnepar.txt'; type IdentZaznam = ^Zaznam; Zaznam=record cislo:integer; dalsi:IdentZaznam; end; var s_parne:IdentZaznam; { smernik na start parne } s_nepar:IdentZaznam; { smernik na start neparne } parne:IdentZaznam; { pracovny smernik na parne } nepar:IdentZaznam; { pracovny smernik na neparne } f:text; { pro praci se souborem } cis:integer; { docasne ulozi cislo nez ho spracuje } { prida parne cislo - na zacatek } procedure pridajParne(cis:integer); var pom:IdentZaznam; begin { naalokujeme pamet } new(pom); { novy zaciatok } s_parne:=pom; s_parne^.dalsi:=parne; { pridame zaznam na zaciatok SSL } parne:=s_parne; { ulozime cislo } parne^.cislo:=cis; end; { prida neparne cislo - na konec } procedure pridajNeparne(cis:integer); var pom:IdentZaznam; begin { naalokujeme pamet } new(pom); { este nebolo pridane ziadne cislo } if(s_nepar=NIL)then s_nepar:=pom else { pridame zaznam do SSL } nepar^.dalsi:=pom; { ulozime cislo a dalsi smernik zatial na NIL } nepar:=pom; nepar^.cislo:=cis; nepar^.dalsi:=NIL; end; { vycistime pamet od alokovanych dat } procedure clrParne; var pom:IdentZaznam; begin parne:=s_parne; { prejdeme vsetky prvky zazanmu a odstranime ich } while(parne<>NIL) do begin pom:=parne^.dalsi; dispose(parne); { uvolni tuto pamet } parne:=pom; end; end; { vycistime pamet od alokovanych dat } procedure clrNeparne; var pom:IdentZaznam; begin nepar:=s_nepar; { prejdeme vsetky prvky zaznamu a odstranime ich } while(nepar<>NIL) do begin pom:=nepar^.dalsi; dispose(nepar); { uvolni tuto pamet } nepar:=pom; end; end; begin clrscr; writeln('Program nacitava soubor cisel ', SOUB1); { znulujeme } s_parne :=NIL; s_nepar:=NIL; parne :=NIL; nepar:=NIL; { zacneme citat soubor cisel } assign(f, SOUB1); reset(f); repeat read(f,cis); { zistime ci su parne alebo neparne a prida do zoznamu } if((cis mod 2)=0) then pridajParne(cis) else pridajNeparne(cis); until( eof(f)); { zavrieme subor } close(f); { mame zoznam parnych, neparnych } { zapiseme do suboru parne } assign(f, SPARNE); rewrite(f); parne:=s_parne; while( parne<>NIL ) do begin write(f,parne^.cislo,' '); parne:=parne^.dalsi; end; close(f); { zapiseme do suboru neparne } assign(f, SNEPAR); rewrite(f); nepar:=s_nepar; while( nepar<>NIL ) do begin write(f,nepar^.cislo,' '); nepar:=nepar^.dalsi; end; close(f); { vycistime pamet } clrParne; clrNeparne; { napisem ze skoncil } writeln('Subor ', SOUB1, ' som rozdelil na parne a neparne cisla'); writeln('do suborov ', SPARNE, ' a ', SNEPAR ); ReadLn; end.