Срешением . язык программирования pascal. своими цифрами в массивах к(m) и l(n) заданы два целых числа в р-ичной системе счисления (р< 10). найти в таком же виде их сумму, не вычисляя самих чисел.
//Код, уродливый как кхм //Pascal ABC.NET 3.1 сборка 1219
Const n=1; m=2;
Var ar1:array[1..m] of integer; ar2:array[1..n] of integer; arr:array[1..n+m] of integer; i,p,raz,ost,isec:integer; begin write('Введите основание СС:'); readln(p); writeln('Введите число 1:'); for i:=1 to m do readln(ar1[i]); writeln('Введите число 2:'); for i:=1 to n do readln(ar2[i]); if n>m then begin i:=n; isec:=m; while (i<>0) and (isec<>0) do begin if ar2[i]+ar1[isec]>=p then begin ost:=(ar2[i]+ar1[isec]) div p; arr[i]:=(ar2[i]+ar1[isec]) mod p; end else begin arr[i]:=ar2[i]+ar1[isec]+ost; ost:=0; end; dec(i); dec(isec); inc(raz); end; arr[i]:=ost; ost:=i; for i:=1 to ost do begin arr[i]:=arr[i]+ar2[i]; inc(raz); end; while arr[1]>=p do begin ost:=arr[1] div p; arr[1]:=arr[1] mod p; for i:=raz downto 1 do arr[i+1]:=arr[i]; arr[1]:=ost; inc(raz); end; end else begin i:=m; isec:=n; while (i<>0) and (isec<>0) do begin if ar1[i]+ar2[isec]>=p then begin ost:=(ar1[i]+ar2[isec]) div p; arr[i]:=(ar1[i]+ar2[isec]) mod p; end else begin arr[i]:=ar1[i]+ar2[isec]+ost; ost:=0; end; dec(i); dec(isec); inc(raz); end; if n<>m then begin arr[i]:=ost; ost:=i; for i:=1 to ost do begin arr[i]:=arr[i]+ar1[i]; inc(raz); end; end else begin for i:=raz downto 1 do arr[i+1]:=arr[i]; arr[1]:=ost; inc(raz); end; while arr[1]>=p do begin ost:=arr[1] div p; arr[1]:=arr[1] mod p; for i:=raz downto 1 do arr[i+1]:=arr[i]; arr[1]:=ost; inc(raz); end; end; writeln('Result:'); for i:=1 to raz do write(arr[i]:4); end. Пример работы программы: Введите основание СС:3 Введите число 1: 2 2 Введите число 2: 1 Result: 1 0 0
//Pascal ABC.NET 3.1 сборка 1219
Const
n=1;
m=2;
Var
ar1:array[1..m] of integer;
ar2:array[1..n] of integer;
arr:array[1..n+m] of integer;
i,p,raz,ost,isec:integer;
begin
write('Введите основание СС:');
readln(p);
writeln('Введите число 1:');
for i:=1 to m do
readln(ar1[i]);
writeln('Введите число 2:');
for i:=1 to n do
readln(ar2[i]);
if n>m then
begin
i:=n;
isec:=m;
while (i<>0) and (isec<>0) do
begin
if ar2[i]+ar1[isec]>=p then
begin
ost:=(ar2[i]+ar1[isec]) div p;
arr[i]:=(ar2[i]+ar1[isec]) mod p;
end
else
begin
arr[i]:=ar2[i]+ar1[isec]+ost;
ost:=0;
end;
dec(i);
dec(isec);
inc(raz);
end;
arr[i]:=ost;
ost:=i;
for i:=1 to ost do
begin
arr[i]:=arr[i]+ar2[i];
inc(raz);
end;
while arr[1]>=p do
begin
ost:=arr[1] div p;
arr[1]:=arr[1] mod p;
for i:=raz downto 1 do
arr[i+1]:=arr[i];
arr[1]:=ost;
inc(raz);
end;
end
else
begin
i:=m;
isec:=n;
while (i<>0) and (isec<>0) do
begin
if ar1[i]+ar2[isec]>=p then
begin
ost:=(ar1[i]+ar2[isec]) div p;
arr[i]:=(ar1[i]+ar2[isec]) mod p;
end
else
begin
arr[i]:=ar1[i]+ar2[isec]+ost;
ost:=0;
end;
dec(i);
dec(isec);
inc(raz);
end;
if n<>m then
begin
arr[i]:=ost;
ost:=i;
for i:=1 to ost do
begin
arr[i]:=arr[i]+ar1[i];
inc(raz);
end;
end
else
begin
for i:=raz downto 1 do
arr[i+1]:=arr[i];
arr[1]:=ost;
inc(raz);
end;
while arr[1]>=p do
begin
ost:=arr[1] div p;
arr[1]:=arr[1] mod p;
for i:=raz downto 1 do
arr[i+1]:=arr[i];
arr[1]:=ost;
inc(raz);
end;
end;
writeln('Result:');
for i:=1 to raz do
write(arr[i]:4);
end.
Пример работы программы:
Введите основание СС:3
Введите число 1:
2
2
Введите число 2:
1
Result:
1 0 0