GeoSELECT.ru



Программирование / Реферат: Вывод на экран текущий каталог в графическом режиме (со скролингом) (Программирование)

Космонавтика
Уфология
Авиация
Административное право
Арбитражный процесс
Архитектура
Астрология
Астрономия
Аудит
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника
Бухгалтерский учет
Валютные отношения
Ветеринария
Военная кафедра
География
Геодезия
Геология
Геополитика
Государство и право
Гражданское право и процесс
Делопроизводство
Деньги и кредит
Естествознание
Журналистика
Зоология
Инвестиции
Иностранные языки
Информатика
Искусство и культура
Исторические личности
История
Кибернетика
Коммуникации и связь
Компьютеры
Косметология
Криминалистика
Криминология
Криптология
Кулинария
Культурология
Литература
Литература : зарубежная
Литература : русская
Логика
Логистика
Маркетинг
Масс-медиа и реклама
Математика
Международное публичное право
Международное частное право
Международные отношения
Менеджмент
Металлургия
Мифология
Москвоведение
Музыка
Муниципальное право
Налоги
Начертательная геометрия
Оккультизм
Педагогика
Полиграфия
Политология
Право
Предпринимательство
Программирование
Психология
Радиоэлектроника
Религия
Риторика
Сельское хозяйство
Социология
Спорт
Статистика
Страхование
Строительство
Схемотехника
Таможенная система
Теория государства и права
Теория организации
Теплотехника
Технология
Товароведение
Транспорт
Трудовое право
Туризм
Уголовное право и процесс
Управление
Физика
Физкультура
Философия
Финансы
Фотография
Химия
Хозяйственное право
Цифровые устройства
Экологическое право
   

Реферат: Вывод на экран текущий каталог в графическом режиме (со скролингом) (Программирование)



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

Уральского государственного технического университета



Кафедра микропроцессорной техники



Курсовая работа



На тему: Вывод на экран текущий каталог в графическом режиме (со
скролингом)



Руководитель В.П. Кулюкин

Студент гр.СП-923



г.Нягань
2001г.


СОДЕРЖАНИЕ

1. ВВЕДЕНИЕ 3
2. ОСНОВНАЯ ЧАСТЬ 4
3. ЗАКЛЮЧЕНИЕ 17
4. БИБЛИОГРАФИЧЕСКИЙ СПИСОК 18



Введение.

Ассемблер- один из самых старых из существующих сегодня языков
программирования.Когда-то это был самый основной язык, без которого нельзя
было заставить компьютер сделать что-либо полезное.
Постепенно ситуация менялась. Появились более удобные средства общения с
компьютером. Но в отличии от других языков ассемблер не умирал, более того
он немог этого сделать в принципе.
Если коротко, то ассемблер- это символическое представление машинного
языка. Все процессы в машине на самом низком, аппаратном уровне приводятся
в действие только командами машинногшо языка.
Отсюда понятно, что несмотря на общее название, язык Ассемблера для каждого
типа компьютера свой. Это касается и внешнего вида программ, написанных на
Ассемблере, и идей, отражением которых этот язык является.



Описание программы.

Windows-приложение на ассемблере содержит один сегмент данных .data и
один сегмент кода .code. В программе использовано 28 функций API. Параметры
этим функциям передаются через стек, результат возвращается в регистре ЕАХ.
Регистр mode1 задает модуль сегментации (flat) и стиль генерации кода при
входе в процедуры программы и выходе из них (stdcall). Модель памяти flat
обозначает плоскую модель памяти. В соответствии с этой моделью компилятор
создает программу, которая содержит 32-битовый сегмент для данных и кода
программы. Указание этой модели памяти заставляет компоновщик создать
исполняемый файл с расширением .exe. Параметр stdcall определяет порядок
передачи параметров через стек справа налево.
Директива include включае в программу файл win32.inc.
Функции Win32 API, используемые в программе должны быть объявлены с помощью
директивы extrn для того, чтобы компилятор мог сгенерировать правильный
код.
Строки 35-68 содержат описание сегмента данных, в котором определяются
переменные и экземпляры структур, используемые в программе. Для запуска
приложения под управлением Windows необходимо выполнить ряд шагов,
содержание которых заключается в вызове ряда функций Win32.API:
* Выполнение стартового кода;
* Выполнение главной функции, которая выполняет следующие действия;
. Регистрирует класс окна;
. Создает окно;
. Отображает окно;
. Запускает цикл обработки сообщений;
. Завершает цикл обработки сообщения;
* Организация обработки сообщений в оконной процедуре.
Оконная процедура определяет то, что выводится в рабочую область окна, и
то, как окну реагировать на пользовательский ввод.Создание окна выполняется
функцией Win32 API CreateWindowEx. Для этого ей нужно передать множество
параметров. Для создания окна необходимы 2 шага: сначала определение класса
окна, а лишь затем непосредственно его создание.
После выполнения функции CreateWindowExA создается окно, но это пока
произойдет только лишь внутри самой Windows, - на экране это новое окно
пока еще не отобразится. Для того чтобы созданное окно появилось на экране,
применяем функцию ShowWindowA. В качестве параметров этой функции
передается дескриптор hWnd окна, которое необходимо отобразить на экране, и
константа, задающая начальный вид окна.
Приложение может иметь несколько оконных функций. Их количество
определяется количеством классов окон, зарегестрированных в системе
функцией Register Class(Ex).
Windows требует, чтобы оконная функция сохраняла значения регистров ebi,
edi и esi ,т.к. оконная функция должна быть рекурсивной.По завершении
работы оконная функция формирует значения в регистре EAX. Если сообщение
обрабатывалось в оконной функции, то в eax необходимо поместить нулевое
значение.
Полосы прокрутки - этоэлементы управления, предназначенные для
регулирования вертикального и горизонтального положения на экране
ассоциированных с ними объектов. Разница между полосами прокрутки,
являющимися частью окна и полосами прокрутки - дочерними окнами, состоит в
том, что дочерние окна имеют встроенный клавиатурный интерфейс, позволяющий
воздействовать на полосу прокрутки с помощью клавиатуры. Сообщение
SB_LINEUP генерируется обеими полосами при щелчке на верхней или левой
стрелке, а сообщение SB_LINEDOWN - в случае нажатия нижней или правой
стрелки. Чтобы полоса прокрутки функционировала корректно необходимо
определить для нее диапозон прокрутки и задать позицию бегунка.
Встроенная полоса прокрутки, к сожалению, досталась только управлению с
помощью курсора мыши. По умолчанию для полос прокрутки, являющимися частью
окна, этот диапозон(число шагов мужду крайними позициями бегунка) определен
от 0 до 100. Для того, чтобы изменить диапозон прокрутки необходимо вызвать
функцию SetScrollRange
В Windows не смотря на то, что операции ввода осуществляемые приложением,
ограничены рабочей областью его окна, программа должна быть готова обновить
информацию в этой области по требованию системы.
В программе использован ряд функций Windows API, которые как бы являются
основными, когда речь идет об оконных процедурах (CreateWindow, ShowWindow
и др.).
Рассмотрим подробнее процедуры, которые организованы на основе стиля окна.
Краткое описание процедур:
InvalidateRect - эта функция добавляет прямоугольник к области модификации
указанных окон. Область модификации является частью области клиентского
окна, которая должна быть повторно перересована.
Параметры:
hWnd определяет окно, чья область изменилась, если этот параметр равен 0,
то Windows изменяет все окна и посылает оконной процедуре сообщение
*WM_ERASEBKGND and WM_NCPAINT*;
lpRect указатель на структуру RECT, которая содержит координаты
клиентского прямоугольника, который будет добавлен к области
модификациибласти. Если этот параметр равен ноль, то вся область клиента
добавляется к области модификации.
BErase определяет должен ли быть стерт фон в пределах области модификации.
Если этот параметр true, фон стирается при вызове BeginPaint

GetClientRect - отыскивает координаты области клиента окна. Клиентские
координаты определяют координаты верхнего левого и правого нижнего углов.
Координаты верхнего левого угла равны (0,0).
Параметры:
hWnd : определяет окно, координаты которого надо найти.
lpRect: указатель на структуру, которая получит кооридинаты.
При правильном завершении функции возвращается значение, отличное от 0.
SetScrollRange - функция устанавливает минимальное и максимальное значения
позиций для указанной полосы прокрутки. Может также использоваться для
скрытия стандартной полосы прокрутки.
Параметры :
hWnd : определяет, что это стандартное окно с полосой прокрутки или просто
полоса прокрутки, в зависимости от значения параметра nBar.
nBar: определяет полосу прокрутки. Этот параметр может принимать разные
значения. Он устанавливает диапазон управления, если полоса окно.
Устанавливает диапазон стандартной вертикальной или горизонтальной полосы
прокрутки. Определяет минимальную прокручиваемую позицию. Определяет,
должна ли быть полоса прокрутки повторно оттянута. Если истина, то да,
должна быть.

ScrollWindow - функция, которая прокручивает содержание области клиента
указанного окна.
hWnd : определяет дескриптор окна, где клиентская область должна быть
прокручена.
XAmount: определяет состав модуля для горизонтальной прокрутки.
YAmount: определяет состав модуля для вертикальной прокрутки.
lpRect: указатель на структуру RECT , определяющую часть области клиента
для прокрутки. Если этот параметр равен 0, то прокручивается вся клиентская
область
lpClipRect: указатель на структуру RECT , содержащую координаты
прямоугольника отсечения.
Если функция выполнилась правильно, то она возвращает значение, отличное от
ноля.

SetScrollPos - функция, которая устанавливает позицию бегунка в указанной
полосе прокрутки и изменяет эту позицию.
Параметры:
hWnd : идентифицирует полосу прокрутки или окно со стандартной полосой
прокрутки, в зависимости от значения параметра nBar.
nBar: определяет полосу прокрутки.
Этот параметр может принимать одно из следующих значений:
- SB_CTL - устанавливает позицию бегунка в управлении полосы прокрутки,
hWnd - дискриптор полосы прокрутки.
- SB_GORS - устанавливает позицию бегунка в стандартной горизонтальной
полосе прокрутки.
- SB_VERT - устанавливает позицию бегунка в стандартной вертикальной
полосе прокрутки.
nPos: параметр, определяющий новую позицию бегунка. Она должна быть в
пределах прокручиваемого диапазона.
bRedraw: параметр, определяющий оттянута ли повторно полоса прокрутки, для
того чтобы отобразить новую позицию бегунка. Если этот параметр истина, то
полоса прокрутки повторно оттянута.
Если функция неправильно завершена, то возвращается ноль.



1. p486 ; эта директива разрешает транслятору
; обрабатывать команды процессора i486
2. jumps ; транслятор автоматически преобразует
; команду условной передачи управления в комбинацию
; условной и безусловной команд, если условная команда в
; cилу ограниченности области своего действия не
; обеспечивает передачу управления по нужному адресу

3. model flat,STDCALL ; выбирается модель памяти для 32-
; разрядного программирования и правила
;передачи параметров функциям STDCALL,
; далее действующие по умолчанию

4. include win32.inc ; файл, содержащий описания структур
; данных и констант
5. L equ ; последовательности символов LARGE,
; являющейся именем операции,
; объявляющей следующий за ней операнд ; 32-
разрядным, присваивается имя L
6. extrn ginPaint:PROC ; описание импортируемых из
;Windows функций
7. extrn CreateWindowExA:PROC
8. extrn DefWindowProcA:PROC
9. extrn DispatchMessageA:PROC
10. extrn EndPaint:PROC
11. extrn ExitProcess:PROC
12. extrn GetMessageA:PROC
13. extrn GetModuleHandleA:PROC
14. extrn LoadCursorA:PROC
15. extrn LoadIconA:PROC
16. extrn PostQuitMessage:PROC
17. extrn RegisterClassA:PROC
18. extrn ShowWindow:PROC
19. extrn TextOutA:PROC
20. extrn UpdateWindow:PROC
21. extrn GetTextMetricsA:PROC
22. extrn SetCurrentDirectoryA:PROC
23. extrn FindFirstFileA:PROC
24. extrn FindNextFileA:PROC
25. extrn FindClose:PROC
26. extrn SetScrollPos:PROC
27. extrn InvalidateRect:PROC
28. extrn GetClientRect:PROC
29. extrn ScrollWindow:PROC
30. extrn GetDC:PROC
31. extrn ReleaseDC:PROC
32. extrn SetScrollRange:PROC
33. extrn TranslateMessage:PROC
34. .data ;предопределенное имя,
;означающее начало сегмента данных
35. hFindFile dd 0
36. newhwnd dd 0
37. wc WNDCLASS
38. qq1 db '@@@@'
39. lppaint PAINTSTRUCT
40. qq2 db '@@@@'
41. msg MSGSTRUCT
42. tm TEXTMETRIC
43. rc RECT
44. charht dd 0
45. hInst dd 0
46. fl dw 0
47. szTitleName db 'Это курсовой',0
48. szClassName db 'ASMCLASS32',0
49. Buffer db 'Помни о порядке передачи параметров функции!',0
50. buf_v db 260 dup (0)
51. num dd 0

52. ;##########################
53. lpPathName dd 0

54. szP db 0
55. w32fd WIN32_FIND_DATA
56. lpFileName dd 0
57. fn db "*.*",0
58. ;##########################
59. nVertDifference dd 0
60. nVertPosition dd 0
61. cyStep dd 0
62. nFirst dd 0
63. nLast dd 0
64. cyMax dd 0
65. cyPos dd 0
66. cory dd 5
67. count dd 0
68. py dd 0
69. .code ;предопределенное имя, означающее
;начало сегмента кода
70. start:
71. push L 0
72. call GetModuleHandleA ;возвращает базовый адрес модуля,
;указывающий, куда был отображен в адресном
; пространстве процесса EXE- или DLL файла
73. mov [hInst], eax ; результат выполнения функции
сохраняется в качестве переменной hInst

74. reg_class:
75. ;************************************************
;инициализация структуры WNDCLASS
76. mov [wc.clsStyle], CS_HREDRAW + CS_VREDRAW ; стиль класса
77. mov [wc.clsLpfnWndProc], offset WndProc ;адрес оконной процедуры

78. mov wc.clsCbClsExtra], 0 ;определяет дополнительное число
; байтов для структуры класса окна,
; которые система резервирует
;в служебной памяти для всех окон
; этого класса
79. mov [wc.clsCbWndExtra], 0 ; задает в байтах объем памяти,
; резервируемой системой в конце
; каждой такой структуры каждого окна
; данного класса

80. mov eax, [hInst]
81. mov [wc.clsHInstance], eax ; содержит базовый адрес данного
;EXE- файла, полученный с помощью
;функции GetModuleHandle

82. call LoadIconA, 0, IDI_APPLICATION ; заданная по умолчанию
; пиктограмма
83. mov [wc.clsHIcon], eax

84. call LoadCursorA, 0 ,IDC_ARROW ; стандартная стрелка курсора
85. mov [wc.clsHCursor], eax

86. mov [wc.clsHbrBackground],COLOR_WINDOW +1
87. mov dword ptr [wc.clsLpszMenuName], 0
88. mov dword ptr [wc.clsLpszClassName], offset szClassName

89. call RegisterClassA, offset wc ; регистрирует класс окна,
; атрибуты которого определены ;в
структуре WNDCLASS

90. call CreateWindowExA, 0,offset szClassName,offset szTitleName,
; создает окно, имеющее указанный тип
; и принадлежащее указанному классу
91. WS_OVERLAPPEDWINDOW OR WS_VSCROLL,CW_USEDEFAULT,
92. CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,0,0,
93. [hInst], 0

94. mov [newhwnd], eax

95. call ShowWindow, [newhwnd], SW_SHOWNORMAL ; показывает каким
; образом должно быть
; показано окно
96. call UpdateWindow, [newhwnd] ; обновляет изображение
; окна, посылая
;сообщение WM_PAINT
; оконной процедуре, если
; область модификации
; окна не пуста

97. msg_loop:
98. call GetMessageA, offset msg, 0, 0, 0 ;считывает сообщение
; очереди сообщений
; прикладной задачи
99..if eax!= 0
100. call DispatchMessageA, offset msg ; передает сообщение
; оконной процедуре
101. call TranslateMessage, offset msg
102. jmp msg_loop
103. ; .endif
104. call ExitProcess, [msg.msWPARAM] ;


105. ;*************************************************
106. ;Оконная процедура
107. ;**************************************************
108. WndProc proc uses ebx edi esi, hwnd:DWORD, wmsg:DWORD,
109. wparam:DWORD, lparam:DWORD

110. LOCAL hDC:DWORD

111. cmp [wmsg], WM_DESTROY ; посылается оконной процедуре сразу
; же после закрытия окна
112. je wmdestroy
113. cmp [wmsg], WM_SIZE ; посылается оконной процедуре после того,
; как изменился размер окна
114. je wmsize
115. cmp [wmsg], WM_CREATE ; передача оконной процедуре нового
; окна после того, как окно создано,
; но прежде чем окно стало видимым

116. je wmcreate
117. cmp [wmsg],WM_PAINT ; обеспечивают перерисовку окна, когда
; часть или вся рабочая область окна
; становится недействительной
118. je wmpaint
119. cmp [wmsg],WM_VSCROLL ;
120. je wmscroll
121. jmp defwndproc

122. wmcreate:
123. call GetDC,[hwnd] ;дескриптор контекстного устройства
124. mov [hDC],eax

125. call GetTextMetricsA,[hDC],offset tm

126. mov ebx,0
127. mov bx,[tm.tmExtLeading] ; межстрочное расстояние
128. add bx,[tm.tmHeight] ;высота (добавка к координате строки)
129. mov [charht],ebx
130. call ReleaseDC,[hwnd],[hDC] ; отказ от контекстного устройства
131. mov eax, 0
132. jmp finish
133. defwndproc:
134. call DefWindowProcA,[hwnd],[wmsg],[wparam],[lparam]
135. jmp finish


136. wmscroll:
137. call GetClientRect,[hwnd],offset rc ;определение клиентской
; области окна
138. movzx eax,[word ptr wparam] ;преобразование содержимого wparam в
; двойное слово
139. cmp eax,SB_LINEDOWN ; щелчок мыши на стрелке вниз,
; приводит к прокрутке на одну строку
; вниз
140. je sblinedown
141. cmp eax,SB_LINEUP ; щелчок мыши на стрелке вверх,
; приводит к прокрутке на одну строку
; вверх

142. je sblineup
143. cmp eax,SB_ENDSCROLL ;отпускание любого органа управления
; отпущена клавиша мыши после
; удерживания ее на полосе прокрутки
144. je bp3

145. sblinedown:
146. mov [cyStep],1 ; прибавить шаг
147. jmp endvscroll_1

148. sblineup:
149. mov [cyStep],-1
150. jmp endvscroll


151. endvscroll:

152. cmp [cyPos],0
153. je bp3
154. endvscroll_1: mov eax,[cyPos] ;посылаем позицию бегунка в
; регистр
155. add eax,[cyStep]
156. mov [cyPos],eax
157. mov eax,0
158. sbb eax,[charht] ;расчет межстрочного расстояния
159. mov ecx,[cyStep]
160. mov edx,0
161. mul ecx
162. mov ecx,eax
163. call ScrollWindow,[hwnd],0,ecx,0,0 ; определяем дескриптор окна,
; где клиентская область должна
; быть прокручена
164. call InvalidateRect,[hwnd],offset rc,TRUE ; определяем окно с
; изменившейся
; областью
165. call SetScrollPos,[hwnd],SB_VERT,[cyPos],TRUE ;установление
;позиции бегунка в
; стандартной
;вертикальной
;полосе прокрутки

166. call UpdateWindow,[hwnd] ;обновление изображения окна,
; если область не пуста

167. bp3: mov eax,0
168. jmp finish

169. wmdestroy:
170. call PostQuitMessage,0
171. mov eax, 0
172. jmp finish

173. wmsize: ;для перерисовки нового размера окна
;значение старшего слова означает высоту
; клиентской части
174. mov eax,[lparam]
175. mov cl,16
176. rcr eax,cl
177. and eax,0ffffh
178. mov dx,0
179. mov cx,word ptr [charht]
180. div cx
181. movzx ecx,ax
182. mov eax,101
183. sbb eax,ecx
184. cmp eax,0
185. ja www1
186. mov eax,0
187. www1: mov [cyMax],ecx
188. call FindFirstFileA,offset fn,offset w32fd
189. mov [hFindFile],eax
190. mov esi,1
191. s_m4:
192. call FindNextFileA,[hFindFile],offset w32fd
193. cmp eax,0
194. je s_m5
195. inc esi
196. jmp s_m4
197. s_m5: mov [nLast],esi
198. mov eax,[cyMax]
199. cmp eax,[cyPos]
200. ja www2
201. mov [cyPos],eax
202. www2: push FALSE
203. push esi
204. push L 0
205. push SB_VERT
206. push [hwnd]
207. call SetScrollRange
208. push TRUE
209. push [cyPos]
210. push SB_VERT
211. push [hwnd]
212. call SetScrollPos
213. mov eax, 0
214. jmp finish

215. wmpaint:
216. call BeginPaint,[hwnd],offset lppaint ;получили контекст
; устройства
217. mov [hDC],eax
218. mov eax,[cyPos] ; начальная позиция бегунка
219. mov ecx,[charht] ;получили координату вывода в пикселях
220. mov dx,0
221. mul cx
222. movzx ecx,ax
223. mov [cory],5 ; занесли по у -5
224. mov ecx,1 ; занесли по x -1
225. call FindFirstFileA,offset fn,offset w32fd ;отыскиваем
;первый
; файл
226. mov [hFindFile],eax
227. cmp ecx,[cyPos]
228. jne qqq1
229. mov esi,0
230. m3: mov dl,w32fd.cFileName[esi] ;отрисовка первой строки
231. cmp dl,0
232. je m2
233. mov buf_v[esi],dl
234. inc esi
235. jmp m3
236. cmp [cyPos],0 ; если не ноль, то переход на метку
; qqql
237. jne qqq1
238. m2:
239. mov [num],esi
240. call TextOutA,[hDC],5,[cory],offset buf_v,[num] ; вывод
;первого
;найденного
; файла
241. qqq1: mov ebx,1
242. m6:
243. call FindNextFileA,[hFindFile],offset w32fd ; следующий файл
244. cmp eax,0 ; проверка для
; последнего файла
245. je kon
246. mov esi,0
247. mov edi,0
248. m4: mov dl,w32fd.cFileName[edi] ; получили имя
;файла
249. cmp dl,0
250. je m5
251. mov buf_v[esi],dl
252. inc edi
253. inc esi
254. jmp m4
255. m5: cmp ebx,[cyPos]
256. jb qqq2
257. mov eax,[charht]
258. add [cory],eax
259. call TextOutA,[hDC],5,[cory],offset buf_v,esi ;вывод
;новой строки
260. qqq2: inc ebx ;счетчик строк
261. jmp m6
262. kon: call EndPaint,[hwnd],offset lppaint ;отдали
;контекст
; устройства и
;перешли в цикл
;обработки сообщений
263. mov eax,0
264. jmp finish

