Существует несколько способов объявления двумерного массива Паскаля.
Мы уже умеем описывать одномерные массивы, элементы которых могут иметь любой тип, а, следовательно, и сами элементы могут быть массивами. Рассмотрим следующее описание типов и переменных:
Пример описания двумерного массива Паскаля
Type
Vector = array [1..5] of <тип_элементов>;
Matrix= array [1..10] of vector;
Var m: matrix;
Мы объявили двумерный массив Паскаля m, состоящий из 10 строк, в каждой из которых 5 столбцов. При этом к каждой i -й строке можно обращаться m [ i ], а каждому j -му элементу внутри i -й строки – m [ i, j ].
Определение типов для двумерных массивов Паскаля можно задавать и в одной строке:
Type
Matrix= array [1..5] of array [1..10] of < тип элементов >;
или еще проще:
type
matrix = array [1..5, 1..10] of <тип элементов>;
Обращение к элементам двумерного массива имеет вид: M [ i, j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце
Основные действия с двумерными массивами Паскаля
Все, что было сказано об основных действиях с одномерными массивами, справедливо и для матриц. Единственное действие, которое можно осуществить над однотипными матрицами целиком – это присваивание. Т.е., если в программе у нас описаны две матрицы одного типа, например,
type
matrix= array [1..5, 1..10] of integer;
var
a, b: matrix;
то в ходе выполнения программы можно присвоить матрице a значение матрицы b (a:= b). Все остальные действия выполняются поэлементно, при этом над элементами можно выполнять все допустимые операции, которые определены для типа данных элементов массива. Это означает, что если массив состоит из целых чисел, то над его элементами можно выполнять операции, определенные для целых чисел, если же массив состоит из символов, то к ним применимы операции, определенные для работы с символами.
ПРОЦЕДУРЫ И ФУНКЦИИ
Большую программу можно разделить по функциональному признаку на частии реализовать каждую часть как подпрограмму. Разбивка большой программы на подпрограммы облегчает процесс разработки программы, делает ее структуру более понятной, позволяет работать над одной программой нескольким программистам.
Подпрограмма — это небольшая программа, которая обеспечивает решение некоторой подзадачи (части большой задачи). В языке Pascal существует два типаподпрограмм — функции и процедуры.
Функция
Функция — это подпрограмма. Для того чтобы функция была выполнена, ее надо вызвать — указать имя функции в качестве операнда выражения. Например, стандартная функция sqrt вычисляет квадратный корень числа, указанного в качестве ее параметра. Значение функции связано с ее именем. Поэтому для того, чтобы вычислить значение квадратного корня из числа, находящегося в переменной х, следует записать: у: =sqrt (х).
В общем виде инструкция обращения к функции выглядит так:
Переменная: =Функция (Параметры);
где Переменная — переменная, которой надо присвоить значение, вычисленное функцией; Функция — имя функции; Параметры — список параметров,.которые используются для вычисления значения функции. В качестве параметров обычно используют переменные или выражения.
Примеры использования (вызова) стандартных функций:
у:=Abs(х);
х: = Round(d);
Следует обратить внимание на то, что:
· тип переменной, которой присваивается значение функции, должен соответствовать типу функции (типу значения, которое возвращает функция);
· тип и количество параметров для каждой функции строго определены.
Различают следующие типы функций:
· Стандартные
· Библиотечные
· Программиста
Стандартные функции
Стандартными называют функции, которые доступны "по умолчанию".
Некоторые стандартные функции:
Функция | Тип функции | Значение |
Abs (х) | Тот же, что и тип аргумента | Абсолютное значение x |
Sqrt(х) | real | Квадратный корень х |
Sqr(х) | Тот же, что и тип аргумента | Квадрат х |
Sin(а) | real | Синус угла а (величина угла должна быть указана в радианах) |
Cos(а) | real | Косинус угла а (величина угла должна быть указана в радианах) |
ArcTan(х) | real | Арктангенс х |
Ехр (х) | real | Экспонента х |
Ln (х) | real | Натуральный логарифм х |
Round(х) | integer | Ближайшее к х целое |
Trunc(х) | integer | Целая часть х |
Frac(х) | integer | Дробная часть вещественного х, представленная как целое число |
Int(х) | integer | Целая часть вещественного х, представленная как целое число |
БИБЛИОТЕЧНЫЕ ФУНКЦИИ
Библиотечной называют функцию или процедуру, которая становится доступной в результате подключения к программе библиотеки (модуля), в которой эта функция находится. Например, процедура Textcolor модуля Crt позоляет установить цвет текста. Чтобы библиотечная функция стала доступной, модуль, в котором она находится, надо подключить — добавить в текст программы инструкцию uses, указав в качестве параметра имя модуля.
Функция программиста
Turbo Pascal позволяет программисту объявить свою собственную функцию и в дальнейшем использовать ее точно так же, как и стандартные функции.
Объявление функции
Объявление функции в общем виде выглядит так:
function Имя(Параметры):Тип; var
{ здесь объявления внутренних переменных функции}
Begin
{ здесь инструкции функции} Имя:= Выражение; end;
где:
function — зарезервированное слово языка Turbo Pascal, обозначающее, что далее следуют инструкции, реализующие функцию;
Имя — имя функции;
Параметры — список переменных, которые используются для передачи в функцию информации, необходимой для вычисления значения функции;
Тип — тип значения функции.
Следует обратить внимание, что функция завершается инструкцией, которая присваивает значение идентификатору Имя. Именно эта инструкция определяет значение функции.
Использование функции
Для того чтобы функцию, созданную программистом, можно было использовать, ее (в простейшем случае) следует поместить в текст программы, перед разделом объявления переменных.
Инструкции функции будут выполнены, если в каком-либо из выражений программы в качестве операнда будет указано имя этой функции (переход от инструкций основной процедуры программы к инструкциям функции называется вызовом функции или обращением к функции). Если в объявлении функции указаны параметры (эти параметры называются формальными), то после имени функции также должны быть указаны параметры (эти параметры называются фактическими), причем количество и тип фактических параметров должно соответствовать количеству и типу формальных параметров. В качестве фактических параметров обычно используют переменные или константы, реже — выражения
Операции с файлами
Объявление файла
Файл — это структура данных, представляющая собой последовательность элементов одного типа. Количество элементов файла практически не ограничено.
Как и любая переменная программы, файл должен быть объявлен в разделе объявления переменных. В объявлении файла указывается тип элемент файла. В общем виде объявление файла выглядит так:
Имя: file of ТипЭлементов
Примеры:
f: file of char; { файл символов }
f: file of real; { файл вещественных чисел }
f: file of integer; { файл целых чисел }
Файл, компонентами которого являются символы (char), называется текстовым. Описание file of char можно заменить на text, т. е. объявление f:text эквивалентно объявлению f: file of char.
Назначение файла
Объявление файла (точнее, файловой переменной) задает только тип компонентов: файла. Чтобы программа получила доступ к файлу, необходимо указать имя файла. Имя файла задается путем вызова процедуры assign,инструкция вызова в общем виде выглядит так:
assign (Файл, Имя_Файла);
где Файл— файловая переменная;
Имя_Файла — имя файла, к которому надо получить доступ.
В инструкции вызова процедуры assign рекомендуется указывать полное имя файла (диск, каталог, имя и расширение файла). Необходимо обратить мание, имя файла должно быть указано в соответствии с правилами записи•имен файлов в MS-DOS (можно использовать только буквы латинского алфавита и цифры; количество символов в имени каталога, подкаталога или файла не должно быть больше восьми).
Ниже приведены примеры вызова процедуры assign.
assign(f,'а:\test.txt'); assign(f,'с:\test\spb.txt');
Открытие файла
Чтобы программа могла прочитать данные из файла или записать данные в файл, файл необходимо открыть. В языке Pascal есть несколько инструкций, обеспечивающих открытие файла. Инструкция reset открывает файл для чтения данных, append— для записи в режиме добавления, rewrite — для перезаписи.
Закрытие файла
Перед завершением работы программа должна закрыть все открытые файлы, Делается это вызовом процедуры close. В качестве параметра процедуры close следует указать файловую переменную, связанную с файлом, который надо закрыть.
Пример использования процедуры:
close (f);
Запись в файла
Для того, чтобы программа могла записать данные в файл, файл надо открать для записи.
Возможны следующие варианты открытия файла для записи.
· Перезапись файла осуществляется вызовом процедуры rewrite, указав в качестве параметра файловую переменную.
· Добавление данных в существующий файл. Если переменная f является файловой, то в результате выполнения инструкции write(f, x); в файл, связанный с переменной f будет записано значение переменнойx.
ГРАФИЧЕСКИЕ ПРИМИТИВЫ
Любая картинка, чертеж, схема могут рассматриваться как совокупность графических примитивов: точек, линий, прямоугольников, окружностей, дуг и др. Чтобы на экране появилась нужная картинка, программа должна нарисовать графические примитивы, составляющие эту картинку.
GDI расшифровывается как Graphics Device Interface, и представляет собой интерфейс, который Windows использует для рисования 2D графики
Все графические функции в Delphi являются надстройками над стандартными GDI функциями Windows..
Ниже, в таблице, представлены некоторые важные классы GDI:
Имя | Описание |
Pen | Используется для рисования простых линий. Обычно применяется для функции LineTo или при рисовании рамки для определённой фигуры (например для функции Rectangle). |
Brush | Кисть используется для заполнения области определённым цветом. Применяется в функциях Rectangle, FillRect или FloodFill. |
Font | Используется для задания шрифта, которым будет нарисован текст. Можно указать имя шрифта, размер и т.д. |
Region | Позволяет задать регион (замкнутое пространство). Регионом может быть круг, квадрат или произвольная фигура. Позволяет так же делать дырки в фигурах. |
Рисование линий
Сперва необходимо чётко уяснить, что координата (0,0) это верхний левый угол экрана. То есть значения по оси y увеличиваются вниз экрана. Соответственно, координата (0, 50) означает, что мы просто отступили на 50 пикселей от верха экрана.
Самое главное, что надо знать при рисовании линий и фигур, это различие между пером (Pen) и кистью (Brush). Всё очень просто: перо (Pen) используется при рисовании линий или рамок, а кисть (Brush) для заполнения фигуры.
Ниже приведены две функции, которые используются для рисования линий и обе принадлежат TCanvas:
Имя | Описание | Пример |
MoveTo | Перемещает точку начала рисования линии в указанные координаты x и y | Canvas.MoveTo(50, 100); |
LineTo | Рисует линию начиная с текущей позиции (см. MoveTo) до указанных координат x и y. | Canvas.LineTo(50, 100); |
Эффект перемещения точки начала рисования линии так же достигается при помощи установки своства PenPos в канвасе... например, "Canvas.PenPos.x:= 20;", "Canvas.PenPos.y:= 50", или "Canvas.PenPos:= Point(20,50);".
По умолчанию, точка начала рисования установлена в (0,0), то есть, если сразу вызвать "Canvas.LineTo(100,100);" то будет нарисована линия из точки (0,0) в точку (100, 100). Точка начала рисования автоматически переместится в (100, 100), то есть, если выполнить команду "Canvas.LineTo(200, 100);", то следующая линия будет нарисована из точки (100, 100) в (200, 100). Поэтому, если мы хотим рисовать линии несоединённые друг с другом, то придётся воспользоваться методом MoveTo.