Mam problem z nauczeniem sie wlasnej arytmetyki. Znalazlem na internecie kurs http://main.edu.pl/pl/user.phtml?op=lesson&n=32 Wiem mniej wiecej jak pozniej to ma wygladac czyli dodawanie, odejmowanie itp. Natomiast mam problem na samym poczatku. Nie rozumie procedury czytaj. Z tego co do tej pory udalo mi sie zrozumiec to
gdy wpisze liczbe przykladowo 00008944447 to program podzieli ja chodzby na przedzialy max po 9
000089444 oraz 447 i petla for i := 0 to x.l - 1 do osobno rozpatruje takie przedzialy
Ale nie mam pojecia w jakim celu jest petla for k := j - DIGS + 1 to j do
Oto kod w pascalu
program abc;
const BASE = 1000000000; (* podstawa *)
const DIGS = 9; (* liczba cyfr dziesietnych kazdej cyfry w zapisie
przy powyzszej podstawie *)
const LEN = 1000; (* stala dlugosc liczb *)
type liczba = record
t : array[0..LEN - 1] of LongInt;
l : LongInt; (* faktyczna dlugosc liczby *)
end;
procedure wypisz(x : liczba);
var
i : LongInt;
pom, j : LongInt;
s : string;
begin
Write(x.t[x.l - 1]);
for i := x.l - 2 downto 0 do
begin
pom := x.t[i];
s := '';
while pom > 0 do
begin
s := s + Char(Ord('0') + pom mod 10);
pom := pom div 10;
end;
for j := 1 to DIGS - Length(s) do
Write(0);
for j := Length(s) downto 1 do
Write(s[j]);
end;
end;
(* Czyta lancuch znakowy z wejscia *)
function odczyt : Ansistring;
var
s : Ansistring;
ch : Char;
begin
s := '';
(* Czekamy na pierwsza cyfre (omijamy biale znaki itp.) *)
repeat
Read(ch);
until (ch >= '0') and (ch <= '9');
(* Wczytujemy kolejne cyfry liczby *)
while (ch >= '0') and (ch <= '9') do
begin
s := s + ch;
Read(ch);
end;
odczyt := s;
end;
procedure czytaj(var x : liczba);
var
i, j, k : LongInt;
s : Ansistring;
begin
s := odczyt; (* czytamy lancuch - zakladamy, ze nie ma zer wiodacych *)
(* Ustalamy dlugosc liczby *)
writeln('Length(s) = ',Length(s));
if Length(s) mod DIGS = 0 then
x.l := Length(s) div DIGS
else
x.l := Length(s) div DIGS + 1;
j := Length(s); (* pozycja w lancuchu s *)
for i := 0 to x.l - 1 do
begin
(* ustalamy i-ta cyfre *)
x.t[i] := 0;
for k := j - DIGS + 1 to j do
begin
if k > 0 then
begin
x.t[i] := 10 * x.t[i] + (Ord(s[k]) - Ord('0'));
end;
end;
j := j - DIGS;
end;
end;
var
cos:liczba;
begin
czytaj(cos);
wypisz(cos);
writeln();
end.
Prosze o wytlumaczenie