НОВОСТИ    БИБЛИОТЕКА    КАРТА САЙТА    ССЫЛКИ    О ПРОЕКТЕ  

предыдущая главасодержаниеследующая глава

Программирование

Программирование
Программирование

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

Путеводитель по "машинному городу"

Предположим такую ситуацию.

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

Но, увы, задача для машины - нечто непостижимое, "электронный мозг" ничего не может поделать ни с формулами, ни с уравнениями, ни с расчетами. Машина не понимает, чего от нее хочет человек.

Как же донести задачу до машинного "сознания", как растолковать машине ее смысл?

Как - это знает программист.

Программист - связующее звено между машийой и задачей, которую машине предстоит решить.

У программиста очень ответственная роль - он должен "машинно" представить себе задачу. Он обязан разбить любую из сложных задач на последовательность простых команд, таких, что с ними могла бы справиться машина.

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

Этот перечень, эта совокупность команд и есть программа для работы машины.

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

нужные для выполнения той или иной последовательности, программист должен представить себе, а представив, "проложить" в машине.

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

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

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

Вы, конечно, обратили внимание в главе "Быстродействующая электронная цифровая вычислительная машина" на ту связь, которая существует между программой машины и ее управляющим устройством. Устройством, в котором как бы сконцентрированы все внутренние связи, в котором "перерабатываются" все команды управления таким сложным автоматом, как быстродействующая вычислительная машина. Наверное, вспомнили и сравнение управляющего устройства с дирижером, а программы - с партитурой? Не забыли и все пути чисел и команд в вычислительном агрегате. Теперь посмотрим, как же наш "дирижер" читает "партитуру".

* * *

Итак, управляющее устройство работает в тесной связи с программой.

Оператор включает машину, вкладывает в нее программу со списком команд, которые поочередно надо выполнять, чтобы решить задачу.

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

...В управляющее устройство поступила очередная команда. Оно тут же "открывает" нужную группу клапанов, заставляет машину выполнить эту команду. Допустим, поступила команда: сложить число в регистре В с числом в регистре А, сумму направить в регистр С.

Машине надо открыть группу клапанов, передающих числа через сумматор, и по каналам связи "пробежит" такая серия команд: "Передать из регистра В в сумматор", "Передать из регистра А в сумматор", "Передать из сумматора в регистр С".

Пример реализации программы в машине
Пример реализации программы в машине

Для вычитания понадобятся другие клапаны и т. д.

Обратили внимание? Каждая команда содержит в себе две составные части: она указывает, "что делать" и "где делать". Специалисты так их и называют: операцией и адресной частью или попросту адресом.

Надо признаться, в машине команды выглядят совсем не так, как на этом рисунке. Они обретают привычный для машины вид - кодируются цифрами и знаками.

* * *

Попробуем составить для машины программу вычисления общего наибольшего делителя двух чисел, а и b, по известному нам алгоритму Евклида.

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

Вот небольшая таблица операций, которая поможет нам составить программу:


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

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

Второе - если же число из сумматора передается в ячейку, то число, стоявшее там раньше, "стирается" и на его место становится посланное туда. В сумматоре же посланное число остается без изменений.

И еще надо обязательно помнить, что при неравенстве чисел а и b нам придется устанавливать, какое из них больше, а какое меньше.

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

Приступим к составлению программы.

В ячейках оперативной "памяти" с № 1 по № 13 поместим команды. В ячейку № 20 - число а, в ячейку № 21 - число b. Адреса ячеек-регистров запишем в десятичной системе.


Проследим по таблице за работой машины. Она пущена в ход, и в управляющее устройство поступила команда из регистра-ячейки 01. В следующем такте команда будет выполнена. Число из ячейки 20 - первое число а - поступит в сумматор, предварительно поставленный на нуль, оно там и останется.

Затем в управляющее устройство поступит команда из ячейки 02. И число b из ячейки 21 вычтется из числа а. Тем самым, как мы увидим дальше, реализуется второе указание алгоритма Евклида: о сравнении обоих чисел. Теперь в действие вступает условная команда, поступившая из ячейки 03 в порядке очереди. Управляющее устройство проверит результат предыдущей операции. Если разность равна нулю, то числа равны и каждое из них дает общий наибольший делитель. Машина напечатает число, и задача решена.

Если же разность не равна нулю, то есть числа не равны, то, согласно условной команде, управляющее устройство обратится к следующей команде в ячейке 05. Затем к ячейке 06. По командам, стоящим в этих ячейках, число а из ячейки 20 поступит снова в сумматор, поставленный предварительно на нуль, и из него вычтется число b из ячейки 21.

