![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() ![]() |
![]() |
priboltik |
![]()
Сообщение
#1
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 58 Пол: Мужской Реальное имя: Константин Репутация: ![]() ![]() ![]() |
заранее прошу прощения, если создал тему не по разделу.. но все-таки.. вот процедура, с пом. которой я умножаю 2 длинных числа... она работает но не правильно... подскажите пожалуйста, где у меня ошибка..
отдельно каждое действие из этой процедуры(умножение на число, умножение на степень 10) работает..а вместе никак.. код: Код procedure TForm1.Button11Click(Sender: TObject); var k,j,n,l,i:integer; rezyltat,chislo1,chislo2:string; massiv1,massiv2,massiv3,massiv4:array[1..100] of integer; max,dlina1,dlina2,ostatok:integer; begin chislo1:=edit2.text; chislo2:=edit3.Text; ostatok:=0; dlina1:=length(chislo1); dlina2:=length(chislo2); max:=dlina1+dlina2; for i:=1 to max do massiv1[i]:=0; for i:=1 to max do massiv2[i]:=0; for i:=1 to max do massiv3[i]:=0; for i:=1 to max do massiv4[i]:=0; for i:=dlina1 downto 1 do massiv1[max-dlina1+i]:=strtoint(chislo1[i]); for i:=dlina2 downto 1 do massiv2[max-dlina2+i]:=strtoint(chislo2[i]); for i:=max downto max-dlina1 do begin for j:=max downto 1 do begin massiv3[j]:=(massiv1[j]*massiv2[i]+ostatok) mod 10; ostatok:=(massiv1[j]*massiv2[i]+ostatok) div 10; end; for j:=1 to i-1 do begin ostatok:=massiv3[1]; for k:=1 to max-1 do massiv3[k]:=massiv3[k+1]; massiv3[max]:=ostatok; end; for l:=max downto 1 do begin massiv4[l]:=(massiv4[l]+massiv3[l]+ostatok) mod 10; ostatok:=(massiv4[l]+massiv3[l]+ostatok) div 10; end; end; for i:=1 to max do insert(inttostr(massiv4[i]),rezyltat,i); if rezyltat[1]='0' then delete(rezyltat,1,1); label5.Caption:=rezyltat; end; Сообщение отредактировано: volvo - 11.10.2006 19:16 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Ты ошибся в 2-х местах (пока, по крайней мере, я нашел только это - с записанными значениями работает правильно...):
procedure TForm1.Button11Click(Sender: TObject);Во втором месте ошибка заключалась в том, что ostatok рассчитывался уже с НОВЫМ значением massiv4[L], а нужно использовать еще старое. Для этого я ввел дополнительную переменную T... |
priboltik |
![]()
Сообщение
#3
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 58 Пол: Мужской Реальное имя: Константин Репутация: ![]() ![]() ![]() |
а почему сдвиг так реализуется.. ведь в первый раз нам вообще не нужно сдвигать.. а затем.. по количеству цифр во втором числе??.. или я гоню???????
![]() |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
for j:=1 to (max-i) do beginпри первой итерации по i (i = max) сколько раз будет выполняться? Ты запускал программу? Она работает? |
priboltik |
![]()
Сообщение
#5
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 58 Пол: Мужской Реальное имя: Константин Репутация: ![]() ![]() ![]() |
да..прога работает.. спасибо..
но я вот только не догоняю...ведь когда мы умножаем 1-ое число на последнюю цифру второго, нам же вообще не надо передвигать.. ведь так???? а мы передвигаем на длину второго числа.. ![]() |
volvo |
![]()
Сообщение
#6
|
Гость ![]() |
Вопрос насчет цикла For мне еще раз повторить, или ты все-таки посмотришь САМ, чему на первой итерации равен I, и сколько раз будет выполняться цикл сдвига?
|
priboltik |
![]()
Сообщение
#7
|
![]() Пионер ![]() ![]() Группа: Пользователи Сообщений: 58 Пол: Мужской Реальное имя: Константин Репутация: ![]() ![]() ![]() |
все.. я прошу прощения.. я просто загнался. главный цикл ведь начинается с i:=max
тогда все правильно.. прошу прощения за тупизм.. респект и уважуха.. еще раз спасиба.. ![]() |
![]() ![]() |
![]() |
Текстовая версия | 14.07.2025 11:20 |