Основной алгоритм
Алгоритм решения задачи — линейный и состоит из:
· ввода значений 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, просмотров: 390.