Re[4]: Язык программирования ПРОФТ
От: Федор Тюленев http://pobedit.com/rus/
Дата: 13.04.08 18:59
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Здравствуйте, Федор Тюленев, Вы писали:


ФТ>>В общем мне сказать больше нечего. Если будут конкретные вопросы выраженные без заиканий (уё..., го... и т.д.), то постараюсь на них ответить.

WH>А что я делаю не так?

Пытаетесь написать глубокий рекурсивный алгоритм на языке в котором рекурсия в принципе запрещена и в справке вы о ней ни слова не найдете. Если Вы обратили внимание, факториал вычислялся тоже без рекурсии. Учитывая что в ПРОФТе нет даже безусловного перехода (так это называлось на МК-61 ), то рекурсия — не самая страшная потеря.
Любое упоминание имени действия внутри него считается переменной содержащей значение функции. Чтобы оно не было переменной нужно обращаться через модуль.
Кстати говоря, если будете дальше меня пытать на медленном огне, параметры пишутся через ;, а десятичная дробь — запятая.

Но если очень-очень хочется, то через одно место сделать конечно можно. И только до пары (3;3) потому что дальше программа валится из-за переполнения стека (вложенность>128).

Файл start.v:
Действие Начало(). 
    Аккерманн Это Модуль(МойКаталог & "A.v").
    м = Ввести("Введите m:"; "").
    н = Ввести("Введите n:"; "").
    сбщ(Аккерманн:Функция(м; н)).
    Конец.
КонецДействия.


Файл A.v:
Действие Функция(м; н).
  Аккерманн Это Модуль(МойКаталог & "A.v").
  Если м = 0.
    Функция = н + 1.
  Иначе.
      Если н = 0.
        Функция = Аккерманн:Функция(м - 1; 1).
      Иначе.
        Функция = Аккерманн:Функция(м - 1; Аккерманн:Функция(м; н - 1)).
      КонецЕсли.
   КонецЕсли.
КонецДействия.


В общем, А(3;2) = 29 он еще показывает, а дальше ту-ту.
Ну а на таких малых числах о скорости говорить не приходится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.