
Лабораторная работа 7
Операторы цикла в языке С
1. Цель работы
Целью лабораторной работы является получение практических навыков в работе с операторами цикла языка C.
2. Темы для предварительной проработки
Операторы цикла языка C. Вложенные циклы.
Условный оператор языка C.
3. Задание для выполнения
Для функции Y = f(X), график которой приведен в Вашем индивидуальном задании, вывести на экран значения Y для Х = 0, 0.25, 0.5, ... 19.75. Необязательное для выполнения дополнительное требование - получить на экране график функции средствами текстового режима.
4. Варианты индивидуальных заданий
Вариант 1
|
Вариант 2
|
Вариант 3
|
Вариант 4
|
Вариант 5
|
Вариант 6
|
Вариант 7
|
Вариант 8
|
Вариант 9
|
Вариант 10
|
Вариант 11
|
Вариант 12
|
Вариант 13
|
Вариант 14
|
Вариант 15
|
Вариант 16
|
Вариант 17
|
Вариант 18
|
Вариант 19
|
Вариант 20
|
Вариант 21
|
Вариант 22
|
Вариант 23
|
Вариант 24
|
Вариант 25
|
Вариант 26
|
Вариант 27
|
Вариант 28
|
Вариант 29
|
Вариант 30
|
5. Пример решения задачи (вариант 30)
5.1. Разработка алгоритма решения.
5.1.1. Общий метод решения Из приведенного в индивидуальном задании графика функции видно, что функция является периодической, с периодом 4. В заданный интервал вкладываются 5 периодов функции. Так что, программа может содержать в себе цикл, в котором 5 раз будут выполняться одни и те же вычисления. В каждой итерации этого цикла должны перебираться значения x от 0 до 3.75 с шагом 0.25, т.е., должен быть вложенный цикл. В каждой итерации вложенного цикла вычисляется значение y для текущего x и выводятся результаты. Анализ приведенного графика показывает, что каждый период его состоит из трех частей: на отрезке 0<=x<=1 график является прямой, на отрезке 1<=x<=3 - дугой, а на отрезке 3<=x<=4 - другой прямой. Следовательно, во вложенном цикле должно быть разветвление, в котором определяется текущее значение x и обеспечиваются вычисления для первого, второго или третьего случая.
5.1.2. Вычисление функции на отрезке 0 - 1 На этом отрезке функция является функцией прямой. Формула прямой: y=ax+b. Для этого случая a=2, b=-1. Итак, окончательная формула для отрезка 0<=x<=1 такая: y=2x-1
5.1.3. Вычисление функции
на отрезке 1 - 3
На
этом отрезке функция является частью
окружности. Формула окружности:
(x-x0)2+(y-y0)2=R2,
где (x0, y0) - координаты центра
окружности, а R - радиус. Отсюда
y можно определить как:
.
В нашем случае R=1, а координаты
центра - (2, 1). Извлечение квадратного
корня дает два значения - положительное
и отрицательное, в нашем случае
используется только нижняя полуокружность,
так что следует брать только отрицательное
значение. Окончательная формула для
отрезка 1<=x<=3 такая:
y=2-((1-(x-2)2)
5.1.4. Вычисление функции на отрезке 3 - 4 Для прямой на этом отрезке a=-2, b=7, окончательная формула: y=7-2x
5.1.5. Алгоритм вывода результатов в псевдографической форме В каждой итерации внутреннего цикла мы получает одну ординату графика. Следовательно, для представления результата в псевдографической форме будет удобно развернуть график на 90о и в каждой строке экрана отображать значения x, y и символ, который изображает одну точку графика, смещение этого символа в строке будет пропорционально значению ординаты. Для отображения этого символа с необходимым смещением нужно преобразовать ординату в целое число (с масштабированием к размеру строки), это число будет количеством пробелов, которое нужно вывести в строке перед символом-"точкой". В каждый период функции вкладывается 16 итераций внутреннего цикла, т.е. на экран будет выведено 16 строк на период. Целесообразно после вывода каждого периоду (который целиком помещается на экране) делать остановку в программе до команды оператора на продолжение.
5.1.6. Схема алгоритма Схема алгоритма показана на рисунке ниже.
|
5.2. Определение переменных программы
Для реализации алгоритма понадобятся такие переменные:
n - параметр внешнего цикла, для него достаточно короткого целого значения:
short n;
x - параметр внутреннего цикла и одновременно - текущее значение абсциссы графика. Хотя его точность невелика, объявим его как double, в соответствии с общим стилем программирования на С.
double x;
y - текущее значение ординаты графика:
double y;
h - смещение в строке символа, который означает точку графика. Поскольку смещение не может превышать 80 (размер строки экрана), для этой переменной достаточно будет короткого целого:
short h;