Расчет факториалов с использованием QBasic

Я пишу программу, которая вычисляет факториал из 5 чисел и выводит результаты в табличной форме, но я продолжаю получать нули.

Факториальная формула:. п! = n × (n-1)!

Я пытался:

CLS
DIM arr(5) AS INTEGER

FOR x = 1 TO 5
    INPUT "Enter Factors: ", n
NEXT x

f = 1
FOR i = 1 TO arr(n)
    f = f * i
NEXT i

PRINT
PRINT "The factorial of input numbers are:";
PRINT

FOR x = 1 TO n
    PRINT f(x)
NEXT x
END

и я жду:

Numbers    Factorrials
5          120
3          6
6          720
8          40320
4          24

person Safianu Ibrahim Mohammed    schedule 07.05.2019    source источник


Ответы (4)


Ты сделал несколько ошибок

FOR i = 1 TO arr(n)

где определено n, вы также никогда не сохраняли фактические значения в arr

PRINT f(x)

здесь вы берете из массива f, который также не определен в вашем коде

person Lee    schedule 08.05.2019

Возможное решение для вычисления массивов факториалов:

CLS
DIM arr(5) AS INTEGER
DIM ans(5) AS LONG

FOR x = 1 TO 5
    INPUT "Enter Factors: ", arr(x)
    f& = 1
    FOR i = 1 TO arr(x)
        f& = f& * i
    NEXT i
    ans(x) = f&
NEXT x

PRINT
PRINT "The factorial of input numbers are:";
PRINT

PRINT "Numbers", "Factorials"
FOR x = 1 TO 5
    PRINT arr(x), ans(x)
NEXT x
END
person eoredson    schedule 09.05.2019
comment
Теперь это именно ОТВЕТ, спасибо - person Safianu Ibrahim Mohammed; 09.05.2019
comment
Поскольку факториалы очень быстро увеличиваются в размерах, тип long будет переполняться до 0. Решением было бы dim ans () как double и увеличивать f & до f # .. - person eoredson; 10.05.2019

Передо мной нет интерпретатора BASIC, но я думаю, что это то, что вы ищете:

CLS
DIM arr(5) AS INTEGER
DIM ans(5) AS LONG        'You need a separate array to store results in. 

FOR x = 1 TO 5
    INPUT "Enter Factors: ", arr(x)
NEXT x

FOR x = 1 to 5
    f& = 1
    FOR i = 1 TO arr(x)
        f& = f& * i
    NEXT i
    ans(x) = f&
NEXT x

PRINT
PRINT "The factorial of input numbers are:";
PRINT

PRINT "Numbers", "Factorials"
FOR x = 1 TO 5
    PRINT STR$(arr(x)), ans(x)
NEXT x
END

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

person Robert Talada    schedule 08.05.2019
comment
Вы забыли сохранить результат f в массиве ans (). - person eoredson; 09.05.2019
comment
Ваши коэффициенты находятся под числами вместо коэффициентов, и среди них есть отрицательное значение, которое неверно. Спасибо за ваши усилия. - person Safianu Ibrahim Mohammed; 09.05.2019
comment
@SafianuMohammed Спасибо. Я не должен был отвечать на него без переводчика передо мной. - person Robert Talada; 10.05.2019
comment
Это было великолепно, вы исправляете некоторые ошибки без переводчика, что означает, что вы очень хороши, я уважаю это. - person Safianu Ibrahim Mohammed; 12.05.2019
comment
Не забудьте отметить один из ответов как принятый. У меня и @eoredson есть ответы, которые можно выбрать для этого. Это помогает нам и помогает будущим людям, ищущим помощи. - person Robert Talada; 17.07.2019

Возможное решение для вычисления массивов факториалов и квадратных корней:

CLS
PRINT "Number of values";: INPUT n
DIM arr(n) AS INTEGER
DIM ans(n) AS LONG

FOR x = 1 TO n
    PRINT "Enter value"; x;: INPUT arr(x)
    f& = 1
    FOR i = 1 TO arr(x)
        f& = f& * i
    NEXT i
    ans(x) = f&
NEXT x

PRINT
PRINT "The factorial/square root of input numbers are:";
PRINT

PRINT "Number", "Factorial", "Squareroot"
FOR x = 1 TO n
    PRINT arr(x), ans(x), SQR(arr(x))
NEXT x
END
person eoredson    schedule 09.05.2019
comment
Я просто подумал, что добавить квадратный корень было бы мило :) - person eoredson; 10.05.2019