- •Предисловие
- •Основы программирования
- •Понятие алгоритма.
- •Алгоритм Евклида.
- •Задача о поездах и мухе
- •Вместо лирического отступления
- •Этапы подготовки задачи для решения на компьютере
- •Примеры разработки алгоритмов
- •Решение квадратного уравнения.
- •Вычисление интегралов
- •Обработка результатов эксперимента
- •Решение системы линейных алгебраических уравнений
- •Введение в язык программирования 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. Создание приложений с изменяемыми размерами окон
- •Послесловие
- •Литература
- •Алфавитный указатель
Глава 3 Более сложные элементы языка
____________________________________________________________________
begin // начало основной программы
{задаем интервал на котором вычисляется интеграл}
a:= 0;
b:= pi/4;
eps:= 1e-5; // заданная точность вычисления интеграла
Simpson(a, b, eps); // вызов процедуры вычисления интеграла writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
3.1.1.4 Способы передачи параметров
Передача параметров по значению
При таком способе передачи параметров в функцию или процедуру пере-
дается копия переменной. Внутри функции или процедуры можно менять зна-
чения переданных параметров, однако в вызывающей программе значения па-
раметров остаются неизменными.
Рассмотрим пример:
program parameters; {$mode objfpc}{$H+} uses
CRT, FileUtil; var
x, y: real; n: integer;
{Объявление процедуры с параметром}
procedure example(x, y: real; n: integer);
begin
x:= 1.5;
155
3.1 Общая структура Паскаль – программы
____________________________________________________________________
y:= 2.8; n:= 10;
end; begin
x:= 1; y:= 1; n:= 1;
writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n); example(x, y, n);
writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n);
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
Как видите, после вызова процедуры значения переменных x, y, n не изменились.
В предыдущих двух примерах мы использовали передачу параметров по значению.
Передача параметров по ссылке
Другая ситуация при передаче параметров по ссылке. В этом случае изме-
нение параметра внутри функции (процедуры) влечет за собой и изменение значения переменной в вызывающей программе. Для передачи параметра по ссылке нужно перед именем параметра в заголовке указать ключевое слово var. Рассмотрим предыдущий пример, но передадим параметры x и n по ссыл-
ке.
program parameters;
{$mode objfpc}{$H+}
uses
156
Глава 3 Более сложные элементы языка
____________________________________________________________________
CRT, FileUtil;
var
x, y: real;
n: integer;
{Объявление процедуры с параметром}
procedure example(var x: real; y: real; var n: integer); begin
x:= 1.5; y:= 2.8; n:= 10;
end; begin
x:= 1; y:= 1; n:= 1;
writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n); example(x, y, n);
writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n);
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
Здесь уже значения переменных x и n изменились!
Передача параметров-констант
Если при передаче параметров по значению внутри функции (процедуры)
их значения можно изменять, то при передаче параметров как констант внутри функции или процедуры их вообще невозможно изменить. При попытке их из-
157
3.1 Общая структура Паскаль – программы
____________________________________________________________________
менения компилятор выдаст ошибку. Для передачи параметра как константы нужно перед именем параметра задать ключевое слово const.
program parameters; {$mode objfpc}{$H+} uses
CRT, FileUtil; var
x, y: real; n: integer;
{Объявление процедуры с параметром}
procedure example(var x: real; y: real;
const n: integer);
begin
x:= 1.5;
y:= 2.8;
{Попытка изменить параметр-константу}
//n:= 10; // здесь, если убрать комментарий, компилятор укажет на ошибку end;
begin x:= 1; y:= 1; n:= 1;
writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n); example(x, y, n);
writeln('x= ', x:0:2, ' y= ', y:0:2, ' n= ', n);
writeln(UTF8ToConsole('Нажмите любую клавишу'));
readkey;
end.
158