Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ekzamen_po_op.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
68.6 Кб
Скачать
  1. *

  2. +, -

  3. =,<,>,in,<=,>=

  4. Перечислимые и ограниченные типы данных

Перечислимый тип данных задается списком констант, которые могут принимать переменные этого типа. Каждый объект имеет свое имя.

Числа, логические и символьные константы не могут являться объектами перечислимого типа данных.

Применение перечислимого типа данных повышает наглядность программы и дает возможность автоматически контролировать допустимость значений переменных. Перечислимый тип задается в виде перечисления в строго определенном порядке и количестве всех значений, которые могут принимать данные.

Каждая константа имеет свой порядковый номер, счет начинается с 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;

Сортировка элементов:

  1. Метод пузырька

Первый элемент массива сравнивается с последовательно со всеми оставшимися элементами. Если очередной элемент меньше чем первый, то эти элементы переставляются местами. Сравнение продолжается до тех пор, пока не сравним каждый элемент друг с другом.

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;

  1. Метод простого выбора

На первое место становится самый минимальный элемент. На второе минимальный из всех оставшихся и так до предпоследнего элемента.

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. Метод вставки

Второй элемент массива переставляется в порядке возрастания с первым элементом массива. Третий элемент вставляется в уже отсортированную часть массива а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-той строк матрицы

  1. 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. С использованием вспомогательного массива

Вначале все элементы 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;

Для сортировки двумерного массива нужно добавить еще один цикл, позволяющий перебирать строки или столбцы.

  • Файлы

Файл – поименованная область на диске, содержащая логически связанную совокупность данных.

Типы:

  1. Текстовые

Совокупность строк переменной длины.

Переменная длина строк определяется наличием маркеров, обозначающих конец строки.

Определение конца строки:

EOLn(<файловая переменная>);

Для записи в файл используются write и writeln.

Чтение производится read и readln. По оператору read из файла выбирается столько символов, сколько указанно в текущем string, принадлежащем списку вывода.

По оператору readln из файла последовательно считываются строки и присваиваются string из списка. Если выбранная строка больше чем длина string, то она обрезается до его длины

  1. Типизированные

Все компоненты файла должны быть одного типа.

Чтение компоненты через read. Записьwrite.

Чтение компонент типизированного файла можно осуществлять, как последовательно, так и прямым методом доступа.

Последовательный доступ – доступ возможен путем перебора все предыдущих.

Прямой доступ – доступ сразу к указанному компоненту.

Процедуры:

Seek (<файловая переменная>, номер компоненты); - прямой доступ

Seek (<файловая переменная>,+1) – переход на следующую запись

Seek(<файловая переменная>,-1) – переход на предыдущую запись

Filepos (<файловая переменная>) – определить номер текущей компоненты

Rename (<файловая переменная>,’новое имя’)-переименование файла

Filesize(<файловая переменная>) – размер файла

Erase(<файловая переменная>) – удаление файла

  1. Не типизированные

Объявление:

Var

<файловая переменная>:textfile;

<файловая переменная>:file of <тип>; //в качестве типа могут быть базовый тип и структурный тип – запись.

<файловая переменная>:file;

Доступ к файлу:

Необходимо привести в соответствие файловую переменную и файл. Это производится при помощи процедуры:

Assignfile(<файловая переменная>,’путь к файлу’);

Если путь не указан, то запись или считывание осуществляется в текущем директории.

Инициализация и завершение работы с файлом:

Прежде чем начать работу с файлом необходимо выполнить операции по работе с устройством на котором хранится или будет храниться файл:

  1. При создании необходимо выделить область памяти на устройстве и запомнить имя файла и адрес заданной области.

  2. При работе с уже существующим файлом необходимо по имени файла найти области памяти этого файла и установить указатель устройства на начало файла.

Инициализация происходит при помощи команд:

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:=’Иванов’;

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]