Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Методичка по СППО

.pdf
Скачиваний:
7
Добавлен:
22.03.2015
Размер:
1.02 Mб
Скачать

Расчет значения целевой функции выполнен таким же способом. Контрольные произведения в системе ограничений вычисляется для того, чтобы убедиться, что контролируемые факторы попадают в область допустимых решений (ОДР). Эти значения

(ячейки) также нужны для блока поиска решений.

Когда исходные данные подготовлены, можно приступать к поиску решения.

Вызов модуля осуществляется через меню «Сервис» -> «Solver» (поиск решения). На рис. 3. показан диалог, в котором настраиваются параметры поиска решения.

Рис. 8. Диалог поиска решения

В верхней части диалога задается ячейка (Target Cell), в которой вычисляется значение целевой функции. Ниже предлагается направление изменения значения целевой ячейки (Equal To) – минимизировать, максимизировать или сделать равной конкретному значению. Ниже в разделе диалога By Changing Cells (изменяя ячейки) предлагается выбрать группу ячеек, в которых хранятся контролируемые факторы. В разделе Subject to the Constraints предлагается ввести ограничения на значения изменяемых ячеек. Для этого используются ячейки со значениями контрольных произведений.

Добавление ограничения осуществляется с помощью кнопки Add. В появившемся диалоге (рис. 4) устанавливается ссылка на ячейку с контрольным произведением (Cell Reference) и на ячейку с ограничением (Constraint).

21

Рис. 9. Задание ограничений

Нажатием кнопки Add можно добавить все необходимые ограничения.

Вдиалоге Solver Parameters (рис. 3) необходимо нажать кнопу Options (параметры)

всоответствующем окне (рис. 5) поставить галочку напротив надписи Assume Linear Model (линейная модель).

Рис. 10. Параметры поиска решения

После этих настроек можно наживать кнопку Solve (рис. 3) и подтвердить/не

подтвердить сохранение результатов (рис. 6).

22

Рис. 11. Получение и сохранение результатов

Можно заметить, что значения контролируемых факторов изменилось при соблюдении всех ограничений (они были вида «меньше либо равно), а целевая функция увеличилась.

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

Варианты задании предполагают 2 вида продукции, три вида сырья.

Структура таблицы исходных данных:

a11

 

 

a12

a13

 

 

c1

 

 

p1

w1

a21

 

 

a22

a23

 

 

c2

 

 

p2

w2

d1

 

 

d2

d3

 

 

 

 

 

 

 

s1

 

 

s2

s3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

2

 

5

 

3

 

3

 

3

8

 

 

 

1

 

 

 

 

 

 

2

 

 

1

 

 

 

2

 

1

 

2

 

0

 

2

4

 

 

 

 

 

 

 

 

 

 

 

 

3

 

2

 

3

 

 

 

 

 

 

 

 

 

3

 

5

 

4

 

 

 

 

 

 

 

 

 

5

 

0

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

2

 

5

 

3

 

3

 

3

9

 

 

 

2

 

 

 

 

 

 

2

 

 

 

 

 

 

2

 

3

 

1

 

0

 

2

6

 

 

 

 

 

 

 

 

 

 

 

 

2

 

2

 

4

 

 

 

 

 

 

 

 

 

3

 

6

 

4

 

 

 

 

 

 

 

 

 

5

 

0

 

5

 

 

 

 

 

 

 

 

23

3

4

5

6

7

8

 

 

 

3

 

 

2

5

3

6

5

8

 

 

 

3

 

1

2

4

2

0

4

4

3

2

4

 

 

 

3

7

4

 

 

 

5

0

5

 

 

 

 

 

 

 

 

 

 

 

 

3

 

1

3

5

2

6

5

0

 

 

 

3

 

1

1

2

4

0

3

0

3

2

4

 

 

 

3

6

6

 

 

 

5

0

0

 

 

 

 

 

 

 

 

 

 

 

 

1

 

1

3

1

2

8

5

3

 

 

 

2

 

1

1

2

3

0

3

4

1

3

2

 

 

 

3

4

6

 

 

 

5

0

0

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

2

1

1

2

2

7

 

 

 

2

 

1

1

4

2

4

3

0

1

3

2

 

 

 

3

4

3

 

 

 

5

5

0

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

2

1

3

0

2

6

 

 

 

2

 

1

2

2

4

