Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Разработка алгоритма решения



Основной алгоритм
Алгоритм решения задачи - линейный и состоит из:

Ø ввода значений 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.0121835

2.12.3. Задание по битовым операциям языка С++

2.12.3.1. Формулировка задания

Составить две программы, первая из которых вводит составные части структуры данных, приведенной в Вашем варианте индивидуального задания, и формирует из них заданную упакованную структуру. Вторая программа вводит упакованную структуру как 16-ричное число и выводит значения отдельных ее составных частей.

2.12.3.2. Варианты задания

Варианты задания приведены в табл. 3.15. Вариант соответствует номеру в журнале группы.

Таблица 3.15

Варианты задания

Вариант 1

Физический адрес на диске представляется в виде:

№ разряда
Значение H H T T T T T T T T T S S S S S

где: HH - номер головки; T...T - номер дорожки; S...S -номер сектора.

Вариант 2

Слово состояния программы в вычислительной системе представляется в виде:

№ разряда
Значение C C C C E I P K K K

 

где: C...C - маски каналов 0 – 3; E - маска внешнего прерывания; I -маска внутреннего прерывания; P - маска программного прерывания; KKK -ключ защиты памяти.

Вариант 3

Слово состояния канала в вычислительной системе представляется в виде:

№ разряда
Значение N N N N E C C C C C C C C C P

где: N...N - номер канала; E - признак ошибки; C...C - код причини прерывания; P - признак завершения программы в канале.

Вариант 4

Формат команды загрузки/сохранения в вычислительной системе имеет вид:

№ разряда
Значение D R R R R A A A A

где: D - направление передачи - в регистр(0)/в память(1); R..R - 1-й операнд - регистр; A...A - регистр адреса 2-го операнда.

Вариант 5

Слово состояния оборудования для вычислительной системы представляется в виде:

№ разряда
Значение P P P F F H H H H V V V

где: PPP - количество принтеров; FF - количество гибких дисков; H...H - тип жесткого диска; VVV - тип видеоадаптера.

Вариант 6

Формат команды сдвига в вычислительной системе имеет вид:

№ разряда
Значение T T D N N N N N N N N N

где: TT - тип сдвига; D - направление сдвига; N...N - количество разрядов сдвига.

Вариант 7

Блок управления буфером кеша в вычислительной системе представляется в виде:

№ разряда
Значение S S S D F B B B B B B B B

где: SSS - код системной области или 000; D - признак " грязного" буфера; F - признак свободного буфера; B...B - номер блока, который отображен в буфере.

Вариант 8

Элемент списка безопасности объекта в вычислительной системе представляется в виде:

№ разряда
Значение U U U U U U U U R W E X

где: U...U - идентификатор пользователя; R - право читать; W - право писать; E - право выполнять программный код; X - явный запрет доступа.

Вариант 9

Формат команды канала в система ввода-вывода имеет вид:

№ разряда
Значение O O O O O C D N N N N N N N N N

где: O...O - код операции; C - признак цепочки команд; D - признак цепочки данных; N...N - количество байтов для передачи.

Вариант 10

Элемент профиля пользователя в вычислительной системе представляется в виде:

№ разряда
Значение G G G G G G G G S S S S P

где: G...G - идентификатор группы, к которой принадлежит пользователь; S...S - код системы, которая загружается для пользователя; P - признак привилегированного пользователя.

Вариант 11

Информация о состоянии устройства в системе ввода-вывода представляется в виде:

№ разряда
Значение C C C U U U U U E E E E E E B

где: CCC - номер канала; U...U - номер устройства в канале; E...E - код состояния; B - признак занятости устройства

Вариант 12

Формат команды сложения в вычислительной системе имеет вид:

№ разряда
Значение D A A A B B B

где: D - сложение байтов/слов - 0/1; AAA - регистр - 1-й операнд; BBB - регистр - 2-й операнд.

Вариант 13

Формат представления текущей даты в некоторых системных структурах имеет вид:

№ разряда
Значение D D D D D M M M M M Y Y Y Y Y Y

где: D...D - день; M...M - месяц; Y...Y - год после 1980.

Вариант 14

Формат представления текущего времени в некоторых системных структурах имеет вид:

№ разряда
Значение S S S S S M M M M M M H H H H H

где: S...S - секунды/2; M...M - минуты; H...H – часы.

Вариант 15

Дескриптор сегмента для системы виртуальной памяти представляется в виде:

№ разряда
Значение F F F F F F F F R W L L L L L L

где: F...F - номер блока, с которого начинается сегмент; R - доступ для чтения; W - доступ для записи; L...L - размер сегмента в блоках.

Вариант 16

Атрибут файла в файловой системе представляется в виде:

№ разряда
Значение T T T T A A A I I I I I I I I

где: T...T - код типа файла; AAA - код доступа; I...I – номер файлового индекса.

Вариант 17

Блок управления памятью в операционной системе имеет формат:

№ разряда
Значение O O O O O O O O P L L L L L L

где: O…O - идентификатор владельца блока; P - признак программного блока; L...L - размер блока.

Вариант 18

Точка изображения на 16-цветном дисплее с размером экрана 64х64 описывается в формате:

№ разряда
Значение X X X X X X Y Y Y Y Y Y C C C C

где: X...X - горизонтальная координата; Y..Y - вертикальная координата; C...C – цвет.

Вариант 19

Управляющее слово программируемого таймера имеет формат:

№ разряда
Значение C C F F D D D D D D D D D D D D

где: CC - номер канала таймера; FF - форма сигнала; D...D - коэффициент деления опорной частоты.

Вариант 20

Информация о критической ошибке на диске представляется в виде:

№ разряда
Значение O A A R R R D D D D D D D D

где: O - тип операции - чтение/запись (0/1); AA - код области диска; RRR - возможные реакции на ошибку; D..D - номер диска.

Вариант 21

Дескриптор сообщения в системе телекоммуникаций имеет формат:

№ разряда
Значение N N N N P P P U U U U U U U U

где: N..N - номер узла, из которого пришло сообщение; PPP - приоритет сообщения; U..U - идентификатор пользователя - автора сообщения.

Вариант 22

Дескриптор семафора, который защищает пул ресурсов, имеет формат:

№ разряда
Значение N N N M M M L W W W W W W W W

где: N..N - текущее количество свободных единиц ресурса; M..M - общее количество единиц ресурса; L - признак блокирования/разблокирования семафора (1/0); W..W - количество процессов, которые ожидают доступа к ресурсу.

Вариант 23

Заголовок кадра в системе передачи данных имеет формат:

№ разряда
Значение S S S S S S D D D D D D C C C

где: S..S - адрес источника; D..D - адрес приемника; CCC - управляющий код.

Вариант 24

Заголовок пакета в системе передачи данных имеет формат:

№ разряда
Значение T T T S S S S L L L L L L L L

где: TTT - тип пакета; S..S - идентификатор источника; L..L - длина пакета.

Вариант 25

Поле управления диспетчером кадра в протоколе управления логическим каналом имеет формат:

№ разряда
Значение C C P N N N N N N N

где: CC - управляющий код; P - признак запроса или завершения (0/1); N..N - номер последовательности.

Вариант 26

Формат заголовка пакета в системе ретрансляции кадров такой:

№ разряда
Значение C C C C C C C C C C R E E E E E

где: C..C - идентификатор канала передачи; R - признак команды/ответа (0/1); E..E - расширение адреса.

Вариант 27

Формат элемента доступа к объекту в системе безопасности такой:

№ разряда
Значение A A A T T M G G G G G G G G

где: AAA - код доступа к объекту из группы PUBLIC; TT - доступ для чтения и/или доступ для записи; G..G - код группы доступа, к которой принадлежит объект.

Вариант 28

Дескриптор массива, который формируется компилятором языка программирования, имеет формат:

№ разряда
Значение L L L L B B B B B E E E E E

где: L..L - размер элемента массива; B..B - начальный индекс; E..E -конечный индекс

Вариант 29

Блок управления сегментом памяти в системе с реальной памятью имеет формат:

№ разряда
Значение T T T T T A L L L L L L L L

где: T..T - идентификатор задачи, которой принадлежит сегмент или 0 - для свободного сегмента; A - признак активности задачи (1/0); L..L - длина сегмента

Вариант 30

Слово состояния устройства в системе ввода-вывода представляется в виде:

№ разряда
Значение C C C C C F B N N N N N N N N

где: C..C - код состояния; F - признак ошибки (1/0); B - признак занятости (0/1); N..N - количество байт, переданных в последней операции.

2.12.3.3. Пример решения задачи для варианта № 30


Поделиться:



Популярное:

Последнее изменение этой страницы: 2016-05-03; Просмотров: 1288; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.054 с.)
Главная | Случайная страница | Обратная связь