Advertisement
Guest User

formatowanie liczb

a guest
Jan 29th, 2015
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.10 KB | None | 0 0
  1. program formatujLiczby;
  2.  
  3. const k = 3;
  4.       spacja = ' ';
  5.  
  6. type
  7.     lista = ^elemlisty;
  8.     elemlisty = record
  9.         w : char;
  10.         nast : lista;
  11.     end;
  12.  
  13. var f : Text;
  14.     g : Text;
  15.  
  16. procedure wypiszListe(l : lista);
  17. begin
  18.     while l <> nil do begin
  19.         write(l^.w);
  20.         l := l^.nast;
  21.     end;
  22.     writeln;
  23. end;
  24.  
  25. procedure stworzListe(var l, head : lista);
  26. begin
  27.     new(l);
  28.     l^.nast := nil;
  29.     head := l;
  30. end;
  31.  
  32. procedure wstawZa(l : lista; const c : char);
  33. var pom : lista;
  34. begin
  35.     new(pom);
  36.     pom^.nast := l^.nast;
  37.     pom^.w := c;
  38.     l^.nast := pom;
  39. end;
  40.  
  41. procedure usunNast(l : lista);
  42. var pom : lista;
  43. begin
  44.     pom := l^.nast;
  45.     l^.nast := l^.nast^.nast;
  46.     dispose(pom);
  47. end;
  48.  
  49. procedure wczytajLiczbe(l : lista; var f : text; var c : Char);
  50. begin
  51.     while not eoln(f) and (c <> spacja) do begin
  52.         read(f, c);
  53.         if c <> spacja then begin
  54.             WstawZa(l, c);
  55.             l := l^.nast;
  56.         end;
  57.     end;
  58. end;
  59.  
  60. procedure usunMinusy(l : lista);
  61. var stop : boolean;
  62. begin
  63.     stop := false;
  64.     while not stop do begin
  65.         if (l^.nast^.w = '-') and (l^.nast^.nast^.w = '-') then begin
  66.             usunNast(l);
  67.             usunNast(l);
  68.         end
  69.         else
  70.             stop := true;
  71.     end;
  72. end;
  73.  
  74. procedure usunZeraCalowite(l : lista);
  75. var stop:boolean;
  76. begin
  77.     stop := false;
  78.     while (l^.nast^.w <> '.') and (l^.nast <> nil) and not stop do begin
  79.         if l^.nast^.w = '-' then
  80.             l := l^.nast
  81.         else if (l^.nast^.w = '0') then begin
  82.             if l^.nast^.nast <> nil then begin
  83.                 if l^.nast^.nast^.w <> '.' then
  84.                     usunNast(l)
  85.                 else
  86.                     stop := true
  87.             end
  88.             else
  89.                 stop := true;
  90.         end
  91.         else
  92.             stop := true;
  93.     end;
  94. end;
  95.  
  96. function ulamek(l : lista) : boolean;
  97. begin
  98.     ulamek := false;
  99.     while (l <> nil) and not ulamek do begin
  100.         ulamek := l^.w = '.';
  101.         l := l^.nast;
  102.     end;
  103. end;
  104.  
  105. procedure utnijDoK(l : lista; const k : Integer);
  106. var i : integer;
  107. begin
  108.     while l^.w <> '.' do
  109.         l := l^.nast;
  110.     i := 1;
  111.     while (i <= k) and (l <> nil) do begin
  112.         l := l^.nast;
  113.         inc(i);
  114.     end;
  115.     if l <> nil then
  116.         while l^.nast <> nil do
  117.             usunNast(l);
  118. end;
  119.  
  120. procedure odwroc(var l : lista);
  121. var j, k : lista;
  122. begin
  123.     if l <> nil then begin
  124.         j := l^.nast;
  125.         l^.nast := nil;
  126.         while j <> nil do begin
  127.             k := j^.nast;
  128.             j^.nast := l;
  129.             l := j;
  130.             j := k;
  131.         end;
  132.     end;
  133. end;
  134.  
  135. procedure usunZeraUlamkaIKropke(l : lista);
  136. var pom : lista;
  137. begin
  138.     odwroc(l);
  139.     while l^.w = '0' do begin
  140.         pom := l;
  141.         l := l^.nast;
  142.         dispose(pom);
  143.     end;
  144.     if l^.w = '.' then begin
  145.         pom := l;
  146.         l := l^.nast;
  147.         dispose(pom);
  148.     end;
  149.     odwroc(l);
  150. end;
  151.  
  152. procedure liczbaZeremUsunMinus(head : lista);
  153. begin
  154.     if (head^.nast^.w = '-') and (head^.nast^.nast^.w = '0') and (head^.nast^.nast^.nast = nil) then
  155.         usunNast(head);
  156. end;
  157.  
  158. procedure wpiszDoPliku(h : lista; var g : text);
  159. begin
  160.     h := h^.nast;
  161.     while h <> nil do begin
  162.         write(g, h^.w);
  163.         h := h^.nast;
  164.     end;
  165.     writeln(g);
  166. end;
  167.  
  168. procedure usunListe(h : lista);
  169. begin
  170.     while h^.nast <> nil do
  171.         usunNast(h);
  172.     dispose(h);
  173. end;
  174.  
  175. procedure formatujLiczby( var f, g : Text; const k : Integer);
  176. var
  177.     l, head : lista;
  178.     c : Char;
  179. begin
  180.     reset(f);
  181.     rewrite(g);
  182.     while not eof(f) do begin
  183.         while not eoln(f) do begin
  184.             read(f, c);
  185.             if c <> spacja then begin
  186.                 stworzListe(l, head);
  187.                 wstawZa(l, c);
  188.                 l := l^.nast;
  189.                 wczytajLiczbe(l, f, c);
  190.                 writeln('NOWA LICZBA');
  191.                 wypiszListe(head^.nast);
  192.                 //asset((c = spacja) or eoln(f));
  193.                 usunMinusy(head);
  194.                 writeln('usuniete minusy');
  195.                 wypiszListe(head^.nast);
  196.                 usunZeraCalowite(head);
  197.                 writeln('usuniete zera calkowite');
  198.                 wypiszListe(head^.nast);
  199.                 if ulamek(head^.nast) then begin
  200.                     utnijDoK(head^.nast, k);
  201.                     writeln('uciete do k');
  202.                     wypiszListe(head^.nast);
  203.                     usunZeraUlamkaIKropke(head^.nast);
  204.                     writeln('zera ulamka usuniete');
  205.                     wypiszListe(head^.nast);
  206.                 end;
  207.                 liczbaZeremUsunMinus(head);
  208.                 writeln('liczba zerem? usun minus');
  209.                 wypiszListe(head^.nast);
  210.                 writeln;
  211.                 wpiszDoPliku(head, g);
  212.                 usunListe(head);
  213.             end;
  214.         end;
  215.         readln(f);
  216.     end;
  217. end;
  218.  
  219. //main
  220. begin
  221.     assign(f, 'in.txt');
  222.     assign(g, 'out.txt');
  223.  
  224.     formatujLiczby(f, g, k);
  225.     Close(f);
  226.     Close(g);
  227. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement