Структурные типы данных 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.