smilrena
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Здраствуйте! Очень нужна ваша помощч... Надо написать программу которая суммирует и умножает большие числа, а потом их сравнивает. Числа читает с фаила и в фаил вписывает ответы. я долго с етим мучалась, сумму сделала и умножение тоже, но есть неполадки. Пожалуйста помогите мне с етим, исправте или перепишите... (либо можно написать другую програму, но тоже с большими числами). Моя програма пониже (надеюсь догадаетесь что где) : program suma; type Tmas=array[1..1000000] of char; Tmas2=array[1..1000000] of integer; Tmas3=array[1..1000, -1000..1000] of integer; Tmas4=array[-1000..1000] of integer; {*********************************************} procedure suma(var SUM : Tmas2; Mas1, Mas2 : Tmas; m, n : integer); var k, l, atminty : integer; begin k:=m-n; l:=m; atminty:=0; for m:=l downto k+1 do SUM[m]:=ord(Mas1[m])-48+ord(Mas2[m-k])-48; for m:=k downto 1 do SUM[m]:=ord(Mas1[m])-48; for m:=l downto 2 do begin SUM[m]:=SUM[m]+atminty; atminty:=SUM[m] div 10; SUM[m]:=SUM[m] mod 10; end; SUM[1]:=SUM[1]+atminty; end; {***************************************************} procedure daugyba(i, j: integer; AA, BB : Tmas; var N : Tmas4; var h : integer); var i2, j2, js, s, atminty : integer; M : Tmas3; begin i2:=i; j2:=j; s:=-1; {i<j} for i:=i2 downto 1 do begin inc(s); for j:=j2 downto 1 do begin js:=j-s; M[i, js]:=(ord(AA[i])-48)*(ord(BB[j])-48); end; end; h:=1-s; for i:=i2 downto 1 do for j:=j2 downto h do N[j]:=N[j]+M[i, j]; for j:=j2 downto h do begin N[j]:=N[j]+atminty; atminty:=N[j]div 10; N[j]:=N[j]mod 10; end; end; var A, B : Tmas; C : Tmas2; D : Tmas4; i, j, k, kk : integer; trp : char; f1 : file of char; input : string[30]; begin writeln('Iveskite takeli: '); readln(input); assign(f1, input); reset(f1); i:=1; j:=1; trp:=' '; read(f1, A[i]); while A[i]<> trp do begin i:=i+1; read(f1, A[i]); end; i:=i-1; read(f1, B[j]); while B[j]<> trp do begin j:=j+1; read(f1, B[j]); end; j:=j-1; if i>=j then begin suma(C, A, B, i, j); for k:=1 to i do write(C[k]); end; if i<j then begin suma(C, B, A, j, i); for k:=1 to j do write(C[k]); end; writeln; if i<=j then begin daugyba(i, j, A, B, D, k); for kk:=k to j do write(D[kk]); end; if i>j then begin daugyba(j, i, B, A, D, k); for kk:=k to i do write(D[kk]); end; close(f1); readln; end. |