Lektsia7(работа с записями, пользовательский тип данных).pptx
- Количество слайдов: 17
Работа с пользовательскими типами данных. Организация работы с записями. Лекция 7
Month=(Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec); Перечисляемый Простой Day=1. . 31; Интервальный Пользовательский тип Запись Структурированный Множество
Адресная книга Const Max_records=50 Type data. Field=array[1. . Max_records] of string; Var first_name, last_name, city, street : data. Field; Fist_name[i]: =‘Иванов’; Last_name[i]: =‘Иван’; City[i]: =‘Киров’; Street[i]: =‘Московская’;
Запись - это структурированный тип, состоящий из фиксированного числа компонент (полей) разного типа
Описание записи Type Data= record god: 1993. . 1995; mouth: byte; day: 1. . 31; End; address=record city, street: string [30]; house, num: integer; End; Stud= record FIO : string[40]; Pol: boolean; Birsday: data; Addr : address: Group: string[5]; End;
Дан массив записей со следующей структурой: - шифр группы; - номер зачетной книжки; - код дисциплины; - оценка. Требуется определить средний балл студентов группы AI 007. При вводе массива последняя запись имеет шифр группы « 99999» . Program srball; type zap=record shg: string[5]; nzk: integer; kd: 1. . 100; oc: 2. . 5 end; var mas: array[1. . 100] of zap; k, n, i: byte; sum: real; begin i: =0; repeat inc(i); readln (mas[i]. shg, mas[i]. nzk, mas[i]. kd, mas[i]. oc) until mas[i]. shg='99999'; n: =i; sum: =0; k: =0; for i: =1 to n do if mas[i]. shg='AI 007' then begin sum: =sum+mas[i]. oc; inc(k) end; if k<>0 then sum: =sum/k; writeln ('Средний балл в группе AI 007=', sum) End.
Оператор присоединения WITH i: =0; repeat i: =i+1; WITH MAS[I] DO readln(shg, nzk, kd, oc) until mas[i]. shg='99999'; n: =i; sum: =0; k: =0; for i: =1 to n do WITH MAS[I] DO if shg=' AI 007' then begin sum: =sum+oc; k: =k+1; end;
Запись с вариантами type Forma = record Name: string; case byte of 0: (Birthplace: string [40]); 1: (Country: string [20]; Entry. Port: string [20]; Entry. Date: 1. . 31; Exit. Date: 1. . 31) end; mem 4= record case byte of 0: (by: array [0. . 3] of byte); 1: (wo: array [0. . 1] of word); 2: (lo: longint); end; var х: word; xb: byte; xl: Longint; m: mem 4; begin with m do begin lo : = trunc(2*pi*x); if wo[1] = 0 then if by[1] = 0 then xb : = x[0] else x : = wo[0] else xl : = lo end; . . . end.
Константы - записи type point = record х, у: real end; vector= array [0. . 1] of point; month = (Jan, Feb, Mar, Apr, May, Jun, Jly, Aug, Sep, Oct, Nov, Dec); date = record d: 1. . 31; m: month; у: 1900. . 1999 end; const origon: point = (x: 0; у: -1); line: vector = ((x: -3. 1; у: 1. 5), (х: 1. 9; у: 3. 0)); Some. Day: date = (d: 16; m: Mar; у: 1989); type forma = record case Boolean of true: (Birthplace: string [40]); false: (Country: string [20]; Entry. Port: string [20]; Entry. Date: array [1. . 3] of word; count: word) end; Const Percon 1: forma = (Country: 'Норвегия'; Entry. Port: 'Мурманск'; Entry. Date: (16, 3, 89); count: 12); Percon 2: forma = (Birthplace: 'Москва');
Вывести на экран фамилии студентов, чей балл выше среднего по группе. type studs = record sname: string[25]; eval: integer; end; var arr_studs: array[1. . 15] of studs; sum: integer; average: real; i, n: byte; begin write('Количество студентов: '); readln(n); sum : = 0; for i: =1 to n do with arr_studs[i] do begin write(i, '-й студент: '); readln(sname); write(' Оценка: '); readln(eval); sum : = sum + eval; end; average : = sum / n; writeln('Студенты с оценкой выше средней: '); for i: =1 to n do if arr_studs[i]. eval > average then writeln(arr_studs[i]. sname); readln end.
Создать каталог из журнал и статей. Выдавать информацию о публикациях, удовлетворяющих тому или иному критерию, например, изданных с 2000 года. type t_pub = record author: string[40]; title: string[100]; year: integer; case t: char of 'b': (publ: string[20]); 'j': (jour: string[30]; num: byte); end; var catalog: array[1. . 20] of t_pub; n, i: integer; begin write('Количество записей: '); readln(n); for i: =1 to n do begin write('Книга или журнал: '); readln(catalog[i]. t); write('Автор: '); readln(catalog[i]. author); write('Название: '); readln(catalog[i]. title); write('Год издания: '); readln(catalog[i]. year); case catalog[i]. t of 'b': begin write('Издательство: '); readln(catalog[i]. publ); end; 'j': begin write('Журнал: '); readln(catalog[i]. jour); write('Номер: '); readln(catalog[i]. num); end; writeln; end; for i: =1 to n do with catalog[i] do if (year >= 2000) and (t = 'b') then writeln(author, ' ', title, ' ', publ, ' ', year); for i: =1 to n do with catalog[i] do if (year >= 2000) and (t = 'j') then writeln(author, ' ', title, ' ', jour, ' ', year, ' ', num); readln; end.
Множество — это структурированный тип данных, представляющий собой набор взаимосвязанных по какомулибо признаку или группе признаков объектов, которые можно рассматривать как единое целое. [1, 2, 3, 4], ['а', ‘b', 'с'], ['a'. . 'z']. []- пустое множество Byte. Size = (max div 8) - (min div 8) + 1, где max и min — верхняя и нижняя границы базового типа данного множества. Const X: T = [8. . 10, 13, 23]; типа Type T = Set Of 8. . 23; . байт 2 1 Номер 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 значен 0 0 0 0 0 1 1 Номер байта для конкретного элемента Е вычисляется по формуле: Byte. Number = (E div 8) - (min div 8), номер бита внутри этого байта по формуле: Bit. Number = E mod 8
Операции над множествами ['A', 'B'] + ['A', 'D'] даст ['A', 'B', 'D'] ['A'] * ['A', 'B', 'C'] даст ['A'] ['A', 'B', 'C'] - ['A', 'B'] даст ['C']. Результат выполнения логический операций: ['A', 'B'] = ['A', 'C'] даст FALSE ['A', 'B'] <> ['A', 'C‘] даст TRUE ['B'] <= ['B', 'C'] даст TRUE ['C', 'D'] >= ['A'] даст FALSE. A in ['A', 'B'] 2 in [1, 3, 6] даст TRUE, даст FALSE.
Операции над множеством Type m=set of byte; Var a: m; Добавить новый элемент в множество ü a: = a+[5] ; ü Include (a, 5); Исключить элемент из множества ü a: = a-[5]; ü Exclude (a, 5);
В городе имеется n высших учебных заведений, которые производят закупку компьютерной техники. Есть шесть компьютерных фирм: «Диалог» , «ТЕХПРОМ» , «ТЕХНОПОЛИС» , «Сервер» , «Декада» , «ЭЛЬДРАДО» . Ответить на следующие вопросы: 1) в каких фирмах закупка производилась каждым из вузов? 2) в каких фирмах закупка производилась хотя бы одним из вузов? 3) в каких фирмах ни один из вузов не закупал компьютеры? Занесём информации о месте закупок компьютеров каждым из вузов в отдельное множество. 2. Ответ на первый вопрос - пересечение всех множеств. 3. Ответ на второй вопрос –объединения множеств. 4. На последний – разность множества всех фирм и множества фирм, где хотя бы один вуз делал покупки. 1.
program ex_set_1; type firma = set of 1. . 6; v = array[0. . 20] of firma; const f: array [1. . 6] of string[10] = ('Диалог', ‘ТЕХПРОМ’, ‘ТЕХНОПОЛИС’, ‘Сервер’, ‘Декада’, ‘ЭЛЬДРАДО’. ); procedure vvod(var a: firma); var i: byte; ans: 0. . 1; begin a: = []; for i : = 1 to 6 do begin Write('Вуз покупал компьютеры в фирме ', f[i], ' (1 - да, 0 - нет)? '); Read. Ln(ans); if ans = 1 then a: =a+[i] end; procedure Print(a : firma); var i: byte; begin for i : = 1 to 6 do if i in a then write(f[i]: 10); writeln end; procedure Rez 1(a: v; n : byte; var b : firma) var i : byte; begin b : = [1. . 6]; for i : = 0 to n-1 do b : = b * a[i]; end; procedure Rez 2(a: v; n : byte; var b : firma) var i : byte; begin b : = []; for i : = 0 to n-1 do b : = b + a[i]; end; var a: v; n, i : byte; c : firma; begin write('Сколько вузов делали закупку? '); readln(n); for i : = 0 to n-1 do vvod(a[i]); Rez 1(a, n, c); writeln(‘Ответ 1: '); Print(c); Rez 2(a, n, c); writeln(‘Ответ 2: '); Print(c); writeln(‘Ответ 3: '); Print([1. . 6]-c); end.
Написать программу, позволяющую находить простые числа среди натуральных. В основу её будет заложен метод, названный решето Эратосфена. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 Простые числа 2 3 5 7 11 22 23 24 25 program pnum; const N = 255; type Set. Of. Number = set of 1. . N; var n 1, next, i : word; Begin. Set, Primer. Set : Set. Of. Number; begin Begin. Set : = [2. . N]; Primer. Set : = [1]; next : = 2; 13 17 19 23 while Begin. Set <> [] do begin n 1 : = next; while n 1 <= N do begin Exclude (Begin. Set, n 1); n 1 : = n 1 + next end; Include (Primer. Set, next); repeat next : = next + 1 until (next in Begin. Set) or (next > N) end; for i : = 1 to N do if i in Primer. Set then write (i: 8) end.
Lektsia7(работа с записями, пользовательский тип данных).pptx