КР2 часть 1, вариант 20
.docБЕЛОРУССКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ИНФОРМАТИКИ И РАДИОЭЛЕКТРОНИКИ
Кафедра программного обеспечения информационных технологий
Факультет ФНиДО
Специальность ПОИТ
Контрольная работа № 2
по дисциплине «Основы алгоритмизации и программирования»
часть 1
Вариант № 20
Выполнила:
Минск 2012
1). Задание
Вычислить сумму пятидесяти первых элементов последовательности, заданной формулой:
Xi = 0,7*Xi-13 + 0,3*Xi-2 – 0,1*Xi-3
при X0 = X1 = X2 = 1. Массивы не использовать.
2). Схема алгоритма
На рис. 1 приведен способа графического представления алгоритма
Рис. 3. Диаграмма Насси-Шнейдермана
3). Программа на языке Pascal
Далее приведена программа на языке Pascal, также данная программа хранится в файле KR2.pas
{Программа вычисления суммы первых 50-ти чисел
последовательности}
Program KR2;
Uses Crt; {Используем модуль Crt}
{Начинается раздел описания переменных}
var
i:integer; {Счетчик числа шагов}
x0,x1,x2:real; {Числа последовательности}
x:real; {Для хранения очередного слагаемого}
S:real; {В этой переменной будем
накапливать сумму}
A,B:real; {Переменные используются в качестве
третьей переменной для обмена значениями}
{Начинается тело программы}
begin
ClrScr; {Обновим экран}
x0:=1; {Присвоили значение первому числу
последовательности}
x1:=X0; {Присвоили значение второму числу
последовательности}
x2:=X1; {Присвоили значение третьему числу
последовательности}
i:=4; {Присвоили счетчику значение}
S:=x0+x1+x2; {Считаем сумму первых трех чисел
последовательности}
Writeln('Х0, X1, X2 по условию задачи равны ', X0:3, X1:3, X2:3); {Выведем на экран входные данные}
{Начинается тело цикла, в котором произойдет расчет
первых 50-ти чисел последовательности}
while i<=50 do {Пока счетчик шагов не станет равен 50
считаем сумму}
begin
x:=0.7*x2*sqr(x2)+0.3*x1-0.1*x0; {Посчитали новое слагаемое}
S:=S+x; {Увеличили сумму на текущее
слагаемое}
A:=x2; {Обмен значениями через
третью переменную}
B:=x1; {Обмен значениями через
третью переменную}
x2:=x; {Обмен значениями}
x1:=A; {Обмен значениями через
третью переменную}
x0:=B; {Обмен значениями через
третью переменную}
inc(i) {Вычислили номер следующего шага}
end; {Конец описания тела цикла}
writeln('сумма равна ', s); {Вывод содержимого ячейки S
с пояснительным текстом}
readln {Здесь программа приостановиться
и будет ждать ввод с клавиатуры}
end. {Здесь оканчивается тело программы}
4). Тестовый набор данных
В табл. 1 использован прием трассировки.
Примечание. N-количество суммированных чисел (в программе данная переменная не использована). Пятидесятое слагаемое и сумма пятидесяти слагаемых последовательности посчитаны при помощи программы.
Оператор |
Условие |
X |
S |
I |
N |
Примечание |
|
|
|
3 |
4 |
3 |
|
While I<=50 |
Да |
0.9 |
3.9 |
5 |
4 |
S:=S+X, S:=3+0.9, S:=3.9 |
While I<=50 |
Да |
0,7103 |
4.6103 |
6 |
5 |
S:=S+X, S:=3.9+0.7103, S:=4,6103 |
While I<=50 |
Да |
0.42086 |
5.03116 |
7 |
6 |
S:=S+X, S:=4.6103+0.42086 S:=5.03116 |
… |
… |
… |
… |
… |
… |
… |
While I<=50 |
Да |
8.8502704622E-11 |
5.2715600020E+00 |
51 |
50 |
S:=5.2715600020E+00 |
While I<=50 |
Нет, т.к. I=51 |
|
|
|
|
|
Табл. 1. Трассировка программы
5). Описание схемы алгоритма
-
Объявляем переменные, в том числе счетчик числа шагов;
-
Считаем сумму первых трех чисел последовательности;
-
Выводим на экран входные данные;
-
Проверяем, выполняется ли условие, при котором счетчик числа шагов должен быть меньше пятидесяти. Если условие выполняется, переходим к 5-му пункту, если не выполняется переходим к 10-му пункту;
-
Считаем следующее слагаемое;
-
Добавляем следующее слагаемое к накопленной сумме чисел;
-
Обновляем переменные;
-
Счетчик числа шагов увеличиваем на 1;
-
Переходим к выполнению 4 пункта;
-
. Выводим на экран сумму первых пятидесяти чисел последовательности.