Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ApplicationProgramming.doc
Скачиваний:
4
Добавлен:
13.11.2019
Размер:
748.03 Кб
Скачать

Министерство образования и науки Российской Федерации

“МАТИ” - РГТУ имени К.Э.Циолковского

Кафедра “Кибернетика ”

ЗАДАЧИ ПО ДИСКРЕТНОЙ МАТЕМАТИКЕ,

МАТЕМАТИЧЕСКОЙ ЛОГИКЕ И ТЕОРИИ АЛГОРИТМОВ

Методические указания к лабораторным работам

по прикладному программированию,

дискретной математике,

математической логике и теории алгоритмов

Составитель:

Чебурахин И.Ф.

Степанов В.С.

Москва

2005

МЕТОДИЧЕСКИЕ УКАЗАНИЯ К ВЫПОЛНЕНИЮ ЛАБОРАТОРНЫХ РАБОТ

1. Практические советы для написания эффективных программ

1. Оптимизация арифметических выражений. Примеры.

1)

Надо записать

2) Для вычисления выражения эффективнее записать его в виде x=a/(b*c), а не в виде x=a/b/c, так как умножение быстрее деления.

2. Оптимизация циклов

3. От языка программирования существенно зависит :

- выбор наиболее эффективного формата данных;

- обработка переполнений;

- выбор наиболее эффективного представления данных;

Следует избегать использования символов, которые часто (или просто) можно неправильно интерпретировать-читать. Это цифра 1 и буква I, цифра 0 и буква О.

4. Эффективное ветвление

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

Всегда надо иметь ввиду, что для комбинации нескольких логических проверок, последовательность проверок условий может сильно влиять на время работы программы.

2. Архитектура первых эвм (краткие сведения).

ПРОГРАММИРОВАНИЕ В МАШИННЫХ КОДАХ.

Основными устройствами первых ЭВМ являлись: арифметическое устрйство (АУ), оперативное запоминающее устройство (ОЗУ) и устройство управления (УУ).

При работе ЭВМ (напр., вычислении) особо важными являются бинарные операции, в которых участвуют 2 операнда: 1-е и 2-е слагаемые, уменьшаемое и вычитаемое, умножаемое и множитель, делимое и делитель и др. АУ должно уметь распознать (декодировать) и выполнить какую-то определенную в данный такт операцию, т.е. получить операнды (из ОЗУ) и выполнить над ними определенное действие и результат занести в ОЗУ. Вся необходимая для этого информация содержится в специальной инструкции. Так как внутренние устройства машины оперируют с данными, представленными в форме двоичных кодов, то и инструкция ( для каждой операции) записывается в форме двоичного кода и называется командой (м. к.). Количество разрядов при записи чисел и командных кодов было одинаковым и называлось словом. Машина оперировала со словами. При этом ОЗУ разделено на отдельные ячейки. В каждой ячейке содержится одно слово. Все ячейки пронумерованы от 0 до N. Номер ячейки называется адресом. ОЗУ устроено так, что при считывании содержимого ячейки оно не изменяется. Когда слово посылается в ячейку ОЗУ, то ранее находившееся там слово стирается и вместо него записывается посылаемое. В нулевой ячейке (ее практически нет) всегда хранится нуль, в нулевую ячейку посылать ничего нельзя.

Структура некоторых команд

КОП

А1

А2

А3

КОП - цифровой код операции, выполняющейся в данном такте. А1 и А2 - адреса операндов, А3 - адрес ячейки ОЗУ, в которую посылается результат. Среди команд имеются команды арифметические, логические, управляющие ходом вычислительного процесса и многие др.

Команды, образующие программу, заносятся в ОЗУ в порядке возрастания номеров ячеек. Во время каждого полного такта ЭВМ выполняется следующее. В блок УУ, называемый счетчиком команд, добавляется 1. По адресу, соответствующему содержанию счетчика команд, УУ выбирает слово из ячейки с этим адресом. Это слово является очередной командой программы и заносится в регистр команд. КОП из регистра команд попадает в дешифратор (ДШ). Код операции превращает их в управляющие импульсы и посылает в те устройства, которые должны выполнять расшифрованную операцию. Если КОП относится к арифметическим или логическим операциям, то импульсы из ДШ идут в АУ. По адресной части команды УУ вырабатывает сигналы управления для ОЗУ, обеспечивающие чтение операндов по адресам А1 и А2 , посылку их в АУ и запись результатов по 3-му адресу А3. После этого в счетчик команд добавляется 1 и весь процесс повторяется. Эта последовательность может быть нарушена в том случае, когда в ходе вычислительного процесса возникает необходимость повторить фрагмент программы или перескочить, не выполняя, через какую-то часть программы. Тогда специальной командой управления в счетчик команд заносится не увеличенный на единицу адрес ячейки, а адрес ячейки, находящийся в управляющей команде. Последовательность выборки команд начинается новая, с этой ячейки.

