Основной алгоритм
Алгоритм решения задачи — линейный и состоит из:
· ввода значений x и y;
· вычисления значения t1;
· вычисления значения t2;
· выведения значений t1 и t2.
Оптимизация алгоритма
Перед непосредственным программированием алгоритма проанализируем, как в нем можно изменить объем вычислений.
Выражение ax встречается один раз в первой формуле и дважды — во второй. Следовательно, можно один раз произвести умножение a*x, а потом использовать этот результат.
Во второй формуле дважды встречается умножение квадратного корня на тангенс — это вычисление можно так же сделать один раз.
Выражение c2–b2 можно разложить на (c+b)(c–b). До разложения в выражении было две операции умножения (возведение в степень 2) и одна — сложения. После разложения — два сложения и одно умножение, что выгоднее для вычислений.
Ограничения на значения параметров
Аргумент функции, которую вычисляет логарифм, не может быть 0 или меньше. Отсюда вытекают требования к значениям: a * x + b > 0; y * x + d > 0
Аргумент функции извлечения квадратного корня не может быть меньше 0, отсюда: c2–b2>=0
В знаменателе выражения не может быть 0, отсюда: 
кроме того: 
ОБРАЩАЕМ ВНИМАНИЕ, ЧТО В ПРОГРАММНОЙ РЕАЛИЗАЦИИ НЕ РАССМАТРИВАЮТСЯ ПРОВЕРКА НА КОРРЕКТНОСТЬ, ЕЕ НЕОБХОДИМО ВЫПОЛНИТЬ САМОСТОЯТЕЛЬНО!!!!
Определение переменных программы
Для решения задачи понадобятся переменные для представления каждого параметра формул — a, b, c, d, x,y и результатов — t1, t2. Кроме того, придется ввести дополнительную переменную ax для хранения промежуточного результата , необходимого для оптимизации. Тип всех переменных — double.
Разработка текста программы
/* Лабораторная работа 2 */
/* Арифметические выражения и функции */
/* Пример решения. Вариант ____ */
#include <stdio.h> /* Программа начинается с включения файлов */
#include <math.h>
int main(void) /* открываемглавнуюфункцию*/
{
double x,y; /* параметры, которые вводятся */
double a=12.5, b=1.3; /*параметры, которые задаются в программе */
double c=14.1, d=2.7;
double t1, t2; /* результаты */
double ax; /* рабочаяпеременная */
printf("Введите x, y >"); /*Вводятся значения для переменных x и y */
scanf("%lf %lf",&x,&y);
ax=a*x; /* вычисляется первое промежуточное значение */
t1=(b*log(ax+b)/a+d*log(y*x+d)/y)/c; /*вычисляется первый результат*/
ax=sqrt((c-b)*(c+b))*tan(ax); /* второй промежуточный результат */
t2=log((ax+b)/(ax-b))/2/a/b; /*второйокончательный результат */
printf("t1 = %lg\n",t1); /*Полученные результаты на экран */
printf("t2 = %lg\n",t2);
return 0;
}
Отладка программы
При отладке программы можно проверять правильность выполнения каждой операции. Для этого сложные операторы-выражения, разбиваются на последовательность операторов-выражений, в каждом из которых выполняется только одна операция. Результат каждой такой операции выводится на экран или отслеживается в пошаговом режиме.
ЛАБОРАТОРНАЯ РАБОТА №6
Логические операции. Условный оператор
в языке C
Цель работы : получение практических навыков в работе с условным оператором и разветвленными алгоритмами в языке C.
Темы для предварительной проработки
· Логические операции
· Условный оператор
Задание: Построить программу, которая вводит координаты точки(x, y) и определяет, попадает ли точка в заштрихованную область на рисунке, который соответствует Вашему варианту, представленному в таблице 2.8. Попадание на границу области считать попаданием в область. Предварительно вывести на экран замкнутую область в виде пересечения графиков. Предусмотреть выход из программы по желанию пользователя "Продолжить Да/Нет?").
Номер варианта устанавливается преподавателем, который проводит руководство лабораторными занятиями (см. таблицы, распределенные в группах лектором, относящиеся к общим рекомендациям соответственно).
Таблица 2.8 — Варианты индивидуальных заданий
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 1 | Зелёный на светло-красном
| 2 | Белый на чёрном
|
| 3 | Фиолетовый на белом
| 4 | Черный на светло-зелёном
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 5 | Белый на чёрном
| 6 | Коричневый на жёлтом
|
| 7 | Зелёный на светло-красном
| 8 | Фиолетовый на светло-сером
|
| 9 | Чёрный на светло-зелёном
| 10 | Чёрный на светло-зелёном
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 11 | Черный на светло-фиолетовом
| 12 | Фиолетовый на светло-сером
|
| 13 | Морскойволны на светло-красном
| 14 | Зелёный на светло-красном
|
| 15 | Чёрный на светло-фиолетовом
| 16 | Бирюзовый на светло-красном
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 17 | Белый на чёрном
| 18 | Фиолетовый на белом
|
| 19 | Бирюзовый на светло-красном
| 20 | Красный на светло-сером
|
| 21 | Фиолетовый на светло-сером
| 22 | Фиолетовый на белом
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 23 | Коричневый на жёлтом
| 24 | Чёрный на светло-фиолетовом
|
| 25 | Белый на чёрном
| 26 | Коричневый на жёлтом
|
| 27 | Фиолетовый на светло-сером
| 28 | Коричневый на жёлтом
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 29 | Чёрный на светло-зелёном
| 30 | Зелёный на светло-красном
|
| 31 | Жёлтый на синем
| 32 | Красный на зелёном
|
| 33 | Светло-серый на красном
| 34 | Голубой на чёрном
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма | Вариант | Задание и цветовая гамма |
| 35 |
Жёлтый на красном
| 36 |
Светло-красный на зелёном
|
| 37 |
Жёлтый на зелёном
| 38 |
Белый на чёрном
|
| 39 |
Чорний на білому
| 40 |
Ясно-червоний на чорному
|
Таблица 2.8 — Продолжение
| Вариант | Задание и цветовая гамма |
| 41 |
Чёрный на светло-зелёном
|
Методические указания
Пример решения задачи

Дата: 2019-02-02, просмотров: 447.