Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология Образование Политология Производство Психология Стандартизация Технологии |
Разработка алгоритма решения
Основной алгоритм Ø ввода значений 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. Разработка текста программы Программа начинается с включения файлов: #include < stdio.h> #include < math.h>в которых находятся описания функций ввода-вывода и математических функций соответственно. Далее открываем главную функцию: int main(void)
Включаем описания переменных (см. п. 2.12.2.4): double x, y; double a=12.5, b=1.3; double c=14.1, d=2.7; double t1, t2; double ax;
Вводятся значения для переменных x и y: printf(" Введите 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);
Текст программы Полный текст программы приводится ниже. /**************************************************//* Лабораторная работа № 3 *//* Задание 2 *//* Арифметические выражения и функции *//* Пример решения. Вариант № 30 *//**************************************************/#include < stdio.h> #include < math.h> # include< conio.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 > " ); 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); getch(); return 0; }Отладка программы При отладке программы можно проверять правильность выполнения каждой операции. Для этого сложные операторы-выражения, разбиваются на последовательность операторов-выражений, в каждом из которых выполняется только одна операция. Результат каждой такой операции выводится на экран или отслеживается в пошаговом режиме. Результаты работы программы При работе программы на экран было выдано следующее: Введите x, y > 25.6 78.4t1 = 0.0611532t2 = -0.01218352.12.3. Задание по битовым операциям языка С++ 2.12.3.1. Формулировка задания Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей. 2.12.3.2. Варианты задания Варианты задания приведены в табл. 3.15. Вариант соответствует номеру в журнале группы. Таблица 3.15 Варианты задания Вариант 1 Физический адрес на диске представляется в виде:
где: HH - номер головки; T...T - номер дорожки; S...S -номер сектора. Вариант 2 Слово состояния программы в вычислительной системе представляется в виде:
где: C...C - маски каналов 0 – 3; E - маска внешнего прерывания; I -маска внутреннего прерывания; P - маска программного прерывания; KKK -ключ защиты памяти. Вариант 3 Слово состояния канала в вычислительной системе представляется в виде:
где: N...N - номер канала; E - признак ошибки; C...C - код причини прерывания; P - признак завершения программы в канале. Вариант 4 Формат команды загрузки/сохранения в вычислительной системе имеет вид:
где: D - направление передачи - в регистр(0)/в память(1); R..R - 1-й операнд - регистр; A...A - регистр адреса 2-го операнда. Вариант 5 Слово состояния оборудования для вычислительной системы представляется в виде:
где: PPP - количество принтеров; FF - количество гибких дисков; H...H - тип жесткого диска; VVV - тип видеоадаптера. Вариант 6 Формат команды сдвига в вычислительной системе имеет вид:
где: TT - тип сдвига; D - направление сдвига; N...N - количество разрядов сдвига. Вариант 7 Блок управления буфером кеша в вычислительной системе представляется в виде:
где: SSS - код системной области или 000; D - признак " грязного" буфера; F - признак свободного буфера; B...B - номер блока, который отображен в буфере. Вариант 8 Элемент списка безопасности объекта в вычислительной системе представляется в виде:
где: U...U - идентификатор пользователя; R - право читать; W - право писать; E - право выполнять программный код; X - явный запрет доступа. Вариант 9 Формат команды канала в система ввода-вывода имеет вид:
где: O...O - код операции; C - признак цепочки команд; D - признак цепочки данных; N...N - количество байтов для передачи. Вариант 10 Элемент профиля пользователя в вычислительной системе представляется в виде:
где: G...G - идентификатор группы, к которой принадлежит пользователь; S...S - код системы, которая загружается для пользователя; P - признак привилегированного пользователя. Вариант 11 Информация о состоянии устройства в системе ввода-вывода представляется в виде:
где: CCC - номер канала; U...U - номер устройства в канале; E...E - код состояния; B - признак занятости устройства Вариант 12 Формат команды сложения в вычислительной системе имеет вид:
где: D - сложение байтов/слов - 0/1; AAA - регистр - 1-й операнд; BBB - регистр - 2-й операнд. Вариант 13 Формат представления текущей даты в некоторых системных структурах имеет вид:
где: D...D - день; M...M - месяц; Y...Y - год после 1980. Вариант 14 Формат представления текущего времени в некоторых системных структурах имеет вид:
где: S...S - секунды/2; M...M - минуты; H...H – часы. Вариант 15 Дескриптор сегмента для системы виртуальной памяти представляется в виде:
где: F...F - номер блока, с которого начинается сегмент; R - доступ для чтения; W - доступ для записи; L...L - размер сегмента в блоках. Вариант 16 Атрибут файла в файловой системе представляется в виде:
где: T...T - код типа файла; AAA - код доступа; I...I – номер файлового индекса. Вариант 17 Блок управления памятью в операционной системе имеет формат:
где: O…O - идентификатор владельца блока; P - признак программного блока; L...L - размер блока. Вариант 18 Точка изображения на 16-цветном дисплее с размером экрана 64х64 описывается в формате:
где: X...X - горизонтальная координата; Y..Y - вертикальная координата; C...C – цвет. Вариант 19 Управляющее слово программируемого таймера имеет формат:
где: CC - номер канала таймера; FF - форма сигнала; D...D - коэффициент деления опорной частоты. Вариант 20 Информация о критической ошибке на диске представляется в виде:
где: O - тип операции - чтение/запись (0/1); AA - код области диска; RRR - возможные реакции на ошибку; D..D - номер диска. Вариант 21 Дескриптор сообщения в системе телекоммуникаций имеет формат:
где: N..N - номер узла, из которого пришло сообщение; PPP - приоритет сообщения; U..U - идентификатор пользователя - автора сообщения. Вариант 22 Дескриптор семафора, который защищает пул ресурсов, имеет формат:
где: N..N - текущее количество свободных единиц ресурса; M..M - общее количество единиц ресурса; L - признак блокирования/разблокирования семафора (1/0); W..W - количество процессов, которые ожидают доступа к ресурсу. Вариант 23 Заголовок кадра в системе передачи данных имеет формат:
где: S..S - адрес источника; D..D - адрес приемника; CCC - управляющий код. Вариант 24 Заголовок пакета в системе передачи данных имеет формат:
где: TTT - тип пакета; S..S - идентификатор источника; L..L - длина пакета. Вариант 25 Поле управления диспетчером кадра в протоколе управления логическим каналом имеет формат:
где: CC - управляющий код; P - признак запроса или завершения (0/1); N..N - номер последовательности. Вариант 26 Формат заголовка пакета в системе ретрансляции кадров такой:
где: C..C - идентификатор канала передачи; R - признак команды/ответа (0/1); E..E - расширение адреса. Вариант 27 Формат элемента доступа к объекту в системе безопасности такой:
где: AAA - код доступа к объекту из группы PUBLIC; TT - доступ для чтения и/или доступ для записи; G..G - код группы доступа, к которой принадлежит объект. Вариант 28 Дескриптор массива, который формируется компилятором языка программирования, имеет формат:
где: L..L - размер элемента массива; B..B - начальный индекс; E..E -конечный индекс Вариант 29 Блок управления сегментом памяти в системе с реальной памятью имеет формат:
где: T..T - идентификатор задачи, которой принадлежит сегмент или 0 - для свободного сегмента; A - признак активности задачи (1/0); L..L - длина сегмента Вариант 30 Слово состояния устройства в системе ввода-вывода представляется в виде:
где: C..C - код состояния; F - признак ошибки (1/0); B - признак занятости (0/1); N..N - количество байт, переданных в последней операции. 2.12.3.3. Пример решения задачи для варианта № 30 Популярное:
|
Последнее изменение этой страницы: 2016-05-03; Просмотров: 1288; Нарушение авторского права страницы