Длина команды зависит от числа выполняемых машиной инструкций, от числа адресов ( здесь машина 3-х адресная) и разрядности адреса, т.е. числа ячеек в ОЗУ (емкости ОЗУ).

Уже в 1-х ЭВМ был реализован принцип “хранения в ОЗУ программы и данных” (Джон фон Нейман), который несет черты интеллектуальности: возможность изменения программ в ходе вычислений самой ЭВМ. АУ и ОЗУ ЭВМ не различают, что записано в хранящемся в ОЗУ слове - команда или число - все дело в том, в какое устройство оно посылается. Если в АУ, то оно расшифровывается как число, а если в УУ, то - как команда. Сл., если командное слово направить в АУ, то можно произвести над ним арифметические действия при помощи вспомогательных чисел, преобразовать его, а затем вернуть обратно в его ячейку. Теперь, когда эта команда попадет в УУ, она будет действовать по-другому. Если преобразовалась часть, определяющая КОП, то она с теми же операндами выполнит другое действие, если преобразовывались адресные части, то прежняя команда будет выполняться над другими операндами.

Примеры команд

Операция

Код

Сокращенное обозначение операции

Сложение

01

Сл

Вычитание

02

Вч

Модуль разности

03

Мвч

Умножение

05

Умн

Деление

07

Дл

Печать

30

Печ

Останов

77

Ост

Условная передача управления

21

УПУ

Безусловная передача управления

22

БПУ

Команда УПУ (код 21) - изменяет последовательное выполнение команд из ОЗУ в зависимости от результата, полученного при выполнении предыдущей команды. Во 2-м адресе указывается адрес той ячейки, из которой надо взять для выполнения следующую команду и послать ее в УУ (в регистр команд), если результат предыдущей операции был отрицательным. При этом 1-й и 3-й адреса игнорируются. Если результат предыдущей операции был положительным, то команда 21 просто не срабатывает, пропускается, а выполняется следующая за ней команда. Эта команда может реагировать не только на отрицательный результат предыдущей операции, но и на результаты некоторых логических операций. Поэтому в общем виде информация, передаваемая в зависимости от отрицательного результата (для вычитания) или от логических команд для следующей команды УПУ (код 21) из АУ, отмечается “флажком”.

Команда БПУ (код 22) - всегда, независимо от наличия флажка, передает управление команде в ячейку, указанную во 2-м адресе команды БПУ.

Пример. Составим программу вычисления квадратного корня в кодах машины.

Используем итерационную формулу За начальное значение y0 примем a/2. Заданная точность  будет получена, когда для некоторого n выполнится условие и, сл., дальнейшие вычисления прекращаются.

Составим блок-схему алгоритма

Теперь по алгоритму составим программу, записывая ее в таблице.

Номера ячеек в ОЗУ

Содержимое ячеек

ОЗУ

Примечания

001-012

Машинные константы

013

0,64

а = 0,64

014

0,5

множитель в формуле

015

0,0000001

016

Yn

017

Yn+1

018

для промеж. рез.

019

для промеж. рез.

020

для промеж. рез.

021

для промеж. рез.

022

05 014 013 016

Yn = Yo = a/2

023

07 013 016 018

024

01 016 018 018

025

05 018 014 017

Yn+1 = Y1 = 0,5(Yn + a/Yn)

026

03 016 017 018

получен Yn-Yn+1

027

01 000 017 016

Yn+1  Yn

028

02 015 018 018

 - Yn-Yn+1 значение разности нас не интересует, важен знак, отмечаемый флажком для следующей команды

029

21 000 023 000

при знаке минус предыдущей операции повторение цикла итерации с команды в ячейке 23

030

30 000 017 000

печать

031

77 000 030 000

032

При запуске программы указывается адрес ячейки, в которой находится 1-я исполняемая команда.

Л А Б О Р А Т О Р Н А Я Р А Б О Т А N 1.1

по теме : Оптимизация программ, вычисляющих арифметические выражения (2 часа).

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

1) P5(x) = 2x5 + 3 x4 - x3 + 4x2 + 5x + 1 при x = 3;

2)

3)

Л А Б О Р А Т О Р Н А Я Р А Б О Т А N 1.2

по теме : программирование в машинных кодах (2 часа).

Постановка задачи: Составить программу вычисления заданного выражения в машинных кодах.

Варианты заданий указываются ниже.

1. 2. 3.

4. 5. 6.

7. 8. 9.

10. 11. 12.

13. 14.

15. 16. 17.

18. 19.

20. 21.

Л А Б О Р А Т О Р Н А Я Р А Б О Т А N 1.3.

по теме : программирование с использованием сокращенных обозначений

операций (2 часа).

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

Варианты заданий указываются в предыдущей работе.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]