
Лекция 26.pptx
- Количество слайдов: 32
Лекция 26 Тема № 6 АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ Структурированные типы данных: массивы, записи, множества.
СТРУКТУРИРОВАННЫЕ типы данных (Массивы, Строки, Записи, Файлы, Множества) Массивы представляют собой ограниченную упорядоченную совокупность однотипных величин, снабженных индексами. Type Arr = Array [1. . 3] of Real; {тип массив из 3 вещественных чисел} Мatrix = Array [1. . 3, 1. . 2] of Integer; {тип двумерный массив из 3 строк и 2 столбцов} Var Matr: Matrix; M 1, M 2: Array [1. . 6] of Real; Const M 3: Arr = (2, 4, 8); M 4: Matrix = ((1, 2), (3, 4), (5, 6)); Begin x : = M 3(2); y : = M 4(2, 1); ……… End.
Имя типа = ARRAY [ диапазоны индексов ] OF тип элемента массива; ПРИМЕР: Три способа описания одного и того же типа массива: type {1} M 1 = array [0. . 5] of integer; M 2 = array [char] of M 1; M 3 = array [-2. . 2] of M 2; {2} M 3 = array [-2. . 2] of array [char] of array [0. . 5] of integer; {3} M 3 = array [-2. . 2, char, 0. . 5] of integer; var A: M 3; {Обращаться к элементам массива можно следующим образом: } read(A[-1, 'a', 3]); read(A[1]['x'][0]); A[1]['c', 1]: =100;
Заполнение массива var a: array[1. . 100] of byte; kol: byte; BEGIN writeln('vvedite kolichestvo'); readln(kol); writeln('vvedite elementi'); for i: =1 to kol do readln(a[i]); …. End.
Заполнение массива случайными числами var a: array[1. . 100] of byte; kol: byte; BEGIN writeln('vvedite kolichestvo'); readln(kol); writeln('vvedite elementi'); for i: =1 to kol do a[i]: =random(100); … END.
Вывод массива Type mas=array [-5. . 5] of char; Var a: mas; i: byte; begin writeln('elementi '); for i: =1 to 11 do write(a[i]: 4); … End.
многомерные массивы- массивы, элементами которых являются массивы. Var a: array [1. . 5] of array [1. . 3] of integer; Var a: array [1. . 5, 1. . 3] of integer; графический образ I j 1 2 3 4 5 1 9 20 33 39 70 2 5 44 12 23 2 3 14 89 77 90 75 A[1, 1]=9 А[3, 2]=12
В памяти [1, 1] [1, 2] [1, 3] [2, 1] [2, 3] [2, 4] 9 5 14 20 44 89 …. Для хранения элементов массива отводятся рядом стоящие ячейки памяти.
Доступ к элементам многомерного массива a 2[4, 2] или a 2[4][2] type TMy = array[1. . 10, char, 1. . 20] of Real; Var C: TMy; Begin c[1, ‘A’, 10]: =1. 5;
Ввод многомерного массива Type mas=array[1. . 10, 1. . 4] of byte; var a: mas; i, j: Integer; … writeln('vvedite elementi'); for i: =1 to 10 do for j: =1 to 4 do readln(a[i, j]);
Вывод многомерного массива Type mas=array[1. . 10, 1. . 4] of byte; var a: mas; n, m: byte; … Writeln(’vvedite razmer’); for i: =1 to n do Readln(n, m); writeln('elementi'); begin for j: =1 to m do for i: =1 to n do write(a[i, j], ‘ ‘); for j: =1 to m do writeln; write(a[i, j], ‘ ‘); end; …
Операции с массивами Для массивов одного типа определена операция присваивания. Например: Var a, b: array [1. . 4] of char; То в результате присваивания a: =b; Значения элементов массива b присвоятся соответствующим элементам массива А. Для любого массива F определены следующие функции: Length(F) – число элементов массива High (F)- Наибольшее значение индекса Low(F)-Наименьшее значение индекса
процедура Fill. Char: Fill. Char( var V; NBytes: Word; B: Byte ); Эта процедура заполняет участок памяти однобайтовым значением. Например, для обнуления массива A[1. . 10] of Real можно записать: Fill. Char(A, 80, 0);
Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов, называемых полями Описание записи type имя_типа = record описание 1 -го поля записи; описание 2 -го поля записи; . . . описание n-го поля записи; end; Обычно запись содержит совокупность разнотипных атрибутов, относящихся к одному объекту.
Пример описания записи Type Car = Record Number : Integer; Marka : String[20]; FIO : String[40]; Address : String[60]; End; Var M, V : Car; {объявление записи из 4 -х полей} {номер} {марка} {фамилия и инициалы владельца} {адрес владельца} {окончание описания записи} {объявление переменных типа- запись} Обращение к записи Для организации доступа к отдельным компонентам записи используется СОСТАВНОЕ ИМЯ, которое имеет следующую структуру: <имя переменной>. <имя поля> Например: M. Number, M. marka, M. Number : =1678; M. Marka : =’ГАЗ-24’;
v. Поля записи могут иметь любой тип, в частности, сами могут быть записями. В программе могут использоваться массивы записей. Например: Type info = record Fio : string[50]; pol : char; kurs: 1. . 5; stip: real; end; var grupa_stud: array [1. . 30] of info; Чаще всего записи используются как элементы файлов.
Для вложенных полей : type Birth. Day = record Day, Month: Byte; Year : Word; end; var с: record Name : String; Bd : Birth. Day; end; begin if c. Bd. Year = 1989 then. . . end.
Обработка записей: Любая обработка записей (в том числе ввод и вывод) производится путем обращения к отдельным полям. Например: write(‘Введите ФИО: ’); readln(student. fio); write(‘Введите пол: ’); readln(student. pol); write(‘Введите адрес: ’); readln(student. adres); и т. д. для всех полей записи.
Оператор присоединения With <переменная типа запись> do <оператор>; Например: with student do begin write(‘Введите ФИО: ’); readln(fio); write(‘Введите пол: ’); readln(pol); write(‘Введите адрес: ’); readln(adres); . . . end;
Пример вариантной записи 22 type figure = (rect, triangle, circle); shape = record x, y : real; case kind : figure of rect : (height, width : real); triangle : (x 2, y 2, x 3, y 3 : real); circle : (radius : real); end;
ТИП-МНОЖЕСТВО – это множество всевозможных сочетаний объектов исходного множества. Для построения конкретного множественного типа используется перечисляемый или интервальный тип данных. Тип элементов, составляющих множество, называется базовым типом. Type M= Set of 'A‘. . 'D'; С= set of (PL, MIN, MULT, DIV); Var MS: M; Index: set of ‘ 0’. . ‘ 9’; Const Oper : C = [PL, DIV]; Num : set of 0. . 9 = [0. . 9] • Элементы множества не пронумерованы, не упорядочены. • Действия можно выполнять только над множеством в целом. • Множество может содержать от 0 до 255 элементов.
К переменным и константам множественного типа применимы операции присваивания(: =), объединения(+), пересечения(*) и вычитания(-): ['A', 'B'] + ['A', 'D'] даст ['A', 'B', 'D'] ['A'] * ['A', 'B', 'C'] даст ['A'] ['A', 'B', 'C'] - ['A', 'B'] даст ['C']. Операции с множествами Знак Название : = присваивание + объединение * пересечение - вычитание = тождественность <> нетождественность <= содержится в >= содержит in принадлежность
v. Конкретные элементы множества задаются в виде списка элементов множества, заключенных в [ ]. vпример: v. S 1: = [1, 2, 7]; v. S 2: = [0. . 3, 6]; v. S 3: = ['2', '9', 'a'. . 'f']; v. S 4: =[]; - пустое множество v. Порядок записи элементов множества не имеет значения. [1, 2, 3]=[3, 1, 2] v. Каждый элемент в множестве учитывается только один раз. [1, 1, 1, 2, 2, 3, 2. . 4] = [1, 2, 3, 4] Ø Нельзя вводить и выводить значения переменных множественного типа с помощью операторов ввода-вывода. Ø Множественная переменная может получить конкретное значение только в результате выполнения оператора : =. пример: a: =[]; b: =[‘a’, ’c’, ’b’]; b: =a;
Операции над множествами Объединение множеств. Знак операции объединения - ’+’ [ 1, 2, 3] + [3. . 5] = [1, 2, 3, 4, 5]
Пересечение множеств Знак операции пересечения - ’*’ [ 1, 2, 3, 4, 5] * [1, 5, 7, 9] =[1, 5] [1, 2, 3] * [ 5, 6] = [ ]
Разность множеств Знак операции - ’-’ [ 1, 2, 3, 4]-[ 3, 4, 5, 6]=[1, 2] [1. . 5] - [4, 1. . 3, 6, 7, 5] = [ ]
Операции отношения A=B, когда множества А и В совпадают A<>B, множества А и В не совпадают A<=B, все элементы А принадлежат В A>=B, все элементы В принадлежат А
Операция вхождения: x in M x- величина, тип которой совпадает с базовым типом множества М-множество пример Пусть М= [2, 4, 5, 7] и x=6, y=5; 4 in M = true x in M = false y in M = true
Вывод элементов множества Осуществляется перебором и проверкой на вхождение всевозможных значений элементов множества Пример Var s: set of byte; i: byte; Begin … For i: =0 to 255 do If i in s then write(i, ‘ ‘);
Добавление элемента в множество var a: set of byte; c: byte; readln(c); a: =a+[c]; a: =a+[4] For i: =1 to 5 do a: =a+[i]; For i: =1 to 5 do a: =a+[random(256)]; Пустое множество [ ] A: =[ ]
Вывод множества В цикле перебираются все возможные значения, которые могут принимать элементы множества и проверяют, если встретили такое, которое есть в множестве, то его выводят на экран. Var a: set of byte; c: set of ‘a’. . ’z’; Begin … For i: =0 to 255 do For e: =‘a’ to ‘z’ do if i in a then writeln(i); if e in c then writeln(е); … End.