В сумматоре образуется разность. Тогда в действие вступает условная команда из ячейки 07. Если разность отрицательна - второе число меньше первого, - то их, согласно алгоритму, нужно поменять местами.

Команда условного перехода передает управление ячейке 10. По ее команде в сумматор будет передано число из ячейки 21, второе число b. Затем из него будет вычтено число, стоящее в ячейке 20, число а. Их разность положительна. Эта разность по команде ячейки 12 будет помещена в ячейку 21. И, наконец, команда ячейки 13 передает управление машиной вновь ячейке 01.

Цикл начнет повторяться, пятое указание алгоритма будет выполнено. В ячейку 20 поступит число а, в данном случае вычитаемое (как меньшее из двух чисел). Из него вычтется остаток, расположенный теперь в ячейке 21, и т. д.

Если же образованная в результате выполнения команд 05 и 06 разность будет положительной, то после команды 07 последует команда из ячейки 08. Положительный остаток будет передан в ячейку 20, а управление машиной по команде из ячейки 09 вернется к ячейке 01. И, как в предыдущем случае, начнется новый цикл. В нем, согласно алгоритму Евклида, вычитаемое и остаток.

И так цикл за циклом будет идти весь процесс поиска общего наибольшего делителя, пока не будет достигнуто равенство - в ячейках 20 и 21.

Значит, вся программа составлена из 13 команд. По ней можно отыскивать общий наибольший делитель для любой пары чисел. Количество команд останется всегда одинаковым. Но общее число циклов повторения будет различным - оно зависит от значения чисел а и b.

Нетрудно проверить, что если a = 21, а b = 14, то третий цикл приведет к отысканию общего наибольшего делителя, равного 7. А при многозначных числах циклов уже будут десятки и даже сотни.

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

Необходимо заметить, что без программ все электронно-вычислительные машины, даже способные делать миллионы операций в секунду,- это, в лучшем случае, по словам крупного специалиста по применению ЭВМ академика Г. Марчука, всего лишь "предмет обстановки" институтских и заводских помещений. Ведь программа организует весь конвейер вычислений, или, как говорят, переработки информации от ввода в машину до вывода. Именно программа обеспечивает выполнение всех операций, заданных машине.

Программисты готовят целые серии стандартных программ для решения типовых задач. Чем большим набором таких программ снабжается ЭВМ, тем лучше она приспособлена для работы, тем "доходчивее" она для потребителя, тем удобнее ею пользоваться, тем выше ее ценность.

Теперь стремятся выпускать машины с полным набором стандартных программ, не жалея для этого сил и средств. Например, в американской компании по производству вычислительных машин "ИБМ" около полутора тысяч человек постоянно заняты соста^влением программ для выпускаемых машин. Библиотека программ, составленная только для одной машины марки "1900", включает в себя свыше 3,5 миллиона команд.

Пример программирования. Последовательность команд показана слева внизу. 31 означает перенос числа в сумматор, 37 - умножение чисел, 35 - сложение, и т. д
Пример программирования. Последовательность команд показана слева внизу. 31 означает перенос числа в сумматор, 37 - умножение чисел, 35 - сложение, и т. д

Составление программ превратилось теперь в своего рода индустрию математического обеспечения вычислительных машин. Эта индустрия обходится дороже, чем сами машины, - обеспечение программами машины "ИБМ-360" стоило около одного миллиарда долларов.

Что же это такое - математическое обеспечение? Это комплекс - буквально множество - программ, собранных в специальные библиотеки. Они делают машину работоспособной, пригодной для практического решения задач. Это, как говорят специалисты, то же самое, что для людей высшее образование. Без него машина - "кусок железа".

В наши дни родилась новая специальность: инженер по системам математического обеспечения - вот почему так много внимания уделяется подготовке программистов. Без них практически невозможна эксплуатация электронных вычислительных машин, которые теперь работают всюду.

Квалифицированный программист должен иметь серьезное математическое образование. Тем, кто думает стать программистом, надо основательно изучать математику.

Путеводитель по 'машинному городу'
Путеводитель по 'машинному городу'

предыдущая главасодержаниеследующая глава











© ROBOTICSLIB.RU, 2001-2019
При копировании материалов проекта обязательно ставить ссылку на страницу источник:
http://roboticslib.ru/ 'Робототехника'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь