Практикум для изучения дисциплины «Основы программирования»



Pdf көрінісі
бет8/81
Дата08.07.2020
өлшемі1,55 Mb.
#74978
түріПрактикум
1   ...   4   5   6   7   8   9   10   11   ...   81
Байланысты:
А.А. Тюгашев

ЗАМЕЧАНИЕ 
Метод решения задачи может быть записан разными способами. 
Помимо  того,  что  язык  служит  средством  общения  и  передачи 
информации,  он  является  и  механизмом  мышления.  Многие  полиглоты 
отмечали, что в зависимости от того, на каком языке они думают в данный 
момент,  они  формулируют  идеи  по-разному,  идут  к  выводам  несколько 
разными  путями  и  даже  получают  различные  умозаключения.  Дуглас 
Хофштадтер написал: «Я обнаружил, что, когда я «думаю по-французски» 
мне  в  голову  приходят  совсем  иные  мысли,  чем  когда  я  «думаю  по-


14 
 
английски»! Мне захотелось понять, что же главнее, язык или мысли?» [2]. 
Карлу  V  Габсбургу,  императору  Священной  Римской  империи, 
приписывают  высказывание:  «Если  бы  я  хотел  говорить  с  мужчинами,  я 
говорил  бы  по-французски,  если  бы  я  хотел  говорить  с  женщинами,  я 
использовал бы итальянский, если бы я хотел говорить с моей лошадью, я 
бы говорил на немецком, если бы я хотел говорить с Богом, я бы говорил 
по-испански». 
Физики,  математики,  химики,  ботаники  и  даже  астрологи  для  описания 
своих  задач  и  методов  их  решения  используют  специфичные  языки, 
удобные в каждом конкретном случае. Жан-Луи Лорьер отмечает [4], что 
привычный  всем  со  школы  современный  язык  математики,  кажущийся 
столь  логичным  и  естественным,  рождался  в  муках  на  протяжении 
тысячелетий. В современном виде он существует совсем недавно, причем в 
некоторых  разделах  науки  (скажем,  в  математической  логике,  где  можно 
для обозначения одного и того же действия встретить запись и →, и ⊃, и 

) до сих пор не существует единой общепринятой системы обозначений! 
Вычисления  в  Древнем  Египте  или  Вавилоне  были  гораздо  более 
громоздкими  и  трудоемкими  просто  в  силу  используемых  форм  записи. 
Для примера Лорьер приводит два математических выражения — в записи 
Франсуа Виета (1540–1603): 
 









− +


in
in
aequebit ur
H
B
F
D
A
F
D
 
и принятой сейчас: 
 

=
+
.
ay
by
x
b
y
 
 
Контрольные вопросы и упражнения 
1. 
Что такое программирование? 
2. 
Что такое язык? 
3. 
В  чем  заключается  разница  между  естественным  и  искусственным 
языками? 
4. 
Какие  языки,  используются  в  искусстве,  технике,  других  областях? 
Приведите свой пример. 
5. 
Что такое знак (символ)? 
6. 
В чем заключается синтаксический аспект языка? 
7. 
В чем заключается семантический аспект языка? 


15 
 
8. 
В чем заключается прагматический аспект языка? 
9. 
Каковы функции различных языков? 


16 
 
