Здесь есть две проблемы.
Первая вызвана (подразумеваемым) оператором GOTO в строке 2075. (По словам Эдсгера Дейкстры, операторы GOTO считаются вредными . ) В цикле FOR строки 2080-2089 и 2100-2109 поочередно выполняются на каждой нечетной и четной итерации. Поскольку цикл выполняется нечетное число раз (25, если быть точным), он завершится, когда достигнет оператора NEXT I в строке 2090. После этого программа провалится в строки 2100-2109, а затем потерпит неудачу в строке2110, когда он встречает оператор NEXT, когда цикл FOR не активен.
Лучшим подходом было бы использование структуры IF ... THEN ... ELSE для управления потоком внутри цикла FOR или просто длявключить значение M в расчет, например, инициализируя M в 4 в строке 2040, заменяя 4 на M в строке 2080 и заменяя строку 2085 на M = -M. Этот подход также имеет то преимущество, что вычисление числа «пи» происходит только в одной строке вместо двух.
Другая проблема заключается в том, что ваша программа выдает неправильный ответ! Похоже, вы вычисляете число Пи, используя бесконечный ряд, обнаруженный Нилаканта Сомаяджи , который выглядит следующим образом:
4 4 4
pi = 3 + ----- - ----- + ----- - ...
2.3.4 4.5.6 6.7.8
Но в вашей программе вы неправильно вычисляете знаменатели как1.3.4, 3.5.6, 5.7.8 и т. Д. Вот рекомендуемое переписывание, которое даст вам лучший результат:
1000 LET M = 4
1010 LET P = 3
1020 FOR I = 1 TO 50 STEP 2
1030 P = P + M / ((I+1)*(I+2)*(I+3))
1040 M = -M
1050 PRINT P
1060 NEXT I