370 likes | 633 Views
Структурные типы данных. Массивы Строки Записи Множества Файлы. Массивы. Массив – это конечная именованная последовательность однотипных величин Каждый элемент массива имеет определённое число указателей – индексов, обеспечивающих поиск и идентификацию элементов. Одномерный массив
E N D
Структурные типы данных Массивы Строки Записи Множества Файлы
Массивы • Массив – это конечная именованная последовательность однотипных величин • Каждый элемент массива имеет определённое число указателей – индексов, обеспечивающих поиск и идентификацию элементов
Одномерный массив • Двухмерный массив
Описание массива • в разделе описания переменных VarИмя : Array [нижний_индекс .. верхний_индекс] Of тип_данных; • 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;
в разделе описания типов данных Type Имя = Array [нижний_индекс .. верхний_индекс] Of тип_данных; • 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';
ProgramMassiv1; Uses CRT; Varmas: Array[0..9] Of Integer; i, n: Integer; Begin ClrScr; Randomize; Fori := 0To9Do Begin mas [i] := Random (100); Write (mas [i]: 4); End; WriteLn; n := 0; Fori := 1To9DoIfmas [i] > mas [n] Then n := i; WriteLn(‘n = ’, n+1, ‘ mas[n] = ’, mas [n]); ReadLn; End.
Program Massiv2; Uses CRT; Vari, j, m : Integer; mas: Array [0..3, 0..5] Of Integer; Begin ClrScr; Randomize; Fori := 0To 3 Do Begin For j := 0To 5 Do Begin mas [i, j] := Random (200) – 100; Write (mas [i, j]:5); End; WriteLn; End; m := mas [0, 0]; Fori := 0To 3 Do For j := 0To 5 Do Ifmas [i, j] < m Then m := mas [i, j]; WriteLn(‘m = ’, m); ReadLn; End.
Строки • Строковые переменные используются для хранения последовательности символов и их можно рассматривать как одномерный массив символов • a := ‘Pascal’;
Описание в программе строковых переменных • Var a: String [10]; • Var a: String;
Основные операторы, функции и процедуры, используемые при работе состроками: • объединение строк c := a + ' ' + b; • копирование Copy (строка, номер_символа, количество_символов); • удаление символов из строки Delete (строка, номер_символа, количество_символов); • вставка символов в строку Insert (подстрока, строка, номер_символа); 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'
Определение длины строки Length (строка); • Поиск подстроки в строке Pos (подстрока, строка); • Преобразование числа в строку Str(число: длина: после_запятой, строка); • Преобразование строки в число Val (строка, число, код_преображения); • k := Lenght(a); 5 • k := Pos ('rb', a); 3 • k := Pos (a, b); 0 • Str(x, c); • Val (c, x, k);
Program A; Vars: String [25]; k, n: Integer; Begin Write ('Vveditestroku: '); 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; Vars: String [25]; k, i: Integer; Begin Write ('Vveditestroku: '); 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; Vars, n: String [25]; i: Integer; Begin Write ('Vveditestroku: '); ReadLn (s); n := ' '; Fori := 1 ToLength (s) Do Begin n := n + Copy (s, Length (s) + 1 - i, 1); WriteLn(n); End; ReadLn ; End.
Записи • Запись – это совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам Record Поле_1: тип; Поле_2: тип; … поле_N: тип; End;
Объявление записи • Type Row = Record FIO: String [20]; TEL: String [14]; End; VarStr: Row; • VarStr: Record FIO: String [20]; TEL: String [14]; End;
Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа • Имя поля: Str.FIO Str.TEL
Обращение к компонентам записей можно упростить, используя оператор With с оператором With Без оператора With WithStrDo Begin FIO := 'Иванов С.А.'; TEL := '(4752)' + TEL; End; Str.FIO := 'Иванов С.А.'; Str.TEL := '(4752)' + Str.TEL;
В языке Pascal допускается описание записи, состоящей из общей и вариантной частей: Record Поле_1: тип; Поле_2: тип; … Case ключ: тип Of Вариант_1: (поля); Вариант_2: (поля); … вариант_N : (поля); End;
Множества • Множества – это ограниченная совокупность однотипных логических связанных друг с другом элементов • В Pascal множества могут включать элементы только порядковых типов, значения которых не превышает 255
Описание множества имя = SetOfтип_данных; • В разделе описания типов данных • TypeSmаlletters = SetOf 'a'..'z'; • Type Colors = SetOf (Red, Green, Brue); • Type Numbers = SetOf Byte; • В разделе описания переменных • VarFigures: SetOf 0..9;
Разница между интервалом и множеством Интервал Множество Var P: 1..3; • 1 • 2 • 3 VarT: SetOf 1..3; • [ ] • [1] • [2] • [3] • [1, 2] • [1, 3] • [2, 3] • [1, 2, 3]
A A A B A B B х Операции над множествами A B
Program Lotto; Varnb, k: Set Of 1..36; kol, l, i, n: Integer; Begin Randomize; Write(' Kolichestvokartochek:'); ReadLn(kol); nb:= [1..36]; Fori:= 1 TokolDo Begin k := []; For l := 1 To5 Do Begin Repeat n := Random (36) Until (n in nb) ANDNOT (n in k); k := k+[n]; Write (n: 4); End; WriteLn; End; ReadLn; End.
Файлы • Файл - именованная область внешней памяти компьютера или логическое устройство • у файла количество элементов в процессе работы может изменяться • файл располагается на внешних носителях информации • в конце файла располагается специальный символ конца файла Eof
Файл имеет три характерные особенности • имя • содержит компоненты только одного типа • длина ограничивается только емкостью устройств внешней памяти
Для выполнения операций с конкретным файлом в программе обычно используется файловая переменная • Файловая переменная связывается с файлом, выполняемые с ней операции, приводят к соответствующим изменениям в файле
Описывание файловых переменных: • Типизированный Varимя: File Of тип; • Текстовый Var имя: Text; • Нетипизированный Var имя: File;
Доступ к файлам • к текстовым файлам доступ только последовательный • к типизированным и нетипизированным файлам доступ может быть как последовательным, так и прямым
переменная файлового типа - логический файл • реальное устройство / файл на диске – физический файл • для работы с физическим файлом, необходимо связать файловую переменную с именем этого файла Assign (файловая_переменная, имя_файла); • 'Myfile.dat' – имя файла в текущем каталоге • 'D:\Users\Myfile.dat' – полное имя файла • 'PRN' – имя устройства (принтера)
Инициализация файла • После того как файл был связан с файловой переменной, его необходимо открыть для работы • Режимы инициализации файла
По окончании работы файл необходимо закрыть Close (файловая_перемененная); • Чтение данных из файлов • для типизированных файлов Read • для текстового файла Read и ReadLn Read (файловая_переменная, список_ввода);
Запись данных в файлы • для типизированных файлов Write • для текстового файла Write и WriteLn Write (файловая_переменная, список_вывода); • определение конца файла Eof(файловая_переменная); • определение конца строки Eoln(файловая_переменная);
ProgramNeg_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.