8

3

0

4

3

2

 

 

 

 

 

 

 

 

 

4

3

8

 

 

 

5

5

0

 

 

 

 

 

 

 

 

 

 

 

 

3

 

1

2

2

3

0

2

9

 

 

 

2

 

1

1

4

1

8

3

2

4

3

2

 

 

 

3

5

4

 

 

 

0

0

0

 

 

 

24

9

10

11

12

13

14

15

 

 

 

4

 

1

4

2

3

0

6

6

 

 

 

3

 

2

2

3

5

6

5

0

4

3

2

 

 

 

1

8

2

 

 

 

00

0

00

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

1

2

3

5

6

4

 

 

 

2

 

 

5

1

1

5

4

5

2

1

4

 

 

 

4

3

4

 

 

 

5

2

4

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

3

3

2

0

2

2

 

 

 

2

 

 

3

2

4

5

3

7

1

3

2

 

 

 

3

2

3

 

 

 

0

5

6

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

3

6

2

2

2

2

 

 

 

2

 

 

3

4

2

5

3

8

2

1

2

 

 

 

3

5

2

 

 

 

0

0

5

 

 

 

 

 

 

 

 

 

 

 

 

3

 

1

3

2

2

0

4

4

 

 

 

3

 

1

1

4

2

0

5

0

4

3

2

 

 

 

4

5

3

 

 

 

0

0

0

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

2

2

2

6

2

1

 

 

 

3

 

1

1

4

3

0

3

2

4

3

2

 

 

 

3

5

4

 

 

 

0

0

5

 

 

 

 

 

 

 

 

 

 

 

 

2

 

1

2

4

1

6

4

4

25

 

 

 

2

 

1

1

2

3

4

2

0

4

2

3

 

 

 

3

5

4

 

 

 

0

0

0

 

 

 

26

Лабораторная работа №7

РАБОТА С ПРЕРЫВАНИЯМИ: ПЕРЕХВАТ И ВОССТАНОВЛЕНИЕ

Цель работы: Изучить алгоритм переопределения и восстановления прерываний.

Задание: Написать программу переопределения прерывания 05h (клавиша Print

Screen).

Замечания:

1.Перед загрузкой нового вектора прерывания необходимо сохранить старый вектор (функция 35h прерывания 21h)

2.Новый обработчик прерывания должен быть FAR-процедурой.

3.Для проверки, новая процедура обработки прерывания 05h должна выводить в динамик сигнал (прерывание 21H). В основной программе должен быть организован большой цикл, например, выводящий на экран символы (прерывание 21h использовать нельзя, можно использовать, например, прерывание 10h). Таким образом, при нажатии на PrintScreen во время этого цикла компьютер должен издавать сигнал.

Прерывания и их переопределение. Иногда необходимо выполнить одну из набора специальных процедур, если в системе или в программе возникают определенные условия, например, нажата клавиша на клавиатуре. Действие, стимулирующее выполнение одной из таких процедур, называется прерыванием. Существует два общих класса прерываний: внутренние и внешние. Первые инициируются состоянием ЦП или командой, а вторые - сигналом, подаваемым от других компонентов системы.

Переход к процедуре прерывания осуществляется из любой программы, а после выполнения процедуры прерывания обязательно происходит возврат в прерванную программу. Перед обращением к процедуре прерывания должно быть сохранено состояние всех регистров и флагов, используемых процедурой прерывания, а после окончания прерывания эти регистры должны быть восстановлены.

Последовательность прерывания состоит в следующем:

текущее значение регистра Flags включается в стек; текущее значение регистра CS включается в стек; текущее значение регистра IP включается в стек; сбрасываются флаги IF и TF.

Новое содержимое IP и CS определяет начальный адрес выполняемой процедуры прерывания (обслуживание прерывания). Возврат в прерванную программу осуществляется командой, которая извлекает из стека содержимое для IP, CS и регистра флагов.

Адреса подпрограмм обслуживания прерываний (вектора прерываний) хранятся в таблице векторов прерываний. Таблица векторов прерываний располагается по адресу 0000:0000 и представляет собой массив из 256 элементов, каждый элемент которого

27

занимает 4 байта и представляет собой начальный адрес процедуры обработки прерывания.

Иногда в программе возникает необходимость переопределения (перехвата) прерываний (например, выполнение дополнительных действий при нажатии определенной клавиши клавиатуры). Процесс перехвата прерываний состоит в следующем:

