Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы на вопросы к экзамену программирование1.....docx
Скачиваний:
2
Добавлен:
29.10.2018
Размер:
165.25 Кб
Скачать

1

Инструмента́льное програ́ммное обеспе́чениепрограммное обеспечение, предназначенное для использования в ходе проектирования, разработки и сопровождения программ, в отличие от прикладного и системного программного обеспечения.Системы программированияК этой категории относятся программы, предназначенные для разработки программного обеспечения:ассемблеры — компьютерные программы, осуществляющие преобразование программы в форме исходного текста на языке ассемблера в машинные команды в виде объектного кода. трансляторы - программы или технические средства, выполняющее трансляцию программы. компиляторы — Программы, переводящие текст программы на языке высокого уровня, в эквивалентную программу на машинном языке. интерпретаторы — Программы (иногда аппаратные средства), анализирующие команды или операторы программы и тут же выполняющие ихкомпоновщики (редакторы связей) — программы, которые производят компоновку — принимают на вход один или несколько объектных модулей и собирают по ним исполнимый модуль. препроцессоры исходных текстов — это компьютерные программы, принимающие данные на входе и выдающие данные, предназначенные для входа другой программы, например, такой, как компилятор Отла́дчик (debugger)- является модулем среды разработки илотдельным приложением, предназначенным для поиска ошибок в программе. текстовые редакторы — компьютерные программы, предназначенные для создания и изменения текстовых файлов, а также их просмотра на экране, вывода на печать, поиска фрагментов текста и т. п. специализированные редакторы исходных текстов — текстовые редакторы для создания и редактирования исходного кода программ. Специализированный редактор исходных текстов может быть отдельным приложением, или быть встроен в интегрированную среду разработки (IDE).библиотеки подпрограмм — сборники подпрограмм или объектов,используемых для разработки программного обеспечения. Редакторы графического интерфейсаПеречисленные инструменты могут входить в состав интегрированных сред разработкиВиды инструментального ПОТекстовые редакторы Интегрированные среды разработки SDK

  • Компиляторы

Интерпретаторы

  • Линковщики

  • Парсеры и генераторы парсеров (см. Javacc)

  • Ассемблеры

  • Отладчики

  • Профилировщики

  • Генераторы документации

  • Средства анализа покрытия кода

  • Средства непрерывной интеграции

  • Средства автоматизированного тестирования

  • Системы управления версиями

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

Во «внутреннем мире» ЭВМ информация записывается, хранится, обрабатывается, пересылается между отдельными устройствами с помощью электрических сигналов. Соответственно и управление этими процессами осуществляется электронными устройствами: процессору и вспомогательному оборудованию ЭВМ присуще восприятие определенных последовательностей электрических сигналов. Физическая природа сигналов делает их труднодоступными для восприятия и осознания человеком. Отсутствию или присутствию сигналов ставится в однозначное соответствие определенное сочетание нулей и единиц (в 8- или 16-ричной системах исчисления так называемый двоичный код).

Общей задачей П. является написание с помощью формальных языков, служащих средством общения между человеком и ЭВМ (языки П.), оптимальных по определенным критериям (времени исполнения, объему используемой памяти, универсальности и пр.) программ. Арсенал живых (т.е. употребляемых в настоящее время) языков П., посредством которых команды программы связываются с определенными кодами и соответствующими им электрическими сигналами, в настоящее время составляет несколько сотен. Как правило, названия языков П. сокращенно отражают основное назначение языка (АЛГОЛ — ALGOrithmic Language — алгоритмический язык, ФОРТРАН — FORmula TRANslatig language — язык перевода формул, БЕЙСИК — аббревиатура английского названия «Универсальный символический инструктивный код для начинающих» ПЛ/1 — Programming Ganguage — язык программирования и др. Сам язык включает набор команд (операторов), предписывающих ЭВМ выполнение законченных действий (например, в ФОРТРАНЕ используется около 20 английских слов: READ — прочитать, RETURN — вернуться, GO ТО — перейти и др.), которые вместе с дополнительной информацией в виде цифр и букв указывают ЭВМ, какую операцию и с какими данными необходимо выполнить. Совпадение результата действия оператора с общепринятым смысловым или бытовым значением команды (как, например в фортране) является характерной особенностью так называемых языков П. высокого уровня, появившихся относительно недавно (60-е гг.). На ранних этапах развития вычислительной техники программы для ЭВМ писались машинными кодами («машинными словами») — громоздкими последовательностями цифр. Числовой способ выражения инструкций не позволял следить за смыслом составляемых из них «текстов» программ. Дополнительные ограничения возникали в связи с тем, что в различных конструкциях машин по-разному решались проблемы хранения электрических сигналов и управления ими. Соответственно каждый из типов ЭВМ был приспособлен к пониманию только своих команд и их сочетаний. В связи с этим профессия программиста долгое время являлась уделом избранных, а процесс П. был недоступен для неспециалистов. Это долгое время обусловливало почти полное отчуждение пользователя от ЭВМ. Создание языков П. высокого уровня — систем нотации машинных команд, близких к понятиям формулирования задач в определенных предметных областях, в значительной степени способствовало устранению барьера между пользователем и ЭВМ.

В настоящее время П. стало одной из наиболее рентабельных областей научного прогресса (объем продаж программных продуктов превышает аналогичные показатели для собственно ЭВМ — технических устройств, в которых они применяются, составив в 1988 г. только для США приблизительно 25 млрд. долларов). Вся современная стратегия использования ЭВМ — происходящий и углубляющийся процесс их широкого использования почти во всех сферах человеческой деятельности — наряду с достижениями микроэлектроники базируется на успехах П., которое развивается в трех взаимосвязанных направлениях теоретическое П. изучает принципы и способы построения программ, имея конечной целью автоматический (с помощью ЭВМ) синтез программ для решения любых задач; системное П. направлено на создание комплексов программ длительного и массового использования, обеспечивающих пользователям максимум удобств и возможностей (с помощью посредников или самостоятельно) для применения вычислительной техники при решении основного множества универсальных задач; прикладное П. обслуживает конкретные (в т.ч. уникальные или узкоспециальные) потребности в применении ЭВМ представителями различных областей науки и практики.

Наиболее очевидный прогресс в П. достигнут в сфере разработки системного программного обеспечения. Его основа — комплекс программ, постоянно находящихся в памяти ЭВМ для осуществления взимосвязи человека с машиной и управления различными ее устройствами (так называемые операционные системы). Знание возможностей и особенностей операционных систем является основой успешного применения ЭВМ в интересах пользователя любой специальности.Машины разных типов и марок, имеющие одинаковые операционные системы и позволяющие выполнять программы, написанные для других ЭВМ с такой же операционной системой, называют совместимыми (IBM-совместимыми называют, например, выпускаемые различными производителями компьютеры, совместимые с ЭВМ типа IBM РС. совместимы машины единой серии ЕС и др.). Операционные системы представляют собой комплекс программ, связывающих все устройства ЭВМ в единое целое. Они обеспечивают запуск ЭВМ и ее внешних устройств (стартовая программа), управление очередностью выполнения программ (так называемая программа-диспетчер), ввод программ в оперативную память (программа-загрузчик), поиск информации на внешних устройствах (работа с файлами), учет состояния и ресурсов памяти (администратор) и т.д. Современные версии операционных систем кроме своего основного предназначения обеспечивают возможность инициации комплексных заданий ЭВМ с помощью одной или нескольких простых команд на почти «человеческом языке». Работа на персональных ЭВМ сопровождается, как правило, появлением на экране ясных подсказок и комментариев (указание ошибок и способов их исправления; предписание очередности и характера действий по исполнению задания и пр.), что среди прочих причин и создает компьютерам репутацию «умных». Однако на самом деле «интеллект» серийных ЭВМ в значительной мере обусловлен достижениями П. в области создания «дружественного интерфейса» — программного обеспечения, максимально приспособленного к образу мышления и нуждам далеких от специфических проблем П. пользователей. Области повседневной работы, для которых создаются пакеты прикладных программ, охватывают самые разнообразные и распространенные интересы пользователей.

№2

№3

Алгоритм – это последовательность действий приводящая конкретному результату за конечное число шаговСпособы представления:Словесное описание;Табличное (в виде таблице);Аналитическое (формулой);Графическое (блок схема алгоритма).Алгоритм не только задает последовательность выполнения операций при решении конкретной задачи. Он должен обладать следующими свойствами:- определенность - однозначная определенность результатов выполнения каждого шага алгоритма;- конечность - однозначная определенность результатов выполнения каждого шага алгоритма за конечное время;- результативность - получение конечного результата за конечное время;- массовость - возможность использования алгоритма для некоторого класса исходных данных;- правильность - получение правильных результатов решения поставленной задачи. Говорят, что алгоритм содержит ошибки, если можно указать такие исходные данные или условия, при которых выполнение алгоритма либо не завершается вообще, либо не будет получено никаких результатов, либо полученные результаты окажутся неправильными.Кроме переменных в алгоритмах используются массивы переменных - наиболее широко известная структура данных. Массив - область памяти, где могут размещаться совокупности данных определенного типа (целого, вещественного и т.д.). Все компоненты массива имеют одинаковый тип и являются одинаково доступными. Для обращения к отдельной компоненте используется имя массива с индексом, определяющим ее местоположение в массиве. Таким образом, массив характеризуется фиксированным именем, фиксированным типом и фиксированной размерностью. Например, последовательность чисел -1, 25, 13, 18, 8 можно рассматривать как массив целого типа с именем Vector, который содержит 5 элементов. К любому элементу этого массива можно обратиться следующим образом:Vector[1], где I

the other guys download movieможет принимать значения в диапазоне от 1 до 5. Vector[2] = 25;Разработка алгоритма решения задачи - наиболее ответственный этап в программировании. Игнорирование этого этапа является причиной многочисленных ошибок при проектировании программ. На этапе разработки алгоритма устанавливается необходимая логическая последовательность вычислений с учетом выбранного метода решения. При разработке алгоритма необходимо стремиться к максимальной простоте и наглядности. Это требование относится как к содержательной стороне, так и к форме записи алгоритма. Существует несколько способов записи алгоритмов, отличающихся друг от друга наглядностью, компактностью, степенью формализации и другими показателями. Наиболее распространенными являются:- графический способ (схемы алгоритмов, диаграммы Насси - Шнейдермана );

- словесный способ ( специальный язык проектирования программ - псевдокод и программа).

Следуя принципам структурного программирования, задачу необходимо представить как набор последовательных шагов (действий), избегая непоследовательных переходов. Этому требованию в полной мере отвечают диаграммы Насси - Шнейдермана и псевдокод.

№4

Алгоритмы можно представлять как некоторые структуры, состоящие из отдельных базовых (т.е. основных) элементов. Естественно, что при таком подходе к алгоритмам изучение основных принципов их конструирования должно начинаться с изучения этих базовых элементов. Для их описания будем использовать язык схем алгоритмов и школьный алгоритмический язык. Логическая структура любого алгоритма может быть представлена комбинацией трех базовых структур: следование,   ветвление,   цикл.

Характерной особенностью базовых структур является наличие в них одного входа и одного выхода.

1. Базовая структура  "следование". Образуется последовательностью действий, следующих одно за другим:

Школьный алгоритмический язык

Язык блок-схем

действие 1 действие 2 . . . . . . . . . действие n

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

  • если—то;

  • если—то—иначе;

  • выбор;

  • выбор—иначе.

    Школьный алгоритмический язык    

Язык блок-схем

1. если—то

если условие

  то действия

все

2. если—то—иначе

если условие

  то действия 1

  иначе действия 2

все

3. выбор

выбор

  при условие 1: действия 1

  при условие 2: действия 2

  . . . . . . . . . . . .

  при условие N: действия N

все

4. выбор—иначе

выбор

  при условие 1: действия 1

  при условие 2: действия 2

  . . . . . . . . . . . .

  при условие N: действия N

  иначе действия N+1

все

Примеры структуры ветвление

Школьный алгоритмический язык

Язык блок-схем

если x > 0

  то y := sin(x)

все

если a > b

  то a := 2*a; b := 1

  иначе b := 2*b

все

выбор

  при n = 1: y := sin(x)

  при n = 2: y := cos(x)

  при n = 3: y := 0

все

выбор

  при a > 5: i := i+1

  при a = 0: j := j+1

  иначе i := 10; j:=0

все

 

3. Базовая структура  "цикл". Обеспечивает многократное выполнение некоторой совокупности действий, которая называется телом цикла. Основные разновидности циклов представлены в таблице:

Школьный алгоритмический язык

Язык блок-схем

Цикл типа пока. Предписывает выполнять тело цикла до тех пор, пока выполняется условие, записанное после слова пока.

нц пока условие

  тело цикла

  (последовательность действий)

кц

Цикл типа для. Предписывает выполнять тело цикла для всех значений       некоторой переменной (параметра цикла) в заданном диапазоне.     

нц для i от i1 до i2

  тело цикла

  (последовательность действий)

кц

Примеры структуры цикл

       Школьный алгоритмический язык      

           Язык блок-схем            

нц пока i <= 5

  S := S+A[i]

  i := i+1

кц

нц для i от 1 до 5

  X[i] := i*i*i

  Y[i] := X[i]/2

кц

№5

Язы́к программи́рования — формальная знаковая система, предназначенная для записи компьютерных программ. Язык программирования определяет набор лексических, синтаксических и семантических правил, задающих внешний вид программы и действия, которые выполнит исполнитель (компьютер) под ее управлением.Со времени создания первых программируемых машин человечество придумало более двух с половиной тысяч языков программирования.[1] Каждый год их число увеличивается. Некоторыми языками умеет пользоваться только небольшое число их собственных разработчиков, другие становятся известны миллионам людей. Профессиональные программисты иногда применяют в своей работе более десятка разнообразных языков программирования.Создатели языков по-разному толкуют понятие язык программирования. К наиболее распространённым утверждениям, признаваемым большинством разработчиков, относятся следующие:Функция: язык программирования предназначен для написания компьютерных программ, которые применяются для передачи компьютеру инструкций по выполнению того или иного вычислительного процесса и организации управления отдельными устройствами. Задача: язык программирования отличается от естественных языков тем, что предназначен для передачи команд и данных от человека к компьютеру, в то время как естественные языки используются для общения людей между собой. Можно обобщить определение «языков программирования» — это способ передачи команд, приказов, чёткого руководства к действию; тогда как человеческие языки служат также для обмена информацией. Исполнение: язык программирования может использовать специальные конструкции для определения и манипулирования структурами данных и управления процессом вычислений.Типы данныСовременные цифровые компьютеры обычно являются двоичными и данные хранят в двоичном (бинарном) коде (хотя возможны реализации и в других системах счисления). Эти данные как правило отражают информацию из реального мира (имена, банковские счета, измерения и др.), представляющую высокоуровневые концепции.Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки могут быть классифицированы как системы со статической типизацией и языки с динамической типизацией.Статически-типизированные языки могут быть в дальнейшем подразделены на языки с обязательной декларацией, где каждая переменная и объявление функции имеет обязательное объявление типа, и языки с выводимыми типами. Иногда динамически-типизированные языки называются латентно-типизированными.Структуры данныхСистемы типов в языках высокого уровня позволяют определять сложные, составные типы, так называемые структуры данных. Как правило, структурные типы данных образуются как декартово произведение базовых (атомарных) типов и ранее определённых составных типов.Основные структуры данных (списки, очереди, хеш-таблицы, двоичные деревья и пары) часто представлены особыми синтаксическими конструкциями в языках высокого уровня. Такие данные структурируются автоматически.Семантика языков программированияСуществует несколько подходов к определению семантики языков программирования.Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.Деривационная семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий.Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.Используемые симвоСовременные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Подробнее по этой теме см.: Переносимый набор символов.Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :Заметным исключением является язык APL, в котором используется очень много специальных символов.Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Подробнее по этой теме см.: Русские языки программированияРасширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006, C#, Java) поддерживают Unicode.

№6

Начало развития

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

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

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

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

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

На протяжении 60-х годов запросы на разработку программного обеспечения возросли и программы стали очень большими. Люди начали понимать, что создание программного обеспечения – гораздо более сложная задача, чем они себе представляли. Это привело к тому, что было разработано структурное программирование. С развитием структурного программирования следующим достижением были процедуры и функции. К примеру, если есть задача, которая выполняется несколько раз, то ее можно объявить как функцию или процедуру и в выполнении программы просто вызывать ее. Общий код программы в данном случае становится меньше. Функции позволяют создавать модульные программы.

Следующим достижением было использование структур, благодаря которым перешли к классам. Структуры – это составные типы данных, построенные с использованием других типов. Например, структура время. В нее входит: часы, минуты, секунды. Программист мог создать структуру время и работать с ней, как с отдельной структурой. Класс – это структура, которая имеет свои переменные и функции, которые работают с этими переменными. Это было очень большое достижение в области программирования. Теперь программирование можно было разбить на классы и тестировать не всю программу, состоящую из 10’000 строк кода, а разбить программу на 100 классов, и тестировать каждый класс. Это существенно облегчило написание программного продукта.

Поколения языков программирования

Generation Language

Время создания

Языки

Сфера применения сегодня

1GL

1940-1950 гг.

машинные коды

программы для новых микропроцессоров, для которых еще не разработаны компиляторы

2GL

конец 1950-х начало 1960-х гг.

ассемблеры

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

3GL

1960-ые гг.

универсальные языки высокого уровня (Фортран, Кобол, Алгол и др.)

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

4GL

с начала 1970-х гг.

проблемно-ориентированные языки, оперирующие конкретными понятиями узкой предметной области (Progress 4GL и др.)

встроенные языки СУБД, языки проектирования

5GL

с конца 1990-х

узкоспециализированные языки, оперирующие понятиями предметной области знаний, например, бухгалтерскими счетами или ферзями и пешками + интегрированные с базами знаний и экспертными системами программные комплексы с собственными языками программирования (самообучающаяся нейронная сеть "LISA" с встроенным языком описания фактов, сущностей и взаимосвязей между ними)

№7

Введение Заря компьютеров Основные этапы развития ЭВМ I этап (1940-е – середина 50-х) II этап (середина 50-х – середина 60-х) III этап (середина 60-х – середина 70-х) IV этап (середина 70-х – настоящее время) V этап (?? – ??) Заключение Библиография

Введение

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

Слово «компьютер» означает «вычислитель», т.е. устройство для вычислений [1].

Потребность в вычислениях появилась у людей очень давно. Сначала использовали подручные средства такие, как счетные палочки или камешки, затем – более технологичные «устройства», например, счеты. Постепенно, с ростом технологического уровня цивилизации, росла и сложность таких устройств, и их вычислительная мощность.

В 1642 г. Блез Паскаль изобрел устройство, механически выполняющее сложение чисел, а в 1673 г. Готфрид Вильгельм Лейбниц сконструировал арифмометр, позволяющий механически выполнять четыре арифметических действия. Арифмометры позднее получили широкое распространение, с их помощью выполняли сложные расчеты, например, расчеты баллистических таблиц для артиллерийских стрельб. Была даже такая профессия, счетчик – человек, работающий с арифмометром, быстро и точно соблюдающий определенную последовательность инструкций. Но скорость расчетов была очень низкой – дни, а иногда и месяцы. Объяснялось это просто – выбор действий и запись результатов осуществлялись человеком, а скорость работы человека весьма ограничена.

Пионером компьютеростроения можно считать английского математика и ученого Чарльза Бэббиджа. Именно он в первой половине XIX века изобрел Аналитическую машину – универсальное вычислительное устройство [1]. Она работала без участия человека. Инструкции в нее подавались при помощи перфокарт – карт из плотной бумаги с информацией, наносимой с помощью отверстий. Также у Аналитической машины имелся «склад» для запоминания данных и промежуточных результатов.

Бэббидж не смог до конца завершить свою машину из-за ее сложности для техники того времени, однако выдвинутая им идея программного управления работой вычислительной машиной не была забыта. Спустя столетие она была использована сначала Конрадом Цузе (1941 г.) при создании аналога вычислительной машины Бэббиджа, чуть позже, в 1943 г., Говардом Эйкеном при создании машины «Марк-1», а затем и идеологом современного компьютеростроения, Джоном фон Нейманом.

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

Основные этапы развития ЭВМ

Развитие ЭВМ определяется развитием электроники, появлением новых элементов и принципов действия, т.е. развитием элементной базы [2]. В настоящее время насчитывается четыре поколения ЭВМ.

Поколение ЭВМ – это все типы и модели ЭВМ, разработанные различными конструкторскими коллективами, но построенные на одних и тех же научных и технических принципах [2]. Появление каждого нового поколения определялось тем, что появлялись новые электронные элементы, технология изготовления которых принципиально отличилась от предыдущего поколения.

Ниже приводятся характеристики этапов, каждому из которых соответствовало определенное поколение ЭВМ.

I этап (1940-е – середина 50-х)

Точкой, с которой обычно начинают отсчитывать этапы развития ЭВМ, является Вторая Мировая Война. Как это часто бывает, война, с ее ужасами и бедами, тем не менее, послужила катализатором в развитии многих технологий. Потребность в автоматизации вычислений (баллистики, криптографии и т.д.) была так велика, что над созданием машин типа построенных Эйкеном и Цузе трудились одновременно сразу несколько групп исследователей [1].

Начиная с 1943 г. группа специалистов под руководством Джона Мосли и Пресперта Экерта в США начала конструировать ЭВМ на основе электронно-вакуумных ламп. Предыдущие же модели типа эйкеновской основывались на реле. Как результат, созданная ими машина ENIAC (1946 г.) работала в 1000 раз быстрее, чем Марк-1. Однако перед вычислениями машину приходилось долго готовить, на это уходило от нескольких часов до нескольких дней. Для упрощения процесса задания программ решено было сконструировать новую машину, которая могла бы хранить программу в своей памяти [1].

В процессе создания ENIAC в 1945 году к работе был привлечен известный американский математик Джон фон Нейман, который вскоре сумел сформулировать пять основных принципов функционирования универсальных вычислительных устройств:

1. Любую ЭВМ образуют: a. арифметико-логическое устройство, выполняющее арифметические и логические операции; b. устройство управления, «дирижирующее» операциями; c. запоминающее устройство, или память для хранения программ и данных; d. внешние устройства ввода-вывода информации.

2. ЭВМ работает в двоичной системе счисления;

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

4. Принцип однородности памяти: программы и данные хранятся в одной и той же памяти. Над командами программы можно выполнять те же действия, что и над данными.

5. Принцип адресности: каждая ячейка памяти имеет свой адрес (номер).

На этих принципах, как на фундаменте, основывались в дальнейшем все последующие поколения машин.

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

Первая отечественная ЭВМ – МЭСМ (малая электронная счетная машина) была создана в 1951 г. под руководством академика С.А.Лебедева [2].

Для первых ЭВМ, созданных по принципам фон Неймана, например, машины Мориса Уилкса (1949 г.) программы приходилось писать на машинном языке, то есть в кодах, непосредственно воспринимаемых компьютером. Это, конечно, было гораздо лучше и быстрее, чем работа артиллериста-счетчика, но все же еще оставалось очень тяжелым, малопроизводительным и кропотливым занятием, в ходе которого легко было ошибиться [1]. По сути, программы представляли собой кодированный набор цифр, в котором человеку несведущему разобраться было невозможно в принципе, да и профессионалам приходилось попотеть.

Решением стало изобретение т.н. ассемблеров, или автокодов. Ассемблеры – языки символического кодирования [2]. Для каждого типа ЭВМ существует свой язык символического кодирования, так как его структура, обозначения, операции и т.д. определяются структурой конкретной ЭВМ.

Ассемблеры недалеко шагнули от машинных команд: просто вместо непонятных кодов стали использоваться мнемонические (легко запоминаемые) обозначения. Например, если 07FF – команда сложения на машинном языке, то в ассемблере она представляется мнемокодом ADD. Вследствие этого, программы на ассемблере очень легко переводятся в машинные коды при помощи специальной программы, называемой также ассемблером [1], и занимают крайне мало места (в единицах памяти, но не по размеру самого текста программы). Они обеспечивают большое быстродействие и наиболее полно учитывают особенности компьютера.

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

Подводя итог: программирование на данном этапе – трудоемкий процесс, диктующий необходимость знания всех команд ЭВМ и ее структуры, с непосредственной работой математика-программиста за пультом машины [2].