|
|
sample042.PAS |
|
{* Умножение длинных натуральных десятичных чисел *}Unit SAMPLE042;Interface Implementation Begin writeln('Умножение длинных натуральных десятичных чисел'); End. Program pas; Uses sample042.pas; {* Эту строку можно удалить *} { арифметические алгоритмы: умножение длинных натуральных десятичных чисел } { Введенное число помещается поразрядно в массив ROW. } { Могут умножаться числа до 10000 разрядов } { ------------------------------------------------------------------------ } {$A + , B - , D + , E + , F - , G + , I + , L + , N + , O - , P - , Q - , R - , S + , T - , V + , X + , Y + } {$M 16384, 0, 655360} Uses crt; {* Подключение модулей *} Var { -------- use calc factorial --------- } row : Array[1..20000] Of byte; col : Array[1..10000] Of byte; nr : integer; nc : integer; dp : integer; c : char; Procedure PrintResult; Begin write('Р е з у л ь т а т = '); While (dp0) Do Begin i := cr; j := cc; sum := carry; While (i = 1) Do Begin sum := sum + row[i] * col[j]; inc(i); {* Прибавим к i единицу *} dec(j); {* Вычтем из j единицу *} End; row[dp] := sum Mod 10; dec(dp); {* dp-- *} carry := sum Div 10; If cr > 1 Then dec(cr) {* cr-- *} Else dec(cc); {* Уменьшаем cc на 1 *} End; While (carry0) Do Begin row[dp] := carry Mod 10; carry := carry Div 10; dec(dp); {* Вычтем из dp единицу *} End; inc(dp); {* Увеличиваем dp на 1 *} End; Begin fillchar(row, sizeof(row), 0); fillchar(col, sizeof(col), 0); {поразрядный ввод 1 - го числа} writeln('введите 1 - е число число:'); c := #0; While Not(c In ['0'..'9']) Do c := readkey; {* Ждем нажатия пользователя *} nr := 0; While (c In ['0'..'9']) Do Begin write(c); inc(nr); {* Увеличиваем nr на 1 *} row[nr] := ord(c) - ord('0'); c := readkey; {* Нажмите любую клавишу *} End; writeln; {поразрядный ввод 2 - го числа} writeln('введите 2 - е число число:'); While Not(c In ['0'..'9']) Do c := readkey; {* Ждем нажатия пользователя *} nc := 0; While (c In ['0'..'9']) Do Begin write(c); inc(nc); {* Прибавим к nc единицу *} col[nc] := ord(c) - ord('0'); c := readkey; {* Нажмите любую клавишу *} End; writeln; {выхов процедуры умножения, затем - вызов процедуры вывода результата} Multiplying; PrintResult; End. 07.08.2014 - Breakpoint - точка остановки 07.08.2014 - Топ-10 самых популярных приложений в Facebook 18.11.2013 - Панель управления и персонализация системы. Windows Vista 18.11.2013 - Логические и физические диски. Windows Vista 18.11.2013 - Удаление файлов и папок 01.11.2013 - Программирование дисковых подсистем: возможности 31.10.2013 - Windows8 или Windows7? 31.10.2013 - Windows8, игры |
|
Non-commercial fansite
|