265. finish:
266. ret
267. WndProc endp
268. public WndProc
269. end start ; конец программы.



Заключение.


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



Библиографический список.


1. Windows 98: руководство разработчика: Пер.с англ. – К.: Издательская
группа BHV, 1999. – T.1. –672 c.
2. Зубков С.В. Asstmbler. Для DOC, Windows Unix. M.: ДМК, 1999. 640 с.
3.
-----------------------
[pic]







Реферат на тему: Выдающиеся личности в истории вычислительной техники. Августа Ада Лавлейс
План

Введение………………………………………………………………………2
1. ИСТОРИЯ АДЫ ЛАВЛЕЙС
1.1.Имена Ады Лавлейс и Чарльза Бэббиджа в истории
вычислительной техники……………………………………………………2
1.2. Семья и воспитание юной "мамы программирования"………………2
1.3. Первое знакомство с разностной машиной. Замужество…………….3
2. ПОКОРЕНИЕ ВЕРШИН МАТЕМАТИКИ
2.1. От светской и семейной жизни – к глубинам математики……………4
2.2. Совместный труд над работой жизни………………………………….4
2.3. Рождение первенца и критическое перенапряжение………………….5
3. ФИНАЛЬНАЯ КРИВАЯ………………………………………………………..6
4. ОСНОВНЫЕ ИДЕИ РАБОТЫ АДЫ ЛАВЛЕЙС "ПРИМЕЧАНИЯ ПЕРЕВОДЧИКА"…..6
5. ЗНАЧЕНИЕ РАБОТЫ АДЫ ЛАВЛЕЙС……………………………………………………...9
6.ДЕЯНИЯ ГРЭЙС ХОППЕР……………………………………………………..9
Список использованной литературы



The only real secrets of trade are industry,

integrity, and knowledge: to the possessors

of these no exposure can be injurious; and

they never fail to produce respect and wealth.

«The Economy of Machinery and Manufactures»

by Charles Babbage, 1832»*
* «Истинные секреты любого ремесла
— это трудолюбие, честность и знание,
носителям этих качеств не страшна
никакая огласка; такие люди всегда

обретают уважение окружающих и личное
благосостояние».
— Чарлз Бэббэдж
, «Машины и производство: экономика», 1832 г.
Выдающиеся личности в истории вычислительной техники. Августа Ада Лавлейс

ВВЕДЕНИЕ
В истории вычислительной техники существует множество имён. В их ряду
рядом стоят имена Ады Лавлейс и Чарльза Беббиджа. Чарльз Бэббидж – человек,
который создал чертежи аналитической машины, и женщина, которая написала
первую в мире программу для этой машины. Она была великим математиком и
очень настойчивым человеком, её не разочаровало даже то, что она не увидела
свою программу работающей.

1. ИСТОРИЯ АДЫ ЛАВЛЕЙС
1.1. Имена Ады Лавлейс и Чарльза Бэббиджа в истории вычислительной
техники
В истории вычислительной техники имена Чарльза Бэббиджа и Ады Лавлейс
стоят рядом. Автор единственной научной работы – примечаний к переведённой
ею с итальянского на английский язык статьи об аналитической машине
Бэббиджа – она навсегда вписала своё имя в историю науки. "… Несколько
страниц, написанных за ночь перед дуэлью Эваристом Галуа, открыли миру
гениального математика. Единственная песня – "Марсельеза", сочинённая
капитаном Руже де Лимм, сделала его имя бессмертным. Составленные
двадцативосьмилетней графиней Августой Адой Лавлейс, примечания к статье
итальянского инженера Л.Ф.Менабреа дают основания считать её первой
программисткой, чьё имя навсегда останется в истории вычислительной
математики и вычислительной техники" /7/. По существу, Ада Лавлейс заложила
научные основы программирования на вычислительных машинах за столетие до
того, как стала развиваться эта наука. Близкий друг семьи Лавлейс математик
Август де Морган, в своё время преподававший математику шестнадцатилетней
Аде, был убеждён, что она способна на гораздо большее, что "данный трактат
вовсе не критерий того, чего можно от неё ожидать".

1.2. Семья и воспитание юной "мамы программирования"
Августа Ада Лавлейс родилась 10 декабря 1815 года. Она была
единственной дочерью великого английского поэта Джорджа Гордона Байрона
(1788 - 1824) и Аннабеллы Байрон, урождённой Милбэнк (1792 - 1860). "Она
незаурядная женщина, поэтесса, математик, философ", - писал Байрон о своей
будущей жене в 1813 году. Ада унаследовала у матери любовь к математике и
многие черты отца, в том числе, близкий по эмоциональному складу характер.
В 1816 году Байрон навсегда покидает Великобританию. Он никогда больше не
видел дочери, но часы вспоминал о ней, посвятил ей трогательные и нежные
строки в поэме "Чайльд Гарольд":
"Дочь, птенчик, Ада милая! На мать
Похожа ль ты, единственно родная?
В день той разлуки мне могла сиять
В твоих глазах надежда голубая…
* * * * * * * * * *
Спи в колыбели сладко, без волнения;
Я через море, с горной высоты
Тебе любимой, шлю благословенье,
Каким могла б ты стать для моего томленья!" /1/.

Ада получила прекрасное воспитание. Важное место в нём занимало
изучение математики – в немалой степени под влиянием матери. Бэббидж,
который был знаком с леди Байрон, поддерживал увлечение юной Ады
математикой. Бэббидж постоянно следил за научными занятиями Ады, он
подбирал и посылал ей статьи и книги, в первую очередь по математическим
вопросам. Занятия Ады поощряли друзья её семьи – Август де Морган и его
жена, супруги Соммервил и другие.

1.3. Первое знакомство с разностной машиной. Замужество
К 1834 году относится знакомство Ады с разностной машиной Бэббиджа. Ада
посещает публичные лекции Д.Ларднера о машине. В это же время совместно с
Соммервилем и другими она впервые посещает Бэббиджа и осматривает его
мастерскую. После первого посещения Ада стала часто бывать у Бэббиджа,
иногда в сопровождении миссис де Морган. В своих воспоминаниях де Морган
так описала один из первых визитов: "Пока часть гостей в изумлении глядела
на это удивительное устройство с таким чувством, как говорят, дикари первый
раз видят зеркальце или слышат выстрел из ружья, мисс Байрон, совсем ещё
юная, смогла понять работу машины и оценила большое достоинство
изобретения" /2/.
В 1835 году Ада Байрон в возрасте девятнадцати лет вышла замуж за лорда
Кинга, который впоследствии стал графом Лавлейс. Замужество Ады не отдалило
её от Бэббиджа; их отношения стали ещё более сердечными. В начале
знакомства Бэббиджа привлекли математические способности девушки. В
дальнейшем Бэббидж нашёл в ней человека, который поддерживал все его смелые
начинания. Ада была почти ровесницей его рано умершей дочери. Всё это
привело к тёплому и искреннему отношению к Аде на долгие годы.
Ада была маленького роста, и Бэббидж, упоминая о ней, часто называл её
феей. Однажды редактор журнала "Examinator" описал её следующим образом:
"Она была удивительна, и её гений (а она обладала гениальностью) был не
поэтический, а математический и метафизический, её ум находился в
постоянном движении, который соединился с большой требовательностью. Наряду
с такими мужскими качествами, как твёрдость и решительность, леди Лавлейс
присущи были деликатность и утонченность наиболее изысканного характера. Её
манеры, вкусы, образование… были женскими в хорошем смысле этого слова, и
поверхностный наблюдатель никогда не смог бы предположить силу и знание,
которые лежали скрытыми под женской привлекательностью. Насколько она
питала неприязнь к легкомыслию и банальностям, настолько она любила
наслаждаться настоящим интеллектуальным обществом. Она страстно желала быть
знакомой со всеми людьми, известными в науке, искусстве и литературе"/3/.
Ада унаследовала от отца и литературные способности: её письма написаны
легко, красивым языком. В одном из писем к Бэббиджу, давая себе
характеристику, Ада Лавлейс пишет: "Мой мозг – нечто большее, чем просто
смертная субстанция, надеюсь, время накажет это (если только моё дыхание и
прочее не будет слишком быстро прогрессировать к смерти). Клянусь Дьяволом,
что не пройдёт и десяти лет, как я высосу некоторое количество жизненной
крови из загадок вселенной, причём так, как этого не смогли бы сделать
обычные смертные губы и умы. Никто не знает, какая ужасающая энергия и сила
лежат ещё неиспользованными в моём маленьком гибком существе" /3/. Супруги
Лавлейс вели светский образ жизни, регулярно устраивая приёмы и вечера в
своём лондонском доме и загородном имении Окхат-Парк. На них постоянно
бывал и Бэббидж. В дополнении к частым личным встречам между Адой Лавлейс и
Бэббиджем велась оживлённая переписка.


2. ПОКОРЕНИЕ ВЕРШИН МАТЕМАТИКИ

2.1. От светской и семейной жизни – к глубинам математики
У супругов Лавлейс в 1836 году родился сын, в 1838 – дочь и в 1839 –
сын. Естественно, что это оторвало Аду на время от занятий математикой. Но
вскоре после рождения третьего ребёнка она обращается к Бэббиджу с просьбой
подыскать ей преподавателя математики. При этом она пишет, что имеет силы
дойти так далеко в достижении своих целей, как она этого пожелает. Бэббидж
в письме от 29 ноября 1839 года отвечает Лавлейс: "Я думаю, что Ваши
математические способности настолько очевидны, что не нуждаются в проверке.
Я навёл справки, но найти в настоящее время человека, которого я мог бы
рекомендовать Вам как преподавателя, мне не удалось. Я продолжу поиски"
/3/.
С начала 1841 года Лавлейс серьёзно занялась изучением машин Бэббиджа.
В одном из писем к Бэббиджу Ада пишет: "Вы должны сообщить мне основные
сведения, касающиеся Вашей машины. У меня есть основательная причина желать
этого" /2/. В письме от 12 января 1841 года она излагает свои планы:
"…Некоторое время в будущем (может быть в течение 3-х или 4-х, а возможно,
даже многих лет) моя голова может служить Вам для Ваших целей и планов…
Именно по этому вопросу я хочу серьёзно поговорить с Вами" /2/. Это
предложение было с признательностью принято Бэббиджем. С того времени их
сотрудничество не прерывалось и дало блестящие результаты.
В октябре 1842 года была опубликована статья Менабреа, и Ада занялась
её переводом. Впоследствии Бэббидж вспоминал, что, узнав о переводе,
спросил Аду, почему она не написала самостоятельной статьи по этому
вопросу, с которым была так хорошо знакома. На это леди Лавлейс ответила,
что эта мысль не пришла ей в голову. Тогда Бэббидж предложил ей написать
примечания к этой статье, и она приняла эту идею.

2.2. Совместный труд над работой жизни.
План и структуру примечаний они вырабатывали совместно. Закончив
очередное примечание, Ада отсылала его Бэббиджу, который редактировал его,
делал различные замечания и отсылал. Работа была передана в типографию 6
июля 1843 года.
Несмотря на принципиальное согласие, иногда им приходилось нелегко,
т.к. столкнулись две яркие индивидуальности со своими взглядами,
привычками, манерой работы. Бэббидж мог перепутать отдельные страницы,
иногда даже терял их, по нескольку раз правил одни и те же листы и не
заглядывал в другие. Это раздражало аккуратную Лавлейс. В свою очередь Ада
болезненно воспринимала некоторые замечания Бэббиджа. Так она пишет: "Я
очень раздасована тем, что Вы изменили моё примечание. Вы знаете, что я
всегда соглашаюсь делать любые необходимые изменения, но самостоятельно, и
я не терплю, чтобы кто-либо вмешивался в мой текст" /2/.
Но, несмотря на некоторые неувязки и порой даже резкий тон, они
работали совместно, хорошо понимая друг друга. Созданию такой творческой
обстановки в первую очередь способствовал Бэббидж. Хотя он был
раздражительным человеком, обижавшимся на любые возражения, в отношении
Лавлейс он старался проявлять чуткость и тактичность. Он понимал, что для
женщины со слабым здоровьем и большими, пусть даже обоснованным,
самомнением, одобрение является существенным стимулом творчества. Поэтому
Бэббидж не упускал случая отметить успехи Лавлейс.
Центральным моментом работы Лавлейс было составление программы (чисел)
вычисления чисел Бернулли. Она пишет Бэббиджу: "Я хочу вставить в одно из
моих примечаний кое-что о числах Бернулли в качестве примера того, как
неявная функция может быть разрешимой с помощью машины без того, чтобы
предварительно быть вычисленной с помощью головы и рук человека" /2/.
Бэббидж не только прислал необходимые данные, но и составил
последовательность действий, лежащую в основе программы. Однако при этом он
допустил ошибку, обнаруженную Адой. Об окончании составления программы она
известила его 19 июля. По мнению Бэббиджа, программа была достойна
отдельной статьи или брошюры, но Ада ответила Бэббиджу длинным на 16
страницах письмом, где решительно отклонила это предложение, поскольку это
нарушило бы сроки публикации статьи Менабреа с её примечаниями. 28 июля
Лавлейс восторженно пишет Бэббиджу: "Я счастлива узнать, что мои Примечания
требуют фактически мало исправлений. Сказать честно, они удивили меня…,
хоть речь идёт обо мне самой. Они действительно написаны прекрасным стилем,
который превосходит стиль самого очерка" /2/.
2.3. Рождение первенца и критическое перенапряжение
Августа Ада Лавлейс работает с большим напряжением. В письмах к
Бэббиджу она неоднократно жалуется на утомление, болезни, плохое
самочувствие. Наконец, 6 августа Бэббидж отсылает Аде свои последние
замечания и просит передать всё в типографию. В конце августа 1843 года
перевод статьи Менабреа с примечаниями Лавлейс вышел в свет.
Бэббидж был очень доволен и, отдавая дань обоим авторам, писал: "Эти
работы (Менабреа и Лавлейс), взятые вместе, представляют для тех, кто
способен понимать рассуждения, полную демонстрацию того, что все действия и
операции анализа могут быть выполнены с помощью машин".
Менабреа был удивлён, обнаружив свою статью не только хорошо
переведённой, но и снабжённой обширными и глубокими комментариями и
замечаниями. Статья переведена неизвестным для Менабреа математиком, а
каждое замечание было подписано инициалами A.A.L/ (Ada Augusta Lovelace),
которые он не мог связать ни с одним известным ему миром (см. стр. 10).
Каково же было восхищение Менабреа, когда после длительных выяснений он
узнал, что за этими инициалами кроется 28 -ми – летняя леди Лавлейс.

3. ФИНАЛЬНАЯ КРИВАЯ?

Начиная с 1844 года, Ада Лавлейс всё больше увлекается игрой на
скачках, тем более, что сама прекрасно ездила и любила лошадей. На скачках
играли и Бэббидж и Вильям Лавлейс, причём Бэббидж интересовавшийся
прикладными вопросами теории вероятностей, рассматривал с этих позиций и
игру на скачках и искал оптимальную систему игры. Однако и Бэббидж, и муж
Ады сравнительно скоро отказались от участия в игре. Но Ада, сблизившись с
неким Джоном Кроссом, упорно продолжала играть. Она израсходовала почти все
принадлежащие ей средства и к 1848 году сделала большие долги. Потом её
матери пришлось погасить эти долги, а заодно и выкупить компрометирующие
письма у Джона Кросса. В начале 50-ых годов появлялись первые признаки
болезни, унесшей жизнь Ады Лавлейс. В ноябре 1850 года пишет Бэббиджу:
"Здоровье моё … настолько плохо, что я хочу принять Ваше предложение и
показаться по приезде в Лондон Вашим медицинским друзьям" . Несмотря на
принимаемые меры, болезнь прогрессировала и сопровождалась тяжёлыми
мучениями. 27 ноября 1852 года Ада Лавлейс скончалась, не достигнув 37 лет.
Она была погребена рядом с отцом в фамильном склепе Байронов.

4. ОСНОВНЫЕ ИДЕИ РАБОТЫ АДЫ ЛАВЛЕЙС "ПРИМЕЧАНИЯ ПЕРЕВОДЧИКА"

Скромные по названию "Примечания переводчика" более чем вдвое превышают
текст переведённой статьи (статья Менабреа занимает 20 страниц, а
примечания – 50). Всего 8 примечаний, посвящённых, в основном, трём
взаимосвязанным вопросам уточнения и пояснения для читателя некоторых
принципов и особенностей работы аналитической машины; рассмотрение
теоретических возможностей машины; программирование решения задач на этой
машине.
В примечании А Лавлейс сравнивает две машины – разностную и
аналитическую. Она отмечает, что вычислительная машина представляет собой
совершенно иную область науки и техники и уделяет внимание выработке
соответствующей терминологии. По определению Лавлейс, аналитическая машина
представляет собой воплощение науки об операциях и сконструирована
специально для действий над абстрактными числами как объектами этих
операций. "Под словом операция, - пишет Лавлейс, - мы понимаем любой
процесс, который изменят взаимное отношение двух или более вещей, какого
рода эти отношения ни были бы. Это наиболее общее определение (охватывающее
все предметы во Вселенной). … Операционный механизм может быть приведён в
действие независимо от объекта, над которым производится операция. … Этот
механизм может действовать не только над числами, но и над другими
объектами, основные соотношения между которыми могут быть выражены с
помощью абстрактной науки об операциях и которые могут быть приспособлены к
действию операционных обозначений и механизма машины. Предположим,
например, что соотношения между высотами звуков в гармонии и музыкальной
композиции поддаются такой обработке; тогда машина сможет сочинять искусно
составленные музыкальные произведения любой сложности или длительности"/2/.
Последнее замечание Лавлейс удивительно. По существу, она впервые в
научном плане (и вполне обоснованно) ставит вопрос о возможности получения
с помощью вычислительной машины результатов, аналогичных результатам,
полученным в процессе художественного творчества. В основном же примечание
Ады относятся к сравнительной оценке двух машин. Лавлейс пишет, что
аналитическая машина по сравнению с разностной играет такую же роль, какую
математический анализ по отношению к арифметике. Лавлейс делает
принципиальный вывод об отсутствии ограничений для математических
возможностей аналитической машины. В терминах 20 века можно было бы сказать
об алгоритмической универсальности аналитической машины: любой алгоритм в
принципе может быть реализован.
Лавлейс по достоинству оценила значение изобретений, лежащих в основе
ткацкого станка Жаккара (перфокарт и соответствующих механизмов) и
применённых Бэббиджем для управления аналитической машины. Она образно
описала значение перфокарт. "Карты только указывают сущность операций,
которые должны быть совершены, и адреса переменных, на которые эти действия
направлены. Можно сказать достаточно точно, что аналитическая машина ткёт
алгебраические удары, как ткацкий станок Жаккара – цветы и листья"/2/.
В примечании В Лавлейс рассматривает запоминающие устройства (склад)
аналитической машины и покрывает возможность записи в любом регистре любого
числа. Она поясняет читателю, что "склад" аналитической машины представляет
собой (пользуясь современной терминологией) оперативное устройство
(запоминающее), позволяющее записывать, стирать, хранить и извлекать любые
числа, над которыми можно произвести любую последовательность
арифметических операций, причём на всех этапах сохранять промежуточные
результаты вычислений.
В примечании С Лавлейс объясняет читателю изобретённый Бэббиджем и
упомянутый в статье Менабреа способ возврата одиночной перфокарты или
группы перфокарт с целью их повторного использования любое число раз.
Повторное использование имеет существенное значение, т.к. при решении задач
очень часто возникает необходимость в многократном повторении той или иной
последовательности команд. Возможность такого повторения значительно
упрощает составление программы.
Примечание D представляет существенный интерес для истории
программирования. Здесь приведена программа машинного решения системы двух
линейных уравнений с двумя неизвестными. Лавлейс впервые применяет термин
"рабочая переменная", эквивалентный современному – "рабочая ячейка". Этот
термин Лавлейс использует для обозначения трёх типов колонок памяти:
С заранее установленными данными,
Хранящими конечные результаты вычислений,
Содержащие промежуточные результаты вычислений.
Эти виды рабочих ячеек выделяются и в современных руководствах по
программированию. Лавлейс предлагает при выполнении операции сложения её
результат записывать на ту же колонку памяти, где до этого хранилось одно
из слагаемых (делается для экономии памяти). Для обозначения такой операции
она пользуется двумя формами записи. Более краткая форма Yn=Yp+Yn
аналогична той, которая применялась в одном из алгоритмических языков –
Фортране.
В примечании Е Лавлейс уточняет и развивает соображения Менабреа о
возможности расчёта на аналитической машине функций вида: Y= a + bx , Y = A
+ BcosX. Здесь Лавлейс формулирует: "Многие лица, недостаточно знакомые с
математикой, считают, что роль машины сводится к получению результатов в
цифровой форме, а природа самой обработки данных должна быть арифметической
и аналитической. Это заблуждение. Машина может обрабатывать и объединять
цифровые величины точно так, как если бы они были буквами или любыми
другими символами общего характера, и фактически она может выдать
результаты в алгебраической форме" /2/. В этом же примечании Лавлейс
впервые вводит понятие цикла операций, а также понятие цикла циклов.
В примечании F содержится, в частности, интересное замечание Лавлейс о
возможностях аналитической машины получать решение такой задачи, которую из-
за трудностей вычислений практически невозможно решить вручную. Здесь
(устройство) машина рассматривается не как устройство, заменяющее человека,
а как устройство, способное выполнять работу, превышающую практические
возможности человека.
В заключительном примечании G дана программа вычисления чисел Бернулли,
в которой Лавлейс продемонстрировала возможность программирования на
аналитической машине.
Немалое значение для истории науки представляет вопрос: насколько точно
и удачно Лавлейс реализовала свою идею – составление машинной программы для
решения сравнительно сложной задачи? Проверить вручную подобную программу
весьма затруднительно – желателен практический эксперимент на ЭВМ. Такой
эксперимент был проведён в СССР в 1978 году на машине БЭСМ-6. Текст
программы был закодирован на языке программирования Фортран в Дубне,
отладка программы выявила одну ошибку и одну опечатку. И это вполне
понятно, так как написать подобную работу без проверки на компьютере и без
ошибок невозможно. Ещё один важный пункт – программа Лавлейс требует
минимального количества перфокарт и обеспечивает экономию памяти.
Примечание G Интересно ещё и в другом отношении. Широкую известность
получило высказанное Лавлейс мнение о принципиальных возможностях
аналитической машины: ”Аналитическая машина не претендует на то, чтобы
создавать что-то действительно новое. Машина может выполнить всё то, что мы
умеем ей предписать. Она может следовать анализу. Но она не может
предугадать какие-либо аналитические зависимости или истины. Функции машины
заключаются в том, чтобы помочь нам получить то, с чем мы уже знакомы“ /2/.
Это высказывание сделано в конце девятнадцатого века, когда не было
никаких компьютеров, но даже сегодня по этому вопросу мы остались на том же
уровне: компьютеры выполняют написанные программы, но не создают ничего
нового. Пока никто не смог создать ЭВМ и программное обеспечение для неё,
которое обладало бы творческими возможностями. Однако широко
распространились программы с "псевдоинтеллектом", но это результат лишь
хорошо продуманного алгоритма.

5. ЗНАЧЕНИЕ РАБОТЫ АДЫ ЛАВЛЕЙС

Хотя Бэббидж написал свыше 70 книг и статей по различным вопросам, а
также составил большое число неопубликованных описаний аналитической
машины, полного и доступного описания и, главное, анализа возможностей
машины для решения задач он так и не сделал. Бэббидж говорил, что слишком
занят разработкой машины, чтобы уделять время её описанию.
Работа Лавлейс не только заполнила этот пробел, но и содержала глубокий
анализ особенностей аналитической машины. Она настолько хорошо понимала его
работу, что описала принцип действия аналитической машины с чёткостью,
которой не ожидал сам Бэббидж. Он неоднократно повторял, что представления
Лавлейс о его работе были яснее, чем его собственные.
Усвоив идеи Бэббиджа и обладая глубокими познаниями в математике,
Лавлейс с большой энергией проповедует эти идеи, стремясь сделать их широко
известными и понятными, стараясь заинтересовать учёных работами Бэббиджа.
Она организовывает целую компанию по популяризации машины и достигает
успехов: часть их "детища" была построена. Ада Лавлейс высказала ряд идей,
получивших широкое применение только в настоящее время. Основной итог её
работы – создание основ программирования на универсальных цифровых
вычислительных машинах.
В память об Аде Лавлейс назван разработанный в 1980 году язык АДА –
один универсальных языков программирования. Этот язык был широко
распространён в США, и Министерство Обороны США даже утвердило название
“Ада”, как имя единого языка программирования для американских вооруженных
сил, а в дальнейшем и для всего НАТО.

6.ДЕЯНИЯ ГРЭЙС ХОППЕР
6.1. Грэйс Хопер
Грэйс Хоппер (Grace Hopper) родилась в 1906 году - на 91 год позже Ады.
Ее карьера, хотя и нетипична для женщины, на первых порах не представляла
ничего особенного - Вессарский колледж, степень доктора математики в
Йельском университете в 28 лет, профессорская должность в Вассаре. Таланты
умной девочки, казалось бы, раскрыылись, жизнь шла своим чередом, и ничто
не предвещало бурных изменений.

Как и в случае с компанией Helwett Packard, для полной реализации
потенциала Грэйспоторебоввалассь экстраоринарная ситуация. Ее создала
Вторая мировая война. Грэйс, ужже тридцатисемилетняя дама-профессор,
вступила в женскую добровольную организацию содействия ВМС США. Для того,
чтобы кобразом изменить свою жизнь, человек должен иметь авантюрстическую
жилку, и Грэйс обладала ей в полной мере. Однажды она так выразила свой
основной жизненный принцип: "Если у вас возникла интересная идея, валяйте,
делайте. Извиниться потом легче, чем заранее получить разрешение".
6.2. Mark-1 - воплощение Аналитической Машины
Итак, младший лейтенант Грэйс Хоппер была направлена в Гарвардский
университет, где к тому времени был установлен компьютер Mark-1.

В создании Mark-1 приняли участие силы - ВМС США, заказавшие универсальную
счетную машину для расчетов баллистических таблиц: фирма IBM, президент
которой Томас Уотсон в патриотическом порыве финансировал военную
разработку и предоставил производственные мощности для создания необходимых
деталей; и математик Говард Эйкен. А в основу Mark-1 было положено
оставленное Бэббиджем описание его Аналитической Машины.

Полученное "чудовище" достигало 17 м в длину и 2,5 м в высоту. Провода,
которыми соединялись его 750 тыс. деталей имели суммарную длину более 800
км. Программа вводилась с перфоленты, а данные с перфокарт (не зря же, в
конце концов, перфораторы составляли львиную долю продукции IBM). Компьютер
имел электромеханическое реле и работал по тем временам очень быстро - 0,3
с у него уходило на сложение и вычитание двух чисел и 3 с на умножение.

Учитывая интерес Грэйс к двум смежным областям - геометрии и механике,- она
была идеальным кандидатом на работу с компьютерами типа Mark-1, когда любой
программист (такого термина тогда еще не существовало, а должность Грэйс
называлась словом "кодировщик") одновременно блестяще разбирался в
механическом содержимиом громоздкой машины. "Интеллектуальным"
обслуживанием машины, помимо профессора и младшего лейтенанта Грэйс Хоппер,
занимались математики-мичманы Роберт Кэмпбел и Ричард Блок.

Существует легенда, что Грэйс принадлежит термин debugging (для программы -
отладка; а буквально - изничтожение насекомых). История такова: однажды
Mark-1 сломался из-за того, что в одном из реле покончил жизнь
самоубийством крохотный мотылек (bug). Останки бедняги были аккуратно
извлечены. Тогда-то якобы Грэйс впервые и употребила термин debugging, имея
в виду ту самую работу, которой в данный момент была занята группа
программистов, - очистку компьютера от насекомых. На самом деле слово bug в
английском языке имело двойное значение (и насекомое, и техническая
неисправность) задолго до Грэйс, так что мы имеем дело с очередным
апокрифом компьютерного общества.

