
- •Программирование и основы алгоритмизации
- •1. Понятие алгоритма
- •1.1. Определение алгоритма
- •1.2. Гост на описание блок-схем
- •1.3. Виды алгоритмов
- •2. Языки программирования
- •2.1. Определение алгоритмического языка
- •2.2. Классификация языков. История развития языков программирования
- •2.3. Выбор языка программирования
- •2.5. Арифметические и логические основы программирования
- •3. Понятие системы программирования
- •3.1. Этапы создания программ
- •3.2. Конструирование программ
- •3.3. Методы, технологии и инструментальные средства производства программных продуктов
- •4.1. Литералы
- •4.2. Встроенные типы данных
- •4.3. Операции
- •Адресные операции
- •Операции преобразования знака
- •Побитовые операции
- •Операция определения размера
- •Операции увеличения и уменьшения значения
- •Операции динамического распределения памяти
- •Операция доступа
- •Аддитивные операции
- •Мультипликативные операции
- •Операции сдвига
- •Поразрядные операции
- •Операции сравнения
- •Логические бинарные операции
- •Операция присваивания
- •Специальные формы операций присваивания
- •Операции выбора компонентов структурированного объекта
- •Операции обращения к компонентам класса
- •Операция управления процессом вычисления значений
- •Операция вызова функции
- •Операция явного преобразования типа
- •Операция индексации
- •4.5. Агрегатные типы данных
- •4.5.1. Массивы
- •4.5.2. Структуры
- •4.5.3. Поля битов
- •4.5.4. Объединения Используются для хранения значений различных типов в одной и той же области памяти, но не одновременно.
- •4.5.5. Перечисления
- •4.5.6. Переименование типов
- •Typedef имя ранее определенного типа имя нового типа1
- •Объявление typedef применяется для создания удобных распознаваемых имен часто встречающихся и для вложенных типов, а также, чтобы сделать программы переносимыми для различных целых типов.
- •4.6. Обработка символьных и строковых переменных
- •4.7. Указатели
- •4.7.1. Инициализация указателей
- •4.7.2. Операции с указателями
- •4.8. Пользовательские процедуры и функции
- •4.8.1. Перегрузка функций
- •4.8.2. Перегрузка операций
- •4.8.3. Шаблоны функций
- •4.8.4. Возврат из функции нескольких значений
- •4.9. Файлы
- •4.10. Директивы препроцессора
- •Библиографический список
2. Языки программирования
2.1. Определение алгоритмического языка
Язык, на котором записывается алгоритм, называется языком программирования. Алгоритмический язык – набор символов, правил их использования для описания алгоритма.
Основные свойства языка:
Алфавит – для записи текста программ используют определенный набор символов, это могут быть алфавитные, цифровые, специальные символы.
Синтаксис – это набор правил для построения правильных конструкций на языке. Специальные программы проверяют синтаксис при подготовке программ к выполнению.
Семантика – это набор правил, по которым исполнитель выполняет программы на этом языке. Это смысловая трактовка, определяющая определенное толкование отдельных конструкций и целых фраз.
Язык используется для реализации на ЭВМ команд алгоритма и служит для представления задач в форме, близкой к математической записи, с одной стороны, и к естественному языку, с другой стороны. На этом языке алгоритмы читаются и записываются как обычный текст.
Составление алгоритмических языков – трудоемкий процесс. Они должны включать в себя общепринятую математическую символику (числа, действия над ними, различные функции, скобки и т.д.) и должны позволять записывать по определенным правилам всевозможные программы для последующего их решения на ЭВМ.
Любой алгоритмический язык имеет свой алфавит, из которого строятся конструкции языка. Из символов алфавита создаются операторы. Их применяют для записи команд алгоритмов. Для различных вспомогательных целей используют служебные слова. Смысл и способ их употребления задается раз и навсегда. Благодаря служебным словам запись алгоритма становится наглядной, а форма представления различных алгоритмов имеет единый вид.
При освоении языка следует изучать следующие основные вопросы:
Какие величины допускаются в языке?
Как они представляются в тексте программы?
Какие действия можно выполнять?
Как описать эти действия?
Какие существуют правила создания программы?
Кроме того, нужно знать:
Как записать программу.
Процесс подготовки программы к выполнению.
Как выявить ошибки в программе.
2.2. Классификация языков. История развития языков программирования
Языки можно классифицировать по-разному. Нижеприведенная схема классификации отражает историю развития языков программирования (рис. 7).
Рис. 7. Классификация языков программирования
Машинные языки. Это язык микропроцессора (МП) в машине, у каждого МП он свой. Состоит из инструкций в цифровой форме типа 00011100 или 01001011 и т.д.
Машинно-ориентированные – это языки, которые при трансляции переводят одну команду языка в одну машинную инструкцию. Их еще называют язык 1:1.
Язык ассемблера. Вместо цифровых конструкций используются символические имена типа MOV AH,AL. На таких языках программируют операционные системы.
Дальнейшее развитие языков привело к объединению сложных действий в макрокоманды (автокоды).
Языки высокого уровня. По структуре близки к языку формул математики, типа Х=2·R+A. Именно у этих языков используются такие понятия как синтаксис и семантика.
Появление процедурных языков связано с ЭВМ II поколения . Разработка каждого языка тесно связана с кругом задач, для которых он был предназначен. Обилие языков объясняется невозможностью ни на одном из них описать все возможные возникающие задачи.
Первым языком высокого уровня стал ФОРТРАН. Описание этого языка было сделано в 1954 г. В 1956 г. он был использован на IBM в США. Наиболее известен вариант 1962 г. ФОРТРАН IV. В 1959 г. был разработан язык АЛГОЛ, который вместе с ФОРТРАНОМ использовался для научно-технических задач. В 1960 г. для решения экономических задач был создан язык КОБОЛ.
В 1965 г. черты вышеперечисленных языков можно было увидеть в языке ПЛ/1.
В 1965 г. в США с целью обучения программированию начинающих был создан Бейсик, который получил наибольшее распространение в связи с появлением микроЭВМ.
Проблемно-ориентированный язык – язык узкого класса задач (составления отчетов, сортировки массивов). Для статистики были разработаны языки РПГ, ИПЛ, ЛИСП, ДИНАМО.
ЭВМ III поколения потребовали нового подхода – сделать язык действительно универсальным. Первым такой язык был ПЛ/1. В 80-х годах начата разработка непроцедурных языков (или языков описания). Они принципиально отличаются от прочих тем, что предназначены не для реализации алгоритма, а для описания постановки задачи в специальных терминах «что дано – что требуется», а решение возлагается на ЭВМ.
ОО языки – объекно-ориентированные языки. Первый ОО язык был создан в 1967 г. (Симула) для моделирования дискретных событий в реальном мире, он был расширением АЛГОЛА.
В 1970 г. принципы объектно-ориентированного программирования (ООП) стали использовать в графике (язык Смолток). Основные концепции ООП воплотились в языке С++ Б. Страуструпом. В Паскале объекты впервые появились в 1991 г. (версии 5.5).
Концепция современного программирования – это использование ОО языков.
Языки ООП
В настоящее время известно много языков ООП. После первых Simula 67 и Smalltalk появились гибридные языки (т.е. языки, основанные на существующих языках), такие как C++, ObjectiveC, CLOS (производный от LISP), Object Pascal.
Помимо этого современное программирование – это визуальное программирование, или RAD-программирование, когда программа может быть построена путем диалога. RAD (Rapid Application Development) – это визуальные средства быстрой разработки, возникшие во многом благодаря объектной ориентации. На схеме представлен еще один вид языков программирования – язык систем. В эту группу входят языки, которые создавались как часть систем. Например, сюда можно отнести языки СУБД – ObjectPal, dBase; язык редактора WORD Basic; язык системы MapView (info) – Map Basic, GPSS и др.
Как отдельная часть схемы выделены САПР. Это не совсем язык программирования, это комплекс программных средств, автоматизирующий процесс создания программ. Эти средства еще называют CASE-программы (средства). САПР программного обеспечения могут быть подразделены на следующие группы:
1. Средства системного анализа и проектирования.
1.1. Инструментальные и поддерживающие средства разработки.
1.2. Средства имитации и моделирования.
2. Средства статистического анализа программы в исходных кодах.
2.1. Лексико-статистический анализ.
2.2. Структурный анализ.
2.3. контроль межкомпонентных интерфейсов.
3. Средства динамического анализа
3.1. Средства отладки.
3.2. Средства генерации тестовых примеров.
3.3. Тестовые мониторы.
3.4. Средства получения статистических таблиц.
4. Средства документирования.
Пользователь должен описать на языке постановки вход программного комплекса, выход, определяющие его функции. Указанные средства осуществляют анализ требований, проверку их на непротиворечивость и полноту, контроль входных и выходных данных на выявление недостающих или избыточных данных, осуществляют анализ «узких» мест в программе, которые могут вызвать отказы системы.
Объектно-ориентированное программирование, конечно, не последняя и предельная точка в программировании. Скорее, это промежуточный шаг в происходящем проектировании, который, может быть, никогда не закончится.
Delphi с его мощным использованием компонентов, уже частично показывает, что намечается в будущем – это компоненты и визуальная манипуляция ими. Вероятной тенденцией будет предоставление программистам возможности комбинировать компоненты посредством визуальных инструментов. Все, что упрощает процесс разработки, будет развиваться, при этом будет поощряться тенденция создания более изменчивых и гибких решений вместо статичных и жестких.