Program načíta zoznam čísel a uloží ich do spojitého zoznamu

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategórie: Zadání z Pascalu

Program: Ssl_zozn.pas
Soubor exe: Ssl_zozn.exe
Potřebné: Cisla.txt

Program načíta zoznam čísel a uloží ich do spojitého zoznamu. Zoznam je rozdelený na párne/nepárne.
{ 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.