AOP_Tom1 (1021736), страница 52

Файл №1021736 AOP_Tom1 (Полезная книжка в трёх томах) 52 страницаAOP_Tom1 (1021736) страница 522017-07-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 52)

Последовательность вызова: ЛМР ИАХ1ИУИ. Состояние при входе: гП = и; в предположении, что п ) 1. (4) Состояние при выходе: гА = гпах 00МТЕМТЯ(Х+ А) = 00МТЕМТЯ(Х+ г12); 1<ьяп г13 = 0; содержимое гЛ и С1 также меняется. (Обычно мы не будем упоминать о том, что подпрограмма оказывает влияние на регистр Л и флаг сравнения; здесь об этом говорится только для полноты.) Заметьте, что на гХ и гП подпрограмма действия не оказывает, в противном случае эти регистры были бы упомянуты в описании состояния при выходе. В спецификации должны также перечисляться все внешние для подпрограммы ячейки памяти, на которые она может оказать воздействие.

В нашем случае спецификация позволяет заключить, что в памяти ничего не сохранялось, так каМ в (4) ничего не говорится об изменениях в памяти. А теперь давайте рассмотрим несколько входов в подпрограммы Предположим, существует программа, которой требуется общая подпрограмма ИАХ1ИОН Но дело в том, что обычно использувТся частный случай ИАХ100. для которого и = 100. Эти две подпрограммы можно объединить следующим образом.

ИАХ100 ЕИТЗ 100 Первый вход МАХИ ЯТЗ ЕХ1Т Второй вход ЛИР 2Р Продолжать, как в (1) (5) ЕХ1Т ЭИР ь Вернуться к основной программе Подпрограмма (5) практически такая же, как (1), только первые две команды поменялись местами. Здесь использовался тот факт, что команда "ЕИТЗ" не изменяет содержимое регистра 3. Чтобы добавить к втой подпрограмме гврегпий вход, КАХ50, в начало нужно вставить строки ИАХ50 ЕМТЗ 50 (6) ЛЯЭ ИАХМ (Напоминаю,что "ЗЯХ' означает переход без изменения регистра 3.) Если число параметров невелико, то желательно передавать нх в подпрограмму одним нз двух способов' занеся их в подходящие регистры (аналогично тому.

как мы использовали г13 для хранения параметра и в МАХИ, а гП вЂ” для хранения параметра и в ИАХ1ИОН) либо сохранив их в фиксированных ячейках памяти. Другой удобный способ передачи аргументов состоит в том, чтобы просто перечислить их после команды ЗНР. Подпрограмма сможет обратиться к своим параметрам, поскольку она знает содержимое регистра 3. Например, если бы понадобилось создать для МАХИ последовательность вызова ЛИР ИАХМ СОИ и то подпрограмму можно было бы написать следующим образом: ИАХИ ЯТЗ ь+1 ЕМТ1 ь гП +- г1 1.ОЗ 0,1 г13 +- и ЛИР 2Г Продолжать, как в (1) (8) МАХ100 ЯТЗ 1Р ЗНР МАХИ СОИ 100 1Н ЛИР но это выглядит уже не так привлекательно, как (5).

ЛЗР 1В ЛИР 1,1 Возврат 1 На таких машинах, как 1ВМ 360, на которых связь с подпрограммами обычно осуществляется путем помещения адреса ячейки возврата в индексный регистр, приведенный выше способ особенно удобен. Он используется также, когда у подпрограммы много аргументов либо если программа создана компилятором Метод нескольких входов, который использовался выше, в атом случае не подходит.

Его можно "подделать", написав Для подпрограмм с несколькими выходами обычно используется метод, аналогичный перечисленикт аргументов. Множественный выход означает, что подпрограмма возвращается в одно из нескольких различных мест в зависимости от условий, обнаруженных йодпрограммой. В самом строгом смысле место, в которое возвращается подпрограмма после выхода,— это параметр. Поэтому, если существует несколько мест, в которые она может выйти в зависимости от обстоятельств, они должны быть предоставлены в качестве аргументов.

