- •Предисловие
- •Основы программирования
- •Понятие алгоритма.
- •Алгоритм Евклида.
- •Задача о поездах и мухе
- •Вместо лирического отступления
- •Этапы подготовки задачи для решения на компьютере
- •Примеры разработки алгоритмов
- •Решение квадратного уравнения.
- •Вычисление интегралов
- •Обработка результатов эксперимента
- •Решение системы линейных алгебраических уравнений
- •Введение в язык программирования Pascal
- •Основные элементы языка
- •Переменные. Стандартные типы.
- •Операции отношения
- •Раздел описаний переменных
- •Выражения. Порядок выполнения операций.
- •Константы
- •Комментарии в программе
- •Операторы
- •2.1.7.1. Оператор присваивания
- •2.1.7.2. Операторы ввода/вывода
- •2.1.7.3. Операторы инкремента и декремента
- •Среда разработки Lazarus
- •Русский язык в консольных приложениях
- •Первая программа
- •Открытие существующего проекта
- •Другие способы создания консольных приложений
- •Типовой пустой проект
- •Операции с целыми числами
- •Вместо лирического отступления 2
- •Стандартные функции с целыми аргументами
- •Операции с вещественными числами (тип real).
- •Форматирование вывода
- •Одновременное использование вещественных и целых чисел.
- •Другие стандартные функции с вещественными аргументами
- •Булевы переменные
- •Условные операторы.
- •2.1.22.1 Оператор if …. then
- •2.1.22.2. Оператор if …then ... else
- •Операторы цикла
- •2.1.23.1. Оператор цикла с предусловием
- •2.1.23.2. Оператор цикла с постусловием
- •2.1.23.3. Оператор цикла с параметром.
- •2.1.23.4. Второй вариант оператора цикла с параметром
- •Оператор выбора case
- •Организация простейшего контроля ввода данных.
- •Вычисление сумм сходящихся рядов
- •Реализация некоторых алгоритмов главы 1.
- •Программа решения задачи о поездах и мухе
- •Программа вычисления определенного интеграла
- •Более сложные элементы языка
- •Общая структура Паскаль – программы
- •Процедуры и функции
- •3.1.1.1 Структура процедуры
- •3.1.1.2. Структура функции
- •3.1.1.3 Глобальные и локальные переменные
- •3.1.1.4 Способы передачи параметров
- •3.1.1.5 Процедуры завершения
- •Еще раз о типах данных
- •Классификация типов данных
- •3.2.1.1 Целый тип
- •3.2.1.2. Интервальный тип
- •3.2.1.3. Перечислимый тип
- •3.2.1.4. Множества
- •3.2.1.5. Логический тип
- •3.2.1.6. Вещественный тип
- •3.2.1.7. Указатели
- •Обработка символьной информации в Паскале
- •Символьные и строковые типы данных.
- •3.3.1.1. Тип Char
- •3.3.1.2. Функции для работы с символами
- •3.3.1.3. Тип String
- •3.3.1.4. Строковые процедуры и функции
- •Массивы
- •Динамические массивы
- •Программа решения системы линейных алгебраических уравнений методом Гаусса
- •3.4.1.1. Вариант 1 – с goto
- •3.4.1.2. Вариант 2 – без goto
- •3.4.1.3. Вариант 3 – наилучшая реализация
- •Модули в Паскале
- •Структура модуля
- •Системные модули
- •3.5.2.1. Модуль CRT
- •Файлы
- •Тип данных – запись
- •Файловые типы
- •Процедуры для работы с файлами
- •3.6.3.1. Общие процедуры для работы с файлами всех типов
- •3.6.3.2. Процедуры для работы с текстовыми файлами
- •3.6.3.3. Процедуры для работы с типизированными файлами
- •3.6.3.4. Процедуры для работы с нетипизированными файлами
- •3.6.3.5. Организация контроля ввода/вывода при работе файлами
- •3.6.3.6. Создание простой базы данных с типизированными файлами.
- •Алгоритмы сортировки
- •Обменная сортировка (метод "пузырька")
- •Сортировка выбором
- •Сортировка вставками
- •Метод быстрой сортировки
- •Алгоритмы поиска
- •Поиск в массивах
- •Вставка и удаление элементов в упорядоченном массиве
- •Динамические структуры данных
- •Представление в памяти компьютера динамических структур.
- •Реализация стека с помощью массивов
- •Указатели
- •Стандартные операции с линейными списками
- •Реализация динамических структур линейными списками
- •4.3.6.1. Реализация стека
- •4.3.6.2. Реализация очереди с помощью линейного списка
- •4.3.6.3. Реализация двоичного дерева с помощью линейного списка
- •Сортировка и поиск с помощью двоичного дерева
- •Три источника и три составные части ООП.
- •Классы и объекты.
- •Обращение к членам класса.
- •Инкапсуляция
- •Спецификаторы доступа.
- •Свойства.
- •Наследование
- •Полиморфизм
- •Раннее связывание.
- •Позднее связывание.
- •Конструкторы и деструкторы.
- •Элементы графического интерфейса
- •Различия между консольными и графическими приложениями
- •Визуальное программирование в среде Lazarus
- •Создание графического приложения
- •Форма и ее основные свойства
- •Компоненты
- •Обработчики событий
- •Простейшие компоненты
- •6.3.5.1. Компонент TLabel
- •6.3.5.2. Кнопки TButton, TBitBtn и TSpeedButton
- •6.3.6.1. Компонент TEdit
- •6.3.6.2. Компонент TLabeledEdit
- •6.3.7.1. Компонент TMaskEdit
- •Специальные компоненты для ввода чисел
- •Тестирование и отладка программы
- •Компоненты отображения и выбора данных
- •6.3.10.1. Компонент TMemo
- •6.3.10.2. Компонент TStringGrid
- •6.3.10.3. Компоненты выбора
- •Компонент TListBox
- •Компонент TComboBox
- •Компоненты выбора – переключатели
- •6.3.10.4. Компоненты отображения структурированных данных
- •Компонент TTreeView
- •Компонент TListView
- •Организация меню. Механизм действий - Actions
- •6.3.11.1. Компонент TMainMenu
- •6.3.11.2. Компонент TToolBar
- •6.3.11.3. Компонент TActionList
- •6.3.11.4. Создание приложений с изменяемыми размерами окон
- •Послесловие
- •Литература
- •Алфавитный указатель
Глава 1 Основы программирования
1.1. Понятие алгоритма.
Компьютер - это устройство для решения задач. Не обязательно задач чис-
то математического характера. Это могут быть и задачи управления станками или ракетами, и задачи планирования производства, и задачи информационно-
справочного обслуживания, и задачи обработки гипертекстовой информации и мультимедиа, т.е. обработки звуковой и видеоинформации. Чтобы решить ка-
кую - либо задачу на компьютере необходимо сначала придумать как ее вообще решить, т.е. придумать алгоритм ее решении. Алгоритм – является одним из краеугольных понятий информатики и программирования.
Итак, что же понимается под алгоритмом?
Алгоритм - это строгая и четкая, конечная система правил, которая опре-
деляет последовательность действий над некоторыми объектами и после ко-
нечного числа шагов приводит к достижению поставленной цели.
Из определения алгоритма следует, что он должен удовлетворять следую-
щим требованием:
1) конечность (финитность)
Алгоритм всегда должен заканчиваться после конечного числа шагов.
Процедуру, обладающую всеми характеристиками алгоритма, за исключением конечности, вызывают вычислительным методом.
2) определенность (детерминированность)
Каждый шаг алгоритма должен быть строго определен. Действия, которые необходимо произвести, должны быть строго и недвусмысленно определены в каждом возможном случае, так чтобы если дать алгоритм нескольким людям,
то они, действуя по этому алгоритму, получали один и тот же результат. По-
скольку обычный язык полон двусмысленностей, то чтобы преодолеть это за-
труднение, для описания алгоритмов разработаны формально определенные
10
Глава 1 Основы программирования
____________________________________________________________________
языки программирования, или машинные языки, в которых каждое утвержде-
ние имеет абсолютно точный смысл.
Запись алгоритма на языке программирования называется программой.
3) Алгоритм должен иметь некоторое число входных данных, т.е. величин,
объектов заданных ему до начала работы. Эти данные берутся из некоего кон-
кретного множества объектов.
4) Алгоритм имеет одну или несколько выходных величин, т.е. величин,
имеющих вполне определенное отношение к входным данным. 5) Эффективность
От алгоритма требуют, чтобы он был эффективным. Это означает, что все операции, которые необходимо произвести в алгоритме, должны быть доста-
точно простыми, чтобы их в принципе можно было выполнить точно и за ко-
нечный отрезок времени с помощью карандаша и бумаги.
Следует отметить, что для практических целей "финитность" является наиболее важным требованием – используемый алгоритм должен иметь не про-
сто конечное, а предельно конечное, разумное число шагов. Например, в прин-
ципе имеется алгоритм, определяющий, является ли начальное положение в иг-
ре в шахматы форсировано выигранным для белых или нет. Но для выполнения этого алгоритма требуется фантастически огромный промежуток времени.
Пусть имеется компьютер, обладающий быстродействием 100 млн. операций в секунду. Тогда этот компьютер будет выполнять алгоритм в течение 1023 лет.
Для сравнения укажем, что период времени с начала возникновения жизни на земле и до наших дней намного меньше 1023 лет.
11
1.1 Понятие алгоритма.
____________________________________________________________________
Пример алгоритма.
1.1.1 Алгоритм Евклида.
Алгоритм Евклида нахождения наибольшего общего делителя двух целых
чисел, т.е. наибольшее целое число, которое делит нацело заданные числа.
1.Рассмотреть А как первое число и В как второе число. Перейти к п.2.
2.Сравнить первое и второе числа. Если они равны, то перейти к п.5. Если нет, то перейти к п.3.
3.Если первое число меньше второго, то переставить их местами. Перейти
кп.4.
4.Вычесть из первого числа второе и рассмотреть полученную разность как новое первое число. Перейти к п.2.
5.Рассмотреть первое число как результат.
Стоп.
Этот набор правил является алгоритмом, т.к. следуя ему, любой человек умеющий вычитать, может получить наибольший общий делитель для любой пары чисел. Следуя этому алгоритму, найдем НОД чисел 544 и 119.
А 544 В 119
1)
544
119
425
А425 В 119
2)425
119
306
12
Глава 1 Основы программирования
____________________________________________________________________
А306 В 119
3)306
119
187
А187 В 119
4) |
187 |
|
|
|
|
||
|
119 |
|
|
|
|
|
|
|
68 |
|
|
5) |
А 68 В 119 |
||
|
|
|
АB
Меняем местами
А119 В 68
6)119
68
51
А51 В 68
A B
А68 В 51
8)68
51
17
А |
17 |
В |
51 |
|
9) |
|
A |
B |
|
|
|
|
||
А |
51 |
В |
17 |
|
10) |
51 |
|
|
|
|
17 |
|
|
|
|
|
|
|
|
|
34 |
|
|
|
13
1.1 Понятие алгоритма.
____________________________________________________________________
А34 В 17
11)34
17
17
А=В=17=НОД
Данный способ записи алгоритмов возможен, но неудобен. Во-первых, нет наглядности, во-вторых, "многословен". Одним из способов записи алгоритма являются блоксхемы. Блоксхемой называется такое графическое изображе-
ние структуры алгоритма, в котором каждый этап или шаг процесса переработ-
ки данных представляется в виде прямоугольника, ромба, овала или другой геометрической фигуры, называемой блоком.
Эти фигуры соединяются между собой линиями со стрелками, отобра-
жающими последовательность выполнения алгоритма. Внутри каждой фигуры разрешается писать произвольный текст, в котором на понятном человеку язы-
ке сообщаются о нужных вычислениях в соответствующей части программы.
Приняты определенные стандарты графических обозначений. Так, прямо-
угольник обозначает вычислительные действия, в результате которых изменя-
ются значения данных. Ромбом обозначают этап разветвления алгоритма. Вы-
бор одного из двух возможных направлений дальнейшего счета производится в зависимости от выполнения условия, записанного в ромбе. Овалом обозначают начало и конец алгоритма. В параллелограммах записывают процедуры ввода и вывода данных. Запишем алгоритм Евклида в виде блоксхемы:
14
Глава 1 Основы программирования
____________________________________________________________________
начало
да
A=B
нет
нет
A<B
да
C=A
A=B
B=C
НОД
A=A-B
конец
Рис. 1.1. Алгоритм Евклида
Существуют и другие способы записи алгоритмов. В частности, достаточ-
но распространены записи алгоритмов на так называемых псевдоязыках. Псев-
доязык похож на обычный алгоритмический язык программирования, но в нем можно использовать и естественный язык для более ясного выражения своих мыслей. Некоторые псевдоязыки более близки к языкам высокого уровня, так называемые алголоподобные языки (в прошлом существовали языки програм-
мирования ALGOL-60, ALGOL-68, которые в настоящее время не используют-
ся). Примером такого псевдоязыка служит язык описания алгоритмов, приме-
няемым в школах. Некоторые псевдоязыки более близки к машинным языкам,
так называемые ассемблеры. Примером такого языка описания алгоритмов служит язык, предложенный Д. Кнутом в его знаменитой книге "Искусство программирования" [9].
Итак, чтобы решить какую либо задачу, нужно придумать алгоритм ее ре-
шения и записать его в том или ином виде. Этот процесс называется алгоритми-
зацией. Но в таком виде компьютер алгоритм не сможет выполнить. Следует
15
1.1 Понятие алгоритма.
____________________________________________________________________
представить этот алгоритм в таком виде, чтобы компьютер мог его выполнить.
Для этого нужно, во-первых, разбить алгоритм на элементарные операции, на-
зываемые инструкциями или командами, которые умеет выполнять компьютер,
и, во-вторых, записать каждую такую операцию на языке, понятом компьюте-
ру. Такая запись алгоритма на языке компьютера называется программой.
Процесс разработки программы называется программированием. А человек,
выполняющий эту работу - программистом. При этом следует различать про-
грамму в машинных кодах, говорят еще исполнимая программа и программу,
написанную на каком-либо языке программирования. Обычно человек пишет программу на языке высокого уровня, в крайнем случае, на ассемблере. Компи-
лятор переводит ее в программу на машинном языке, которую и исполняет компьютер.
Программирование – это научная дисциплина. Если бы процессы про-
граммирования разных задач не имели между собой ничего общего, то про-
граммирование, как таковое, не было бы научной дисциплиной. Но дело об-
стоит не так. Существуют общие методы, которые позволяют, постепенно расчленяя задачи на подзадачи, сводить их решение, в конечном счете, к
некоторым элементарным операциям (чаще всего к элементарным арифме-
тическим операциям), подобно тому, как разбирая совершенно непохожие сложные механизмы, мы обнаруживаем, что они состоят из одинаковых де-
талей и узлов, только по разному соединенных (напр. подшипники, болты,
гайки и т.д.). Из этого, конечно, не следует, что процесс программирования не содержит в себе элементов творчества. Составление программы, такой же творческий процесс, что и разработка сложного механизма из заданных на-
боров деталей.
Основное назначение алгоритмов заключается в их фактическом вы-
полнении тем или иным исполнителем. Т.е. алгоритм составляется для того,
чтобы он был выполнен для решения какой либо задачи. В качестве испол-
нителя может выступать кто угодно – человек, станок с ЧПУ, компьютер и т.д.
16