История развития языков 
программирования 
При формулировании понятия «программирование» мы упоминали о том, 
что  здесь  подразумевается  подготовка  программ  для  ЭВМ,  или 
компьютера. Попробуем рассказать подробнее, что под этим понимается. 
Компьютер — некая машина, способная выполнять различные действия в 
соответствии  с  заложенной  в  нее  программой.  Именно  программа 
определяет возможность полезного применения ЭВМ, без нее она остается 
практически  ненужной  грудой  «железа» —  проводов,  микросхем, 
пластмассы.  Благодаря  возможности  менять  исполняемые  программы, 
закладываемые  в  память  машины  без  изменения  ее  электронной  схемы, 
мы  получаем  удивительное  и  не  характерное  для  ранее  созданных 
человеком машин свойство — универсальность, то есть способность одной 
и той же машины выполнять разные функции. 
Программа представляет собой некую систематизированную совокупность 
инструкций (команд), которые входят в перечень доступных (исполнимых) 
для  конкретной  ЭВМ.  Набор  доступных  команд  (система  команд
современного  компьютера  обычно  довольно  примитивен  и  состоит  из 
элементарных  действий,  подобных  сложению  или  пересылке  данных, 
производимых  над  содержимым  ячеек  памяти  ЭВМ.  Потрясающе,  но 
именно выполнение большого (действительно большого!) количества этих 
элементарных  действий  в  нужном  порядке  позволяет  современным  ЭВМ 
вычислять  траектории  полета  космических  аппаратов  к  Юпитеру,  весьма 
правдоподобно  имитировать  сражение  на  Курской  дуге,  обыгрывать 
чемпиона  мира  по  шахматам,  анализировать  тайны  мира  элементарных 
частиц и выполнять иные столь же сложные задачи. 
Программист — человек, занятый программированием, иными словами — 
маг  и  чародей,  который  способен  заставить  компьютер  выполнять  все 
перечисленное (и еще то, что пока не заставили выполнить компьютер, но 
замысел  чего  уже  появился  в  голове  читателя).  Но,  конечно,  любой  маг 
должен  знать  нужные  заклинания.  В  нашем  случае  заклинания —  это 
языки программирования, на которых составляются программы. 
К  какому  моменту  можно  отнести  появление  первого  программируемого 
компьютера (подчеркнем это слово, поскольку машины для автоматизации 
счета  известны  с  глубокой  древности —  вспомним  абак,  но  управление 
процессом вычислений производилось вручную)? Первым программистом 
в  истории  человечества  часто  называют  леди  Лавлейс,  составившую  для 
так  называемой  аналитической  машины  Чарльза  Бэббиджа  несколько 
предписаний, в том числе самое сложное, с вложенными циклами (причем 


17 
 
Ада  Лавлейс,  фактически,  и  ввела  такое  фундаментальное  понятие 
программирования,  как  цикл!),  по  расчету  чисел  Бернулли. 
Справедливости  ради  отметим,  что  аналитическая  машина  существовала 
лишь в проекте. Основывалась она не на электричестве, а на механических 
узлах  и  должна  была  оснащаться  паровым  двигателем  (да,  именно  это 
было вершиной техники в 1830-е годы, когда создавался этот выдающийся 
проект).  Однако  если  бы  машина  была  построена,  она  стала  бы  первым 
программируемым  компьютером.  Для  ввода  программы  в  машину 
предполагалось использовать карты с отверстиями (перфокарты), подобно 
тому, как программируются узоры, создаваемые на ткацком станке. 
Фактически,  программа  Ады  Лавлейс  (кстати,  в  честь  этой  хрупкой 
женщины  назван  язык  программирования,  разработанный  по  заказу 
министерства обороны США) представляет собой набор карт, а не некую 
запись в виде текста. 
 
Заметим, что к числу гениальных прозрений леди Лавлейс следует отнести 
и  то,  что  она  предвидела  возможность  машины  оперировать  не  только 
числами,  но  и  произвольными  объектами,  выраженными,  например, 
алгебраически  в  символьной  форме  (то есть  то,  что  ныне  называется 
символическими  вычислениями,  или  компьютерной  алгеброй),  и  даже 
звуками, представляемыми нотами. 
Тем не менее машина Бэббиджа не была построена. В какой же стране и 
когда  появился  действительно  функционировавший  компьютер?  Был  он 
электронным  или  механическим?  И  какой  язык  программирования 
применялся?  Из  одной  книги  по  информатике  в  другую  кочует 
укоренившийся  миф,  гласящий,  что  страна —  США,  машина — 
электронная, а год — 1946-й. Это не соответствует действительности. Еще 
в  1938  году  немецкий  инженер  Конрад  Цузе  построил  Z1 —  первую  из 
трех  модификаций  своей  вычислительной  машины.  Элементной  базой 
служили  списанные  с  телефонной  станции  реле —  фактически,  машина 
была  электромеханической.  Программа  должна  была  задаваться  с 
помощью ленты с отверстиями — перфоленты. 
Однако  Цузе,  как  и  леди  Лавлейс  за  век  до  него,  увлекла  идея  создания 
универсальной  машины,  способной  решать  задачи  не  только 
вычислительные,  но  и  из  других  областей.  Он  назвал  этот  свой  проект 
логической  машиной.  Жаль,  что  она,  как  и  аналитическая  машина 
Бэббиджа,  так  и  не  была  построена  (правда,  по  чертежам  и  записям 
Бэббиджа  базовые  части  аналитической  машины  были  реализованы 
энтузиастами позже, уже в XX веке). 
В 1945 году, по окончании Великой Отечественной войны, Цузе переехал 
из  Берлина  в  Баварские  Альпы,  где  и  занялся  определением  языка  для 
будущей  логической  машины.  Язык,  названный  им  Plankalkül  (по-русски 


18 
 
произносится  «планкалкюль»,  приблизительно  означает  «планирующее 
исчисление»), фактически, представляет собой языком программирования 
высокого уровня с такими современными чертами: 
 
наличие повторно вызываемых функций; 
 
встроенные типы данных; 
 
массивы; 
 
аналог условного оператора; 
 
аналог оператора assert; 
 
исключения; 
 
цикл 
ПОКА. 
Аналога  оператора  безусловного  перехода  GOTO  в  языке  не  было —  в 
полном  соответствии  с  разработанными  спустя  десятилетия  строгими 
принципами структурного программирования! 
Весьма  любопытной  особенностью  языка  Plankalkül  являлась  двумерная 
запись  программы,  что  роднит  его  с  некоторыми  современными  так 
называемыми эзотерическими языками (BeFunge и пр.) и, вероятно, может 
рассматриваться  как  признак  его  более  высокого  уровня  (!),  но  весьма 
усложняет  построение  транслятора.  Однако,  по  крайней  мере,  для 
подмножества  (причем  линеаризованного)  оригинального  языка — 
Plankalkül 2000, энтузиастами компилятор (на машинный код современной 
ЭВМ) 
был 
создан, 
как 
и 
эмулятор 
машины 
(см. 
http://www.zib.de/zuse/Inhalt/Programme/Plankalkuel/Plankalkuel-
Report/Plankalkuel-Report.htm
). 
Далее приводится пример программы на этом языке (сортировка): 
P6 sort (V0[:6.8.0]) => R0[:6.8.0] 
 
W1[0](4)[
 
 
V0[i0:8.0] => Z0[i0:8.0] 
1 => Z4[:32.0] 
W1[1](i0) 

(V0[i0:8.0] < Z0[i1:8.0]) & (Z4[:32.0]=1) → 

i0-i1 => Z1[:32.0] 
W1[2](Z1[:32.0])
 
 

i0 — i2 — 1 => Z3[:32.0] 
i0 — i2 => Z2[:32.0] 


19 
 
Z0[Z3[:32.0]:8.0] => Z0[Z2[:32.0]:8.0] 

V0[i0:8.0] => Z0[i1:8.0] 
0 => Z4[:32.0] 



END 
Цузе  и  сам  предполагал  создать  автоматический преобразователь  (аналог 
современных  трансляторов  с  языков  высокого  уровня  в  машинный  код) 
программы  на  Plankalkül  в  исполнимую  на  его  предполагаемой  машине 
перфоленту,  но  это  не  было  им  воплощено  в  реальность.  Однако  Цузе 
составил  49  страниц  программ  на  Plankalkül  для  оценки  шахматных 
позиций. 
На  заре  вычислительной  техники  программы  вводились  в  память  ЭВМ  с 
пульта,  перемычками  или  тумблерами.  Программа  писалась  в  машинных 
кодах — а память ЭВМ и тогда, и сейчас может хранить лишь двоичные 
представления. Пример программы в машинном коде (это настоящий код 
архитектуры  PDP-11/СМ  ЭВМ,  предполагающий  прибавление  64  к 
содержимому первого регистра процессора): 
0110010111000001 
0000000000000100 
0000000000000000 
К  сожалению,  машинный  язык  весьма  неудобен  для  человека, 
которомуприходилось  запоминать,  какие  команды  кодируются  какими 
последовательностями  нулей  и  единиц,  в  ячейках  с  какими  номерами 
хранятся  промежуточные  результаты  вычислений  и  пр.  Неудивительно, 
что программирование было занятием непростым, доступным немногим, в 
программы по невнимательности вносилось большое количестве ошибок. 


Достарыңызбен бөлісу:
1   ...   4   5   6   7   8   9   10   11   ...   81




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет