48120

Основы алгоритмизации. Основы программирования

Конспект

Информатика, кибернетика и программирование

Для ввода данных в компьютер используется: клавиатура набор данных вручную; жесткий диск ввод данных из файла. Для вывода данных из компьютера используется: экран монитора для визуализации; принтер для документирования; жесткий диск для сохранения данных в файле. Алгоритм как вычислительный процесс – это точное предписание определяющее вычислительный процесс ведущий от варьируемых исходных данных к искомому результату рис. Определенность – предписания алгоритма должны быть точными и понятными обеспечивать...

Русский

2015-01-17

2.4 MB

2 чел.

  1.  Основы алгоритмизации

При работе с данным разделом Вам предстоит:

  1.  Изучить три темы:
  •  специфика решения задачи с использованием компьютера;
  •  понятие алгоритма;
  •  примеры классических алгоритмов.
  1.  Ответить на вопросы для самоконтроля по каждой теме.
  2.  Выполнить одну практическую работу.

  1.  Специфика решения задачи с использованием компьютера
    1.  Роль моделирования при решении сложных задач

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

Рис. 1.1 Классификация моделей по степени формализации

  1.  Реальная система описывается системой понятий (концептов), между которыми устанавливаются причинно-следственные связи.
  2.  Каждая концепция может быть зафиксирована с различной степенью детализации, уровень определяется исследователем.
  3.  Инструментом создания формальных моделей на основе концептуальных являются формальные языки (например, U-язык, язык высказываний), позволяющие вести доказательства и рассуждения. Разработка формальной модели, как правило, сопровождается графическими построениями (граф состояний, граф переходов системы).
  4.  Полученные формальные модели могут быть преобразованы в математические:
    •  аналитические модели (показатели эффективности выражаются в виде функций относительно параметров системы),
    •  имитационные модели (моделирование при помощи алгоритмов и программ, имитирующих функционирование исследуемой системы).
  5.  Математические модели не содержат сведений о том, как должна перерабатываться информация, чтобы получить результат. Порядок переработки информации необходимо определить и представить в виде алгоритма решения задачи (реализации соответствующей математической модели), т.е. в виде алгоритмической, а затем программной модели.
  6.  Основы алгоритмизации и программирования фундаментальны и имеют общий характер, приближающий их к основным законам математики, речи или письма.

В процессе решения задачи с применением компьютера исследователь проходит ряд этапов (рис. 1.2).

Рис. 1.2 Этапы решения задачи на компьютере

  1.  Устройство компьютера как инструмента решения задач

На всех этапах подготовки задачи к решению и при ее решении на компьютере необходимо учитывать особенности работы вычислительной техники:

  •  огромное быстродействие компьютера и абсолютную исполнительность;
  •  ограничения на объемы памяти, которые могут отводиться для записи чисел, переменных и т.п.;
  •  отсутствие у компьютера интуиции и чувства здравого смысла;
  •  способность компьютера решать только ту задачу, программу решения которой ей подготовил человек.

Упрощенная схема взаимодействия процессора с памятью и внешними устройствами представлена на рис. 1.3.

Рис. 1.3 Упрощенная схема взаимодействия процессора с памятью и внешними устройствами

Процессор – это большая интегральная микросхема, выполняющая основные вычислительные функции компьютера. Команды и данные поступают в процессор в виде электрических сигналов. Физически процессор представляется как совокупность простых электронных элементов – транзисторов.

В цифровой вычислительной технике транзисторы используются как электронные переключатели. В процессоре компьютера транзисторы сгруппированы в микроэлементы, называемые триггерами. Триггеры имеют два устойчивых состояния (открыт – закрыт) и переключаются из одного состояния в другое электрическими сигналами. Этим устойчивым состояниям соответствуют математические понятия 0 или 1. Поступающие в процессор команды – электрические сигналы – двоичные числа.

Машинный код процессора – это последовательность двоичных чисел. Для понимания процесса составления машинного кода следует ориентироваться на структуру оперативной памяти компьютера, в которой хранятся данные и программы.  

Оперативная память состоит из набора запоминающих ячеек (бит), сгруппированных по 8 штук (байт). В каждой ячейке может храниться 0 или единица.  (рис. 1.4).

Рис. 1.4 Структура оперативной памяти (ОЗУ) компьютера

Формирование двоичного машинного кода иллюстрируется на рис. 1.5.

Рис. 1.5  Пример образования машинного кода

Содержимое каждой из дискретных единиц памяти представлено в таблице 1.1.

Таблица . Содержимое дискретов памяти

№ п/п

Дискрет памяти

Содержимое дискрета памяти

1

Бит

1. Число 0 или 1

2. Логическая величина ДА (если 1), НЕТ (если 0)

2

Байт (8 бит)

1. Числа без знака (положительные) от 0 до 255

2. Числа со знаком (положительные и отрицательные) от -127 до +128

3. Один символ (его числовой код от 0 до 255)

3

Слово (2 байта)

1. Числа без знака (положительные) от 0 до 65535

2. Числа со знаком (положительные и отрицательные) от -32767 до +32768

4

2 слова

1. Целые числа без знака (положительные) более 65535

2. Дробные числа

Устройства ввода-вывода предназначены для организации взаимодействия человека с компьютером.

Для ввода данных в компьютер используется:

  •  клавиатура (набор данных вручную);
  •  жесткий диск (ввод данных из файла).

Для вывода данных из компьютера используется:

  •  экран монитора  (для визуализации);
  •  принтер  (для документирования);
  •  жесткий диск (для сохранения данных в файле).
    1.  Пример решения задачи с использованием компьютера 

Этап 1. Условие задачи (концептуальная модель в словесной форме):

«Функция y=f(x) должна получить значение, равное единице, если переменная х больше нуля, и нуль, если переменная х принимает другие значения».

Этап 2. Представление задачи в графическом виде

Представление задачи в графическом виде

Этап 3. Математическая постановка задачи (математическая модель):

  •  определяются исходные данные и их типы: переменная х –вещественный, y – целый тип;
  •  решение задачи описывается в виде аналитических зависимостей.

Этап 4. Разработка алгоритма (рис. 1.6)

Рис. 1.6 Запись алгоритма в виде блок-схемы

Этап 5. Алгоритм переводится в программу на языке высокого уровня, программа вводится в память компьютера, осуществляются ее отладка и решение (рис. 1.7).

 

Рис. 1.7 Запись алгоритма на языке программирования высокого уровня

Распределение времени выполнения каждого этапа представлено на рис. 1.8.

Рис. 1.8  Распределение времени на решение задачи с помощью компьютера

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

Вопросы для самоконтроля

  1.  Какие модели необходимо разрабатывать в процессе решения сложной задачи?
  2.  Какую роль играет компьютер при решении сложной задачи?
  3.  Какие особенности компьютера необходимо учитывать при его использовании в процесс решения сложной задачи?
  4.  Назовите основные дискреты памяти компьютера. Какие данные можно хранить в каждом из дискретов?
  5.  Какой этап решения задачи с использованием компьютера является наиболее трудоемким?
    1.  Понятие алгоритма
      1.  Свойства алгоритмов и способы их задания

Слово «алгоритм» происходит от латинской формы написания имени великого математика IX века Аль Хорезми (Muhammed ibn Musa al Horesmi), который сформулировал правила выполнения арифметических действий.

Алгоритм как универсальное понятие – это точно определенное формальное описание способа решения задачи путем разбиения ее на конечную по времени последовательность действий (элементарных операций):

  •  «формальное описание» – полное и непротиворечивое описание,
  •  «элементарная операция» – это действие, не подлежащее детализации в рамках заданного критерия.

Алгоритм как вычислительный процесс – это точное предписание, определяющее вычислительный процесс, ведущий от варьируемых исходных данных к искомому результату (рис. 1.9).

Рис. 1.9  Основные составляющие алгоритма

Качество алгоритма определяется его свойствами (характеристиками). К основным свойствам алгоритма относятся:

  1.  Массовость   алгоритм пригоден для решения всех задач данного типа.
  2.  Результативность  алгоритм должен приводить к получению результата за конечное число шагов.
  3.  Определенность – предписания алгоритма  должны быть точными и понятными, обеспечивать однозначность результата вычислительного процесса при заданных исходных данных.
  4.  Дискретность   Описываемый процесс и его алгоритм могут быть разбиты на отдельные элементарные этапы, возможность выполнения которых на компьютере у пользователя не вызывает сомнений.

Формы записи алгоритма представлены на рис. 1.10.

Рис. 1.10 Формы записи алгоритма

Псевдокод (ПСК) – наиболее простая форма представления алгоритма как словесное описание последовательности предписаний на подмножестве естественного языка.

Выполнение алгоритма происходит в порядке записи предписаний. При необходимости изменить порядок выполнения предписаний в явной форме указывается, какое предписание надлежит выполнить следующим.

Правила записи алгоритма в ПСК:

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

Преимущество  псевдокода – универсальность. Недостаток – низкий уровень наглядности записи.

Графическая схема алгоритмов (блок-схема) - это графический документ, содержащий последовательность предписаний в виде типовых геометрических фигур. Условные обозначения, применяемые при составлении граф-схем алгоритмов, и правила выполнения определены в ГОСТ 19.701-90 (ИСО 5807-85) «Схемы алгоритмов, программ, данных и систем. Условные обозначения и правила выполнения».

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

Таблица 1.2.  Описание символов, используемых в блок-схемах алгоритма

Наименование

Обозначение

Функции

Данные

Символ отображает данные, носитель данных не определен. Используется для обозначения операций ввода и вывода данных

Процесс

Символ отображает функцию обработки данных любого вида (выполнение определенной операции или

группы операций, приводящее к изменению значения, формы или размещения информации). Используется для обозначения операций присваивания

Предопределенный процесс

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

Подготовка

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

Решение

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

Граница цикла

Символ, состоящий из двух частей, отображает начало и конец цикла. Обе части символа имеют один и тот же идентификатор. Условия для инициализации, приращения, завершения и т.д. помещаются внутри символа в начале или в конце в зависимости от типа цикла

Соединитель

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

Терминатор

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

Линия

Символ отображает поток данных или управления. Направления справа налево и снизу вверх обозначаются стрелками. Используется для соединения символов

Параллельные действия

Символ отображает синхронизацию двух или более параллельных операций

Пунктирная линия

Символ отображает альтернативную связь между двумя или более символами. Кроме того, символ используется для обведения аннотированного участка при записи комментариев

Комментарий

Символ используется для добавления описательных комментариев или пояснительных записей с целью объяснений или примечаний. Пунктирные линии в символе комментария связаны с соответствующим символом или могут обводить группу символов. Текст комментариев или примечаний должен быть помещен около ограничивающей фигуры

Пример блок-схемы алгоритма решения арифметической задачи и его записи в псевдокодах приведен на рис. 1.11.

Рис. 1.11 Примеры записи алгоритма в псевдокодах и в виде блок-схемы.

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

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

Шаг

a

b

c

x

Условия

Выводы

3

5

4

1

 

4

5

4

1

 

 

5, 4, 1

5

5

4

1

 

5>4 да

 

6

5

4

1

7

 

 

7

5

4

1

8

 

 

8

5

4

1

8

 

8

  1.  Понятие структурной алгоритмизации

Появлению технологии структурной алгоритмизации способствовали три фактора:

  1.  Формирование понятия  «программистская деятельность», связанного с процессом компоновки программы из подпрограмм и ее отладки
  2.  Появление языков программирования высокого уровня при отсутствии общей методологии программирования
  3.  Публикация труда Э́дсгера Ви́бе Де́йкстры «Заметки по структурному программированию» (1968 г.) с доказательством достаточности трех типов управляющих структур. Автор отстаивал необходимость математического подхода к программированию, предполагающего предварительное точное, всестороннее математическое описание задачи и способа её решения, формальное доказательство правильности выбранного алгоритма и последующую реализацию алгоритма в виде максимально простой, структурированной программы, корректность которой должна быть формально доказана.

Причина неоправданной сложности компьютерных программ кроется в отсутствии в них четкой математической структуры (Э.В. Дейкстра). Решение проблемы сложности программ – в использовании трех типов управляющих структур:

  •  простой последовательности,
  •  альтернативы,
  •  повторения.

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

В основу структурной алгоритмизации положены следующие требования:

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

Структурная алгоритмизация основывается на двух принципах:

  •  последовательная детализация алгоритма «сверху вниз»;
  •  ограниченность базового набора структур для построения алгоритма любого уровня сложности.

