metod_15.03.04_atppp_oaip_up_2016 (Методические документы), страница 13
Описание файла
Файл "metod_15.03.04_atppp_oaip_up_2016" внутри архива находится в папке "Методические документы". PDF-файл из архива "Методические документы", который расположен в категории "". Всё это находится в предмете "абитуриентам" из 1 семестр, которые можно найти в файловом архиве РТУ МИРЭА. Не смотря на прямую связь этого архива с РТУ МИРЭА, его также можно найти и в других разделах. Архив можно найти в разделе "остальное", в предмете "абитуриентам" в общих файлах.
Просмотр PDF-файла онлайн
Текст 13 страницы из PDF
Таким образом, элемент записи можно указывать как влевой части оператора присваивания, так и в выражениях в правой части. Надэлементами записи можно выполнять все действия, которые допустимы дляданных его типа. Например, если тип элемента записи – целый, то можновыполнять все операции, допустимые для целых данных. Так, для рассмотренногопримера (экзаменационной ведомости) над элементами записи можно, например,выполнить следующие операции:а) ввести значения порядковых номеровRead(C1.N);Read(C2.N);б) вычислить сумму первых двух оценокSumma1 := C1.Ball[1] + C1.Ball[2];Summa2 := C2.Ball[1] + C2.Ball[2];73Обращение к записи в целом, а не только к отдельным её элементам,допускается лишь в операторе присваивания.
Слева и справа от знакаприсваивания при этом должны использоваться имена записей одинакового типа.8.2. Оператор присоединения.Мы отметили, что обращение к элементам записи происходит с помощьюуточнённого имени. Оператор присоединения позволяет упростить обращение кэлементу записи. Имя записи выносится в заголовок оператора присоединения, а вблоке Begin – end используются только имена элементов записи.Оператор присоединения имеет вид:With имя_записи doBeginОператорыEnd;Пример. Для 1-ой экзаменационной ведомости (списка 1) операторприсоединения можно записать так:With C1 doBeginRead(N);Summa := Ball[1] + Ball[3];End;Пример.
Имеется ведомость учащихся с оценками:Иванов Иван2Петров Пётр2Сидоров Сидор 3Составить программу для вычисления среднего балла.Поскольку в каждой строке ведомости представлены данные различноготипа, введём запись с именем СПИСОК, состоящую из двух полей:Name – фамилия и имя – упакованный массив из 15 символов;Ball – оценка – целое число.Для вычисление среднего балла Midball находится сумма всех оценокSumma, которая делится на число студентов N.Program W123;Const N = 3; (* число учащихся в списке *)M = 15; (* максимальная длина Name *)Type T = RecordName: Packed Array [1..M] of Char;Ball: Integer;End;Var Spisok: T;I, K: Integer; (* параметры цикла *)Midball: Real; (* средний балл *)Summa: Integer; (* сумма оценок *)BeginSumma := 0;Writeln(‘ введите таблицу ‘);74For I := 1 to N doBeginFor K := 1 to M doRead(Spisok.Name[K]);Read(Spisok.Ball);Summa := Summa + Spisok.Ball;End;Midball := Summa / N;Writeln(‘----------------------------‘);Writeln(‘ средний балл = ‘, Midball: 5: 2);End.Описание записи сделано в разделе Type, где Т – имя типа.
В разделепеременных Var указано, что переменная СПИСОК тип Т.Раздел операторов состоит из двух циклов: один вложен в другой. Внешнийцикл с параметром I выполняется столько раз, сколько имеется фамилий введомости (в данном случае N = 3). Внутренний цикл с параметром Кпредназначен для ввода фамилии и имени. На фамилию и имя отводится поле из15 позиций. Лишние позиции поля заполняются пробелами. Внутри поляфамилию и имя можно располагать свободно, например:_ _ _ _ Иванов _ Иванили _ _Иванов _ Иван_ _или _ _ _Иванов _ Иван_или _ Иванов_ _ Иван_ _После имени следует оценка.Пример.
Присвоить звание “отличник” тем, у кого по всем предметам пятёрки.Из исходного списка С1, в котором содержатся фамилии и оценки, нужносформировать другой список С2, состоящий из отличников. Для формированиясписков используется массив массивов.Program otl;Const K = 5; (* количество человек *)Type Tip = RecordName: Array [1..K, 1..15] of Char;Math: Array [1..K] of Integer;Phis: Array [1..K] of Integer;Chem: Array [1..K] of Integer;End;Var C1, C2: Tip; (* списки *)I, J, N: Integer; (* параметры циклов *)BeginJ := 0;Writeln(‘ введите фамилию и оценки: ‘);For I := 1 to K doBeginFor N := 1 to 15 do Read(C1.Name[I, N]);Read(C1.math[I], C1.Phis[I], C1.Chem[I]);If (C1.Math[I] = 5) And75(C1.Phis[I] = 5) And(C1.Chem[I] = 5) thenBeginJ := J + 1;C2.Name[J] := C1.Name[I];End;End;If J = 0 then Writeln(‘нет отличников ‘)else BeginWriteln(‘-----------------------‘);Writeln(‘отличники:‘);For I := 1 to J doWriteln(C2.Name[I]);End;End.Пример.
Дан многочлен 4А + 5В – 8С + 16А – 3А + 9К – 1АНайти подобные члены для переменной А и вычислить суммарный коэффициент.Один элемент многочлена можно считать записью, так как он состоит из данныхразличного типа – коэффициента (число) и буквы.Введём обозначения:М1 – элемент многочлена (запись),М2 – результирующий элемент (запись),Coef – коэффициент (элемент записи),Buk – буква (элемент записи),Elem – тип записи,Sum – сумму коэффициентов.Program Ex4;Type Elem = Record(* тип элемента *)Coef: Integer; (* коэффициент *)Buk: Char; (* буква *)End;Var M1: Elem; (* входной элемент *)M2: Elem; (* выходной элемент *)Sum: Integer; (* сумма коэффициентов *)BeginSum := 0;Writeln(‘ введите многочлен ‘);While Not EOLN do(* end of line *)BeginRead(M1.Coef, M1.Buk);If M1.Buk = ‘A’ then Sum := Sum + M1.Coef;End;M2.Coef := Sum;M2.Buk := ‘A’;Writeln(‘подобный член = ‘, M2.Coef: 3, M2.Buk);End.76Запись - это комбинированный тип, сложная переменная с несколькимикомпонентами.
В отличие от массивов компоненты записи (поля ) могут иметьразные типы, и доступ к ним осуществляется не по индексу, а по имени поля.Записи могут входить в качестве компонентов в другие переменные,например, можно сформировать массив записей.К каждому компоненту записи можно обратиться, используя имяпеременной типа записи и имя поля, разделённых точкой.В области действия оператора присоединения With имена переменныхзаписей и полей, указанные в его заголовке, можно опускать.
Трансляторавтоматически формирует полные имена. В области действия оператораприсоединения нельзя изменять элементы списка переменных-записей и полей,указанные в заголовке.Пример. Определить число студентов 1974 г. рождения.Type Student = RecordName: Array [1..15] of Char;Date: Integer;End; { of record }Var Grope: Array [1..30] of Student;K, I: Integer;BeginK := 0;For I := 1 to 30 doWith Grope[I].Date doIf Date = 1974 then K := K + 1;Writeln(K);End.В данном примере в заголовке оператора With стоит Grope[I] – элементмассива, зависящий от параметра I, поэтому оператор присоединения вставленвнутрь цикла по I.8.3. Записи с вариантамиПри определении комбинированного типа в него можно включатьвариантную часть.
Это означает, что разные переменные, хотя они и относятся кодному типу, могут иметь различные структуры. Например, пусть необходимозадать информацию о некотором человеке, указав фамилию и год рождения, атакже, если это мужчина, то сообщить, военнообязанный ли он и какую имеетспециальность; если это женщина, то указать, замужем ли она и сколько имеетдетей:Type Pol = (Mug, Gen);Chel = RecordFam: Array [1..10] of Char;God: 1900..2000;MG: Pol; { заголовок вариантной части }Case Pol ofMug: (Voen: Boolean; Spec: Array [1..15] of Char);Gen: (Zamugem: Boolean; Dety: Integer);77End; (* of record *)Var Ch1, Ch2: Chel;Вариантная часть записи начинается оператором Case и следует за общейчастью; после её окончания в записи не появляться никакие другие поля, поэтомуоператор Case не закрывается служебным словом End.Обычно некоторое поле общей части указывает вариант.
В примере это полеMG, называемое полем признака или дискриминации.Все варианты описываются внутри оператора Case. Каждый вариантхарактеризуется задаваемым в скобках списком описаний присущих емукомпонентов.Перед списком стоит одна или несколько меток. Тип этих метокуказывается в заголовке вариантной части (в отличие от оператора варианта, гдеселектором варианта является выражение, а не тип).
Тип должен быть скалярным(не массивы и не записи), При этом он задаётся именем.В явном виде указывать тип в заголовке не разрешается.Часто для сокращения записи поле признака (дискриминант) включается взаголовок вариантной части:Case MG: Pol ofДля переменной Ch1 типа Chel можно написать следующие операторыприсваивания:Ch1.Fam := ‘Solomatin’;Ch1.God := 1977;Ch1.MG := Mug;Ch1.Voen := True;Ch1.Spec := ‘Programmist’;Задав значение поля признака MG (некоторую константу типа Pol), можноприсваивать новые значения только полям вариантной части, помеченных такойже константой.Хотя никакого контроля поля селектора при обращении к компоненту извариантной части не производится, для надёжности работы программы следуетпридерживаться этого правила.В любой записи может быть только одна вариантная часть, и, если она есть,она должна располагаться за всеми фиксированными полями.Пример.Type Alfa = Array [1..10] of Char;Variety = (Book, Journal, Newspaper);Name = RecordFirst, Last: Alfa;End; (* of Name *)Edition = RecordName1: Name;Title, Publishers: Alfa;Case V: Variety ofBook: (Years: Integer);Journal: (Number: 1..12;Volume: Integer;78YearJ: 1900..2000);Newspaper: (Day: 1..31;Month:1..12;YearN: Integer);End; (* of Edition *)………………………Var E: Edition;…………………….…E.Name1.First := ‘Niklau’;E.Name1.Last := ‘Wirth’;E.Title := ‘Pascal’;E.Publichers := ‘Springer’;E.V := Journal;E.Number := 5;E.Volume := 12;E.YearJ := 1972;В описании записи разрешается использовать только одну вариантнуючасть, причём она должна быть записана после фиксированной части.
Однако ввариантной части, в свою очередь, может появиться вариантная часть,следовательно, могут быть вложенные друг в друга вариантные части.При записи варианта обязательно присутствие круглых скобок, даже если вних ничего не заключается. В этом случае записывается просто: ( ).Пример. Определить площадь геометрической фигуры.X и Y – координаты одного из углов прямоугольника или треугольника илицентра окружности.Area – площадь.Skew – угол наклона одной из сторон прямоугольника.Side1 и Side2 – длины двух смежных сторон прямоугольника.Inclin – угол наклона одной из сторон треугольника.Side – её длина.Angle1 и Angle1 – углы, образованные с нею двумя другими сторонами.Diameter – диаметр окружности.Program Opr;Const Pi = 3.141592;Type Figure = (Triangle, Rectangle, Circle);GeometricFigure = RecordX, Y: Real;Area: Real;Case Shape: Figure ofTriangle: (Inclin, Side, Angle1,Angle2: Real);Rectangle: (Skew, Side1, Side2: Real);Circle: (Diameter: Real);End; (* of record *)Var GFig: GeometricFigure;Begin……………79CaseGFig.ShapeofTriangle:GFig.Area0.5*SQR(GFig.Side)/(cos(GFig.Angle1)/sin(GFig.Angle2)+cos(GFig.Angle2)/sin(GFig.Angle1));Rectangle: GFig.Area := GFig.Side1 * GFig.Side2;Circle: GFig.Area := Pi * SQR(GFig.Diameter) / 4;End; (* of Case *)…………………….End.:=9.
ТИПИЗИРОВАННАЯ КОНСТАНТАТипизированную константу можно использовать как переменную. Еёследует рассматривать как инициализированную переменную, значение которойзадано с самого начала. Применение типизированных констант экономитмашинное время, т.к. начальное присвоение значений уже выполняетсякомпилятором.Типизированные константы задаются, как обычные, но дополнительно ониполучают и свой тип. Необходимо принять во внимание, что заданные значенияимеются в распоряжении программы только при новом ее пуске, а затем могутизменять свое значение. Повторный пуск программы не с самого начала можетдать уже другие значения.Преимущество применения типизированных констант заключается впростоте присвоения начальных значений для переменных.Синтаксис (вид описания):Const имя: тип = значение;9.1.
Простая типизированная константаЗадается как простая переменная.Пример: Const A:Integer=1267;Kol:Real=12,32;Sim:Char =’Z’B:Char=Ord(65);Типизированные константы разрешается использовать в место переменнойв виде параметров в подпрограммах.Типизированная константа представляет собой переменную с заданнымзначением. Т.о., её нельзя использовать в описании других констант или типов.Пример: Const X:Integer=0;Y:Integer=50;Type Mas: Array [X..Y] of Integer; это недопустимо.9.2.