MOTR logo
    • Категории
    • Последние
    • Популярные
    • Метки
    • Пользователи
    • Группы
    • Зарегистрироваться
    • Войти

    Кто шарит в паскале - Help please.

    Запланировано Прикреплена Закрыта Перенесена Беседка
    21 Сообщения 12 Posters 1.1k Просмотры
    Загружаем больше сообщений
    • Сначала старые
    • Сначала новые
    • По количеству голосов
    Ответить
    • Ответить, создав новую тему
    Авторизуйтесь, чтобы ответить
    Эта тема была удалена. Только пользователи с правом управления темами могут её видеть.
    • МасиМасянМ Не в сети
      МасиМасян Заблокирован
      отредактировано

      Составить программу вычисления n! для любого n в диапазоне от 1 до 70. Обратить внимание, что 70! будет содержать 102 десятичные цифры.

      Готовые библиотеки использовать незя, основной запор программы - то что в integer не влазит 102 символа, надо делать массив [1..102] но как это оформить фиг знает. Батько гугл подсказал токо как решать на словах, но доходит туго - ничерта нипонятно, готовой программы нет((

      1 ответ Последний ответ Ответить Цитировать 0
      • ВпихунВ Не в сети
        Впихун
        отредактировано

        думай, вместо 5 часов манча поюзай мозг)

        1 ответ Последний ответ Ответить Цитировать 0
        • МасиМасянМ Не в сети
          МасиМасян Заблокирован
          отредактировано

          Впихун, я думал, не получаеться чёто.

          1 ответ Последний ответ Ответить Цитировать 0
          • Beyond_DevinityB Не в сети
            Beyond_Devinity
            отредактировано

            Функция:

            [code:2iao4hx4]function blablabla (z : Integer): Integer;
            begin
            if z = 0 Then
            blablabla := 1
            else
            blablabla := z * blablabla(z - 1);
            end;[/code:2iao4hx4]

            Ну и применить можно примерно так:

            [code:2iao4hx4]var a : Integer;
            ...
            writeln('введи число:');
            readln (a);
            If a < 0 Then
            writeln('из негативного числа нельзя')
            Else
            writeln('ответ: ', a, ' = ', blablabla(a));
            ...[/code:2iao4hx4]

            Насчёт integer ещё подумать надо. 🙂 Позже отпишусь, если что найду.

            1 ответ Последний ответ Ответить Цитировать 0
            • F Не в сети
              Funky
              отредактировано

              МасиМасян, <!-- m --><a class="postlink" href="http://www.delphisources.ru/pages/faq/base/factorial.html">http://www.delphisources.ru/pages/faq/b ... orial.html</a><!-- m --> .
              Редактировать не много т_Т

              1 ответ Последний ответ Ответить Цитировать 0
              • МасиМасянМ Не в сети
                МасиМасян Заблокирован
                отредактировано

                @"Beyond_Devinity":
                Функция:

                [code:3c01iny5]function blablabla (z : Integer): Integer;
                begin
                if z = 0 Then
                blablabla := 1
                else
                blablabla := z * blablabla(z - 1);
                end;[/code:3c01iny5]

                Ну и применить можно примерно так:

                [code:3c01iny5]var a : Integer;
                ...
                writeln('введи число:');
                readln (a);
                If a < 0 Then
                writeln('из негативного числа нельзя')
                Else
                writeln('ответ: ', a, ' = ', blablabla(a));
                ...[/code:3c01iny5]

                Насчёт integer ещё подумать надо. 🙂 Позже отпишусь, если что найду.

                Что то похожее я читал интеджер не вмещает количество знаков содержащееся в 70! и вроде 67-69! (могу ошибаться с гранцами) тоже.
                Имено в этом и вся маза задачи.

                1 ответ Последний ответ Ответить Цитировать 0
                • МасиМасянМ Не в сети
                  МасиМасян Заблокирован
                  отредактировано

                  Funky, Это дельфи, я в нем не шарю.

                  ЗЫ. Сори что 2 сообщения подряд, мне система не дает редактировать предыдщее - пишет прав нет О_О (1 раз такой баг, до этого норм редактил))

                  1 ответ Последний ответ Ответить Цитировать 0
                  • Beyond_DevinityB Не в сети
                    Beyond_Devinity
                    отредактировано

                    Попробуй вместо интеджера extended (числа длиной около 4к символов) или double (около 300).

                    1 ответ Последний ответ Ответить Цитировать 0
                    • F Не в сети
                      Funky
                      отредактировано

                      Базовыми знаниями паскаля мне удалось вычислить факториал 32х Т_Т
                      Как дальше реализовать это в паскале не имею ни малейшего представления.

                      1 ответ Последний ответ Ответить Цитировать 0
                      • МасиМасянМ Не в сети
                        МасиМасян Заблокирован
                        отредактировано

                        @"Beyond_Devinity":
                        Попробуй вместо интеджера extended (числа длиной около 4к символов) или double (около 300).

                        В борланд паскале этого нету, а библиотеки незя использовать!

                        1 ответ Последний ответ Ответить Цитировать 0
                        • L Не в сети
                          La chate
                          отредактировано

                          Интересная задача.
                          То, что за 5 мин пришло в голову:
                          Создаём массив из 102 элементов, или скоко там надо.
                          В конец пишем единичку.
                          Умножаем последний элемент (т.е. единичку) на 2 - пока всё нормально. Потом на 3 - тоже всё ок. После умножения на 4 в последнем элементе получается 24.
                          В цикле, который постоянно умножает последний элемент на последовательные числа, нужно куда-нибудь запихнуть проверку, что если последний элемент больше 10, из него вычитается 10, и прибавляется 1 к предпоследнему элементу - и аналогично для всех остальных элементов массива. (естественно эта проверка вызывается в отдельном цикле нужное число раз)
                          В итоге вместо числа 24 в последней ячейке будет в предпоследней число 2, и в последней число 4. Ну и так далее :roll:

                          ЗЫ Боюсь представить, СКОЛЬКО это займёт времени, но т.к вопрос о быстродействии не ставился... 🙂

                          Update: умножать нужно не только последнюю ячейку, а весь массив...

                          1 ответ Последний ответ Ответить Цитировать 0
                          • L Не в сети
                            La chate
                            отредактировано

                            Так как самому приходится паскаль изучать, счас сел и попробовал написать - по своему методу в предыдущем посте

                            Получилось 🙂 (Писалось в турбо паскале, т.к. другого нету)

                            Если хочешь могу исходник дать, но пишется кстати не так уж сложно - наверное, всего около 40 строк

                            1 ответ Последний ответ Ответить Цитировать 0
                            • W Не в сети
                              Willie
                              отредактировано

                              La chate, напиши здесь пожалуйсто!

                              1 ответ Последний ответ Ответить Цитировать 0
                              • СказочникС Не в сети
                                Сказочник
                                отредактировано

                                Cмерть археологам!

                                1 ответ Последний ответ Ответить Цитировать 0
                                • GothicianG Не в сети
                                  Gothician
                                  отредактировано

                                  @"Сказочник":
                                  Cмерть археологам!Не нашлось на него хорошей мумии

                                  1 ответ Последний ответ Ответить Цитировать 0
                                  • MetaphorM Не в сети
                                    Metaphor
                                    отредактировано

                                    М*мии

                                    1 ответ Последний ответ Ответить Цитировать 0
                                    • Развратный Прист.Р Не в сети
                                      Развратный Прист.
                                      отредактировано

                                      @"Metaphor":
                                      М*мии
                                      рофл.

                                      1 ответ Последний ответ Ответить Цитировать 0
                                      • абракадаврА Не в сети
                                        абракадавр
                                        отредактировано

                                        Фу, такая простая задача, а вы бред пишете.

                                        Я тоже бред напишу, зато за 3 минуты и все работает (да, криво, но сейчас лень даже вывод нормальный писать)

                                        [code:2yi2jd5e]program p1;
                                        var
                                        a,b,c : array [1..200] of integer;
                                        b0,i,j,l,b1,b2,k : integer;

                                        begin
                                        readln(b0);
                                        l:=195;
                                        for i:=1 to 200 do begin
                                        a**:=0;**
                                        end;
                                        a[1]:=1;


                                        for i:=2 to b0 do begin
                                        b1:=i mod 10;
                                        b2:=(i-b1) div 10;
                                        writeln(i,b2,b1);


                                        for k:=1 to 200 do begin
                                        b[k]:=0;
                                        c[k]:=0;
                                        end;


                                        for j:=1 to l do begin
                                        *b[j]:=b[j]+a[j]b1;
                                        if b[j]>=10 then begin
                                        b[j+1]:= b[j+1] + (b[j] div 10);
                                        b[j]:=b[j] mod 10
                                        end;


                                        *c[j]:=c[j]+a[j]b2;
                                        if c[j]>=10 then begin
                                        c[j+1]:= c[j+1]+ (c[j] div 10);
                                        c[j]:=c[j] mod 10
                                        end;
                                        end;


                                        a[1]:=b[1];
                                        for j:=2 to l do begin
                                        a[j]:=b[j]+c[j-1];
                                        if a[j]>=10 then begin
                                        a[j+1]:= a[j+1]+ (a[j] div 10);
                                        a[j]:=a[j] mod 10
                                        end;
                                        end;
                                        end;


                                        for i:=1 to 195 do begin
                                        write(a[196-i]);
                                        end;
                                        writeln('');


                                        end.[/code:2yi2jd5e]

                                        1 ответ Последний ответ Ответить Цитировать 0
                                        • DeathspellD Не в сети
                                          Deathspell Заблокирован
                                          отредактировано

                                          вообще то
                                          [j]+c[j-1];
                                          if a[j]>=10 then begin
                                          a[j+1]:= a[j+1]+ (a[j] div 10);
                                          a[j]:=a[j] mod 10
                                          1 to l do begin
                                          b[j]:=b[j]+a[j]*b1;
                                          if b[j]>=10 then begin
                                          b[j+1]:= b[j+1
                                          ]*b2;
                                          if c[j]>=10 then begin
                                          c[j+1]:= c[j+1]+ (c[j] div 10);
                                          c[j]:=c[j] mod 10 ]*b2;
                                          if c[j]>=10 then begin
                                          c[j+1]:= c[j+1]+ (c[j] div 10);
                                          c[j]:=c[j] mod 10 ]*b2;
                                          if c[j]>=10 then begin
                                          c[j+1]:= c[j+1]+ (c[j] div 10);
                                          c[j]:=c[j] mod 10

                                          1 ответ Последний ответ Ответить Цитировать 0
                                          • абракадаврА Не в сети
                                            абракадавр
                                            отредактировано

                                            Deathspell, и какова смысловая нагрузка поста?

                                            p.s. в качестве домашнего задания:
                                            -используйте только один массив, а не три
                                            -храните в ячейке массива больше данных, чем один десятичный разряд числа
                                            -сделайте, чтобы в l хранилась реальная длинна получающегося числа

                                            1 ответ Последний ответ Ответить Цитировать 0
                                            • Первое сообщение
                                              Последнее сообщение