Основные свойства и достоинства структурного программирования:

  •  возможность преодоления барьера сложности программ;
  •  возможность демонстрации правильности программ на различных этапах решения задач;
  •  наглядность программ;
  •  простота модификации (внесения изменений).

Правила составления алгоритма с применением структурной алгоритмизации:

  1.  Задача записывается на естественном языке предметной области.

Пример. По результатам испытаний выбрать оптимальные параметры двигательной установки ракеты.

  1.  Начало;
    1.  Список данных: данные: тип; ... ; данные: тип;
    2.  Ввод (исходные данные);
    3.  Вывод (исходные данные);
    4.  Обработка результатов испытаний;
    5.  Оценка надежности двигательной установки;
    6.  Выбор оптимальных параметров;
    7.  Вывод (результат);
    8.  Конец.
  2.  Алгоритм может быть реализован на ЭВМ, если он содержит только элементарные предписания и структуры, входящие в базовый набор. Элементарными, т.е. не требующими детализации, являются следующие предписания или операции:
  •  Начало;
  •  Конец;
  •  Список данных;
  •  Ввод;
  •  Вывод;
  •  вычислительные операции, реализуемые операторами присваивания. Сложные конструкции, разбиваются на более простые.

Пример. Предписание 5 для рассматриваемого алгоритма может быть записано:

5.1. Начало 5;

5.2. ... Операции, раскрывающие смысл обработки результатов испытаний ... ;

5.N. Конец 5.

Количество шагов при последовательной детализации не ограничивается. Детализация заканчивается, когда конструкции алгоритма будут содержать только элементарные предписания и структуры, входящие в базовый набор. Предписания 1–4 и 8–9, как правило, присутствуют в каждом алгоритме, разрабатываемом методом структурной алгоритмизации.

  1.  Базовый набор алгоритмических структур

Теория структурного программирования доказывает, что алгоритм любой степени сложности можно построить с помощью основного базового набора структур:

  •  последовательной (линейной) структуры (рис. 1.12, а);
  •  ветвящейся структуры (рис. 1.12, б);
  •  циклической структуры (рис. 1.12, в).

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

Рис. 1.12  Базовый набор структур:

а – последовательная (линейная) структура;

б – ветвящаяся структура; в – циклическая структура

Линейные и разветвляющиеся структуры

Наиболее простыми являются линейные структуры, с их помощью можно описать любой вычислительный процесс. Предписания, которые обычно содержит такой алгоритм, представлены на рис. 1.13. Рассматриваемый алгоритм относится к линейным алгоритмам т.к. отдельные предписания выполняются в порядке записи независимо от значений исходных данных и промежуточных результатов.

Линейные алгоритмы используются на первых этапах детализации задачи и содержат следующие типовые предписания:

1. Предписание «Список данных» содержит сведения об именах и типах данных, обрабатываемых в этом алгоритме.

2. Предписание «Ввод (исходные данные)» определяет, какие исходные данные и в каком порядке должны быть введены в ЭВМ.

Рис. 1.13 Типовой линейный алгоритм вычислительного процесса

3. Предписание «Вывод (исходные данные)» позволяет проконтролировать правильность ввода информации.

4. Предписания 5 и 6 позволяют получить требуемые результаты и выдать их пользователю. Предписание 5 не является элементарным и требует дальнейшей детализации.

Часто для дальнейшей детализации алгоритма используются ветвящиеся структуры (рис. 1.14). Ветвящимся (разветвляющимся) называется фрагмент алгоритма, в котором в зависимости от исходных данных или промежуточных результатов вычисления реализуются по одному из нескольких заранее предусмотренных направлений. Такие направления называются ветвями вычислений.

Рис. 1.14  Ветвящаяся структура:

а – стандартная схема;

б, в – частные случаи ветвления

Каждая ветвь может быть любой степени сложности, а может вообще не содержать предписаний, т.е. быть «вырожденной». Выбор той или иной ветви осуществляется в зависимости от результата проверки условия. В каждом конкретном случае алгоритм реализуется только по одной ветви, а выполнение остальных исключается. Положительный исход проверки условия обозначен знаком «+» (да, true, истина, «1»), а отрицательный – знаком «-» (нет, false, ложь, «0»).

На практике часто встречаются задачи, когда нужно выбрать не одно из двух, а одно из трех или более предписаний. Такую структуру называют выбором варианта, ее также можно построить из линейных и ветвящихся структур, как показано на рис. 1.15. В такой структуре сначала вычисляется значение выражения, стоящего в операторе присваивания. В зависимости от значения переменной i затем будет выбран один из четырех операторов. Число выбираемых операторов в такой структуре не ограничено.

Рис. 1.15 Выбор варианта:

а – структура выбора варианта; б, в – условное обозначение

Организация циклических вычислительных процессов

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

Циклическими называются алгоритмы, у которых выполнение некоторых операторов (групп операторов) осуществляется многократно с одними и теми же или модифицированными данными.

Циклические алгоритмы находят самое широкое применение в программировании, так как при этом человек составляет программу один раз, а ЭВМ выполняет ее многократно. Циклические алгоритмы часто называют циклами.

В зависимости от способа организации числа повторений различают три типа циклов:

  •  цикл с заданным условием продолжения работы;
  •  цикл с заданным условием окончания работы;
  •  цикл с заданным числом повторений.

Цикл с заданным условием продолжения работы (цикл-ПОКА)

Логика работы такой структуры описывается схемой на рис. 1.16.

Тело цикла может включать в себя группу операторов любой степени сложности. При выполнении условия продолжения работы выполняется тело цикла; если условие не выполняется, то работа циклической структуры заканчивается и начинает выполняться следующая структура основного алгоритма.

Рис. 1.16 Структура цикл-ПОКА:

а – развернутая схема цикла; б – запись в псевдокодах; в – компактная схема цикла

Пример: составить алгоритм печати таблицы значений х, х2, sin(x) и 1/х при изменениях х от 1 с шагом 0,1 , пока выполняется условие х<10.

  1.  Начало;
  2.  Список данных:

х, fl, f2, f3 – вещественный;

  1.  х:=1;
  2.  Цикл-ПОКА (х < 10);
  3.  Тело цикла

 fl:= x2;

 f2:= sin(x);

 f3:= l/x;

  1.  Вывод(х, fl, f2, f3);
  2.  x := x+0,1;
  3.  Конец-цикла 4;
  4.  Конец.

Цикл с заданным условием окончания работы (цикл-ДО)

Структура цикл-ПОКА предусматривает вариант, когда тело цикла не выполняется ни разу (условие, стоящее в начале цикла, сразу же не выполняется). Структура, у которой тело цикла выполняется хотя бы один раз, приведенная на рис. 1.17. Выход из конструкции цикл-ДО осуществляется по достижении заданного значения признака.

Рис.1.17 Структура цикл-ДО:

а – развернутая схема цикла; б – запись в псевдокодах; в – компактная схема цикла

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

  1.  Начало;
  2.  Список данных: х – целый;
  3.  х:=1;
  4.  Цикл-ДО ();
  5.  х := х+1;
  6.  Конец-цикла 4;
  7.  х := х-1;
  8.  Вывод(х);
  9.  Конец.

Цикл с заданным числом повторений

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

В практических инженерных задачах обычно известны начальные значения изменяемых величин, закон изменения и конечное число повторений. Переменная, изменение которой организуется в ходе реализации цикла, называется параметром цикла или управляющей переменной. Алгоритм работы цикла с заданным числом повторений (иногда его называют циклом с параметром) приведен на рис. 1.18.

Рис. 1.18 Развернутая схема цикла с заданным числом повторений

Графические схемы циклов с заданным числом повторений с возрастающим и убывающим параметрами представлены на рис. 1.19. Схемы отличаются знаками в блоке проверяемого логического условия и в блоке изменения параметра цикла.

Рис. 1.19 Развернутая схема цикла с заданным числом повторений:

 а – с возрастающим параметром; б – с убывающим параметром

Задача: составить алгоритм печати таблицы значений х, х2, sin(x) и 1/х при изменениях х от 1 с шагом 0,1 , пока выполняется условие .

  1.  Начало;
  2.  Список данных:

х, fl, f2, f3 – вещественный;

  1.  Цикл по х от 1 до 10 шаг 0.1;
  2.  Тело цикла

 fl:=x2;

f2:=sin(х) ;

f3:=1/x;

  1.  Вывод(х, fl, f2, f3) ;
  2.  Конец-цикла 3;
  3.  Конец.

           

На рис. 1.20 и рис. 1.21 представлены примеры алгоритмов простейших задач обработки числовых данных

Рис. 1.20 Линейный алгоритм

Рис. 1.21 Ветвящийся алгоритм

  1.  Примеры классических алгоритмов
    1.  Переменные-счетчики и аккумуляторы

Типичное применение счетчиков и аккумуляторов – обновление значения в итоговой переменной.

Рассмотрим оператор присваивания  number := number +1. Символ равенства действует, как стрелка, указывающая влево: «Возьми то, что стоит справа от знака равенства, вычисли, а затем положи в переменную, стоящую слева». После выполнения сложения значение суммы будет помещено в переменную number, заменив первоначальное значение. Конечный результат оказывается на 1 больше начального значения (рис. 1.22).

Рис. 1.22 схема работы переменной-счетчика

Подобные присваивания выполняются внутри циклов для подсчета числа повторов. После завершения выполнения цикла в переменной, осуществлявшей подсчет, окажется суммарное значение. Переменная number является счетчиком.

Аккумулятор подобен счетчику в том, что имя переменной находится с двух сторон оператора присваивания. В отличие от переменных-счетчиков аккумуляторы обычно добавляют значение, отличающееся от 1 (рис. 1.23). Аккумуляторы используются для подсчета денежных сумм, данных о продажах и т. д. Для суммирования ряда значений продаж, введенных пользователем, должно использоваться выражение, подобное следующему:

Общая_Сумма_Продаж := Общая_Сумма_Продаж + Сумма_Данной_Сделки.

Рис. 1.23 схема работы переменной-аккумулятора

  1.  Алгоритм перестановки значений двух переменных

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

Для перестановки значений обязательно требуется третья переменная, которую называют временной переменной (temporary variable), поскольку после перестановки значений она больше не нужна.

temp = var1;

var1 = var2 ;

var2 =  temp.

Рис. 1.24  Перестановка значений двух переменных с использованием временной переменной

  1.  Простейший алгоритм сортировки

Сортировку значений можно осуществлять различными способами.

Пример. Требуется отсортировать следующий ряд чисел: 10, 54, 34, 46, 23

Список, отсортированный в порядке возрастания (ascending order), от наименьшего к наибольшему: 10, 23, 34, 46, 54.

Список, отсортированный в порядке убывания (descending order), от наибольшего к наименьшему: 54, 46, 34, 23, 10.

Наиболее популярной является «пузырьковая» сортировка (сортировка «пузырьковым» методом). Она не очень эффективна, но в отличие от прочих алгоритмов сортировки понятна и легко переносится в программный код.

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

При сортировке «пузырьковым» методом элементы массива сравниваются и переставляются по два за один раз за несколько проходов. В каждом проходе осуществляется сравнение всех пар в списке. Если первое значение пары больше, чем второе, осуществляется их перестановка, чтобы большее значение «опустилось» на одну запись ниже.

Процесс сортировки представлен на рис. 1.25.

Рис. 1.25 Упорядочивание элементов массива по возрастанию

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

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

Рис. 1.26 Алгоритм двух вложенных циклов

  1.  Последовательный и двоичный поиск в массиве данных

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

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

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

Пример. Поиск задуманного числа в пределах 1000. Пусть задуманное число - 390. Первой попыткой называется число 500 (половина от 1000). Если ответ «много», то задуманное число находится в диапазоне от 1 до 499. Разбивая этот диапазон пополам, получаем серединное значение 250. Если ответ «мало», то задуманное число лежит в диапазоне от 250 до 499. Деление пополам дает результат 375. Ответ «мало» означает, что число находится в пределах 375-499. Следующая попытка будет 430, затем 400, а затем 390! Из 1000 значений найдено одно загаданное всего за шесть попыток.

На рис. 1.27 представлен алгоритм двоичного поиска числа 32 из упорядоченного множества 100 чисел.

Рис. 1.27 Алгоритм двоичного поиска числа 32 из 100.

Выводы

  1.  Решение любой сложной задачи осуществляется с помощью моделирования с применением компьютерной техники
  2.  В процессе моделирования следует учитывать основные составляющие компьютера:
    •  процессор
    •  оперативная память
    •  устройства ввода-вывода
  3.  В процессе моделирования происходит преобразование исходных данных к искомому виду.
  4.  Данные вводятся в компьютер с помощью устройств ввода-вывода, хранятся в оперативной памяти и преобразуются процессором, выполняющим команды
  5.  Последовательность действий (команд), приводящих к искомому результату, записывается в виде алгоритма
  6.  Формы записи алгоритма: псевдокоды и блок-схемы
  7.  Сложный алгоритм должен быть разбит на простые составляющие (структурная алгоритмизация)
  8.  В основе любого алгоритма лежат три базовые алгоритмические структуры:
    •  линейная
    •  ветвящаяся,
    •  циклическая.

Вопросы для самоконтроля

  1.  Поясните происхождение слова «алгоритм»
  2.  Дайте определение понятию «алгоритм»
  3.  Поясните основные свойства алгоритма
  4.  Какими способами можно записать алгоритм?
  5.  Перечислите основные графические элементы записи алгоритма и их назначение
  6.  Что собой представляет базовый набор алгоритмических структур?
  7.  Какие виды ветвлений Вы знаете?
  8.  Какие разновидности циклов можно использовать в алгоритмах? Чем они отличаются?
  9.  Каково назначение и принцип действия переменной-счетчика?
  10.  Каково назначение и принцип действия переменной-аккумулятора?
  11.  Как работает простейший алгоритм «пузырьковой» сортировки?
  12.  Каково назначение вложенных циклов?


  1.  Основы программирования

При работе с данным разделом Вам предстоит:

  1.  Изучить три темы:
  •  эволюция программирования как деятельности;
  •  инструменты программирования;
  •  проектирование и внедрение программ.
  1.  Ответить на вопросы для самоконтроля по каждой теме.
  2.  Выполнить одну лабораторную работу

Эволюция программирования как деятельности

  1.  Развитие вычислительной техники

Таблица 2.1 Этапы эволюции средств вычислительной техники

1

Этап

Устройство

Авторы

Период

1

Ручной этап

Камешки, пластинки, пальцы.

Абак – глиняная пластинка с желобками, в которых размещались камешки

Азия

IV тысячелетие до н. э

Разграфленные таблицы (счет на линиях)

Европа

средние века

Русские счеты

Россия

XVI-XVII

Любые часы (песочные, водяные, механические, электрические, электронные и др.) – прибор для счета

2

механический этап: механических перемещений различных узлов – рычагов, валиков различной формы, зубчатых колес

Эскиз суммирующего устройства

Леонардо да Винчи

1500 г.

Суммирующие часы - действующее устройство для выполнения сложения

Германия, профессор кафедры восточных языков в университете Тюбингена Вильгельм Шиккард

1623 г.

суммирующая машина выпущена серией в 50 шт.

Франция, механик Блез Паскаль

1641-1645

арифмометр – машина для выполнения четырех арифметических операций

Германия, математик и философ

Готфрид Лейбниц

1671 -1674

арифмометр

Томас и Орднер

Конец XIX начало XX веков

автоматический ткацкий станок, управляемый перфокартой

Франция, Жозеф Жаккард

1804-1808

Проект: Разностная (аналитическая) машина для вычисления и печати таблиц математических функций. Роль человека - подготовка данных и программы вычислений. Идея развита в принципах Джона фон Неймана (1941 г.)

Англия, математик и изобретатель Чарльз Бэббидж

1822-1834

Первая программа для аналитической машины Бэббиджа

Англия, Ада Лавлейс, дочь поэта Джорджа Байрона

1843

3

электромеханический этап: сочетание при выполнении вычислительных операций механических перемещений с работой электрических устройств

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

Герман Холлерит в 1897 г  создал фирму Tabulating Machine Company, которая впоследствии преобразовалась в фирму IBM (International Business Machines corporation)  

1887

программно-управляемые релейные вычислительные машины. Первая - «Z-3»

Германия, Конрад Цузе

1939-1941

Первая в мире универсальная программно-управляемая вычислительная машина «Марк-1»

США, фирма IBM, руководитель Говард Айкен

1937-1944

«Марк-1» - релейная

-“-

1947

Самая быстродействующая релейная машина «РВМ-1» (в 14 раз быстрее «Марк-1»)

СССР, руководитель Н. И. Бессонова

50-е годы XX века

4

электронный этап – электронные лампы накаливания

Первая полностью электронная машина «АВС» (Atanasoff-Berry Computer)

США, под руководством Дж. Атанасова и К. Берри

1937-1942

ЭВМ – универсальная программно-управляемая Электронная Вычислительная Машина (компьютер) «ENIAC» – Electronic Numerical Integrator And Computer – электронно-цифровой интегратор и вычислитель

США, Пенсильванский университет, руководители- Д. Маучли и П. Эккерт

1943-1945

Первая машина с хранимой программой -  компьютер «EDSAC» (Electronic Delay Storage Automatic Calculator)-ЭВМ первого поколения

Великобритания, М. Уилкс

1949

Первая советская вычислительная машина – МЭСМ.(Малая Электронно-учетная Машина)

СССР, руководитель - академик Лебедев

1947-1951

«Стрела», «Минск», «Урал», БЭСМ (Большая Электронно-Счетная Машина), М-2, «Мир»

Под руководством: И. С. Брука, М. А. Карцева, Б. И. Рамеева, В. М. Глушкова, Ю. А. Базилевского

5

Этап безбумажных способов работы с информацией – электронные носители на интегральных схемах

Персональный компьютер

80-е годы XX века

Таблица 2.2 Логические основы компьютера

Этап развития ВТ

Автор

Период

1

Механические устройства

Числа:

  •  линейные перемещения цепных и реечных механизмов,
  •  угловые перемещения зубчатых и рычажных механизмов

2

Электронные устройства

Числа – состояние электронных элементов. Двоичная система счисления

Германия, Готфрид Вильгельм Лейбниц

1666

Математическая логика (логическая алгебра или булева алгебра)

Англия, Джордж Буль

первая половина XIX века

  1.  Парадигмы современного программирования

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

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

Таблица 2.3. Основные парадигмы программирования

Название парадигмы

Способ декомпозиции

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

Директивная

(синоним - процедурная)

Подпрограммы, абстрактные типы данных

Fortran, C, Pascal, Basic

Декларативная

(составные части: логическая и функциональная)

Цели, выраженные в терминах исчисления предикатов. Правила "если - то"

Lisp, Scheme, Prolog, ML, Haskell

Объектно-ориентированная

Классы и объекты

Java, C++, Ruby

Программирование в ограничениях

Инвариантные отношения, система ограничений

языки CLP(X), SETL, Prolog III

Сценарная

Элементарный сценарий обработки или управления

Perl, PHP, Pyton, ASP

 

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

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

Развитие различных парадигм программирования проходило параллельно друг другу. Долгое время директивный подход был главенствующим, в 70-е, 80-е годы акцент сместился в сторону исследования неклассических парадигм, 90-е годы ознаменованы бурным развитием объектно-ориентированной парадигмы и внедрением ее элементов в другие. Развитие языков программирования с точки зрения различных парадигм представлено на рис.2.1.

Рис. . Развитие языков и парадигм программирования

  1.  Директивное программирование – один из наиболее естественных подходов к написанию программ. Программа состоит из операторов присваивания и управляющих операторов, и рассматривается как процесс изменения состояния путем выполнения отдельных команд. Директивность понимается как указание вычислителю на то, как решать задачу. 
  2.  Декларативная парадигма
    1.  Логическое программирование основано на анализе естественных языков (логика предикатов). Логика предикатов описывает структуру прикладной задачи, а не выработку предписаний компьютеру. Программа – это задача, описанная на ограниченном языке, и утверждение, которое нужно доказать. Исполнение программы заключается в поиске доказательства этого утверждения в базе знаний как совокупности фактов и правил. 
    2.  В функциональном программировании акцент делается на зависимость между функциями по данным. Функциональная программа состоит из совокупности определений функций, которые в свою очередь представляют собой вызовы других функций и предложений, управляющих последовательностью вызовов. 
  3.  Объектно-ориентированное программирование (ООП) – это результат естественной эволюции более ранних методологий программирования. Задача представляется совокупностью объектов, относящихся к определенным ранее классам, которые реализуются как переменные с набором полей данных и методов, работающих с этими полями. ООП – это моделирование объектов посредством иерархически связанных классов. Все объекты являются представителями, или экземплярами, классов. Классы представляются в виде иерархической древовидной структуры: в корне дерева классы с более общими свойствами, в ветвях специализированные классы и экземпляры. В основе объектно-ориентированного программирования лежат три основных понятия: инкапсуляция (сокрытие данных в классе или методе); наследование; полиморфизм. Инкапсуляция – это защитная оболочка вокруг объекта, которая задает поведение объекта и защищает его код от произвольного доступа извне. Наследование – это процесс, в результате которого один тип наследует свойства другого типа. Полиморфизм – это концепция, позволяющая иметь различные реализации для одного и того же метода, которые будут выбираться в зависимости от типа объекта, переданного методу при вызове.
  4.  Программирование в ограничениях новое направление в декларативном программировании. Появилось в 80-х годах XX века как результат развития систем символьных вычислений, искусственного интеллекта и исследования операций. Основная идея: определяется множество переменных и задаются ограничения, которым они должны удовлетворять, а система находит подходящие значения. Программирование в таких системах называют логическим программированием в ограничениях (Constraint Logic Programming или CLP), а большинство языков или библиотек называются CLP(X), где X указывает на класс решаемых задач. Исполнение программы рассматривается не как доказательство утверждения, а нахождение значений переменных.  
  5.  Сценарные языки, или языки скриптов (scripting languages), за последние годы сделали огромный шаг вперед. Они имеют длительную историю развития и являются преемниками языка LISP. К первым сценарным языкам относят встроенные средства управления командной оболочки операционной системой. Командный файл на языке операционной системы представляет собой управляющий сценарий, который выполняет заданную последовательность действий. В настоящее время популярность сценарных языков связана с развитием Интернет-технологий. Скриптовые языки используются для создания динамических интерактивных Web-станиц, содержание которых модифицируется в зависимости от действий пользователя и состояния остальных страниц и данных. Отличительной особенностью скриптовых языков является формирование программы на некотором внешнем языке как результата выполнения сценария. Сценарная парадигма предполагает разбиение задачи на отдельные части, каждая из которых решается специализированными программными средствами, сценарий выступает в роли «диспетчера», ответственного за организацию их взаимодействия. Сценарные языки для Web-разработки в основном созданы в 90-е годы XX века и включают в себя элементы различных парадигм программирования: от директивной до объектно-ориентированной. Среди наиболее мощных и популярных скриптовых систем можно отметить следующие: Perl, Pyton, PHP, ASP. Синтаксис и семантика различных сценарных языков похожи, что обусловлено влиянием языков С и С++ на сообщество программистов. 
    1.  Уровни языков программирования

Языки программирования как искусственные языки характеризуются:

  •  ограниченным числом «слов»,
  •  строгими правилами записи команд (операторов).

Синтаксис языка программирования это совокупность правил записи операторов. Семантика языка программирования это смысл конструкций языка.

Условная классификация языков программирования представлена на рис. 2.2.

Языки программирования низкого уровня ориентированы на конкретный тип процессора и учитывают его особенности. Операторы языка близки к машинному коду и ориентированы на конкретные команды процессора

Рис.2.2 Классификация языков программирования

Особенности языков низкого уровня:

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

Языки низкого уровня применяют для разработки:

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

Язык ассемблера – это первый язык самого низкого уровня:

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

Языки программирования высокого уровня:

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

Эволюция языков программирования представлена в  таблице 2.4.

Таблица 2.4 Эволюция языков программирования

Этап

Период

Характеристика этапа

1

Начало 50-х годов

Создан первый язык ассемблера («одна инструкция – одна строка»).

2

Конец 50-х – начало 60-х годов

Разработан символический ассемблер (впервые появилось понятие переменной)

3

60-е годы

Разработаны первые универсальные языки высокого уровня для решения задач из разных областей

4

Начало 70-х годов

Появились проблемно-ориентированные языки для реализации крупных проектов в специализированных областях применения

5

Середина 90-х годов

Разрабатываются системы автоматического создания прикладных программ с помощью визуальных средств

  1.  Современные языки программирования высокого уровня

Ретроспективный обзор языков высокого уровня представлен в таблице 2.5.

Таблица 2.5 Обзор языков высокого уровня

№ п/п

Имя языка

Характеристика языка

Языки высокого уровня

1

FORTRAN (Фортран)

  •  первый компилируемый язык (50-е годы);
  •  основной критерий разработки компиляторов Фортрана - эффективность исполняемого кода;
  •  создано большое количество библиотек;
  •  современный стандарт Фортрана для параллельных суперкомпьютеров с множеством процессоров.

2

COBOL (Кобол)

  •  компилируемый язык для применения в экономической области и решения бизнес-задач (начало 60-х годов);
  •  отличается «многословностью»;
  •  реализованы мощные средства работы с большими объемами данных, хранящимися на различных внешних носителях;
  •  создано много приложений, активно эксплуатирующихся и сегодня.

3

Algol (Алгол)

  •  компилируемый язык (1960 г.);
  •  из-за сложной структуры не получил широкого распространения.

4

Pascal (Паскаль)

  •  создан в конце 70-х годов Никлаусом Виртом;
  •  похож на Алгол;
  •  ужесточены требования к типизации структур данных;
  •  предназначен для создания крупных проектов.

5

Basic (Бейсик)

  •  создавался в 60-х годах в качестве учебного языка;
  •  по популярности занимает первое место в мире;
  •  разработаны и компиляторы, и интерпретаторы:
  •  очень прост в изучении.

6

С (Си)

  •  планировался для замены ассемблера;
  •  позволяет создавать эффективные и компактные программы;
  •  не зависит от конкретного типа процессора;
  •  похож на Паскаль и имеет дополнительные средства для прямой работы с памятью (указатели);
  •  в 70-е годы написано множество прикладных, системных программ, операционные системы (Unix ).

7

C++

  •  объектно-ориентированное расширение Си (1980 г);
  •  мощные возможности повышения производительности программистов;
  •  унаследованная от языка Си низкоуровневость;
  •  требуется высокий уровень профессиональной подготовки программистов.

8

Java (Джава, Ява) компания SUN

  •  по популярности занимает второе место в мире после Бейсика;
  •  создан в начале 90-х гг. на основе Си++;
  •  предназначался для  упрощения разработок на основе Си++ за счет исключения всех низкоуровневых возможностей;
  •  компиляция в платформо-независимый байт-код;
  •  байт-код выполняется интерпретатором – виртуальной Java-машиной (Java Virtual Machine) -> невысокое быстродействие
  •  версии Java-машины созданы для любых платформ;
  •  программы на Java переносимы как на уровне исходных текстов, так и на уровне двоичного байт-кода;
  •  направления развития:
    •  поддержка мобильных устройств и микрокомпьютеров бытовой техники;
    •  создание платформо-независимых программных модулей, способных работать на серверах в глобальных и локальных сетях с различными операционными системами.

9

С# (Си Шарп) компания Microsoft

  •  создан в конце 90-х годов;
  •  воплотил лучшие идеи Си, Си++, достоинства Java;
  •  ориентирован на платформу Windows;
  •  формально не отличается от универсальных языков;
  •  предназначен для быстрой разработки .NET-приложений

Языки логического программирования

PROLOG

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

CLP (Constrain Logic Programming)

  •  программирование в ограничениях (constraint programming) - определяется множество переменных и ограничения, которым они должны удовлетворять; система находит подходящие значения

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

1

SQL (Structured Query Language)

  •  основан на мощной математической теории (реляционная алгебра);
  •  эффективен за счет групповых операций над записями:
    •  создание/модификация свойств/удаление таблиц в БД;
    •  поиск, отбор, сортировка информации по запросам;
    •  добавление новых записей;
    •  модификация существующих записей;
    •  удаление существующих записей

2

СУБД (Системы Управления Базами Данных)

  •  предназначены для управления большими базами данных и их эффективной обработки;
  •  поддержка языка SQL;
  •  снабжены встроенным уникальным языком, ориентированным на особенности СУБД;
  •  Ведущие производители промышленных СУБД:
    •  Microsoft (SQL Server),
    •  IBM (DB2),
    •  Oracle.
  •  Настольные СУБД  для ПК:
    •  Родоначальник - СУБД dBaseII с  интерпретируемым языком;
    •  СУБД FoxPro и Clipper, совместимые с языком dBaseII;
    •  настольная СУБД Microsoft Access.

Языки программирования для Интернет (скрипт-языки)

1

Общая характеристика

  •  адаптация популярных языков программирования для целей Интернет;
  •  интерпретируемые;
  •  интерпретаторы для них распространяются бесплатно;
  •  программы – в исходных текстах.

2

HTML

  •  предназначен для оформления документов;
  •  содержит элементарные команды:
    •  форматирования текста,
    •  добавления рисунков,
    •  задания шрифтов и цветов,
    •  организации ссылок и таблиц;
  •  все Web-страницы написаны на языке HTML или используют его расширения.

3

Perl

  •  создан в 80-х годах;
  •  средство:
    •  эффективной обработки больших текстовых файлов,
    •  генерации текстовых отчетов,
    •  управления задачами;
  •  по мощности превосходит языки типа Си.

4

РНР

  •  создан в 1995 году;
  •  разработаны встроенные средствами доступа к базам данных;
  •  ориентирован на создание  динамических сайтов.

5

XML

  •  создан 1996 г. (WWW-консорциум);
  •  универсальный язык разметки структуры документов (технология SGML);
  •  основа множества системных, сетевых и прикладных приложений;
  •  акцент на внутреннюю структуру иерархически организованных документов.

Языки моделирования (формальные нотации, CASE-системы)

1

IDEF, UML

  •  специализированный графический редактор;
  •  генератор исходных текстов программ на основе созданной графической модели.

  1.  Программирование как вид деятельности

Появление первых компьютеров породило программирование как науку. Этот этап характерен разработками:

  •  математических теорий обработки информации,
  •  средств доказательства правильности программ,
  •  средств оптимизации кода,
  •  эффективных компиляторов,
  •  средств формального тестирования и т. д.

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

Рост сложности информационно-управляющих систем породил новые технологии коллективного программирования, поставив процесс разработки программного обеспечения (ПО) на поток и превратив программирование в ремесло на основе разработанных методологий и стандартов. В таблице 2.6 представлен примерный объем трудовых ресурсов, требуемый для создания программного продукта различной степени сложности, измеряемой количеством строк исходного кода.

Таблица 2.6  Потенциальные возможности человека при создании программного продукта

Объем проекта, строк исходного кода

Тип программы

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

Вероятность успешного завершения

Число программистов

100

Утилиты для временных нужд

1 день

100%

1

1000

Небольшие приложения и дополнения, вносимые в готовые системы

до 1

Месяца

100%

1

10000

Типичная средняя программа, разрабатываемая на заказ

до 6

месяцев

85%

1 (предел возможностей)

100000

Большинство современных коммерческих автономных и небольших клиент-серверных приложений

1 год

85% для групп, 35% для одиночки

10

1 млн.

Крупные системы автоматизации

1,5-5 лет

50% для группы, 0% для одиночки

100

10 млн.

Операционные системы (Microsoft Windows, IBM VMS), большие военные комплексы. Предел сегодняшних возможностей. Стоимость подобной разработки может равняться стоимости большого стадиона или крупного корабля

5-8 лет

35%

до тысячи

Этапы эволюции программирования представлены на рис. 2.3.

Рис. 2.3 Эволюция программирования как деятельности

Вопросы для самоконтроля

  1.  Назовите основные этапы эволюции средств вычислительной техники
  2.  Какие ученые разработали логические основы компьютерной техники?
  3.  Как вы понимаете термин «парадигма программирования»?
  4.  В какой последовательности парадигмы программирования сменяли друг друга с течением времен?
  5.  Приведите примеры языков программирования в рамках каждой парадигмы
  6.  В чем отличие языков программирования низкого и высокого уровней?
  7.  Приведите примеры языков высокого уровня. Для чего они предназначены?
  8.  Как исторически менялся взгляд на программирование как деятельность?
    1.  Инструменты программирования
      1.  Основные понятия программирования

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

Языки программирования предназначены для представления алгоритма в компьютерном виде.

Текст программы  это полное, законченное и детальное описание алгоритма на языке программирования.

Транслятор переводит текст программы в машинный код.

Синтаксис языка программирования  совокупность правил записи операторов.

Семантика языка программирования смысл конструкций языка.

При нарушении формы записи программы на языке программирования транслятор выдает сообщение о синтаксической ошибке.

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

Процесс поиска семантических ошибок в программе  тестирование.

Процесс устранения ошибок  отладка.

  1.  Этапы разработки программы
  2.  Локализовать задачу из предметной области, вникнуть в ее суть.
  3.  Формализовать ее понимание до терминов ДАНО -> ТРЕБУЕТСЯ НАЙТИ ОТВЕТ.
  4.  Составить алгоритм решения задачи как последовательность действий, имеющих начало и конец (КАК ПОЛУЧИТЬ ОТВЕТ). Начало – это ДАНО, конец – ОТВЕТ.
  5.  Выбрать машинно-ориентированный язык для описания алгоритма фразами языка.
  6.  Написать программу с учетом требований языка.
  7.  Преобразовать языковые конструкции в машинные команды с помощью транслятора.
  8.  Запустить программу на выполнение (команда RUN).
    1.  Функции транслятора в процессе создания программы

Для перевода программы с языка программирования в машинные коды предназначен транслятор.  По способу перевода и выполнения программы-трансляторы делятся на компиляторы и интерпретаторы (рис.2.4).

Программа-компилятор переводит текст программы, написанной на языке программирования, в машинный код для автономного выполнения. Программа-интерпретатор сразу выполняет команды языка, указанные в тексте программы.

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

Интерпретатор моделирует виртуальную вычислительную машину с базовыми инструкциями на языке программирования. Программы с большим объемом повторяющихся вычислений могут работать медленно. Для выполнения программы на другом компьютере необходимо установить интерпретатор.

 

Рис. 2.4  Классификация трансляторов языков высокого уровня

Преимущество интерпретатора - высокая надежность работы:

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

Может рассматриваться как средство изучения программирования:

  •  проверка множества характеристик операционной системы и подробная диагностика проблем,
  •  позволяет понять принципы работы отдельного оператора языка.

Компилятор:

Законченная программа как результат работы компилятора:

  •  компактна и эффективна,
  •  работает в сотни раз быстрее интерпретируемой программы,
  •  может быть перенесена на другие компьютеры с тем же машинным кодом.

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

  1.  Средства создания программ

Структура современной инструментальной интегрированной среды программирования представлена на рис. 2.5.

Рис. 2.5 Структура интегрированной среды программирования

Текстовый редактор предназначен для написания программы на языке программирования. Результат работы редактора - текстовый файл с исходным текстом программы. Специализированные редакторы  ориентированы на конкретный язык программирования:

  •  выделяют ключевые слова текста,
  •  автоматически проверяют правильность синтаксиса программы во время ввода.

Программа-компилятор предназначена для перевода исходного текста в машинный код:

  •  поиск синтаксических ошибок,
  •  создание промежуточного объектного кода (двоичный файл, стандартное расширение OBJ).

Редактор связей (сборщик) предназначен для связывания объектных модулей и машинного кода стандартных библиотечных функций в работоспособное приложение – исполнимый код для конкретной платформы (типа процессора и операционной системы)

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

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

Визуальный подход к программированию реализован в средах быстрого проектирования (Rapid Application Development, RAD-среды):

  •  элементы оформления оконного интерфейса создаются перетаскиванием готовых визуальных компонентов в проектируемое окно;
  •  свойства компонентов настраиваются в редакторах свойств;
  •  исходный текст программы генерируется RAD-средой автоматически.
    1.  Современные системы программирования 

Рейтинг популярности универсальных языков программирования:

  •  Бейсик (Basic) – для освоения требует начальной подготовки;
  •  Паскаль (Pascal) – требует специальной подготовки;
  •  Си++ (C++), Ява (Java), Си Шарп (С#) – требуют профессиональной подготовки

Популярность визуальных сред быстрого проектирования программ для Windows:

  1.  Basic: Microsoft Visual Basic;
  2.  Pascal: Borland Delphi;
  3.  C++: Microsoft Visual C++;
  4.  Java: Borland JBuilder,
  5.  C#: Microsoft Visual Studio .NET, Borland C#Builder.
  6.  серверные и распределенные приложения:
    •  Microsoft Visual C++, 
    •  продукты фирмы Borland, 
    •  средства программирования на Java.

Вопросы для самоконтроля

  1.  Перечислите основные этапы разработки программы.
  2.  Какую роль играет система программирования в процессе разработки программы?
  3.  Какие разновидности трансляторов Вы знаете? В чем их отличие?
  4.  Что является результатом работы транслятора?
  5.  Для чего предназначен редактор связей? Что является результатом его работы?
  6.  Что Вы понимаете под архитектурой программной системы?
  7.  Какая архитектура является наиболее распространенной?
  8.  В чем недостатки файл-серверной архитектуры?
  9.  В чем преимущества клиент-серверной архитектуры?
    1.  Проектирование и внедрение программ 
      1.  Этапы разработки программного обеспечения

Следует различать этапы создания программного обеспечения различного масштаба. Для небольших и средних программ последовательность этапов представлена на рис. 2.10.

Рис. 2.10 Этапы создания небольших и средних по объему кода программ

Крупный проект объемом от десятков тысяч до миллионов строк кода требует  применения специальных методологий проектирования, охватывающих весь период разработки ПО. Типовые этапы реализации проекта сложной информационной системы представлены на рис. 2.11.

Этап формирования требований к проекту – самый важный, так как неправильное формулирование требований приводит к выполнению лишней работы, а недооценка сложности вызывает перерасход средств и времени. Сегодня около 60% крупных проектов завершаются неудачей именно из-за ошибок на стадии подготовки требований. На этапе предпроектного исследования объекта привлекаются специалисты заказчика и эксперты, хорошо знакомые с предметной областью, для которой разрабатывается информационная система. На этапе разработки технического задания готовится календарный план работ со сроками и объемами работ. Для реализации календарного плана как правило выбирается методология итерационного проектирования на основе RAD-средств и систем автоматической генерации исходных текстов на основе созданной формальной модели. Готовая работоспособная альфа-версия тестируется на наличие ошибок, устойчивость работы при вводе недопустимых или критических значений, при отсутствии информации, при неверных действиях, при сбоях аппаратуры и т.д.

К бета-тестированию системы в рабочем режиме  у заказчика привлекается максимально возможное число сотрудников.

Этап внедрения предполагает  подготовку системы к запуску в эксплуатацию: настройка локальной сети, установка серверов, инсталляция вспомогательных программ, перенос данных из старых информационных систем.

Внедрение новой информационной системы требует обучения персонала работе с ней. После подписания акта приемки проект считается завершенным. Сотрудничество с заказчиком по обслуживанию системы после ввода ее в эксплуатацию называется сопровождением. Оно бесплатно на определенный гарантийный срок. Таким образом, объем непосредственного программирования и тестирования в цикле разработки составляет 10-20% от общего объема работ.

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

  •  управление изменениями (требований, формальных моделей, сопроводительной документации, версий исходных текстов, хода выполнения календарного плана по разработке, тестированию, внедрению, сопровождению);
  •  управление процессом разработки ПО.

Рис. 2.11 Типовые этапы реализации проекта сложной информационной системы

  1.  Методы маркетинга программного обеспечения

Рынок программного обеспечения можно условно разделить на коммерческое ПО, распространяемое через традиционную торговую сеть, и ПО, доступное через Интернет (рис. 2.12).

Коммерческое ПО, продаваемое традиционным образом, как правило,  создается специализированными фирмами–разработчиками. Условно-бесплатное и бесплатное ПО, как правило, разрабатывается самостоятельными программистами с целью повысить свое мастерство и завоевать известность в кругах специалистов.

Рис. 2.12 Структура рынка программных продуктов

Вопросы для самоконтроля

  1.  Назовите типовые этапы создания небольших программ
  2.  В чем специфика разработки крупного проекта создания информационной системы?
  3.  Какие задачи решаются на этапе формирования требований к проекту? Какими инструментами поддерживается работа на этом этапе? Какой объем времени занимает данный этап?
  4.  Какие задачи решаются на этапе предпроектного обследования объекта? Какими инструментами поддерживается работа на этом этапе? Какой объем времени занимает данный этап?
  5.  Какие задачи решаются на этапе разработки технического задания? Какими инструментами поддерживается работа на этом этапе? Какой объем времени занимает данный этап?
  6.  Какие задачи решаются на этапе выбора методологии разработки программного обеспечения? Какими инструментами поддерживается работа на этом этапе? Какой объем времени занимает данный этап?
  7.  Какие задачи решаются на этапе тестирования программного обеспечения? Какими инструментами поддерживается работа на этом этапе? Какой объем времени занимает данный этап?
  8.  Какой этап занимает наибольший объем времени проекта?
  9.  Прокомментируйте структуру рынка программных продуктов. Какова специфика распространения коммерческого программного продукта?
  10.  Какой информационный продукт может быть отнесен к условно-бесплатному?

  1.  


  1.  Технология алгоритмического программирования 

При работе с данным разделом Вам предстоит:

  1.  Изучить две темы:
  •  понятия алгоритмического программирования;
  •  принципы структурного программирования.
  1.  Ответить на вопросы для самоконтроля по каждой теме.
  2.  Выполнить две лабораторные работы.

Понятия алгоритмического программирования

  1.  Классификация данных 

Информацию, относящуюся к решаемой задаче, принято подразделять на данные (исходные данные, промежуточные и конечные результаты) и программу (информация, задающая алгоритм решения задачи) (рис. 3.1).

Рис. . Структура информации, связанной с решением задачи

В алгоритме данные описываются в предписании: «Список данных:...». Все данные по своему виду подразделяются на константы и переменные (рис. 3.2).

Константы это данные, которые при выполнении алгоритма (программы) всегда определены и неизменны. Запись константы полностью определяет ее назначение, тип, форму представления и фактическое значение.

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

Каждая единица информации хранится в ячейках памяти компьютера, имеющих свои адреса. Переменная может рассматриваться как идентификатор, позволяющий обращаться к содержимому памяти по имени. Имя переменной указывает на значение, которое может изменяться при работе программы. Переменная имеет тип, определяющий тип данных,  хранимых в переменной (число, строка и т. д.).

Каждому типу данных соответствует диапазон значений. Каждый тип данных в языках программирования описывается ключевым словом.

Разные типы допускается преобразовывать друг в друга в соответствии с соглашениями языка программирования (приведение типов).

Статические переменные  переменные, существующие на всем протяжении работы программы.

Динамические переменные переменные, создаваемые и уничтожаемые на разных этапах функционирования программы.

Описание переменных – это указание типа хранимых данных (таблица 3.1).

Инициализация переменной  – это присвоение ей начального значения

Рис. . Классификация данных

Таблица 3.1  Описание и инициализация данных

Переменные

Описания переменных

Бейсик

Паскаль

Си++

Синтаксис

DIM имя AS тип

var имя: тип;

тип имя;

Пример: по одной переменной разных типов

DIM X AS DOUBLE;

var x: real;

var Str: record

P1: integer;

S: string;

float x;

int a[20];

Пример: несколько переменных одного типа

var xx, z2: integer;

int xx, yy[10], z2;

Инициализация переменной (оператор присваивания)

X=1.34;

Str:=Привет’;

a[20]=100;

  1.  Базовые типы данных 

Числовые данные

Классификация вещественных числовых данных:

  •  целые и дробные,
  •  положительные и отрицательные (-).

Вычисления выполняются:

  •  над целыми числами  точно, 
  •  над дробными числами – приближенно. 
  •  разделитель разрядов дробных чисел – точка.

Специальная запись очень больших и очень маленьких чисел выполняется с помощью мантиссы – это число со знаком, являющееся степенью числа 10, записывается справа от числа через букву е (или Е) без пробела.

Пример:  100=1е+2;

 0,003= ЗЕ-3.

Для описания числовых данных в языках программирования высокого уровня предусмотрены соответствующие ключевые слова, представленные в таблице 3.2.  

Таблица 3.2 Ключевые слова для числового типа данных

Тип числа

Ключевые слова для числового типа данных

Бейсик

Паскаль

Си++

Целое

INTEGER

integer

Int

Дробное

DOUBLE

real

float

Логические данные

Характеристика логических данных:

  •  принимают значения true (истина, да, включено, 1) и false (ложь, нет, выключено, 0),
  •  участвуют в логических выражениях.

Для описания логических данных в языках программирования высокого уровня предусмотрены соответствующие ключевые слова, представленные в таблице 3.3.

Таблица 3.3 Ключевые слова для логического типа данных

Тип данных

Ключевые слова для логического типа данных

Бейсик

Паскаль

Си++

логический

INTEGER

boolean

bool 

Символьные (строковые) данные

Во всех языках программирования множество символьных данных называются строками и заключаются в кавычки (таблица 3.4).

Таблица 3.4 Представление строки в языках программирования высокого уровня

Строковые переменные

Кавычки

Бейсик

Паскаль

Си++

Пример строки

"это строка Бейсика"

'это строка Паскаля'

"это строка Си++"

Пустая строка

""

''

""

Для описания строки в языках программирования высокого уровня предусмотрены соответствующие ключевые слова, представленные в таблице 3.5.

Таблица 3.5 Ключевые слова для типа данных «строка»

Тип данных

Ключевые слова для типа данных «строка»

Бейсик

Паскаль

Си++

STRING

string

Базового типа «строка» нет

  1.  Структурированные данные

Массив как упорядоченная совокупность однотипных данных

Переменные, применяемые в алгоритмах и программах, могут образовывать упорядоченные структуры. Широкое применение находит упорядочение переменных в виде массивов.

Массив это упорядоченное множество однотипных переменных (элементов массива), объединенных общим именем и отличающихся номерами (индексами). Массивы сходны с такими понятиями в математике, как векторы и матрицы.

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

Пример:

а(1:5) – массив (вектор) из пяти элементов: а(1), а(2), а(3), a(4), а(5);

b(1:2, 1:3) – матрица из шести элементов: b(1, 1) b(l,2), b(l,3), b(2,l), b(2,2), b(2,3).

Каждый массив характеризуется:

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

Размерность массива – это число индексов в списке индексов.  На практике используются одно-, двух- и трехмерные массивы, графическая интерпретация которых показана на рис. 3.3.

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

Пример:

...Список данных:

Константы:  Pi=3.14159;

  Q=1.5678;

Переменные:  a, b – целый;

  х – вещественный;

  с – символьный;

Массивы:   у (1:2, 1:3) – вещественный;...

Рис. 3.3 Массивы: а – одномерный; б – двухмерный; в трехмерный массив

В разделах «Переменные» и «Массивы» желательно указать тип используемых переменных и массивов.

Описание массива в наиболее популярных языках программирования представлено в таблице 3.6.

Таблица 3.6 Описание массива

Массивы

Описания массива

Бейсик

Паскаль

Си++

Синтаксис

DIM имя (число элементов) AS тип

Аrrау [нижняя_граница .. верхняя_граница] of тип;

тип имя [число-элементов];

Нижняя граница

1

Указывается явно

0

Пример:

DIM IntArray(1000) AS INTEGER

array[1..1000] of integer

int IntArray[1000]

Доступ к элементу массива

IntArray(12)

IntArray[i+1]

Выборка элементов массивов

Работа с массивами – это работа с его элементами. Обращение к элементам массива осуществляется с помощью переменной с индексом. Так, х(1,5) – элемент массива х, расположенный на пересечении первой строки и пятого столбца.

Пример.

Дано: два двухмерных массива х(1:2, 1:2) и у(1:2, 1:2):

;  

Вычислить:  

Решение: После выборки указанных элементов и выполнения операции присваивания получим: ,

Следует различать запись элемента массива х(1) и имя переменной х1.

Некоторые языки высокого уровня дают возможность обрабатывать массивы целиком,  указывая только его имя. При одинаковой размерности, типе и длине массивов можно записать с:=a+b; с:=а•b; с:=а-b, с:=5  что означает соответственно суммирование, умножение и вычитание элементов массивов а и b (с одинаковыми индексами) и запись результатов в массив с, присвоение всем элементам массива с значения 5.

Итак, элементарными для массивов являются предписания:

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

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

Использование циклических операций для обработки массивов

Применительно к массивам операторы цикла позволяют:

  •  записывать значения в массивы,
  •  выбирать значения из массивов,
  •  менять элементы массивов местами и т.д.

Порядок использования циклических операторов для обработки массивов рассмотрим без потери общности на примере.

Пример. Составить фрагмент алгоритма, в котором четным элементам массива х(1:100) будет присвоено значение 1, а остальным элементам – нули.

...

Список данных:

k – целый;

х(1:100) – вещественный;

х: =0;  //обнулить массив

Цикл по k от 2 до 100 шаг 2;

x(k): = 1;

Конец-цикла;

Тип данных «структура»

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

Пример:

СТУДЕНТ={имя, пол, год рождения, группа},

ЭКЗАМЕН={предмет, группа, студент, оценка},

Сложные типы данных составляются из базовых типов и определенных ранее сложных типов. Результат - структуры данных произвольной сложности, объединенные одним именем:

  •  списки,
  •  деревья.

Описание структуры представлено в таблице 3.7.

Таблица 3.7 Описание структуры

Структуры

Описания структуры

Бейсик

Паскаль

Си++

Синтаксис

TYPE имя-структуры

поле AS тип

. . .

END TYPE

Type имя=record

поле:тип;

. . .

end;

struct имя

{

тип поле;

. . .

};

Пример:

СТУДЕНТ={имя, пол, год рождения}

TYPE Student

Name AS STRING

Sex AS INTEGER

BirthYear AS INTEGER

END TYPE

Type Student=record

Name: string;

Sex: boolean;

BirthYear: integer;

end;

struct Student

{

char Name[50];

bool Sex;

int BirthYear;

}

Доступ к содержимому структуры

Student.BirthYear = 1980;

Новые типы данных используются при определении нескольких переменных со сложной структурой (таблица 3.8).

Таблица 3.8 Описание типов данных, создаваемых программистом

Новые типы

Описания

Бейсик

Паскаль

Си++

Синтаксис

Как структура

type имя = описание;

typedef struct имя_структуры

{

поля_структуры;

} имя;

Пример описания:

type TMyArray = array[0..99] of integer;

type TMyRecord = record

Iteml: integer;

Item2: string;

end;

typedef struct namel

{

int i;

float x;

} TNewStruct;

Пример применения

var MyArray: TMyArray;

var R: TMyRecord;

TNewStruct NewStruct;

  1.  Программа как совокупность операторов. Виды операторов

Текст программы – это совокупность операторов и комментариев. Структура текста программы представлена на рис.3.4.

Рис. 3.4 Составляющие текста программы

Арифметические операции над числовыми данными

Арифметические выражения состоят из арифметических операторов (таблица 3.9) и операндов (переменных и констант).

Пример:  b*2 + с/3,  b* (2 + с) – 3.

Таблица 3.9 Арифметические операторы

Арифметические операторы

Действие оператора

+

сложение

-

вычитание

*

умножение

/

деление

Логические операции и операции сравнения

При записи логических выражений используются операции сравнения (таблица 3.10) и логические операции (таблица 3.11). Приоритеты  логических операций ниже, чем приоритеты операций сравнения.

Таблица 3.10 Операторы сравнения

Операторы сравнения

Варианты написания

Бейсик, Паскаль

Си++

Равно

=

==

Не равно

<>

!=

Меньше

<

<

Меньше или равно

<=

<=

Больше

>

>

Больше или равно

>=

>=

Таблица 3.11 Логические операции

Приоритет

Логические операторы

Обозначение

Бейсик

Паскаль

Си++

1

НЕ

NOT

not

!

2

И

AND

and

&&

3

ИЛИ

OR

or

||

Разделение и группировка операторов

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

Если возникает необходимость выполнить группу операторов (например, в зависимости от какого-либо условия), то группа объединяется в блок с помощью специальных скобок начала и конца блока, называемых логическими скобками (таблица 3.12).

Таблица 3.12  Группировка операторов с помощью логических скобок

Операторы

Группы операторов

Бейсик

Паскаль

Си++

Разделение операторов

: (двоеточие)

; (точка с запятой)

; (точка с запятой)

Пример

а23 = а22 (12) + 1: b1 = b1 - 1

а := b*2 + с; d := (е[8] - f)*2.2;

х[5] = у/3.33; у = z[0] - 0.001;

Группировка  операторов (блок) - логические скобки

Нет

begin 

      тело блока

end;

{

  тело блока

};

Комментарии

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

Таблица 3.13 Обозначения комментариев

Комментарии

Обозначение

Бейсик

Паскаль

Си++

Однострочный комментарий

REM или '

//

//

Пример

Х = 5 ' комментарий до конца строки

Х := 5; // комментарий до конца строки

Многострочный комментарий

нет

{} или  (* *)

/**/

Пример

{это комментарий языка Паскаль

(* а это вложенный комментарий *)}

/*

это комментарий

языка Си++

*/

Операторы управления программой

Условный оператор (условные вычисления)

Как правило, в программе требуется изменять порядок выполнения последовательности вычислений в зависимости от определенных условий, записываемых в виде логических выражений и принимающих одно из двух значений – true или false (истинно или ложно). При этом происходит разветвление программы – выполнение в дальнейшем может продолжиться с разных операторов.

Синтаксис условного оператора примерно одинаков во всех языках программирования. Он представляет собой конструкцию (таблица 3.14):

если условие истинно то

выполнить оператор-1

иначе 

выполнить оператор-2 

Таблица 3.14 Синтаксис условного оператора

Условный оператор

Обозначение

Бейсик

Паскаль

Си++

Синтаксис

IF условие THEN       оператор-1

ELSE 

оператор-2

END IF

if условие then

    оператор-1

else 

    оператор-2;

if( условие)

     оператор-1

else 

     оператор-2;

Пример полного условного оператора

IF А>0 THEN

  А = О

ELSE

  А = -1

END IF 

if а > 0 then 

   а := О

else 

  а := -1;

if( а > 0 )

  а = О

else 

  a = -1;

Пример неполного условного оператора

IF х < 0 THEN

 У = х / 2

 х = 1

END IF

if х < 0 then

begin

  у := х / 2;

  х := 1;

end 

if( х < 0 )

{

 у = х / 2;

 х = 1;

);

Операторы повторяющихся вычислений

В языках программирования имеются средства для организации повторных вычислений, называемые операторами цикла:

  •  с фиксированным числом повторений,
  •  условные операторы цикла.

Оператор цикла включает:

  •  заголовок цикла, определяющий число повторений,
  •  тело цикла – повторяемый оператор или блока операторов.

Оператор цикла с фиксированным числом повторений

Используется, например, при обработке массивов, размер которых известен заранее или легко определяется.

Заголовок оператора состоит из трех частей:

  •  инициализация переменной-счетчика или параметра цикла (присваивание ей начального значения),
  •  определение конечного значения счетчика,
  •  приращение счетчика, определяющее шаг изменения значения счетчика после каждого выполнения тела цикла.

Описание оператора цикла с фиксированным числом повторений представлено в таблице 3.15.

Таблица 3.15 Описание оператора цикла с фиксированным числом повторений

Оператор цикла с фиксированным числом повторений

Обозначение

Бейсик

Паскаль

Си++

Синтаксис

FOR счетчик = начальное_значение ТО конечное_значение STEP приращение

тело цикла

группа операторов

NEXT

for счетчик := начальное_значение to конечное_значение do 

оператор или блок операторов;

for( счетчик = начальное_значение; условие_завершения; счетчик = счетчик + приращение)

оператор или блок операторов;

Комментария

Если приращение не указывать, то считается, что оно равно 1

Приращение всегда равно 1

Примеры инициализации тысячи элементов массива

FOR I :=1 TO 1000

   А(I) := 0

NEXT

for i := 1 to 1000

do

a[i] := 0;

for( i = 0; i < 1000; i = i + 1 )

   a[i] = 0;

Условный  оператор цикла

Число повторений заранее неизвестно – надо выполнять цикл, пока не произойдет некоторое событие, например, пользователь нажмет на кнопку или точность вычислений уложится в заданный диапазон и т. д. В таких ситуациях заголовок цикла включает только условие (логическое выражение) – пока его значение равно true, цикл будет выполняться. Описание условного оператора цикла представлено в таблице 3.16.

Таблица 3.16 Описание условного оператора цикла

Условный оператор цикла

Обозначение

Бейсик

Паскаль

Си++

Синтаксис

DO WHILE условие

  группа операторов

LOOP

while условие do

оператор или группа операторов;

While if (условие)

оператор или группа операторов;

Примеры

DO WHILE A > В

   А = А - 0.01

LOOP

while a > b do

   а := а - 0.01;

while( а > b )

   а = а - 0 .01;

Примеры зацикливания

а = 0; b = 1;

while( а < b )

    а = а – 0.01

while true do

begin // тело цикла

end;

Комментарии

Исходное значение переменной а меньше значения переменной b, и это значение будет только уменьшаться. Цикл никогда не закончится

Контроль над выходом из бесконечного цикла при наступлении определенного события возлагается на программиста

Операторы ввода данных и вывода результатов работы программы

Для организации интерактивного общения программы с пользователем в реальном масштабе времени предназначены средства для ввода данных из файлов и сохранения данных в файлах. Интерактивное общение реализуется с помощью RAD-систем, позволяющих быстро спроектировать пользовательский интерфейс. Ввод и вывод информации осуществляется в разных языках по-разному. В Паскале и Бейсике есть операторы для такой работы, в Си++ они выделены в специальные библиотеки. Введен также специальный тип данных «файл» (FILE).

Работа с файлами происходит в три этапа:

1. Файл открывается в одном из выбранных режимов (он рассматривается как последовательность строк или двоичных чисел, разрешается только считывать из него данные или только записывать и т. д.). Файл может состоять из последовательности одинаковых блоков, каждый из которых будет представлять собой копию структуры данных определенного типа, описанного в программе. Каждый такой блок называется записью.

2. Выполняется считывание, обновление или удаление записей в файле.

3. Файл закрывается. Если этого не сделать, то он останется открытым и в дальнейшем к нему нельзя будет обратиться из других программ.

Каждый из этих пунктов реализуется в каждом из языков программирования по-своему. Некоторые пункты требуют для своей реализации нескольких операторов (таблица 3.17).

Таблица 3.17 Описание работы операторов ввода-вывода

Ввод-вывод

Обозначение

Паскаль

Си++

Устройства ввода-вывода

Синтаксис команды ВВОД

READ();

>>

Пример

Var x: Integer;

Read(x);

Int x;

Cin>>x;

Комментарий

Ввод числа с клавиатуры и сохранение его в x

Синтаксис команды ВЫВОД

Write();

<<

Пример

Var x: Integer;

x:= 25;

Write (‘Значение переменной x=’, x)

Int x;

x=25;

Cout<< “Значение переменной x=”<<x;

Комментарий

Вывод содержимого переменной x на экран

Ввод (чтение) данных из файла в память

Синтаксис

открытия файла для ввода из него данных в память

Var f:Text;

ASSIGN (f, “имя_файла.расширение”);

RESET(f);

READ (f, переменная);

CLOSE (f);

Ifstream in_file(“имя_файла.расширение”);

Пример

Ввод данных в память из открытого файла

Var f:Text;

a, b, c: integer;

ASSIGN (f, “file.txt”);

RESET(f);

READ (f, a, b, c);

CLOSE (f);

Ifstream in_file (“file1.txt”);

in_file>>a>>b>>c;

Комментарий

Из файла “File.txt” вводятся три первые числа и запоминаются в переменных a, b, c

Из файла “File1.txt” вводятся три первые строки и запоминаются в переменных a, b, c

Вывод (запись) данных из памяти в файл

Синтаксис

открытия файла для добавления в него записи

Var f:Text;

a, b, c: integer;

Assign (f, “имя_файла.расширение”);

Append(f);

WriteLn (f, “текст”);

CLOSE (f);

Ofstream out_file(“имя_файла.расширение”,ios::app);

Пример

Добавление записей в существующий файл

Var f:Text;

a, b, c: integer;

Assign (f, “File.txt”);

Append(f);

WriteLn (f, “текст”);

CLOSE (f);

ofstream out_file("File.txt", ios::app) ;

out_file<<"Запись в файл." <<endl;

out_fi1е<<"Режим добавления."<<endl;

out_file.close();                 

Комментарий

В существующий файл “File.txt” добавляется “текст”

В существующий файл “File.txt” добавляется текст: "Запись в файл. Режим добавления"

Синтаксис

создания / обновления файла для записи данных из памяти

Var f:Text;

a, b, c: integer;

Assign (f, “имя_файла.расширение”);

Rewrite(f);

WriteLn (f, “текст”);

CLOSE (f);

Ofstream out_file(“имя_файла.расширение”,ios::out);

Пример

Создание файла и запись в него

Var f:Text;

a, b, c: integer;

Assign (f, “File.txt”);

Rewrite (f);

WriteLn (f, “текст”);

CLOSE (f);

Ofstream out_file(“file1.txt” ”,ios::out);

out_file<<”Запись в файл”<<endl;

out_file<<”Режим создания”<<endl;

out_file.close();

Комментарий

Создается файл “File.txt” и в него записывается “текст”. Если файл существовал, его содержимое заменяется на “текст”

В существующий файл “File.txt” добавляется текст: "Запись в файл. Режим добавления"

Вопросы для самоконтроля

  1.  Какова роль данных при создании программы?
  2.  Перечислите простые (базовые) типы данных
  3.  Дайте определение массива как структурированного типа данных. Какие базовые типы данных могут входить в массив?
  4.  Как получить доступ к элементу массива? Приведите пример операций над элементами массива.
  5.  Что такое размерность массива? Почему для обработки элементов массива необходимо использовать циклы?
  6.  Что собой представляет символьный массив?
  7.  В чем специфика типа данных «структура»? Чем вызвано частое использование типа данных «структур» в программах разной степени сложности?
  8.  Перечислите основные составляющие текста программы. Какие виды операторов Вы знаете?
  9.  Каково назначение операторов ввода-вывода?
  10.  Какие устройства относятся к устройствам ввода-вывода по умолчанию?
  11.  Какова последовательность работы программы с файлом данных?
  12.  Каким оператором в языках программирования  обеспечивается разветвление программы?
  13.  Приведите примеры записи циклических операторов.
  14.  Для чего предназначена возможность группировки операторов?
  15.  Как транслятор обрабатывает комментарии в тексте программы?
    1.  Принципы структурного программирования
      1.  Понятие подпрограммы

Итак, текст программы – это линейная последовательность базовых алгоритмических структур:

  •  операторов присваивания,
  •  условных операторов,
  •  циклов.

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

Помимо трех базовых структур вводится понятие подпрограммы (рис. 3.5).

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

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

Рис. 3.5 Элементы структурного программирования

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

  1.  Процедуры и функции как  разновидность подпрограмм

Подпрограммы бывают двух видов: процедуры (выполняет группу операторов) и функции (вычисляет значение и передает его в главную программу – возвращает значение) (рис. 3.6).

Рис. 3.6 Виды подпрограмм

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

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

Подпрограмма состоит из частей:

  •  заголовок с параметрами;
  •  тело подпрограммы;
  •  завершение подпрограммы.

Рис. . Схема взаимодействия основной программы с подпрограммами  

Локальные переменные, объявленные внутри подпрограммы, имеют областью действия только ее тело.

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

Таблица 3.18 Описание функции

Функции

Обозначение

Бейсик

Паскаль

Си++

Заголовок функции

FUNCTION имя (список параметров) Тип возвращаемого значения определяется специальным символом после имени функции

function имя (список параметров): тип функции;

Тип функции имя(список параметров)

Тело

Последовательность операторов

begin последовательность операторов

end;

{

последовательность

операторов

};

Завершение

END FUNCTION

нет

нет

Пример вызова функции

Function Max(x,y:real):real;

...

f:=Max(a,b)+Max(c,d)

int а, у;

а = 5;

у = SQR(а);

Таблица 3.19 Описание процедуры

Процедуры

Обозначение

Бейсик

Паскаль

Си++

Заголовок процедуры

SUB имя (список параметров)

procedure имя (список параметров);

void имя_функции (список параметров)

Тело

Последовательность операторов

begin

последовательность операторов

end;

{

последовательность операторов

};

Завершение

END SUB

нет

нет

Пример вызова подпрограммы

Вопросы для самоконтроля

  1.  Сформулируйте суть структурного программирования
  2.  Поясните понятие подпрограмма
  3.  Какие виды подпрограмм Вы знаете? Чем они отличаются?
  4.  Как происходит совместная работа подпрограмм?
  5.  Что понимается под формальными и фактическими параметрами подпрограмм?
  6.  Как происходит вызов подпрограммы?
  7.  


  1.  Технология событийного программирования

При работе с данным разделом Вам предстоит:

  1.  Изучить две темы:
  •  основы визуального  программирования;
  •  объектно-ориентированное  программирование.
  1.  Ответить на вопросы для самоконтроля по каждой теме.
  2.  Выполнить две лабораторные работы.

Понятия визуального программирования

  1.  Конструирование экранных форм приложений

Понятие «визуальное программирование» ассоциируется с работой в графической среде программирования, а результат программирования – с windows-приложениями в виде окон (экранных форм) с набором элементов управления. Действия пользователя рассматриваются как события, на которые реагирует приложение. Разработка таких приложений называется событийным программированием и заключается в конструировании экранных форм, определении значений свойств элементов управления экранной формы, создании программного кода как совокупность методов обработки событий.

Технология визуального программирования обязана своим появлением языкам программирования пятого поколения (середине 90-х годов), графическим операционным системам и системам автоматического создания прикладных программ.  Программа (приложение), предназначенная для работы в ОС Windows – это окно на экране монитора, в котором размещается экранная форма приложения.  На типовой экранной форме  программы располагается множество стандартных элементов управления (визуальных компонентов): кнопки, пункты меню, списки, переключатели и т. д. Работающее приложение ожидает действий пользователя, реагируя на них предусмотренным образом. Пользователь вызывает события, а приложение обрабатывает события благодаря программному коду, связанному с соответствующими элементами управления формы. Закрытие окна с формой означает завершение работы приложения.

Свойства и поведение визуальных компонентов на экранной форме настраиваются с помощью редактора, входящего в состав систем быстрого проектирования (Rapid Application Development, RAD). Вид рабочего окна редактора визуальной среды программирования MS Visual Basic 6.0 представлен на рис. 3.11.

Элементы оформления и управления с помощью мыши перетаскиваются в проектируемую форму с панели. Каждый элемент на панели элементов имеет свое название. Например, текстовое поле (Textbox), надпись (Label), список (ListBox), командная кнопка (CommandButton) и т.д.  Пример дизайна экранной формы приведен на рис. 3.12.  Каждый элемент экранной формы имеет присущий его классу набор свойств, значения которых устанавливает разработчик с помощью визуальной среды программирования. Список свойств и их значений выведен в правой нижней части экрана конструктора форм (рис. 3.12).

Рис. 3.11 Конструктор экранных форм в RAD-системе MS Visual Basic 6

Рис. 3.12 Дизайн экранной формы в RAD-системе MS Visual Basic 6

С точки зрения дальнейшего создания кода обработки событий важнейшим свойством каждого элемента управления формы является его имя (свойство Name).  Имена элементов управления на форме начинаются с сокращенного названия элемента, за которым следует смысловая мнемоническая часть. Например, значение свойства Name для текстового поля, предназначенного для ввода имени пользователя,  принято называть txtUserName, для командной кнопки, предназначенной для выхода из приложения – cmdExit .

Пример значений свойств элементов на экранной форме представлен в таблице 3.32.

Таблица 3.32. Свойства и их значения для элементов управления стартовой формы приложения

№ п/п

Имя элемента (значение свойства Name)

Назначение

Свойство

Значение

Метки Label

1

lblData 

надпись "Введите данные";

Caption

Введите данные

2

lblNum  

надпись "Вопрос №";

Caption

Вопрос №

Поля редактирования TeхtBoх

4

txtNFile 

поле для ввода имени файла

TabIndex

0

Конструирование экранной формы завершено, если на экранной форме расположены все элементы управления и заданы значения их свойств. Приложение можно запустить на выполнение, однако без программного кода оно не будет реагировать на действия пользователя (рис. 3.13).

Приложение сохраняется в отдельной папке в виде проекта, состоящего из множества файлов. Минимальный набор файлов – это файл экранной формы и файл проекта. Двойной клик на файле проекта запускает систему программирования и открывает проект для редактирования.

Рис. 3.13 Приложение активно, экранная форма в рабочем состоянии

  1.  Программный код экранной формы

Для записи команд на языке высокого уровня в системе визуального программирования предусмотрен текстовый редактор. В MS Visual Basic 6.0 переход к окну программного кода доступен по опции меню View -> Code. (рис. 3.14). В верхней части окна редактора имеются два раскрывающихся списка: список объектов данного приложения (форма, и все элементы управления на ней) и список допустимых событий каждого из этих объектов. Необходимо создать программный код только для тех событий, на которые будет реагировать приложение. Код представляет собой список специальных внутренних действий, называемых методами.

Рис. 3.14 Редактор программного кода в RAD-системе MS Visual Basic 6

Выбор в левом раскрывающемся списке конкретного элемента автоматически определяет в правом  списке типовой метод обработки события, а в поле редактора появляются начальные и конечные строки программного кода. Например, при  выборе элемента формы со свойством Name=Form  автоматически определяется метод  Load и появляются строки программного кода:

Private Sub Form_Load()

End Sub

При выборе элемента командная кнопка CommandButton со свойством Name=cmdExit автоматически определяется метод  Click и появляются строки программного кода:

Private Sub cmdExit_Click()

End Sub.

Для  написания кода необходимо знать операторы языка программирования Basic. Готовый код легко поддается пониманию ввиду простоты языка.

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

Поэтому особое внимание следует уделить взаимосвязи данных из текстовых полей экранных форм, переменных оперативной памяти и файлов, предназначенных для сохранения результатов работы пользователя в экранной форме. На рис. 3.15 представлена схема движения данных из экранной формы в файл.

Рис. 3.15 Механизм сохранения данных экранной формы в файле

Поля экранной формы предназначены для ввода данных о заказчике и товаре (ФИО – txtFam, адрес – txtAdr, телефон – txtTel, заказ – cmdZak) и сохранения их в файле. Для этого описывается переменная z типа структура zakaz с количеством полей, соответствующим числу сохраняемых данных формы.

TYPE zakaz

mFam As String

mAdr As String

mTel As String

mTov As String

END TYPE

Dim z As zakaz

С командной кнопкой cmdZak связан код, записывающий данные из полей формы в файл с использование переменной z.

Алгоритм работы экранной формы.

  1.  Пользователь вводит данные в поля экранной формы и нажимает кнопку «Заказать».
  2.  Данные из полей присваиваются полям структуры z:

z.mFam = txtFam.Text

z.mAdr = txtAdr.Text

z.mTel = txtTel.Text

z.mTov = txtTov.Text

  1.  Файл открывается: Open «имя_файла» For Random As #1 Len = 2048,

где #1идентификатор файла

  1.  Значения полей переменной z записываются в файл в виде отдельной строки (записи): Put #1, номер_записи, z.
  2.  Для  чтения из файла сохраненных ранее данных используется обратная последовательность действий:
  •  файл открывается,
  •  командой  Get #1, номер_записи, z данные из соответствующей записи переписываются в поля структуры z 
  •  поля структуры присваиваются полям экранной формы

txtFam.Text = z.mFam

txtAdr.Text = z.mAdr

txtTel.Text = z.mTel

txtTov.Text = z.mTov

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

Рис. 3.16 Диагностика ошибочных действий пользователя при работе в экранной форме

Вопросы для самоконтроля

  1.  Что представляет собой программа, разработанная под операционную систему Windows?
  2.  Приведите примеры элементов управления, располагаемых на экранной форме приложения.
  3.  Что понимается под дизайном экранной формы?
  4.  Назовите основные этапы разработки приложения в технологии визуального программирования
  5.  Что понимается под термином «проект» в визуальной системе программирования?
  6.  За счет чего приложение реагирует на действия пользователя?
  7.  Какое главное свойство каждого элемента на форме?
  8.  Поясните механизм сохранения данных из формы в файл.

  1.  Объектно-ориентированное  программирование
    1.  Понятие объекта и класса

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

Развитием идей структурного и событийного программирования при разработке сложных приложений явился объектно-ориентированный подход (ООП) к программированию, основанный на понятии объект.

Реальные объекты окружающего мира обладают тремя базовыми характеристиками:

  •  имеют набор свойств;
  •  способны разными методами изменять эти свойства;
  •  способны реагировать на события, возникающие как в окружающем мире, так и внутри самого объекта.

В таком виде в языках программирования реализовано понятие объекта как совокупности (рис. 3.17):

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

Объекты могут иметь идентичную структуру и отличаться только значениями свойств. Для их описания создается новый тип данных, основанный на единой структуре объекта (по аналогии с тем, как создаются новые типы для структур данных). Он называется классом, а каждый конкретный объект, имеющий структуру этого класса, называется экземпляром класса. Описание нового класса похоже на описание новой структуры данных, к полям (свойствам) которой добавляются методы – подпрограммы (рис. 3.18).

Рис. 3.17 Структура  объекта в ООП

Для объявления объекта необходимо объявить соответствующий класс принадлежности. Класс – это не объект, а описание объекта. В объектно-ориентированных языках предусмотрено ключевое слово class, которое используется для определения класса.

Объявление класса делают глобальным, т.е. доступным для всех подпрограмм данного приложения, после чего этот класс используется для объявления переменных-объектов (экземпляров).

Рис. 3.18 Понятие класса и экземпляра в ООП

Ккласс объектов характеризуется поведением, влияющим на его свойства. Поведение объекта описывается методами (процедурами и функциями), входящими в описание класса. Доступность свойств и методов извне определяется ключевыми словами Private и  Public. Область действия свойств и функций, определенных как Private – только рамки данного класса. Приватность означает, что любая программа, использующая этот класс, не может обратиться к его частным членам. Это свойство, обеспечиваемое классом, является критическим для защиты данных. Защита свойств описанием Private гарантирует, что доступ к значению данных будут иметь только методы внутри класса. Таким образом обеспечивается целостность объекта. Члены класса, определенные как Public, доступны из других классов объектов (3.19).

Рис. 3.19 Области действия свойств и методов объекта (PUBLIC и PRIVATE)

При определении методов, принадлежащих конкретному классу, в заголовке подпрограммы перед ее названием явно указывается название класса. Название класса от названия метода отделяют специальные символы (точка в Паскале или два двоеточия в Си++) (таблица 3.33).

Таблица 3.33 Описание класса

Класс

Обозначение

Бейсик

Паскаль

Си++

Описание класса

class TMyClass

Item1: integer;

Item2: string;

function GetSum(n: integer): integer;

procedure Initialize;

end;

class TMyClass

{

int Item1;

int Item2;

int GetSum(int n);

void Initialize();

);

Доступ к методу класса

procedure TMyClass.Initialize;

begin

  Iteml := 1;

  Item2 := «»;

end;

void TMyClass::Initialize ()

{

Item1 = 1;

Item2 = 0;

}

Описание экземпляров класса

var Cl, C2: TMyClass;

TMyClass Cl, C2;

Доступ к свойствам экземпляра

Cl.Item1 := 5;

C2.Initialize;

х := Cl.GetSum(21);

  1.  Концепции объектно-ориентированного программирования

Объектно-ориентированное программирование базируется на трех ключевых концепциях (рис. 3.20).

Рис. 3.20 Составляющие ООП

Инкапсуляция:

  •  объединение данных с методами в одном типе (классе),
  •  ограничение доступа к данным объектов и реализации методов классов,
  •  использование готовых классов на основе их описаний.

Наследование:

  •  возможность создания на основе имеющегося класса новых классов с наследованием всех его свойств и методов и добавлением собственных,
  •  класс, не имеющий предшественника, называется базовым.

Объектно-ориентированные языки поддерживают наследование так, что можно порождать классы и создавать на их основе новые объекты, имеющие помимо всех характеристик родительских классов еще и дополнительные свойства (рис. 3.21).

Пример:

Class  Животное;   *Описание класса*

Название: string;

Размер: integer;

Procedure Перемещаться;

Procedure Размножаться;

End;

Class Животное.Кошка *Экземпляр класса ЖИВОТНОЕ с

Покров: string  * новыми свойствами

Procedure Питаться;

Полиморфизм - возможность переопределения методов у класса-наследника.

Например, экземпляр «Мурка» класса ЖИВОТНОЕ выполняет метод «Перемещаться» не так, как экземпляр «Флиппер». Переопределяемый метод имеет то же название, что и у  базового класса, однако компилятор распознает, какой конкретно метод следует выполнять.

Рис. 3.21 Наследование свойств и методов класса-родителя классами-потомками

  1.  


Таким образом, можно создавать собственные операторы, изменяя способ действия существующего оператора при применении его к конкретному объекту. За счет написания специальной методов перегрузки оператора можно заставить любой оператор иначе работать с объектом.

Вопросы для самоконтроля

  1.  Назовите три базовые характеристики реальных объектов окружающего мира, воплощенные в понятии «объект» объектно-ориентированного программирования.
  2.  Сопоставьте понятия «класс» и «экземпляр класса»
  3.  Каким механизмом обеспечивается целостность объекта? Поясните особенности применения ключевых слов Private и  Public.
  4.  Назовите три ключевые концепции объектно-ориентированного программирования.
  5.  Поясните смысл концепции инкапсуляции.
  6.  Поясните, что понимается под наследованием в ООП.


Заключение

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

Вы познакомились с фундаментальными основами алгоритмизации, освоили базовые алгоритмические структуры и способы их записи на популярных языках программирования, получили навыки обработки основных типов данных.

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


3.3. Глоссарий (краткий словарь терминов)

Алгоритм

1. Точное предписание, определяющее вычислительный процесс, ведущий от варьируемых исходных данных к искомому результату

2. Точно определенное формальное описание способа решения задачи путем разбиения ее на конечную по времени последовательность действий (элементарных операций)

Архитектура клиент-сервер

На выделенном мощном компьютере сети (сервере данных) хранятся данные, доступные для модификации компьютерам-клиентам

Архитектура компьютерных приложений

Способ взаимодействия приложений, работающих на разных компьютерах сети

Архитектура файл-сервер

На выделенном мощном компьютере сети (файловом сервере) хранятся файлы, доступные для копирования компьютерам-клиентам

Базовый набор алгоритмических структур

Алгоритм любой степени сложности можно построить с помощью основного базового набора структур: последовательной (линейной), ветвящейся и циклической

Блок-схема алгоритма

Это графический документ, содержащий последовательность предписаний в виде типовых геометрических фигур

Ветвящаяся алгоритмическая структура

Фрагмент алгоритма, в котором в зависимости от исходных данных или промежуточных результатов вычисления реализуются по одному из нескольких заранее предусмотренных направлений

Динамические переменные

переменные, создаваемые и уничтожаемые на разных этапах функционирования программы

Инициализация переменной  

Присвоение начального значения

Инкапсуляция

Объединение данных с методами в одном классе и ограничение доступа к ним извне

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

Транслятор, который сразу выполняет команды языка, указанные в тексте программы

Исполнимый код

Законченная программа, которую можно запустить на любом компьютере, где установлена операционная система, для которой эта программа создавалась. Итоговый файл имеет расширение ЕХЕ

Класс

Новый тип данных, основанный на единой структуре сходных объектов

Комментарии

Части исходных текстов, выделяемые с помощью специальных обозначений и пропускаемые компилятором при анализе текста программы

Компилятор

Транслятор, который переводит текст программы, написанной на языке программирования, в машинный код для автономного выполнения

Константы

Данные, которые при выполнении алгоритма (программы) всегда определены и неизменны

Линейная алгоритмическая структура

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

Логические скобки

Объединяют группу операторов в блок

Массив

Упорядоченное множество однотипных переменных (элементов массива), объединенных общим именем и отличающихся номерами (индексами)

Машинный код процессора

Последовательность двоичных чисел

Многозвенная архитектура

Для целей хранения и обработки данных в сети выделяются специализированные серверы (сервер данных, сервер приложений, монитор транзакций), обеспечивающие выполнение запросов от компьютеров-клиентов

Наследование

Возможность создания на основе имеющегося класса новых классов с наследованием всех его свойств и методов и добавлением собственных

Объект

Совокупность свойств, методов и событий. Могут иметь идентичную структуру и отличаться только значениями свойств

Оперативная память

Состоит из набора запоминающих ячеек (бит), сгруппированных по 8 штук (байт)

Описание переменных

Указание типа хранимых данных

Отладка программы

Процесс устранения ошибок в программе

Отладчик

Предназначен для анализа работы программы во время ее выполнения (проверка работоспособности алгоритма – семантический анализ)

Переменные

Условные обозначения данных, которые в процессе выполнения программы не меняют своего типа, но могут менять свое фактическое значение

Подпрограммы

Новые операторы языка, определяемые программистом

Полиморфизм

Возможность переопределения методов у класса-наследника

Приведение типов данных

Преобразование типов данных друг в друга в соответствии с соглашениями языка программирования

Программа

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

Процедуры

Подпрограммы, выполняющие группу операторов

Процессор

Интегральная микросхема, выполняющая основные вычислительные функции компьютера

Псевдокод

Наиболее простая форма представления алгоритма - словесное описание как последовательность предписаний на подмножестве естественного языка

Распределенная (компонентная) архитектура

Приложение рассматривается как набор компонентов, выполняемых на любых серверах, связанных в сеть. Доступ к компонентной системе возможен с мобильных устройств

Редактор связей (сборщик)

Предназначен для связывания объектных модулей и машинного кода стандартных библиотечных функций в работоспособное приложение – исполнимый код для конкретной платформы (типа процессора и операционной системы)

Семантика языка программирования

Смысл конструкций языка

Синтаксис языка программирования

Совокупность правил записи операторов.

Среды быстрого проектирования (Rapid Application Development, RAD-среды)

Реализуют визуальный подход к программированию: элементы оформления оконного интерфейса создаются перетаскиванием готовых визуальных компонентов в проектируемое окно; свойства компонентов настраиваются в редакторах свойств; исходный текст программы генерируется RAD-средой автоматически.

Статические переменные

Переменные, существующие на всем протяжении работы программы

Структурное программирование

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

Структуры

Описание разнотипных данных, объединенных одним именем, в виде, максимально приближенном к их реальным аналогам

Текст программы

1. Полное, законченное и детальное описание алгоритма на языке программирования

2. Линейная последовательность операторов базовых алгоритмических структур (операторов присваивания, условных операторов, циклов) и комментариев

Текстовый редактор

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

Тестирование программы

Процесс поиска семантических ошибок в программе

Транслятор

Переводит текст программы в машинный код процессора

Фактические параметры подпрограммы

Указываются и передаются при вызове подпрограммы из главной программы

Формальные параметры подпрограммы

Указываются в заголовке подпрограммы и служат для описания ее тела

Функции

Подпрограммы, вычисляющие значение и передающие его в главную программу

Цикл с заданным условием окончания работы (цикл-ДО)

Тело цикла выполняется хотя бы один раз. Выход из конструкции цикл-ДО осуществляется по достижении заданного значения признака.

Цикл с заданным условием продолжения работы (цикл-ПОКА)

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

Циклическая алгоритмическая структура

Выполнение некоторых операторов (групп операторов) осуществляется многократно с одними и теми же или модифицированными данными

Экземпляр класса

Конкретный объект, имеющий структуру данного класса

Языки программирования  

Служат для представления алгоритма в компьютерном виде

Языки программирования высокого уровня

Ориентированы на понимание человеком, не учитывают особенности конкретных компьютерных архитектур, исходные тексты легко переносимы на другие платформы (операционные системы).

Языки программирования низкого уровня

Ориентированы на конкретный тип процессора и учитывают его особенности


3.4 Технические и программные средства обеспечения дисциплины

Для освоения теоретической части дисциплины предусмотрены лекционные материалы, доступные для студентов в виде электронных файлов в следующих форматах:

  •  опорный конспект в формате MS Word (.doc),
  •  презентации лекций в формате MS Power Point (.ppt).

Для выполнения курсовой работы, практических и лабораторных работ предусмотрены методические указания и программные средства в следующем составе:

  •  методические указания к выполнению практических и лабораторных работ в формате файла MS Word (.doc),
  •  методические указания к выполнению курсовой работы в формате файла MS Word (.doc),
  •  система программирования TurboPascal 7.0 для операционной системы MS DOS,
  •  система программирования MS Visual Basic 6.0 для операционной системы MS Windows XP (и более поздних версий),
  •  система программирования MS C++ 6.0 для операционной системы MS Windows XP (и более поздних версий).

Для проведения контрольного тестирования требуется наличие стандартного браузера (Internet Explore 6.0 и выше, Mozilla Firefox и др.) и доступ в Интернет.

PAGE  103


 

А также другие работы, которые могут Вас заинтересовать

62571. ПОНЯТИЕ ПРОФЕССИОНАЛЬНОЙ ДЕЯТЕЛЬНОСТИ. СТРУКТУРА И ОРГАНИЗАЦИЯ ПРОИЗВОДСТВА 35.26 KB
  Цель уроков: сформировать у учащихся представление о профессиональной деятельности разделении и специализации труда; ознакомить с понятиями предмет и средства труда орудия производства с составляющими технологического процесса; дать понятие товара...