Но если Аде Лавлейс принадлежит право интеллектуальной собственности на
циклы, то Грэйс и ее коллеги в 1944 году использовали эти принципы на
практике. С точки зрения Грэйс, подпрограмами были сравнительно
универсальные последовательности команд, которые моно было об'единять в
более крупные блоки. Свои подпрограммы программисты хранили в блокнотах и
при необходимости переписывали их друг у друга. При этом им приходилось
каждый раз заново рассчитывать адреса переменных. Учитиывая, что текст
записывался в кодах, а складывать программисты, как правило, не умеют,
можно себе представить, как часто при переписыании возникали ошибки. Да и
читать программы, даже снабжженные комментариями, оказывалось достаточно
сложно.
6.3. От кодов к языку
Первая попытка облегчить участь программистов была сделана в 1948 году.
Алан Тьюринг и Макс Нейман в Манчестере (Англия) вели работы по созданию
компьютера, аналогичного американскому и, кстати, получившему то же
название - Mark-1. Для него была создана так называемая система
"сокращенного кодирования" - первый язык высокого уровня. Изначально
задуманные 32 машинные команды - длинной пять байтов каждая - для удобства
получали буквенные обозначения. Однако затем длина команд была увеличена до
шести байтов, и в результате многие преимущества новой системы были сведены
на нет: каждая команда обозначалась уже двумя символами, но для сокращения
избыточности второй из них одновременно оказывался началом следующей
команды. С помощью телетайпа производилось двоичное кодирование и
создавалась перфолента.

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

Вот этот "интерпретатор" и навел Грэйс Хоппер (которая работала в
фирме Джона Мочли на мысль, что для общения человека с компьютером есть
более приятный способ, чем кодирование. Однако нужно ли было такое
"очеловечивание" компьютера? В какой-то момент Грэйс заметила, что
программисты постепенно изолируют себя от остального человечества и
начинают мыслить в тех же терминах, что и счетные машины. Толчком, как
утверждают, послужили собственные проблемы Грэйс при подведении баланса ее
банковского счета: по привычке она попыталась произвести сложение и
вычитание в восьмеричной системе исчисления, и очень удивилась, когда ее
итог не совпал с тем, что получилось у банка.

К 1952 году из "сокращенного кодирования" вырос первый компилятор -
язык Autocod, созданный Алексом Гленном.

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

Компания Raimington Rand, купившая права на UNIVAC, натолкнулась на
нехватку "жрецов в блых халатах", свободно "чирикающих" на двоичном коде,
поэотму процесс общения с машиной надо было облегчить и включить в поставку
компьютера программное обеспечение. Возникла идея создания библиотеки
подпрограмм, из которой программа-компоновщик (компилятор) выбирала бы
необходимые блоки и автоматически устанавливала нужную адресацию. В 1951 г.
Гhэйс Хоппер было поручено создать такую библиотеку. Несколько лет спустя,
когда ею была реализована уже четвертая версия компилятора A (версия A-3),
из маркетинговых соображений он был преименован в Math-Matic.

Пятидесятые годы были периодом активной разработки машинно-зависимых языков
высокого уровня. В 1953 году вышли в свет два из них - Speedcoding фирмы
IBM, который она разумно представила со своим новым компьютером IBM 701, и
Vortex, созданный в Массачусетском институте. Vortex был первым языком, в
котором символы вводилиь в их естественном виде. Он, однако, не был
коммерческой разработкой и практически не распространился за пределы МТИ.

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

Использовать полноценные английские слова догадалась Грэйс Хоппер. Для
того, чтобы облегчить компьютеру работу, в качестве базиса было принято,
что все инструкции обладают значимыми превым и третьим символом. Остальные
символы при анализе игнорировались. Грэйс, видя перспективность этого
подхода к языкам программ, действовала на свой страх и риск. Когда в 1956
году компилятор B-0 был готов, ей оставалось извиниться за самоуправство и
задним числом убедить начальника в перспективности нового подхода. Для
пущей наглядности она преобразовала компилятор в трехязычный, заставив его
понимать инструкции на английском, французском и немецком языках. Этим она
полоило начало одному порочному направлению в программировании - переводу
инструкций языка на программирования на национальные языки (забегая вперед,
скажем, что впоследствии появились самые разнообразные версии языка Cobol -
вплоть до китайской, где инструкции записывались с помощью иероглифов).

Как бы то ни было, после такой демонстрации цель - убедить начальство, что
компьютер может понимать нормальные слова - была достигнута, и B-0, в миру
Flow-Matic, был одобрен для коммерческой реализации.
6.4. Мама языка Cobol
К концу пятидесятых годов практически для каждой торговой марки, если
не для серии, компьютера был создан свой язык высокого уровня. Компания
Ramington Rand (к этому времени Sperry Rand) выпускала Flow-Matic; для IBM
704 уже существовал FORTRAN; ВВС США, в пику ВМС, на которые и работала
Sperry Rand, создали AIMACO.

В 1959 году представители производителей компьютеров и научного мира
провели совещание в Пенсильванском унивеститете (третьем оплоте
информатики, после Гарварда и Массачусетса). На певестке дня стояло
создание единого по синтаксису, гибкого, универсального языка для
разработки бизнес-приложений. Однако если между собой не могли договориться
даже отделения военного министерства, чего оставалось ждать от независимых
производителей?

Грэйс Хоппер решила подтолкнуть их к заключению соглашения и нашла для
такого языка заказчика - Министерство обороны США, с его "зоопарком
компьютерной техники" (более 1000 компьютеров, полностью несовместимых
между собой), крайне нуждалось в подобном средстве.

Министерство обороны организовало специальную конференцию - Conference on
Data System Language (CODASYL), в которой участвовали IBM, Honeywell,
General Electric, Sperry Rand и другие - в общем, все, кто расчитывал
получить от Пентагона заказ на постаку компьютеров.

Группа программистов во главе с Грэйс достаточно бысто сформулировала
основные положения языка COBOL (COmmon Business Oriental Language),
основанного на Flow-Matic. Другие компании не пришли в восторг от идеи
COBOL'a. IBM, имевшая в запасе FORTRAN и Commercial Translator, стремилась
убедить аудиторию, что на создание нового языка нет времени. Honeywell
пыталась сделать стандартом свое творение FACT. Но Грэйс не напрасно
столько лет имела дело с ВМС США и знала, как убедить военное начальство...

Идея COBOL была п

Новинки рефератов ::

Реферат: Внешняя политика при Екатерине Великой (История)


Реферат: Формы организации процесса обучения: традиции и новации (Педагогика)


Реферат: Генеральный план порта (Транспорт)


Реферат: Нормы ГК, которые определяют особенности порядка заключения договоров по недвижимости (Гражданское право и процесс)


Реферат: Александр II и Екатерина Долгорукая (История)


Реферат: История русской Архитектуры (Архитектура)


Реферат: Аграрное право (Контрольная) (Право)


Реферат: Нанесение побоев (Уголовное право и процесс)


Реферат: Культура Японии (Культурология)


Реферат: Дмирий Донской (исторический портрет) (История)


Реферат: Римское государство в период республики. Органы государственного управления (Государство и право)


Реферат: Вспомогательные программы (утилиты) (Программирование)


Реферат: Грипп: новые методы профилактики и лечения (Биология)


Реферат: Конспект истории великих географических открытий (История)


Реферат: Англо-германские противоречия накануне первой мировой войны (История)


Реферат: Darbinieku personibas ipasibu saikne ar darba efektivitвti organizвcijв (Делопроизводство)


Реферат: Конопля и всё о конопле (Биология)


Реферат: Классификация структур сетей ЭВМ (Программирование)


Реферат: Диплом по гражданскому праву (Гражданское право и процесс)


Реферат: Механизмы устойчивости опухолей к цисплатину (Биология)



Copyright © GeoRUS, Геологические сайты альтруист