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