![](/user_photo/2706_HbeT2.jpg)
- •Содержание
- •Рекомендации к проведению лабораторных работ
- •Комментарии в тексте программы
- •Компиляция и запуск программы на выполнение
- •Переменные и константы
- •Операторы и выражения
- •Оператор присваивания
- •Арифметические операции
- •Логические операции
- •Составной оператор 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
![](/html/2706/363/html_6nPrlBqXsZ.l5CD/htmlconvd-KP4AzT14x1.jpg)
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, затем следуют имя процедуры и при необходимости заключённый в круглые скобки список параметров. Также при необходимости объявление процедуры может завершаться специальными директивами. После вызова процедуры последовательно выполняются
![](/html/2706/363/html_6nPrlBqXsZ.l5CD/htmlconvd-KP4AzT15x1.jpg)
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.
Дальнейший материал представляет собой лабораторные работы к дисциплине “Методы программирования”.