- •Содержание
- •Рекомендации к проведению лабораторных работ
- •Комментарии в тексте программы
- •Компиляция и запуск программы на выполнение
- •Переменные и константы
- •Операторы и выражения
- •Оператор присваивания
- •Арифметические операции
- •Логические операции
- •Составной оператор begin..end
- •Условный оператор if..then
- •Оператор-селектор case..of
- •Операторы обработки циклов
- •Цикл с параметром for .. do
- •Цикл с предусловием while..do
- •Цикл с постусловием repeat..until
- •Процедуры break и continue
- •Оператор with..do
- •Процедуры и функции
- •Процедуры
- •Функции
- •1. Фундаментальные структуры данных
- •Общее понятие типа данных
- •Простой тип
- •Перечислимые типы данных
- •Поддиапазонны
- •Строковый тип
- •Структурные типы
- •Массивы
- •Записи
- •Множества
- •Представление структур в памяти
- •Задание
- •2. Работа с последовательностями, файлы
- •Доступ к файлу
- •Операции над файлами
- •Окончание файла
- •Пример работы с файлом
- •Задание
- •3. Анализ алгоритмов
- •Рост функций
- •Задание
- •4. Простейшие методы сортировки массивов
- •Оценка алгоритмов сортировки
- •Шейкер-сортировка
- •Сортировка простыми вставками
- •Сортировка бинарными вставками
- •Задание
- •5. Улучшенные методы сортировки массивов
- •Сортировка с помощью включений с уменьшающимися расстояниями (сортировка Шелла)
- •Пирамидальная сортировка
- •Сортировка с разделением (быстрая сортировка)
- •Задание
- •6. Сортировка последовательных файлов
- •Сортировка простым слиянием
- •Естественное слияние
- •Задание
- •7. Рекурсивные алгоритмы
- •Сравнение рекурсии и итерации
- •Задание
- •8. Динамические структуры данных, связные списки
- •Списки
- •Пример создания и заполнения списка
- •Задание
- •9. Нелинейные структуры данных
- •Граф
- •Бинарное дерево
- •Задание
- •10. Алгоритмы на графах
- •Алгоритмы обхода в глубину и по уровням
- •Построение минимального остовного дерева
- •Поиск кратчайшего пути
- •Задание
- •11. Поиск данных
- •Двоичный (бинарный) поиск элемента в массиве
- •Интерполяционный поиск элемента в массиве
- •Алгоритм Бойера-Мура
- •Задание
- •12. Хеширование
- •Отечественный стандарт хеширования
- •Создание хеш-функции
- •Хеш-функции для строковых значений, алгоритм Гонера
- •Задание
- •13. Методы сжатия текстовых данных
- •Метод “Running”
- •Словарные методы сжатия
- •Алгоритм Хаффмана
- •Задание
- •14. Алгоритмы вывода графических примитивов
- •Рисование отрезка
- •Прямое вычисление координат
- •Инкрементный алгоритм Брезенхэма
- •Простейший алгоритм закрашивания замкнутой области
- •Задание
- •15. Псевдослучайные последовательности
- •Метод середин квадратов
- •Линейный конгруэнтный метод
- •Генератор псевдослучайных чисел, поставляемый с системой
- •Оценка качества генератора ПСП
- •Задание
- •16. Параллельные алгоритмы
- •Пример многопоточного приложения
- •Задание
- •Задание на СКР
- •Вариант 1. Клеточные автоматы
- •Вариант 2. Раскрашивание карты
- •Вариант 3. Крисс-кросс
- •Вариант 4. Лабиринт
- •Список использованной литературы
- •Приложение A. Справочник по функциям Delphi
- •Операции с порядковыми типами
- •Математические функции и процедуры
- •Генерация псевдослучайного числа
- •Преобразование типов данных
- •Работа с памятью
- •Приложение Б. Компонент-сетка TStringGrid
- •Приложение В. Компонент-диаграмма TChart
- •Приложение Д. Элементарный поток – класс TThread
14
Оператор with..do
Очень удобный оператор “для лентяев”. Он обеспечивает ускоренный доступ к полям записей или объектов. Каким образом? Допустим, что наша программа использует запись вида:
var MyRecord : record
IntField : integer; StrField : string; SnglFiled : single; BField : boolean;
end;
Не будь в нашем распоряжении with ..do, то при заполнении полей записи мы были бы вынуждены написать следующий код:
MyRecord.IntField:=1;
MyRecord.StrField:=’AAA’;
MyRecord.SnglFiled:=1.567;
MyRecord.BField:=false;
и т.д., повторяя из строки в строку имя владельца поля – MyRecord. А если таких полей несколько десятков? Никчемное и рутинное занятие. Лень, во истину двигатель прогресса. Разработчики Pascal предложили следующую конструкцию:
with <объект> do begin
<действие с полем 1 объекта>
. . .
<действие с полем N объекта> end;
Теперь обращение к полям записи происходит без многократного упоминания имени самой записи. Оператор with..do значительно упрощает наш с Вами непосильный труд программиста.
with MyRecord do begin
IntField:=1;
StrField:='AAA';
SnglFiled:=1.567;
BField:=false;
end;
Встретив конструкцию with..do компилятор понимает, что далее идёт речь только о конкретном объекте (в нашем случае это запись MyRecord) и больше не требует упоминания его имени.
Процедуры и функции
Процедуры и функции ничто иное, как программы в миниатюре. Их структура сильно схожа со структурой полной программы на языке Delphi. Основное назначение процедур и функций – избавление программиста от необходимости многократного повторения одного и того же кода. Такой код выносится в отдельную процедуру или функцию и выполняется по мере необходимости.
При наборе текста исходного кода программисты достаточно часто сталкиваются с необходимостью многократно выполнить одни и те же действия на одном или нескольких этапах обработки данных. При тщательной проверке алгоритмов такого рода легко заметить фрагменты кода, одинаковые по выполняемым действиям и различающиеся только значениями исходных данных. В этом случае повторяющаяся группа операторов оформляется в виде самостоятельной программной единицы – подпрограммы и записывается только один раз, а в соответствующих местах программы обеспечивается лишь обращение к ней.
Процедуры
Процедуры представляет собой набор сгруппированных вместе операторов, используемых под одним именем. Процедура состоит из заголовка и тела процедуры. Заголовок начинается ключевым словом procedure, затем следуют имя процедуры и при необходимости заключённый в круглые скобки список параметров. Также при необходимости объявление процедуры может завершаться специальными директивами. После вызова процедуры последовательно выполняются
15
операторы, заключенные между ключевыми словами begin .. end. Ключевому слову begin могут предшествовать блоки объявления типов, констант и переменных (type, const и var). Объявленные внутри тела процедуры переменные называются локальными, причина такого названия в том, что жизненный цикл такой переменной начинается с вызовом процедуры и заканчивается в момент её завершения. Эти переменные не доступны извне процедуры.
procedure имя_процедуры (параметр_1; …, параметр_N); директивы; <локальные_объявления>
begin
<операторы> end;
Рассмотрим следующий пример. Придуманная нами процедура SquareRectangle() решает следующие задачи:
-вычисляет площадь прямоугольника;
-выводит на экран результат расчета.
Procedure SquareRectangle(X, Y : integer); begin
Square:=X*Y;
WriteLn(Square); end;
Для того, чтобы вызвать эту процедуру из программы необходимо указать имя процедуры и передать ее параметры (соблюдая их последовательность):
SquareRectangle(100, 200);
Функции
Функции, как и процедуры, предназначены для размещения дополнительных блоков внутри основной программы. Единственное отличие функции в том, что она всегда должна возвращать вызвавшей её программе какое-то значение (результат своих действий). Синтаксис определения функции почти аналогичен синтаксису процедуры. Исключение составляет заголовок. Он должен начинаться с ключевого слова function и заканчиваться типом возвращаемого значения.
function имя_процедуры (список_параметров) : тип результата; директивы; <локальные_объявления>
begin
<операторы> end;
В каждой из функций Delphi автоматически создаётся идентификатор Result имеющий тот же тип, что и возвращаемое функцией значение. Этому идентификатору и присваивается возвращаемое функцией значение.
Вспомним предыдущий пример с расчетом площади прямоугольника и представим его в виде функции.
Function SquareRectangle(X,Y : integer):integer;
Begin
Result:=X*Y; end;
Для вызова функции из основной программы также необходимо указать её имя и при необходимости список её параметров.
var Square:integer;
. . .
Square := SquareRectangle(100, 200);
{переменной Square присвоено значение, возвращаемое функцией SquareRectangle}
Вводная часть представляет собой краткий справочник, с помощью которого вы смогли восстановить в памяти основы языка программирования Delphi.
Дальнейший материал представляет собой лабораторные работы к дисциплине “Методы программирования”.