Консультация № 175427
19.12.2009, 14:16
0.00 руб.
0 2 1
Произведение двух заданных натуральных чисел больше максимально допустимого значения(не вмещается в разрядную сетку машины). Найти это произведение.
Мне нужно написать эту в модуле Делфи.
На форме два эдита, куда вводятся числа, один баттон и эдит, куда выводится полученное произведение. Не понимаю, почему произведение неверно. Подскажите, пожалуйста, что делать:


Приложение:
const
N = 10;
type
Cifra = 0..9;
TM1 = array[1..N] of Cifra;
TP = array[1..2*N] of Cifra;

var
Dano1, Dano2: longint; // Исходные натуральные числа
M1, M2: TM1; // Они же, преобразованные в массивы
P: TP; // Результат
i, j: 1..N;
k: 1..2*N;
Mas: array[1..N, 1..2*N] of Cifra; // Массив "столбика"
Perenos, S: integer;
begin
Edit4.Text:='';
Dano1:=StrToInt(Edit2.Text);
Dano2:=StrToInt(Edit3.Text);


For i:= 1 to N do begin
M1[i]:= Dano1 mod 10;
Dano1:= Trunc(Dano1/10);
end;

For i:= 1 to N do begin
M2[i]:= Dano2 mod 10;
Dano2:= Trunc(Dano2/10);
end;

For i:=1 to N do begin
For j:=1 to N do begin
Mas[i,j]:=0;
end;
end;

For i:=1 to N do begin
Perenos:=0;
For j:=1 to N do begin
Mas[i,j+(i-1)]:= (M1[j] * M2[i] + Perenos) mod 10;
Perenos:= (M1[j] * M2[i] + Perenos) div 10;
end;
end;

S:=0;
For k:=1 to 2*N do begin
For i:=1 to N do begin
S:=S+Mas[i,k];
end;
P[k]:= S mod 10;
S:= S div 10;
end;

For k:=1 to 2*N do
begin
Edit4.Text:=Edit4.Text+IntToStr(P[2*N-k+1]);
end;

end;
end.

Обсуждение

Неизвестный
19.12.2009, 17:11
общий
Там дальше написана прграмма!
Неизвестный
19.12.2009, 22:22
общий
это ответ
Здравствуйте, Уразбаева Элина .
Немного подправил ваш код в части умножения в столбик. С удивлением узнал, что функция StrToInt не преобразует строки в числа если число больше maxint, поэтому преобразование тоже изменено.

Приложение:
Edit4.Text:='';
//Обнуляем массивы M1, M2, Mas
FillChar(M1,SizeOf(M1),0);
FillChar(M2,SizeOf(M2),0);
FillChar(Mas,SizeOf(Mas),0);
Edit2.Text:=Trim(Edit2.Text);
Edit3.Text:=Trim(Edit3.Text);
L1:=Length(Edit2.Text);
L2:=Length(Edit3.Text);

For i:= 1 to L1 do
begin
M1[L1-i+1]:= StrToInt(Edit2.Text[i]);
end;

For i:= 1 to L2 do
begin
M2[L2-i+1]:= StrToInt(Edit3.Text[i]);
end;

For i:=1 to N do
begin
For j:=1 to N do
begin
Mas[i,j+(i-1)]:= (M1[j] * M2[i]+Mas[i,j+(i-1)]) mod 10;
Mas[i,i+j]:= (M1[j] * M2[i]) div 10;
end;
end;

S:=0;
For k:=1 to 2*N do
begin
For i:=1 to N do
begin
S:=S+Mas[i,k];
end;
P[k]:= S mod 10;
S:= S div 10;
end;

For k:=1 to 2*N do
begin
Edit4.Text:=Edit4.Text+IntToStr(P[2*N-k+1]);
end;
end;

end.
Форма ответа