В нашем завершающем примере в подпрограмме поиска максимума будет два входа и два выхода. Последовательность вызова имеет такой вид. Для и = 100 Для произвольного и ЕМТЗ и ЗМР МАХИ Выйти здесь, если шах < 0 или шах > гХ Выйти здесь, если 0 < шах < гХ 1ИР МАХ100 Выйти здесь, если шэх < 0 или шах > гХ Выйти здесь, если 0 < шах < гХ (Другими словами, выход производится на две ячейки ниже команды перехода, если максимум положителен и меньше значения, которое содержится в регистре Х) Для этих условий подпрограмму написать несложно. ИАХ100 ЕМТЗ 100 Вход для и = 100 МАХИ ЯТЭ ЕХТТ Вход лля произвольного и ЭМР 2Р Далее, как в (1) ЕХ1Т Одни подпрограммы могут вызывать другие подпрограммы. В сложных программах вызовы подпрограмм, вложенных более чем на пять уровней, — это не такое уж редкое явление.

Используя описанную выше связь подпрограмм, необходимо придерживаться единственного ограничения — одна подпрограмма не может вызывать другую подпрограмму, которая (прямо или косвенно) вызывает ее. Например, рассмотрим следуюшнй сценарий. [Подпрограмма С] С БТ1 ЕХ1ТС [Подпрограмма В] В БТЛ ЕХ1ТВ [Главная программа] [Подпрограмма А] А ЯТ1 ЕХ1ТА 1МР В 1МР С ЭИР А ЕХ1ТС 1ИР ь (10) ЕХТТА ЗИР ь ЕХ1ТВ ЗМР ь Если главная программа вызывает А, которая вызывает В, которая вызывает С, а затем С вызывает А, то адрес в ячейке ЕХ1ТА, по которому осуществляется выход ЗЗР 1В ЗАИР ЕХ1Т ЯТХ ТЕИР СМРА ТЕИР 10Е ЕХ1Т ЕМТЗ 1 ЗМР ь,З Выполнить нормальный выход, если шэх < 0 Выполнить нормальный выход, если шах > гХ.

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

В завершение этого раздела кратко рассмотрим подходы к написанию сложных и больших программ. Как узнать, какие подпрограммы нам нужны и какие последовательности вызова нужно использовать? Чтобы успешно решить эту задачу, можно воспользоваться методом итераций. Шаг 0 (Первоначальная идея). Сначала приблизительно выбираем генеральный план действий, которые будут выполняться в программе. Шаг 1 (Черновая схема программы).

Начнем с написания "внешних уровней" программы на любом удобном языке. Снстематизированный подход к этому этапу очень хорошо описан в книге Е. %. Пцкзгга, йгнсгигеп' Ргоягашшшк (Асаг)еппс Ргеээ, 1972), СЬарсег 1, и в работе К. 1т'1гГЬ, САСХ4 14 (1971), 221 — 227. Начать можно с разбиения всей программы на небольшие фрагменты, которые временно можно рассматривать как подпрограммы, хотя они вызываются только один раз. Эти фрагменты можно последовательно разбивать на все более мелкие части, которые будут служить для выполнения все более простых операций. Каждый раз, когда возникает какая-либо вычислительная задача, которая, похоже, встретится где-то еще либо уже где-то встретилась, следует определить подпрограмму (уже не гипотетическую, а реальную) для выполнения этой задачи.

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

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

Как правило, имеет смысл сделать каждую подпрограмму более универсальной. Шаг 2 (Первая рабочая программа). Этот шаг по сравнению с шагом 1— движение в противоположном направлении. Теперь будем использовать компьютерный язык программирования, скажем, И1ХА1., Р1./И1Х или язык высокого уровня. На этот раз начнем с самых низких уровней вложения подпрограмм, затем "поднимемся вверх" и в конце концов напишем главную программу. Рекомендуется, по возможности, не писать какие-либо команды вызова подпрограммы до того, как будет написан код самой подпрограммы.

(На шаге 1 мы старались делать прямо противоположное, не рассматривая подпрограмму до тех пор, пока не будут написаны все ее последовательности вызова.) По мере написания все большего и большего числа подпрограмм наша уверенность будет постепенно расти, так как мы постоянно расширяем возможности программируемого модуля. После написания отдельной подпрограммы необходимо сразу же подготовить полное описание ее функций и ее последовательностей вызова, как в (4). Важно также, чтобы не перекрывались ячейки временной памяти. Если каждая подпрограмма будет обращаться к ячейке ТЕИР, то последствия могут быть катастрофическими, но во время разработки схемы на этапе 1 нам было удобно не беспокоиться об этом. Очевидный способ решения проблем с перекрытием состоит в следующем: нужно выделить для каждой подпрограммы отдельный участок временной памяти, чтобы его использовала только она.

Характеристики

Тип файла
DJVU-файл
Размер
7,53 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее