Структурные типы данных 1. 2. 3.

advertisement
Структурные типы данных
1.
2.
3.
4.
5.
Массивы
Строки
Записи
Множества
Файлы
Массивы
• Массив – это конечная именованная
последовательность однотипных величин
• Каждый элемент массива имеет
определённое число указателей – индексов,
обеспечивающих поиск и идентификацию
элементов
• Одномерный массив
0
1
2
…
n
Имя
• Двухмерный массив
0
Имя
0
1
2
…
m
1
2
…
n
Описание массива
1. в разделе описания переменных
• Var a: Array [1..10] Of Real;
• Var b: Array [-5..5, 0..4] Of String;
• Var c: Array [0..9, 0..4, 0..4] Of Char;
2. в разделе описания типов данных
• Type MyArray = Array [1..10] Of Real;
Var a: MyArray;
• Type MyArray2 = Array [-5..5, 0..4] Of String;
Var b: MyArray2;
• Type MyArray3 = Array [0..9, 0..4, 0..4] Of Char;
Var c: MyArray3;
• Доступ к элементу массива осуществляется
путём указания имени массива и индексов в
квадратных скобках:
a [10] := 1.5;
b [0, 2] := 'Pascal';
c [9, 3, 1] := 'P';
Program Massiv1;
Uses CRT;
Var mas: Array [0..9] Of Integer;
i, n: Integer;
Begin
ClrScr;
Randomize;
For i := 0 To 9 Do
Begin
mas [i] := Random (100);
Write (mas [i]: 4);
End;
WriteLn;
n := 0;
For i := 1 To 9 Do If mas [i] > mas [n] Then n := i;
WriteLn (‘n = ’, n+1, ‘ mas [n] = ’, mas [n]);
ReadLn;
End.
Program Massiv2;
Uses CRT;
Var i, j, m : Integer;
mas: Array [0..3, 0..5] Of Integer;
Begin
ClrScr;
Randomize;
For i := 0 To 3 Do
Begin
For j := 0 To 5 Do
Begin
mas [i, j] := Random (200) – 100;
Write (mas [i, j]:5);
End;
WriteLn;
End;
m := mas [0, 0];
For i := 0 To 3 Do
For j := 0 To 5 Do
If mas [i, j] < m Then m := mas [i, j];
WriteLn (‘m = ’, m);
ReadLn;
End.
Строки
• Строковые переменные используются для
хранения последовательности символов и их
можно рассматривать как одномерный
массив символов
• a := ‘Pascal’;
0
a
6
1
P
2
a
3
s
4
c
5
a
6
l
Описание в программе строковых
переменных
• Var a: String [10];
• Var a: String;
Основные операторы, функции и процедуры,
используемые при работе со строками:
a := 'Turbo'; b:='Pascal';
• объединение строк
• c := a + ' ' + b;
'Turbo Pascal'
• копирование
• c := Copy (a, 2, 3);
'urb'
• удаление символов из строки
• Delete (b, 4, 3);
'Pas'
• вставка символов в строку
• Insert (a, b, 4);
'PasTurbocal'
• Определение длины строки
• k := Lenght (a);
5
• Поиск подстроки в строке
• k := Pos ('rb', a);
3
• k := Pos (a, b);
0
• Преобразование числа в строку
• Str (x, c);
• Преобразование строки в число
• Val (c, x, k);
Program A;
Var s: String [25];
k, n: Integer;
Begin
Write ('Vvedite stroku: ');
ReadLn (s);
k := 0;
Repeat
n := Pos ('а', s);
If n <> 0 Then
Begin
k := k+1;
Delete (s, 1, n);
WriteLn (s);
End;
Until n = 0;
WriteLn (' k= ', k);
ReadLn;
End.
Program A2;
Var s: String [25];
k, i: Integer;
Begin
Write ('Vvedite stroku: ');
ReadLn (s);
k := 0;
For i := 1 To Length (s) Do
If s[i] = 'a' Then k := k+1;
WriteLn (' k= ', k);
ReadLn;
End.
Program Change;
Var s, n: String [25];
i: Integer;
Begin
Write ('Vvedite stroku: ');
ReadLn (s);
n := ' ';
For i := 1 To Length (s) Do
Begin
n := n + Copy (s, Length (s) + 1 - i, 1);
WriteLn (n);
End;
ReadLn ;
End.
Записи
• Запись – это совокупность ограниченного числа
логически связанных компонент, принадлежащих к
разным типам
Объявление записи
1. Type Row = Record
FIO: String [20];
TEL: String [14];
End;
Var Str: Row;
2. Var Str: Record
FIO: String [20];
TEL: String [14];
End;
• Обращение к записи в целом допускается
только в операторах присваивания, где слева
и справа от знака присваивания
используются имена записей одинакового
типа
• Имя поля:
Str.FIO
Str.TEL
Обращение к компонентам записей можно
упростить, используя оператор With
с оператором With
With Str Do
Begin
FIO := 'Иванов С.А.';
TEL := '(4752)' + TEL;
End;
Без оператора With
Str.FIO := 'Иванов С.А.';
Str.TEL := '(4752)' + Str.TEL;
В языке Pascal допускается описание записи,
состоящей из общей и вариантной частей:
Множества
• Множества – это ограниченная совокупность
однотипных логических связанных друг с другом
элементов
• В Pascal множества могут включать элементы только
порядковых типов, значения которых не превышает
255
Описание множества
1. В разделе описания типов данных
• Type Smаlletters = Set Of 'a'..'z';
• Type Colors = Set Of (Red, Green, Brue);
• Type Numbers = Set Of Byte;
2. В разделе описания переменных
• Var Figures: Set Of 0..9;
Разница между интервалом и множеством
Интервал
Множество
Var P: 1..3;
Var T: Set Of 1..3;
• 1
• 2
• 3
•
•
•
•
•
•
•
•
[]
[1]
[2]
[3]
[1, 2]
[1, 3]
[2, 3]
[1, 2, 3]
Операции над множествами
Название
Математическое
обозначение
Знак
Тип
результата
Объединение

