Расчет простых процентов и вывод в табличную форму

Я пытаюсь написать код QBASIC, который позволяет пользователю вводить основную сумму и время 5 инвесторов для расчета простых процентов из этих 5 инвесторов и Вывод их, Начисленная сумма, Основная сумма и Время/ Продолжительность в табличной форме. Все с процентной ставкой 12%

Я попробую:

DIM P AS DOUBLE
DIM r AS DOUBLE
DIM t AS DOUBLE
DIM A AS DOUBLE
DIM rt AS DOUBLE
CLS
DIM x AS INTEGER
CLS
WHILE x <> 5
    INPUT "Enter First Investor's Principal: ", P
    INPUT "Enter First Investor's Time: ", t
    x = x + 1

WEND
r = 0.12
rt = 1 + (r * t)
A = P * rt
FOR i = 1 TO x
    PRINT "Amount Accrued", "Principal Amount", "Time"
    PRINT
    PRINT A, , P, , t
NEXT i

Но он продолжает печатать последний результат 5 раз в 5 разных таблицах.

Я ожидаю результатов, как показано ниже:

Amount Accrued    Principal   Time/Duration
44,400            30,000      4
68,000            50,000      3
95,200            70,000      5

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


Ответы (2)


Это происходит потому, что вы перезаписываете P и t на каждой итерации вашего цикла WHILE. Вместо этого инициализируйте P и t и другие последующие переменные как массивы и сохраняйте разные значения в разных их индексах. Также обратите внимание, что вы всегда печатаете FirstInvestor's Principal and Time в каждой итерации. Номер инвестора также должен повторяться. Я исправил проблемы в коде ниже:

CLS
DIM x AS INTEGER
INPUT "Number of Investors: ", x
DIM P(x - 1) AS DOUBLE
DIM r AS DOUBLE
DIM t(x - 1) AS DOUBLE
DIM A(x - 1) AS DOUBLE
DIM rt(x - 1) AS DOUBLE

FOR i = 0 TO x - 1
    PRINT "Enter Investor-" + STR$(i + 1) + "'s Principal: "
    INPUT "", P(i)
    PRINT "Enter Investor-" + STR$(i + 1) + "'s Time: "
    INPUT "", t(i)
NEXT i

PRINT "Amount Accrued", "Principal Amount", "Time"
PRINT

r = .12
FOR i = 0 TO x - 1
    rt(i) = 1 + (r * t(i))
    A(i) = (P(i) * rt(i))
    PRINT A(i), P(i), , t(i)
NEXT i
person Sardar Usama    schedule 14.04.2019
comment
Да, это именно то, что мне было нужно, но я не понимаю x - 1 во всем вашем коде, не могли бы вы объяснить мне это. - person Safianu Ibrahim Mohammed; 14.04.2019
comment
Индексация начинается с 0. Допустим, если вы хотите сохранить 3 элемента (данные об инвесторах), вы сохраните их с индексами 0,1,2; не в 1,2,3. Тем не менее, вы также можете начать индексацию с 1, но тогда вам придется определить P как DIM P(1 TO x) AS DOUBLE, и аналогично это относится к другим переменным. - person Sardar Usama; 14.04.2019
comment
BASIC не требует, чтобы массивы начинались с 0 :-> - person eoredson; 15.04.2019
comment
@eoredson Это то, что я также упомянул в комментарии выше. - person Sardar Usama; 15.04.2019
comment
Это потому, что это 'C' - они всегда начинаются с 0, когда затемняют [10], они получают только от [0] до [9], а не [10], чего я никогда не понимал. - person eoredson; 15.04.2019

Более простой пример кодирования начисленных процентов:

Примечание. Массивы по умолчанию содержат 10 элементов без использования DIM, а переменные по умолчанию равны одному.

FOR i = 1 TO 5
    PRINT "Enter Investor-" + STR$(i) + "'s Principal";: INPUT p(i)
    PRINT "Enter Investor-" + STR$(i) + "'s Time";: INPUT t(i)
NEXT
PRINT "Amounts:"
PRINT "Accrued", "Principal", "Time"
PRINT "-------", "---------", "----"
r = .12
FOR i = 1 TO 5
    rt(i) = 1 + (r * t(i))
    a(i) = (p(i) * rt(i))
    PRINT a(i), p(i), t(i)
NEXT
END
person eoredson    schedule 15.04.2019