
*
+, -
=,<,>,in,<=,>=
Перечислимые и ограниченные типы данных
Перечислимый тип данных задается списком констант, которые могут принимать переменные этого типа. Каждый объект имеет свое имя.
Числа, логические и символьные константы не могут являться объектами перечислимого типа данных.
Применение перечислимого типа данных повышает наглядность программы и дает возможность автоматически контролировать допустимость значений переменных. Перечислимый тип задается в виде перечисления в строго определенном порядке и количестве всех значений, которые могут принимать данные.
Каждая константа имеет свой порядковый номер, счет начинается с 0.
Операции:
Pred -переход на пред. элемент
Succ - переход на следующий элемент
Ord - порядок элемента
Вводить и выводить на внешние устройства значение перечислимых типов недопустимо.
Ограниченный тип данных:
Множество значений стандартных, скалярных типов данных и перечисление скалярных типов упорядоченно и конечно. Если необходимо сузить диапазон значений, то осуществляется наложение ограничений на перечислимый скалярный или стандартный называемый базовым.
Массивы
Массив – структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип.
Доступ к каждому элементу массива осуществляется путем индексирования элементов массива. Нумерация элементов начинается с 1.
Существует 2 вида массивов:
Одномерные
Заполнение массива:
var
s:array [0..4] of integer;
Begin
Randomize;
For i:=0 to 4 do
Begin
S[i]:=random(100)-50;
Memo1.lines.add(inttostr(s[i]));
End;
Первое вхождение заданного элемента в массиве:
var
s:array [0..4] of integer;
Begin
For i:=0 to 4 do
If s[i]=p then
Begin
K:=I;
Break;
End;
Включение элементов в заданную позицию массива:
var
s:array [0..4] of integer;
k:integer;
Begin
K:=2;
For i:=4 downto (k-1) do
Begin
S[i+1]:=s[i];//все элементы начиная с k сдвигаем вправо
S[k]:=10;
End;
Исключение элемента из массива:
var
s:array [0..n] of integer;
k:integer;
Begin
K:=2;
For i:=k to (n-1) do
Begin
S[i]:=s[i+1];//все элементы начиная с k сдвигаем влево
S[k]:=0;
End;
Сортировка элементов:
Метод пузырька
Первый элемент массива сравнивается с последовательно со всеми оставшимися элементами. Если очередной элемент меньше чем первый, то эти элементы переставляются местами. Сравнение продолжается до тех пор, пока не сравним каждый элемент друг с другом.
For i:=1 to (n-1) do
For j:=j+1 to n do
If a[i]>a[j] then
Begin
P:=a[i];
A[i]:=a[j];
A[j]:=p;
End;
Метод простого выбора
На первое место становится самый минимальный элемент. На второе минимальный из всех оставшихся и так до предпоследнего элемента.
For i:=1 to (n-1) do
Begin
Min:=a[i];
Nmin:=I;
For j:=i+1 to n do
If min>a[j] then
Begin
min:=a[j];
nmin:=j;
End;
P:=a[i];
A[i]:=min;
A[nmin]:=p;
End;
Метод вставки
Второй элемент массива переставляется в порядке возрастания с первым элементом массива. Третий элемент вставляется в уже отсортированную часть массива а1, а2, не нарушая упорядоченности. Повторяем действия до последнего элемента массива.
For I:=2 to 5 do
Begin
M:=A[i];
J:=1;
While m>a[j] do
Begin
Inc(j);
End;
For k:=(i-1) down to j do A[k+1]:=a[k];
A[j]:=m;
End;
Двумерные
I - строка
J – столбец
Заполнение массива:
var
s:array [1..3,1..3] of integer;
I,j:integer;
Begin
Randomize;
For i:=1 to 3 do
For j:=1 to 3 do
Begin
S[I,j]:=random(100)-50;
Memo1.lines.add(inttostr(s[I,j]));
End;
Суммирование элементов каждой строки:
var
a:array [1..3,1..3] of integer;
I,j:integer;
Sum: array [1..3] of integer;
Begin
For i:=1 to n do
Sum [i]:=0;
For i:=1 to 3 do
For j;=1 to 3 do
Sum [j]:=sum[i]+a[I,j];//для суммы столбцов Sum [j]:=sum[i]+a[j,i]
End;
Максимальный элемент каждой строки:
var
a:array [1..3,1..3] of integer;
I,j:integer;
max: array [1..3] of integer;
Begin
For i:=1 to n do
Begin
Max[i]:=a[I,1];
For j:=2 to 3 do
If a[I,j]>max[i] then max[i]:=a[I,j];
End;
Перестановка i-той и j-той строк матрицы
var
a:array [1..3,1..3] of integer;
I,j:integer;
Begin
K:=1;
M:=2;
For j:=1 to 3 do
Begin
P:=a[k,j];
A[k,j]:=a[m,j];
A[m,j]:=p;
End;
С использованием вспомогательного массива
Вначале все элементы 1 строки сохраняются в массиве, потом их заменяют на элементы 2 строки, а элементы 2 строки заменяют на вспомогательный массив.
Begin
K:=1;
M:=2;
For j:=1 to 3 do
C[j]:=a[k,j];
For j:=1 to 3 do
a[k,j]:=a[m,j];
For j:=1 to 3 do
a[m,j] := C[j] ;
end;
Включение k-той строки в матрицу
Все строки начиная с k-той сдвинуть на одну строку назад (начать с последней и идти до k). Далее элементам k-той строки присвоить значение вектора с (одномерный массив).
Const
n=10;
Var
A:array [1..n,1..n] of integer;
I,j:integer;
Begin
K:=2;
For i:=3 downto k do
For j:=1 to 3 do
A[i+1,j]:=a[I,j];
For j:=1 to 3 do
A[k,j]:=c[j];
End;
Удаление k-той строки из матрицы
Все строки начиная с позиции k+1 необходимо переместить вверх на 1 строку.
Begin
K:=1;
For i:=k to (n-1) do //от k-той строки до количества строк-1
For j:=1 to n do
A[I,j]:=a[i+1,j];
End;
Для сортировки двумерного массива нужно добавить еще один цикл, позволяющий перебирать строки или столбцы.
Файлы
Файл – поименованная область на диске, содержащая логически связанную совокупность данных.
Типы:
Текстовые
Совокупность строк переменной длины.
Переменная длина строк определяется наличием маркеров, обозначающих конец строки.
Определение конца строки:
EOLn(<файловая переменная>);
Для записи в файл используются write и writeln.
Чтение производится read и readln. По оператору read из файла выбирается столько символов, сколько указанно в текущем string, принадлежащем списку вывода.
По оператору readln из файла последовательно считываются строки и присваиваются string из списка. Если выбранная строка больше чем длина string, то она обрезается до его длины
Типизированные
Все компоненты файла должны быть одного типа.
Чтение компоненты через read. Запись – write.
Чтение компонент типизированного файла можно осуществлять, как последовательно, так и прямым методом доступа.
Последовательный доступ – доступ возможен путем перебора все предыдущих.
Прямой доступ – доступ сразу к указанному компоненту.
Процедуры:
Seek (<файловая переменная>, номер компоненты); - прямой доступ
Seek (<файловая переменная>,+1) – переход на следующую запись
Seek(<файловая переменная>,-1) – переход на предыдущую запись
Filepos (<файловая переменная>) – определить номер текущей компоненты
Rename (<файловая переменная>,’новое имя’)-переименование файла
Filesize(<файловая переменная>) – размер файла
Erase(<файловая переменная>) – удаление файла
Не типизированные
Объявление:
Var
<файловая переменная>:textfile;
<файловая переменная>:file of <тип>; //в качестве типа могут быть базовый тип и структурный тип – запись.
<файловая переменная>:file;
Доступ к файлу:
Необходимо привести в соответствие файловую переменную и файл. Это производится при помощи процедуры:
Assignfile(<файловая переменная>,’путь к файлу’);
Если путь не указан, то запись или считывание осуществляется в текущем директории.
Инициализация и завершение работы с файлом:
Прежде чем начать работу с файлом необходимо выполнить операции по работе с устройством на котором хранится или будет храниться файл:
При создании необходимо выделить область памяти на устройстве и запомнить имя файла и адрес заданной области.
При работе с уже существующим файлом необходимо по имени файла найти области памяти этого файла и установить указатель устройства на начало файла.
Инициализация происходит при помощи команд:
Reset (<файловая переменная>); //открытие существующего файла
Rewrite (<файловая переменная>); //создание или перезапись файла
Append (<файловая переменная>); //открытие файла для записи в конец
После работы с файлом его необходимо закрыть. При закрытии ОС подсчитывает размер файла и запоминает его.
Закрытие осуществляется при помощи процедуры:
Closefile (<файловая переменная>);
Конец файла определяется при помощи процедуры:
Eof (<файловая переменная>);
Обработка файла:
While not (eof (<файловая переменная>)) do
Begin
…
End;
Считывание данных из файла и запись их в файл:
Read (<файловая переменная>, <список вывода>);//считывает строку и оставляет указатель в конце строки
Readln (<файловая переменная>,<список вывода>);//считывает строку и оставляет указатель на следующей строке
Write (<файловая переменная>, <строка>, ‘разделитель’);//запись в файл подряд
Writeln (<файловая переменная>, <строка>) //запись в файл с новой строки
Записи
Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих разным типам.
Компоненты записи называются полями, каждая из которых определяется именем.
Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля.
Объявление:
Type
Student=record; //имя записи
Fio=string[30];
Group=string[5];
End;
Var
S:student;
S2:array [1..100] of student;
F:file of student;
Доступ:
s.Fio:=’Иванов’;