- •Кафедра «Информатика»
- •Введение
- •I. Цели и задачи выполнения контрольной работы
- •II. Указания по выполнению контрольной работы
- •2.1. Общие требования к содержанию и оформлению контрольной работы
- •2.2. Требования к теоретической части работы
- •2.3. Требования к практической части работы и рекомендации по ее выполнению
- •Постановка задачи
- •Формализация задачи
- •Алгоритмизация задачи
- •Программирование
- •III. Варианты третьего задания на контрольную работу
- •Потоки периодических платежей регулярных инвестиционных проектов
- •Литература
- •Оглавление
- •Информатика
- •192171, Г. Санкт-Петербург, ул. Седова, 55/1
Программирование
В соответствии с приведенным выше алгоритмом решения данной задачи ее программа на языке высокого уровня Бейсик формируется следующим образом. В начале запуска любой программы (особенно с интерфейсом DOS) желательно произвести очистку экрана от предыдущих сообщений операционной системы и результатов работы других программ. Такие действия реализуются, обычно, с помощью оператора CLS:
10 CLS
Далее будет не бесполезно вывести собственную «заставку» о предназначении данной программы, например, с помощью оператора PRINT:
20 PRINT "Расчет платежей по кредиту"
Для реализации в машинной программе ввода исходных данных применяется оператор INPUT. Причем с его помощью можно сразу же заказать и вывод на экран необходимых комментариев к вводимым данным:
30 INPUT "Сумма кредита =", Kr
40 INPUT "Ставка %(годовых) =", Pr
50 INPUT "Вид кредита: 1-твердая ставка; 2-льготный; 3-прогрессивный ", Vkr
60 INPUT "Срок (месяцев)=", N
После ввода этих данных есть смысл сразу же выполнить все подготовительные операции, не связанные с зависимостью от счетчика цикла (номера месяца).
70 Pr = Pr / 100
80 OsnPlat = Kr / N
90 SummPlat = 0
Как уже отмечалось, выбор того или иного варианта кредитования реализуется условным оператор IF … THEN, например, с последующим указанием перехода - GOTO … к заданному в алгоритме месту программы (отмеченному номеру оператора):
100 IF Vkr = 1 THEN Pr = Pr / 12: GOTO 120
110 IF Vkr = 2 THEN Pr = Pr / 24
В связи с ограниченным набором вариантов кредитования, проверку третьего условия можно не производить, а первым же оператором тела цикла определить значение прогрессивной ставки.
Повторные операции реализуются, как известно, с помощью оператора FOR…TO …STEP (для …до … с шагом…). Если шаг не задан, то по умолчанию он равен 1:
120 FOR I = 1 TO N
130 Pr = Pr / 12 + .2 /100 * (I - 1)
Тело цикла представлено набором операций блока 10, особенность которых является тот факт, что в них участвуют одни и те же переменные, значения которых каждый раз «переприсваиваются». Такой вариант использования переменных (без объявления их массивами) используется обычно в интересах экономии ячеек памяти, когда по задаче есть возможность выводить их значения сразу на печать и нет необходимости запоминания всего набора значений этих переменных.
140 Ost = Kr - OsnPlat * (I - 1)
150 ProcPlat = Ost * Pr
160 Plat = OsnPlat + ProcPlat
170 SummPlat = SummPlat + Plat
180 PRINT "Текущий платеж ", I, "=", Plat
190 NEXT I
В сочетании с оператором FOR возвращение к началу цикла декларируется командой NEXT с указанием имени счетчика I. И по его завершению, когда все необходимые расчеты текущих платежей будут выполнены и будет накоплена таким образом и общая сумма платежей, можно заказывать вывод на печать этой суммы и завершать программу оператором END.
200 PRINT "Сумма платежей=", sPlat
210 END
Таким образом, полный текст программы на языке Бейсик, разработанной для заданных условий, может выглядеть так.
10 CLS
20 PRINT "Расчет платежей по кредиту"
30 INPUT "Сумма кредита =", Kr
40 INPUT "Ставка %(годовых) =", Pr
50 INPUT "Вид кредита: 1-твердая ставка; 2-льготный; 3-прогрессивный ", Vkr
60 INPUT "Срок (месяцев)=", N
70 Pr = Pr / 100
80 OsnPlat = Kr / N
90 SummPlat = 0
100 IF Vkr = 1 THEN Pr = Pr / 12: GOTO 120
110 IF Vkr = 2 THEN Pr = Pr / 24
120 FOR I = 1 TO N
130 Pr = Pr / 12 + .2 /100 * (I - 1)
140 Ost = Kr - OsnPlat * (I - 1)
150 ProcPlat = Ost * Pr
160 Plat = OsnPlat + ProcPlat
170 SummPlat = SummPlat + Plat
180 PRINT "Текущий платеж ", I, "=", Plat
190 NEXT I
200 PRINT "Cумма платежей=", sPlat
210 END