Если фрагмент программы содержит операции над несколькими записями, то в операторе присоединения необходимо указать список переменных записей, разделенных запятыми
Пример. With a, bd do Begin name := ‘Акимов’; sex := men; Year : =1900; Month :=8; Day :=25; married := false; end; Нельзя использовать в операторах ввода-вывода запись целиком. Writeln (a); –{ ошибка.} Присваивать записи можно. A:=b; { значения полей b в a } 7.3. Записи с вариантами (экономия пространства) Вариантная запись означает, что разные var, хотя они и относятся к одному типу, могут иметь различные структуры. Записи с вариантами состоят из фиксированной и вариантной частей. Вариантная часть формируется с помощью оператора case .. of и может состоять из нескольких вариантов. Пример. Анкетные данные содержат информацию о человеке, указав фамилию, дату рождения, а также если это мужчина, то сообщить военнообязанный он или нет, а если женщина – указать семейное положение и количество детей. Type Sex (men, wom); People = record Fam : string [15]; { array [1…15] of char;} Dr:birthday; Case mw : sex of Men : ( voen:boolen; prof : string [20]); Wom : ( mar:boolen; childs:integer) End; Var M1,w1 : people; --------------------------------------------------- With w1,dr do Begin Fam := ‘Иванова’; year := 1980; month := 12; day :=1; Mw:=wom; mar := true; childs := 2; End. Вариантная часть начинается оператором case и следует за общей частью, после ее окончания в записи не могут появляться никакие другие поля, поэтому case не закрывается служебным словом end. Ключ выбора (или поле признака, дискриминанта, поле тега (этикетка)) обычно указывает вариант. При определении вариантной записи в стандартном Паскале требуется, чтобы все до одного значения ключа выбора были налицо, т.е. каждому значению был сопоставлен определенный вариант. Следовательно, если описать ключ выбора с типом integer , то пришлось бы описать 65535 вариантов (-32768..32767) В turbo pascal все иначе. Пример Case N: integer of 1,12 : (cartons : integer); 13,144 : (crates : integer); 32000 : (truckboad : integer; datpos : array [1..5] of char) У N всего пять значений. Планируя размещение вариантной записи в памяти компьютера, компилятор всегда резервирует пространство, достаточное для самого протяженного из возможных вариантов. Таким образом, все варианты как бы накладываются друг на друга. Поскольку ключ выбора в предложении case … of фактически игнорируется компилятором., требование Паскаля к нему: · Ключ должен определять некоторый стандартный или предварительно объявленный порядковый тип. · Перед тем как использовать один из вариантов записи переменной выбора варианта (ключу выбора) следует присвоить соответствующее значение. Пример использования массива записи Задача. Программа вводит информацию о 30 студентах: - фамилия; - год рождения; - год поступления в институт; - оценки последней сессии. Результат программы – список отличников. Program zap; Type Student = record Fam : string [15]; Yr : 1900.. 2000; Yp : 2000...2007; Marks : record progr,mathem, engl, ist :1..5; s:real End End; Const N=25; Type
Var Group : array [1..n] of student; Person:student; I,j:integer; Begin Writeln; For i:=1 to n do With group[i], marks do Begin Writeln (‘Введите данные’, I,’-го студента’); Write (‘Введите фамилию’); Readln (fam); Writeln (‘Введите год рождения, год поступления, оценки по программированию, математике, английскому, истории’); Readln (yr,yp,progr,mathem, engl,ist); End; Writeln (‘Список отличников’); For I :=1 to n do With group[i], marks do If (progr=5) and (mathem=5) and (engl=5) and (ist=5) then writeln (fam,yr :6, yp:6) end. Пример: Вывести данные о студентах, фамилии которых начинаются на букву «С» и средний балл у которых >4,5. For I :=1 to n do With group[i], marks do begin S:=(progr+mathem+engl+ist)/4; (fam[1]=’C’) and (s>4.5) then Writeln(fam, yr:6,yp:6) End; Пример: Упорядочить список студентов в порядке убывания среднего балла. For I :=1 to n do With group[i], marks do S:=(progr+mathem+engl+ist)/4; For I :=1 to n-1 do For J :=i+1 to n do If group[i].marks.s< group[j].marks.s then Begin Person:=group[i]; group[i] :=group[j]; group[j]:= Person end; {вывод} For I :=1 to n do With group[i], marks do begin write(fam); Writeln(yr,’ ‘, yp,’ ‘, progr,’ ‘,mathem,’ ‘ , engl,’ ‘, ist,’ ‘, s:5:2) End; Множества Понятие множества Множества в математике – произвольной набор объектов природы, понимаемый как единое целое. На вид объектов и их число не накладывается никаких ограничений. Понятие множества в Т-П несколько уже, чем математическое понятие. Множества – это наборы однотипных связанных друг с другом объектов. Характер связи между объектами лишь подразумевается программистом, но не контролируется Т-П. Количество элементов, входящих в множество, может меняться 0-255. 1 элемент множества занимает 1 байт. Множество, не содержащее элементов, называется пустым. Множества отличаются от массивов и записей непостоянным количеством своих элементов. Нельзя обратиться к элементу множества по его индексу. Множества используются, когда порядок следования элементов не имеет значения. Описание типа множества имеет вид: <имя типа> = set of <базовый тип>; <имя типа> - правильный идентификатор; set of - зарезервированные слова (множество ,из); <базовый тип> - базовый тип элементов множества, используется любой порядковый тип, кроме WORD, INTEGER, LONGINT, SHORINT, т.е. порядковые значения нижней и верхней границы базового типа не должны выходить за пределы 0-255. Пример TYPE Daytype = (mon,tue,wed,thu,fri,sat.sun); VAR Washdays,bathdays : set of daytype; Можно вовсе опустить TYPE VAR Washdays,bathdays : set of (mon,tue,wed,thu,fri,sat.sun) Несколько примеров определения переменных типа множество: Var Teaset : set of char; Letters : set of ‘A’..’Z’; digits: set of ‘0’..’9’; dice: set of 2..122; const number :set of=[4,7,1,9]; Конструктор множества Конструктор множества используется для задания множества: список элементов множества перечисляется через (,), обрамляется квадратными скобками. Пример Var town : set of (Moscow, Kiev, Sochi); S1,S2,S3 : set of ‘0’…’9’ S4,S5,S6 : set of 0…9; S1=: [‘1’,’2’,’3’]; S2=: [‘3’,’2’,’1’]; S3=: [‘2’,’3’]; S4=: [0…3,6]; S5=: [4,5]; S6=: [3..9]; Переменная town множественного типа может принимать следующие значения: [Moscow] [Kiev] [Sochi] [Moscow,Sochi] [Moscow, Kiev] [Kiev, Sochi] [Moscow, Kiev, Sochi] [ ] В общем случае, если базовое множество содержит N элементов, производный множественный тип определяет подмножеств. Переменная town может принимать =8 различных значений. Пример Множество [‘c’..’a’] является пустым, т.к. в перечислении объектов базового типа порядковый номер ‘c’ > порядкового номера ‘a’.
Популярное: Почему стероиды повышают давление?: Основных причин три... Как вы ведете себя при стрессе?: Вы можете самостоятельно управлять стрессом! Каждый из нас имеет право и возможность уменьшить его воздействие на нас... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (908)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |