Показано с 1 по 8 из 8

Тема: Макрос для вычисления факториала на ПР 200

  1. #1

    По умолчанию Макрос для вычисления факториала на ПР 200

    Факториал — это произведение всех натуральных чисел от 1 до данного числа. Например, факториал числа 5 будет равен 1 × 2 × 3 × 4 × 5 = 120
    Его используют во многих областях науки — например, комбинаторике, теории вероятностей и математическом анализе



    Доброго времени суток и счастливых наступающих выходных дней.
    Понятно ,что на ПР 200 никто не станет вычислять процент вероятности высадки человека на Марс. и всё-таки...
    Может есть у кого макрос для вычисления факториала...Вроде бы не так и сложно,но...
    0!=1 и 1! тоже =1
    Скорее всего,что этим никто и не занимался..так ,что специально написал в "Курилке"-ибо вопрос ни к чему не обязывает.

  2. #2
    Пользователь Аватар для Сема
    Регистрация
    17.12.2011
    Адрес
    Армавир
    Сообщений
    572

    По умолчанию

    А для какой задачи вам надо это? Просто из любопытства, Факториалы это во всяких трейд-роботах имеет смысл считать, для анализа фин. рынка.

  3. #3

    По умолчанию

    Чисто для демонстрации возможности языка ST?!

    Код:
    function fact: udint; //имя функции и тип данных выхода
        var_input //объявление входных переменных
            inVal : udint; //входная переменная с типом данных udint
        end_var
        
        var //объявление локальных переменных
            val : udint; //локальная переменная с типом данных udint
        end_var
        
        fact := 1;
        
        for val := 1 to inVal do
            fact := fact * val;
        end_for
        
    end_function

  4. #4

    По умолчанию

    А до которого знака требуется рассчитать-то?

    Owen10.jpg

    Код:
    function fact: udint; //имя функции и тип данных выхода
        var_input //объявление входных переменных
            inVal : udint;
            index : udint;
        end_var
        
        var //объявление локальных переменных
            val : udint;
            fact1 : udint := 1;
            fact2 : udint := 0;
            fact3 : udint := 0;
            fact4 : udint := 0;
            fact5 : udint := 0;
            fact6 : udint := 0;
            fact7 : udint := 0;
            fact8 : udint := 0;
            delta : udint;
        end_var
        
        for val := 1 to inVal do
            fact1 := fact1 * val;
            fact2 := fact2 * val;
            fact3 := fact3 * val;
            fact4 := fact4 * val;
            fact5 := fact5 * val;
            fact6 := fact6 * val;
            fact7 := fact7 * val;
            fact8 := fact8 * val;
            
            delta := fact1 / 1000000;
            fact1 := fact1 - (delta * 1000000);
            fact2 := fact2 + delta;
            
            delta := fact2 / 1000000;
            fact2 := fact2 - (delta * 1000000);
            fact3 := fact3 + delta;
    
            delta := fact3 / 1000000;
            fact3 := fact3 - (delta * 1000000);
            fact4 := fact4 + delta;
    
            delta := fact4 / 1000000;
            fact4 := fact4 - (delta * 1000000);
            fact5 := fact5 + delta;
    
            delta := fact5 / 1000000;
            fact5 := fact5 - (delta * 1000000);
            fact6 := fact6 + delta;
    
            delta := fact6 / 1000000;
            fact6 := fact6 - (delta * 1000000);
            fact7 := fact7 + delta;
    
            delta := fact7 / 1000000;
            fact7 := fact7 - (delta * 1000000);
            fact8 := fact8 + delta;
    
        end_for
     
        case index of
            0: fact := fact1;
            1: fact := fact2;
            2: fact := fact3;
            3: fact := fact4;
            4: fact := fact5;
            5: fact := fact6;
            6: fact := fact7;
            7: fact := fact8;
        end_case    
     
    end_function

  5. #5

    По умолчанию

    https://disk.yandex.ru/d/v0FARa90p5Ay9Q

    Прошу прощения. Тема действительно для меня не так и важна. Создана тема была от впечатления вычисления логарифма( которое мне любезно предоставили на форуме) А используя те "математические ФБ",которые есть в ОЛ для создания вычислений ...Хоть не очень скоро ,но удалось создать формулу Стирлинга.
    Дальнейшее обсуждение прошу продолжать только в том случае ,если это обсуждение приносит вам удовольствие.

  6. #6
    Пользователь Аватар для Сема
    Регистрация
    17.12.2011
    Адрес
    Армавир
    Сообщений
    572

    По умолчанию

    Вы что, паровой движок что ли разрабатываете?

  7. #7

    По умолчанию

    Не то и не другое...
    Просто я не перестаю удивляться многообразию тех возможностей ,которые можно выполнить на программируемом реле.

  8. #8
    Пользователь Аватар для Сергей0308
    Регистрация
    25.06.2011
    Адрес
    Галактика Андромеды (M31)
    Сообщений
    8,246

    По умолчанию

    Сразу это на ум приходит:

    https://images.rambler.ru/search?que...4018f810f222cc

    У меня имеется макрос очереди с возможностью её просмотра на всю глубину, в смысле, мне кажется это порядка на два(как минимум) сложнее:

    https://owen.ru/forum/showthread.php?t=36452&page=3

    Очередь_8Х8_11.owle

    А, с факториалом всё очень печально, в смысле, мы даже количество комбинаций в популярной лотерее "5 из 36" вычислить не сможем, не хватит диапазона значений типа данных, в смысле, надо факториал 36(3,7199332678990121746799944815084e+41) разделить на факториал 31.
    Хотя комбинаций как говорят, кот наплакал, всего: 45239040
    На калькуляторе МК35 получалось максимум вычислить факториал 69, иначе получалось целое значение состоящее больше чем из 100 знаков, в смысле, на индикаторе не помещалось!
    Последний раз редактировалось Сергей0308; 12.09.2023 в 01:21.
    Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
    справиться с проблемами, либо это не твои проблемы.

Похожие темы

  1. MasterScada 3.9 вычисления с датой
    от oleg1821 в разделе Master SCADA 3
    Ответов: 4
    Последнее сообщение: 03.10.2019, 09:16
  2. Ответов: 3
    Последнее сообщение: 21.04.2017, 17:12
  3. Ответов: 2
    Последнее сообщение: 26.08.2014, 09:50
  4. Макрос
    от CEkip в разделе Программируемые реле
    Ответов: 11
    Последнее сообщение: 13.04.2012, 21:54
  5. формула вычисления влажности
    от Turboblock в разделе Трёп (Курилка)
    Ответов: 3
    Последнее сообщение: 25.04.2009, 01:43

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •