Итерационный факториал в Алголе 68

Я полагаю, изменить код ниже, чтобы сделать факториал. Кто-нибудь может мне помочь с этим? Это Фибоначчи.

PROC print fibo = (INT n) VOID:
  BEGIN
     INT a:= 0, b = 1;
     FOR i FROM 1 TO n DO
        print((whole(i,0), "==>", whole(b,0), new line));
        INT c = a + b;
        a := b;
        b := c

     OD
 END;

  INT k = 40;
  print("Compute Factorial");
  print((whole(k,0), new line));
  print fact(k)

1 ответ

Фибоначчи на самом деле сложнее, чем факториал, просто потому, что вы должны помнить два предыдущих термина, чтобы получить следующий термин.

Однако суть та же. С помощью factorial вы просто умножаете все числа от 1 до аргумента, например, в следующем псевдокоде:

fact = 1
for i = 1 to argument:
    fact = fact * i

Вот и все. Теперь вам просто нужно превратить это в Algol, и, возможно, где-нибудь рассмотреть курс, где они используютнемного более современные языки:-) Хотя я должен любить язык, который использует bash-стильif/ficase/esacметоды для их do петли (do/od). Я хотел бы следующий bash итерация, чтобы использовать это, а не противоречивыеdo/done,


Спойлеры ниже!Если это курсовая работа, не читайте, пока не попробуете предложения выше.


Я призываю вас попробовать это самостоятельно, так как это сделает вас лучшим программистом и (при условии, что это курсовая работа) уменьшит вероятность того, что вы будете наказаны за плагиат.

Однако, чтобы завершить этот ответ, это будет моя первая попытка (помните, что на самом деле у меня нет компилятора Algol-68, поэтому может потребоваться некоторая отладка):

PROC facto = (INT n) INT:
  BEGIN
     INT a := 1;
     FOR i FROM 1 TO n DO
        a := a * i;
     OD
 END;

Я изменил тип возврата с void в int и надеюсь, что я правильно помню, что возвращаемое значение автоматически принимается из последнего вычисленного выражения.

Другие вопросы по тегам