- •Предисловие
- •Основы программирования
- •Понятие алгоритма.
- •Алгоритм Евклида.
- •Задача о поездах и мухе
- •Вместо лирического отступления
- •Этапы подготовки задачи для решения на компьютере
- •Примеры разработки алгоритмов
- •Решение квадратного уравнения.
- •Вычисление интегралов
- •Обработка результатов эксперимента
- •Решение системы линейных алгебраических уравнений
- •Введение в язык программирования 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. Создание приложений с изменяемыми размерами окон
- •Послесловие
- •Литература
- •Алфавитный указатель
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
нет |
|
да |
|
|
|
|
|
|
|
|
|
||||
|
|
x<2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
нет |
|
|
|
|
|
|
да |
||||
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
y>0 |
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
S:=S-1 |
|
|
|
|
|
|
S:=S+1 |
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 2.54. Блок-схема выполнения вложенных условных операторов
2.1.23 Операторы цикла
Операторы цикла используются для организации многократного повторе-
ния выполнения одних и тех же операторов. В языке Паскаль существует три типа операторов цикла.
2.1.23.1. Оператор цикла с предусловием
Этот оператор имеет вид:
while условие do оператор;
где условие – булевское выражение, оператор – любой оператор Паскаля, в
частности может быть и составным оператором. Слова while и do являются служебными словами, а оператор после do часто называют телом цикла. Вы-
полняется этот оператор следующим образом: сначала вычисляется значение булевого выражения. Если это значение есть true, то выполняется оператор после слова do и снова происходит возврат к вычислению булевого выражения.
Так повторяется, пока булевое выражение имеет значение true. Как только значение булевского выражения станет false, то происходит выход из цикла,
т. е. оператор после служебного слова do уже не выполняется, а будет выпол-
113
2.1 Основные элементы языка
____________________________________________________________________
няться следующий после оператора цикла оператор.
В данном операторе вычисление выражения происходит раньше, чем будет выполняться оператор после do, поэтому он и называется оператор цикла с предусловием. Может так случиться, что оператор после do не будет выпол-
нен вообще, если значение условия с первого раза будет false.
Структурная схема цикла с предусловием
false
условие
нет
true да
Оператор
Рис. 2.55. Структурная схема цикла с предусловием
2.1.23.2. Оператор цикла с постусловием
Этот оператор имеет вид: repeat оператор until условие;
где оператор – любой оператор Паскаля, в том числе и составной, условие
– булевское выражение.
repeat и until - служебные слова.
Этот оператор выполняется следующим образом: сначала выполняется оператор следующий за служебным словом repeat, затем вычисляется значе-
ние булевского выражения (условия). Если значение условия false, то проис-
ходит возврат к выполнению оператора и после этого снова вычисляется значе-
ние булевского выражения. Так повторяется до тех пор, пока значение булев-
ского выражения false. Как только условие станет true, выполнение опера-
тора цикла прекращается.
114
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
Структурная схема оператора
Оператор
нет
условие
false
да true
Рис. 2.56. Структурная схема цикла с постусловием
В отличие от оператора цикла while-do здесь оператор будет выполнен хотя бы один раз, независимо от значения условий.
Предупреждение! Чтобы рассмотренные выше операторы цикла выполня-
лись конечное число раз, при построении цикла необходимо предусмотреть,
чтобы среди выполняемых операторов обязательно был оператор, который из-
менял бы значение условия, таким образом, чтобы когда-нибудь значение усло-
вия принимало бы false(для оператора while-do)или true(для опера-
тора repeatuntil).
В противном случае цикл будет повторяться бесконечное число раз и про-
грамма "зациклится". Ответственность за правильное применение этих опера-
торов цикла несет на себе программист!
|
100 |
Пример: Вычислить S |
x |
|
x 1 |
program sum_1; {Вариант 1 цикл с предусловием} {$mode objfpc}{$H+}
uses
CRT, FileUtil; var x, Sum: integer; begin
115
2.1 Основные элементы языка
____________________________________________________________________
Sum:= 0; // в этой переменной накапливается сумма
x:= 1;
while x <= 100 do
begin
Sum:= Sum + x;
x:= x + 1;
end;
writeln('Sum= ',Sum);
writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
program sum_2; {Вариант 2 цикл с постусловием} {$mode objfpc}{$H+}
uses
CRT, FileUtil; var x, Sum: integer; begin
Sum:= 0; // в этой переменной накапливается сумма x:= 1;
repeat
Sum:= Sum + x; x:= x + 1;
until x > 100; writeln('Sum= ',Sum);
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
116
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
Пример: Вычислить функцию:
x2 1, x 0
y 0, x 0 |
для х [-10, 10] c шагом 1 |
|
x2 1, x 0
Напишем программу вычисления функции с использованием оператора if…then и оператора цикла while…do:
program fun_1;{Вариант 1} {$mode objfpc}{$H+} uses
CRT, FileUtil; var
x, y: integer; begin
x:=-10;
while x <= 10 do begin
if x > 0 then y:= sqr(x) + 1;
if x = 0 then y:= 0;
if x < 0 then y:= sqr(x) - 1;
writeln('x= ', x, ' y= ', y); x:= x + 1;
end;
writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey; end.
117
2.1 Основные элементы языка
____________________________________________________________________
Напишем программу вычисления этой же функции с использованием опе-
ратора if…then…else и оператора цикла while…do:
program fun_2;{Вариант 2} {$mode objfpc}{$H+} uses
CRT, FileUtil; var
x, y: integer; begin
x:=-10;
while x <= 10 do begin
if x > 0 then y:= sqr(x) + 1
else
if x = 0 then y:= 0
else
y:= sqr(x) - 1;
writeln('x= ', x ,' y= ', y); x:= x + 1;
end;
writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
В программах fun_1 и fun_2, как вы могли заметить, использовались со-
ставные операторы.
118
Глава 2 Введение в язык программирования Pascal
____________________________________________________________________
program fun_3;{Вариант 3 с использованием оператора цикла с постусло-
вием}
{$mode objfpc}{$H+} uses
CRT, FileUtil; var
x, y: integer; begin
x:=-10; repeat
if x > 0 then y:= sqr(x) + 1;
if x = 0 then y:= 0;
if x < 0 then y:= sqr(x) - 1;
writeln('x= ', x, ' y= ', y); x:= x + 1;
until x > 10;
writeln(UTF8ToConsole('Нажмите любую клавишу')); readkey;
end.
Заметим, что в операторе цикла с постусловием, если после слова repeat
используется не один, а несколько операторов, то не обязательно использовать операторные скобки begin и end, поскольку служебные слова repeat и until сами выполняют роль операторных скобок.
119