3 семестр / ПрограммированиеCPP / Lab03
.docЛабораторная работа № 3 Технология структурного программирования
Цель работы: изучение технологии проектирования и отладки программ для ЭВМ.
Задание
-
Изучить этапы подготовки и реализации программ решения задач.
-
В соответствие с вариантом, заданным в документе Var03.doc, разработать алгоритм и программу решения задачи.
-
Оформить отчет о работе по стандартной форме. В раздел "Выполнение" включить:
-
словесную формулировку задачи;
-
формализованную постановку задачи типа "Дано:", "Найти:" (см. пример);
-
контрольный пример для тестирования задачи;
-
блок-схему алгоритма решения задачи (нарисовать вручную);
-
таблицу с тестом алгоритма справа от блок-схемы (нарисовать вручную);
-
листинг программы с комментариями.
Для защиты работы продемонстрировать решение задачи на компьютере, уметь объяснить назначение этапов разработки программы и каждого оператора программы, а также устно ответить на любой из контрольных вопросов.
Учебная информация
Можно выделить следующие основные этапы разработки программы для решения некоторой задачи на ЭВМ:
-
постановка задачи;
-
моделирование задачи и подготовка контрольного примера;
-
формализация задачи;
-
разработка алгоритма решения задачи;
-
тестирование алгоритма;
-
программирование алгоритма;
-
отладка программы;
-
эксплуатация программы и интерпретация результатов.
Этапы с 1-го по 6-й составляют стадию проектирования программы, а 7-й и 8-й - стадию реализации программы.
Пример
Словесная постановка задачи:
Вычислить сумму .
Обозначим искомую сумму как S.
Формальная постановка задачи: дано: n, x; найти S.
Моделирование задачи
Моделирование задачи показывает, что для вычисления суммы можно использовать цикл For-Next, поскольку заранее известно количество слагаемых. Кроме того, не следует вычислять заново факториал для очередного слагаемого: гораздо проще вычислить факториал, опираясь на значение факториала для предыдущего слагаемого. Аналогично организуется чередование знаков слагаемых: введем целую переменную Z=1 и будем в цикле выполнять команду Z=-Z.
Для решения задачи, кроме S, введем следующие величины:
-
F – значение факториала;
-
C – значение числителя;
-
Z – знак слагаемого (+1 или –1).
Контрольный пример: при N=4 и X=3 получим S = -0.125.
Алгоритм решения задачи
|
|
|
|
|
|
|
N |
4 |
|
|
|
|
|
X |
3 |
|
|
|
|
|
S |
0 |
|
|
|
|
|
Z |
1 |
|
|
|
|
|
C |
1 |
|
|
|
|
|
F |
1 |
|
|
|
|
|
i |
1 |
2 |
3 |
4 |
5 |
|
F |
1 |
2 |
6 |
24 |
|
|
S |
1 |
-0.5 |
1 |
-0.125 |
|
|
Z |
-1 |
1 |
-1 |
1 |
|
|
C |
3 |
9 |
27 |
81 |
|
|
S |
|
|
|
|
-0.125 |
|
|
|
|
|
|
|
Листинг программы
#include <iostream>
using namespace std;
void main() {
double S,C,X;
int i,N,Z,F;
cin>>N>>X;
S=0; Z=1; C=1; F=1;
for (i=1; i<=N; i++) {
F*=i;
S+=Z*C/F;
Z=-Z;
C*=X;
}
cout<<S<<endl;
}
Контрольные вопросы
1. Какова сравнительная трудоемкость (приблизительно и в среднем) отдельных этапов решения задач на ЭВМ?
2. В чем опасность программирования без подготовленного алгоритма решения задачи?
3. Назовите способы моделирования задачи.
4. Каковы цели моделирования задачи?
5. В каких ситуациях тестирование алгоритма вручную весьма трудоемко?
6. Назовите основные приемы разработки надежных программ.