IPB

Здравствуйте, гость ( Вход | Регистрация )

> Паскаль
DriftKing
сообщение 11.12.2007, 21:45
Сообщение #1


Маленький Принц
Иконка группы

Группа: Почетный форумчанин
Сообщений: 2279
Регистрация: 5.1.2007
Вставить ник
Цитата
Из: Украина, Киев
Пользователь №: 3475
Страна:
Пол:



Люди, я туплю страшно. Помогите :?
Вообщем задача: Умножить два длинных числа (длинная арифметика).
Дано: Два файла: : 1я строка- длинна 1го числа;2я строка- длинная 2го числа; 3я строка- 1е число; 4я строка- 2е число.
: в нем результат умножения.
Числа заносятся в массивы. перемножаются, и со сдвигом записываются в двумерный массив. Числа с двумерного массива сумируются, и результат заносится в обычный массив. (Вообщем как в столбик, через массивы).

Воть, если что несовсем понятно - спрашивайте. А процедурка нужна поскорее. Ибо последнюю лабу могу завалить :?: :idea:
ЗЫ в инэте смотрел, то что нужно не нашел.


--------------------
Бу!

партбилет №023
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
DriftKing
сообщение 13.12.2007, 1:11
Сообщение #2


Маленький Принц
Иконка группы

Группа: Почетный форумчанин
Сообщений: 2279
Регистрация: 5.1.2007
Вставить ник
Цитата
Из: Украина, Киев
Пользователь №: 3475
Страна:
Пол:



Етерналко, может и оптимальнее, в паскаль не вставлял, ибо ты юзаешь сдесь динамический массив, а они появляются только в делфи, т.е. в паскале тебе выдаст ошибку smile.gif
Нужно указывать от 1 .. и до какого-то определенного числа. (кстати я пробывал считать в программе число в переменную, потом вызвать процедуру, и сделать массив 1..та переменная. Всеравно не вышло, хотя переменную я считал раньше нежели определил массив, и значение так же передал в процедуру, т.е. в делфи/Си все было бы Окей.

Негетив, Я написал процедуру умножения. Только трабл такой получается. Считает оно все правильно, но только если массивы до 10. Т.е. мое "длинное" число максимум из 10 цыфр. Если больше 10 и где-то до 250 - просто виснет (долго очень думает, я так и не дождался результат. Если же больше 250 - даже не компилируется, сразу кидает ошибку, что мало памяти. А все (на сколько я понимаю) из-за двумерного массива.

Вот мои две процедуры:
Это рандом, который по заданому n генерирует число из n цыфр:


Procedure rndm(n1, n2: integer);

var i,temp: integer;

    f: text;

begin

     randomize;

     assign(f, 'c:\in.txt');

     rewrite(f);

     writeln(f, n1);

     writeln(f, n2);

     temp:= 0;

     while temp = 0 do

           temp:= random(9);

     write(f, temp,' ');

     for i:= 2 to n1 do

          write(f, random(9),' ');

     writeln(f);

     temp:= 0;

     while temp = 0 do

           temp:= random(9);

     write(f, temp,' ');

     for i:= 2 to n2 do

         write(f, random(9),' ');

     close(f);

end;

И вторая, это уже само умножение:


Procedure umnoj;

var f,g: text;

    i,j,k,l,x,y,p,s: integer;

    a,a1,b,b1: array [1..max] of byte;

    c: array [1..max,1..max] of byte;

    go_on: boolean;

begin

     assign(f, 'c:\in.txt');

     assign(g, 'c:\out.txt');

     reset(f);

     rewrite(g);

     for k:= 1 to max do

     begin

          a[k]:= 0;

          a1[k]:= 0;

          b[k]:= 0;

          b1[k]:= 0;

     end;

     for k:= 1 to max do

         for l:= 1 to max do

             c[k,l]:= 0;

     readln(f, i);

     readln(f, j);

     for k:= 1 to i do

         read(f, a1[k]);

     for k:= 1 to j do

         read(f, b1[k]);

     for k:= 1 to max do

     begin

         a[max-i+k]:= a1[k];

         a1[k]:= 0;

     end;

     for k:= 1 to max do

     begin

         b[max-j+k]:= b1[k];

         b1[k]:= 0;

     end;

     p:= 0;

     s:= 0;

     for l:= max downto 1 do

     begin

          for k:= max downto 1 do

              begin

                   p:= a[k]*b[l]+p;

                   c[k-s,max-l+1]:= p mod 10;

                   p:= p div 10;

              end;

          inc(s);

     end;

     for l:= max downto 1 do

     begin

          a1[l]:= 0;

          for k:= 1 to max do

              a1[l]:= a1[l]+c[l,k];

     end;

     go_on:= true;

     l:= max;

     p:= 0;

     while go_on do

     begin

          a1[l]:= a1[l]+p;

          p:= a1[l] div 10;

          a1[l]:= a1[l] mod 10;

          dec(l);

          go_on:= not ((p=0) and (a1[l]=0));

     end;

     for l:= 1 to max do

         write(g, a1[l]);

     close(f);

     close(g);

end;


главная программа:


var n1,n2: integer;

begin

     write('Vvedite dlinnu 1 chisla: ');

     readln(n1);

     write('Vvedite dlinnu 2 chisla: ');

     readln(n2);

     rndm(n1, n2);

     umnoj;

end;


Не пойму что может быть не так :?


--------------------
Бу!

партбилет №023
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- DriftKing   Паскаль   11.12.2007, 21:45
- - Седрик   Re: Паскаль   11.12.2007, 23:57
- - DriftKing   Я бы с радостью, так у меня времени до пятницы У...   12.12.2007, 0:17
- - DriftKing   Код написал, проимитировал на бумаге, работает. А ...   12.12.2007, 0:18
- - Eternalko   Не знаю на каком это языке Экспромт //0.КОД...   12.12.2007, 3:20
- - Bordosten   Дрифт отключай пенис и включай мозг   12.12.2007, 10:33
- - FalseNegative   А в чём трабл-то? Суммирование само по себе просто...   12.12.2007, 12:21
- - FalseNegative   или вам ещё перенос нужен? т.е. 19 19 -- 38 а не 1...   12.12.2007, 12:38
- - DriftKing   Всем большое пасибо Особенно тебе, Негетив. Мне с...   12.12.2007, 19:24
- - DriftKing   (FalseNegative)или вам ещё перенос нужен? т.е. 19 ...   12.12.2007, 19:57
- - FalseNegative   Esli u tebja mladshie razrjady v starshih elementa...   12.12.2007, 21:51
- - Eternalko   А может так оптимальней будет.... program arrays...   12.12.2007, 23:54
- - Eternalko   А... И еще все переменные должны быть по нулям В н...   12.12.2007, 23:56
- - DriftKing   Етерналко, может и оптимальнее, в паскаль не встав...   13.12.2007, 1:11
- - DriftKing   Еще забыл, const max=10; // это максимальная длинн...   13.12.2007, 1:13
- - Eternalko   Ну так не надо динамического сделай статический   13.12.2007, 1:37
- - Седрик   (eternalko)Не знаю на каком это языке Экспромт ...   13.12.2007, 2:47
- - FalseNegative   (eternalko)А... И еще все переменные должны быть п...   13.12.2007, 11:49
- - Eternalko   А с этим кодом что? (eternalko) program arraysum;...   13.12.2007, 13:45
- - DriftKing   FalseNegative, да при го_он 1=0 тоже все работает....   13.12.2007, 15:23
- - DriftKing   Да...этот фор - это я прижимаю число к правому кра...   13.12.2007, 15:25
- - Onami   Я так понимаю, у вас до сих пор траблы? Вот Кнут з...   13.12.2007, 15:55
- - DriftKing   Яву? Где сдесь была ява? или я не в теме?   13.12.2007, 16:01
- - Onami   Яву? Убило Валялсо ЯВУ - Язык Высокого Уровн...   13.12.2007, 16:20
- - FalseNegative   (DriftKing)FalseNegative, да при го_он 1=0 тоже вс...   13.12.2007, 16:50
- - FalseNegative   (Onami)А Java - это от лукавого. :shock: А я ей е...   13.12.2007, 16:51
- - DriftKing   Вотч ставил. Ничего подозрительного не видел. Заци...   13.12.2007, 22:04
- - Eternalko   Проверьте мой код Мне интересно, работает иль нет   13.12.2007, 23:53
- - DriftKing   А ты его с головы писал? Я не пойму, колсум это чт...   14.12.2007, 17:18
- - Eternalko   (DriftKing)А ты его с головы писал? Я не пойму, ко...   14.12.2007, 21:21


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия   Архив форума Сейчас: 27.7.2025, 11:46
youtube-канал об отношениях Rambler's Top100