1.подготавливается FAR-процедура – новый обработчик прерываний (должна заканчиваться командой IRET);

2.сохраняется старый вектор прерывания (функция 35h прерывания 21h)

3.адрес нового обработчика заносится в таблицу векторов прерываний (функция 25h прерывания 21h);

4.в конце программы происходит восстановление первоначального обработчика прерываний.

Функция 35h

Вход:

AH=35H

AL=номер прерывания (00H до 0ffH)

Выход:

ES:BX=адрес обработчика прерывания

Описание: Возвращает значение вектора прерывания для INT (AL), то есть загружает в BX 0000:[AL*4], а в ES - 0000:[(AL*4)+2].

Функция 25h

Вход:

AH=25H

AL=номер прерывания (00H до 0ffH)

DS:DX=вектор прерывания: адрес программы обработки прерывания

Выход:

нет

Описание: Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, в момент записи прерывания будут заблокированы.

Ниже приведен фрагмент программы, иллюстрирующий установку нового вектора прерывания вместо обработчика PrintScreen (05h).

28

CODE SEGMENT

ASSUME CS:CODE,DS:DATA,SS:STACK

;Процедура – новый обработчик прерывания

PRNSCR PROC FAR

. . .

IRET

PRNSCR ENDP

START:

 

XOR AX,AX

;Обычное начало для EXE-программы

MOV BX,DATA

 

MOV DS,BX

 

. . .

 

;Установка

нового вектора

LEA DX,CS:PRNSCR

;Занесение в DX смещения нового обработчика

PUSH DS

;Сохранение сегментного регистра DS

PUSH CS

;Следующие две строки: загрузка рег. DS

POP DS

;значением из CS через стек

MOV AH,25H

;номер функции

MOV AL,5

;номер прерывания

INT 21H

;установка нового прерывания

POP DS

;восстановление DS

. . .

 

CODE ENDS

 

29

Лабораторная работа № 8

ОБРАТНАЯ ПОЛЬСКАЯ ЗАПИСЬ

Цель работы: Изучить алгоритм построения обратной польской записи.

Постановка задачи: Написать программу на языке Pascal, которая для заданного выражения находит его обратную польскую запись.

Краткая теория: Числовое выражение это запись, составленная по определенным правилам из констант, имен, знаков операций и скобок. Константы и имена в выражении обозначают операнды, а знаки операций со скобками задают последовательность операций.

Обычной формой выражений является инфиксная, когда знак бинарной операции записывается между обозначениями операндов этой операции, например a+b. Рассмотрим запись знаков операций после обозначения операндов, т.е. постфиксную запись, например ab+. Такая запись также называется обратной польской (ОПЗ), поскольку ее предложил польский логик Ян Лукасевич.

При построении ОПЗ необходимо учитывать следующие правила:

Значение

Действие

п/п

 

 

1

Идентификатор, число

Поместить символ (набор

 

 

символов) идентификатора в ОПЗ

2

Оператор:

 

2

открывающаяся скобка

поместить скобку в стек

а

 

 

2

арифметический оператор

выталкивать из стека операторы в

б

 

ОПЗ до тех пор, пока приоритет

 

 

текущего оператора будет ниже или

 

 

равным приоритета оператора,

 

 

находящегося в вершине стека

3

закрывающаяся скобка

вытолкнуть из стека в ОПЗ все

 

 

операторы до первой открывающейся

 

 

скобки. Эту скобку из стека тоже

 

 

вытолкнуть, но в ОПЗ не заносить.

4

Завершение выражения

вытолкнуть из стека в ОПЗ все

 

 

оставшиеся операторы

Замечания:

o Исходное выражение читают последовательно слева направо; к выделенным, таким образом, символам применяют табличные правила;

o Правила построения ОПЗ рекурсивны, т.е. ОПЗ более сложных выражений описываются с помощью ОПЗ их более простых подвыражений;

oИз правил вытекает, что порядок операндов в выражении и в ОПЗ одинаковый;

oПорядок знаков операций изменяется: во входном выражении вида a-b

знак “–” предшествует операнду b, а в выходном выражении ab- наоборот. Поэтому знак операции нужно запомнить, выдать второй операнд выражения, а затем уже вернуть знак операции. Такое изменение

30