+
Множество
Дополнение

-
Множество
A
B
Пересечение

*
Множество
A
B
Тождественность
=
=
Логический
Нетождественность
≠
<>
Логический
Надмножество
 ()
>=
Логический
Подмножество
 ()
<=
Логический

in
Логический
Принадлежность
Примечание
A
B
A B
A
х
Program Lotto;
Var nb, k: Set Of 1..36;
kol, l, i, n: Integer;
Begin
Randomize;
Write (' Kolichestvo kartochek:');
ReadLn (kol);
nb := [1..36];
For i := 1 To kol Do
Begin
k := [];
For l := 1 To 5 Do
Begin
Repeat
n := Random (36)
Until (n in nb) AND NOT (n in k);
k := k+[n];
Write (n: 4);
End;
WriteLn;
End;
ReadLn;
End.
Файлы
• Файл - именованная область внешней памяти
компьютера или логическое устройство
• у файла количество элементов в процессе работы
может изменяться
• файл располагается на внешних носителях
информации
• в конце файла располагается специальный символ
конца файла Eof
Файл имеет три характерные особенности
1. имя
2. содержит компоненты только одного типа
3. длина ограничивается только емкостью
устройств внешней памяти
Типы файлов
стандартные
текстовый
нетипизированный
определяемые
программистом
(типизированные
• Для выполнения операций с конкретным файлом в
программе обычно используется файловая
переменная
• Файловая переменная связывается с файлом,
выполняемые с ней операции, приводят к
соответствующим изменениям в файле
Описывание файловых переменных:
• Типизированный
• Текстовый
• Нетипизированный
Доступ к файлам
последовательный
прямой
• очередной элемент
можно прочитать и
записать только после
аналогичной операции с
предыдущим элементом
• чтение и запись
произвольного элемента
выполняется по
заданному адресу
• к текстовым файлам доступ только последовательный
• к типизированным и нетипизированным файлам доступ может
быть как последовательным, так и прямым
Текстовый файл
код символа код символа
…
EOLN
код символа код символа
…
код символа код символа
код символа код символа
…
код символа EOF
EOLN
File Of Integer
целое число целое число целое число
File Of T
байт
…
целое число EOF
T = Record
a: Byte;
b: Char;
c: Integer;
End;
код
символа
целое
число
…
байт
код
символа
целое
число
EOF
• переменная файлового типа - логический файл
• реальное устройство / файл на диске – физический
файл
• для работы с физическим файлом, необходимо
связать файловую переменную с именем этого файла
• 'Myfile.dat' – имя файла в текущем каталоге
• 'D:\Users\Myfile.dat' – полное имя файла
• 'PRN' – имя устройства (принтера)
Инициализация файла
• После того как файл был связан с файловой
переменной, его необходимо открыть для работы
• Режимы инициализации файла
Создание нового файла и
открытие его для записи
Открытие ранее
существующего файла
Открывает ранее
существующего текстового
файл для добавления в него
новых данных
• Rewrite (файл_перемен);
• Reset (файл_перемен);
• Append (файл_перемен);
• По окончании работы файл необходимо закрыть
• Чтение данных из файлов
▫ для типизированных файлов Read
▫ для текстового файла Read и ReadLn
• Запись данных в файлы
▫ для типизированных файлов Write
▫ для текстового файла Write и WriteLn
• определение конца файла
• определение конца строки
Program Neg_pos_file;
Var f1, f2, f3: File Of Integer;
a: Integer;
Begin
Assign (f1, 'data.dat');
Assign (f2, 'pos.dat');
Assign (f3, 'neg.dat');
Reset (f1);
Rewrite (f2);
Rewrite (f3);
While NOT EOF (f1) Do
Begin
Read (f1, a);
If a > 0 Then Write (f2, a);
If a < 0 Then Write (f3, a);
End;
Close (f1);
Close (f2);
Close (f3);
End.
Download