- •Содержание
- •Часть 1. Основные понятия программирования §1.1. Этапы разработки программного обеспечения
- •§1.2. Основные сведения об алгоритмах Понятие алгоритма
- •Свойства алгоритма
- •Формы записи алгоритмов
- •Блок-схемы алгоритмов
- •§1.3. Языки программирования
- •§1.4. Паскаль и Object Pascal, Турбо-Паскаль и Delphi
- •Контрольные вопросы
- •Язык, оболочка и интегрированная среда разработки
- •Часть 2. Общие сведения о языке Паскаль §2.1. Алфавит и служебные слова
- •Описание общих конструкций языка
- •§2.2. Структура программы
- •§2.3. Разделы описаний Описание меток
- •Определение констант
- •Определение типов
- •Описание переменных
- •Контрольные вопросы
- •Часть 3. Простые типы данных Иерархия типов
- •§3.1. Целые типы
- •§3.2. Вещественные типы
- •§3.3. Логический тип
- •§3.4. Литерный тип
- •§3.5. Перечисляемый тип
- •§3.6. Диапазоны (интервальный тип)
- •Дополнительные типы в Delphi
- •Контрольные вопросы
- •Глава 4. Операторы языка Паскаль Выражения
- •§4.1. Оператор присваивания
- •§4.2. Ввод-вывод данных
- •§4.3. Составной оператор
- •§4.4. Пустой оператор
- •§4.5. Безусловный оператор перехода
- •§4.6. Условный оператор
- •§4.7. Оператор цикла с параметром for
- •§4.8. Оператор цикла с предусловием while
- •§4.9. Оператор цикла с постусловием repeat
- •§4.10. Оператор выбора case
- •Контрольные вопросы
- •Глава 5. Процедурное программирование §5.1. Функции
- •Параметры – значения
- •Параметры – переменные
- •Бестиповые параметры
- •§5.2. Процедуры
- •Правила использования подпрограмм
- •Рекурсия
- •Директивы
- •Процедурные типы
- •Пример использования подпрограмм
- •Контрольные вопросы
- •Глава 6. Структурированные типы данных
- •§6.1. Массивы
- •§6.2. Строки
- •§6.3. Записи
- •§6.4. Множества
- •Пример использования множеств
- •§6.5. Файлы
- •Установочные и завершающие операции
- •Операции ввода-вывода
- •Перемещения по файлу
- •Пример работы с файлом
- •Обработка ошибок ввода-вывода
- •Специальные операции
- •Пример объединения двух файлов
- •Текстовые файлы
- •Стандартные текстовые файлы
- •Файлы без типа
- •Контрольные вопросы
- •Глава 7. Динамические структуры данных §7.1. Динамические переменные
- •§7.2. Указатели
- •Работа с динамическими переменными
- •Пример двухсвязанного циклического списка
- •Указатели без типа
- •Контрольные вопросы
- •Глава 8. Низкоуровневые возможности Паскаля §8.1. Язык Ассемблер
- •§8.2. Доступ к аппаратуре Доступ к памяти
- •Доступ к портам ввода-вывода
- •Работа по прерываниям
- •Контрольные вопросы
- •Глава 9. Модули §9.1. Основные понятия
- •§9.2. Использование модулей
- •§9.3. Стандартные модули
- •§9.4. Модуль Crt
- •Работа с экраном в текстовом режиме
- •Работа с клавиатурой
- •Работа со звуком
- •§9.5. Модуль dos
- •§9.6. Графический режим монитора
- •Контрольные вопросы
- •Глава 10. Введение в объектно-ориентированное программирование §10.1. История развития программирования
- •Понятие объекта
- •§10.2. Свойства объектов
- •Раннее и позднее связывание
- •§10.3. Виртуальные методы
- •Конструкторы и деструкторы
- •§10.4. Динамические объекты
- •Скрытые поля и методы
- •Контрольные вопросы
- •Литература
§1.3. Языки программирования
Язык – это естественная или искусственная знаковая система для общения и передачи информации.
По большому счету, при разработке и отладке программ участвует несколько языков, представленных на рис. 1.7.
Рис. 1.7. Языки, участвующие в создании программы.
Основные характеристики языков программирования [2]:
Уровень языка. Характеризуется сложностью задач, решаемых с помощью этого языка. Программирование представляет собой отображение программных объектов, понятий и явлений предметной области задачи. Чем более адекватно можно выполнить это отображение, тем выше уровень языка программирования. А отображение будет выполнено тем лучше, чем богаче возможности типообразования языка программирования.
Мощность языка. Характеризуется количеством и многообразием задач, алгоритмы решений которых можно записать, используя язык.
Концептуальная целостность. Характеризуется свойствами совокупности понятий, служащих для описания этого языка.
Надежность языка. Должна обеспечивать минимум ошибок при написании программ. Более того, язык должен быть таким, чтобы неправильные программы было трудно писать.
Удобочитаемость. Это легкость восприятия программ человеком. Особенно важна при коллективной работе.
Полнота. Характеризует способность описать класс задач в некоторой предметной области.
Гибкость. Характеризует легкость выражения необходимых действий.
Мобильность. Независимость от аппаратных средств, обеспечивающая переносимость программного обеспечения.
Эффективность реализации. Должна включать не только эффективную реализацию самого транслятора, но и генерацию им кода программ.
Некоторые характеристики конфликтуют друг с другом. Это подчеркивает сложности, с которыми приходится сталкиваться создателям новых языков.
Уровень языка связан с историей и эволюцией языков программирования:
Поколение 0 (языки нулевого уровня). Это машинные языки. Они появились с появлением первых ЭВМ в середине 40-х годов ХХ века.
Первое поколение – ассемблеры. Фактически это те же машинные языки, но программа составляется не в виде двоичных наборов символов, а с помощью более наглядных мнемонических обозначений. Хотя в них одна ассемблерная команда порождает одну машинную (язык типа 1:1).
Второе поколение – макроассемблеры. Это языки типа 1:n. Используют дополнительные более сложные конструкции. Эти два поколения иногда объединяют. Появились в конце 50-х годов.
Третье поколение – процедурные языки. Это универсальные языки высокого уровня, с помощью которых можно решать задачи из любых областей. Появились в начале 60-х годов. Это Алгол, Кобол, Фортран, позже Паскаль, Си и другие.
Четвертое поколение – проблемные языки или языки поддержки сложных структур данных. Это специализированные языки описания задач типа «заполни бланк». Используя подобный язык, пользователь сообщает только, какую задачу надо решить и с какими данными. Например SQL.
Пятое поколение – языки искусственного интеллекта, такие, как Prolog, Lisp.
Шестое поколение – языки нейронных сетей или самообучающиеся языки.
Такое деление имеет прямое отношение и к мобильности. Первые поколения языков являются машинно-зависимыми, начиная с процедурных языков – машинно-независимые.
К перечисленным категориям относятся не только языки для создания программ, но и такие, как языки моделирования, языки запросов (к базам данных), языки гипертекстовой разметки, языки сценариев и другие. Иногда их все называют языками программирования, но в этом курсе рассматриваются только языки, порождающие программу для выполнения на ЭВМ, а конкретнее – языки третьего поколения.
Существует очень много разнообразных языков программирования, которые определенным образом классифицируются, группируются и объединяются в разнообразные семейства. Вот некоторые из них:
Семейство первых универсальных языков (прародителей):
Fortran (1954)
Algol 60 (1960)
Basic (1963)
Algol 68 (1968)
PL/1 (1968).
С-семейство языков:
C (1972)
C K&R (1978)
C++ (1983)
C++ ARM (1990)
ISO C90 (1990)
Java (1995)
Limbo (1996)
C++ Std (1998)
ISO C99 (1999)
C# (2000)
Pascal-семейство языков:
Pascal (1970)
Modula-2 (1978)
Object Pascal (1985)
Modula-3 (1988)
Oberon (1988)
Oberon-2 (1991)
Component Pascal (1997)
Но широкое распространение получили только некоторые из них. При универсальном программировании на персональных компьютерах наиболее часто используются языки Си (C++), Паскаль (Object Pascal), Бейсик (VBA).
Язык С++ используется для профессионального программирования и требует знания аппаратных средств ЭВМ. Язык Паскаль был специально разработан для обучения компьютерной грамотности и рекомендуется для начального обучения программированию, поэтому именно он в этом курсе и рассматривается.
