Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные по ЯиСП.doc
Скачиваний:
3
Добавлен:
11.12.2018
Размер:
601.09 Кб
Скачать

Лабораторная работа №7. Программирование с использованием типа запись

Запись представляет собой совокупность ограниченного числа логически связанных компонент, принадлежащих к разным типам. Компоненты записи называются полями, каждое из которых определяется именем. Поле записи содержит имя поля, вслед за которым через двоеточие указывается тип этого поля. Поля записи могут относиться к любому типу, допустимому в языке Паскаль, за исключением файлового типа.

Описание записи в языке ПАСКАЛЬ осуществляется с помощью служебного слова RECORD, вслед за которым описываются компоненты записи. Завершается описание записи служебным словом END.

Например, записная книжка содержит фамилии, инициалы и номера телефона, поэтому отдельную строку в записной книжке удобно представить в виде следующей записи:

type Row=Record

FIO: String[20];

TEL: String[7]

end;

var str: Row;

Описание записей возможно и без использования имени типа, напри- мер:

var str: Record

FIO: String[20];

TEL: String[7]

end;

Обращение к записи в целом допускается только в операторах присваивания, где слева и справа от знака присваивания используются имена записей одинакового типа. Во всех остальных случаях оперируют отдельными полями записей. Чтобы обратиться к отдельной компоненте записи, необходимо задать имя записи и через точку указать имя нужного поля, например:

str.FIO, str.TEL

Такое имя называется составным. Компонентой записи может быть также запись, в таком случае составное имя будет содержать не два, а большее количество имен.

Обращение к компонентам записей можно упростить, если воспользоваться оператором присоединения with.

Он позволяет заменить составные имена, характеризующие каждое по- ле, просто на имена полей, а имя записи определить в операторе присо- единения:

with M do OP;

Здесь М - имя записи, ОР - оператор, простой или составной. Оператор ОР представляет собой область действия оператора присоединения, в пределах которой можно не использовать составные имена.

Инициализация записей осуществляется с помощью типизированных констант:

type

RecType= Record

x,y: Word;

ch: Char;

dim: Array[1..3] of Byte

end;

const

Rec: RecType= ( x: 127; y: 255;

ch: 'A';

dim: (2, 4, 8) );

Цель работы: познакомить с понятием "запись"; выработать навыки работы со структурой данных запись в языке программирования Pascal. научиться правильно описывать тип record, уметь инициализировать переменные типа record, выводить на экран переменные типа record; научится решать задачи на использование записей

Перед выполнением работы необходимо изучить правила описания и использования записей, типизированных констант типа запись, оператора присоединения WITH.

Пример

Пример1. Даны два рациональных числа, опишите их, используя структуру данных запись (числитель, знаменатель). Привести их к несократимому виду, найди их сумму. Этапы решения программы:

  1. Составим блок-схему программы

  1. Уточним содержимое блока "Вычисление НОД для числителя и знаменателя каждой дроби". Во-первых, НОД это наибольший общий делитель, число крайне необходимое чтобы сократить дробь. Вычислять НОД будем по алгоритму Евклида. Пусть даны два числа а и b:

В качестве чисел a и b будут участвовать числитель и знаменатель дробей. Как сокращать и складывать дроби, надеюсь, вы еще не забыли, поэтому детализировать этот блок не будем. Желательно блок "Поиск НОД" оформить в виде функции, что будет предварять тему следующей лабораторной работы.

  1. Переведем программу на язык Паскаль

PROGRAM Example1;

Type Tfraction = record;

Chisl: Integer;

Znam; Word;

End;

Function nod(a,b:integer):integer;

Var k:integer;

Begin

If a>b then k:= a else k:=b;

While not((a mod k=0)and(b mod k =0)) do dec(k);

End;

Var

x,y,s: Tfraction

n,p:integer;

st: string;

begin

writeln('Введите два рациональных числа');ъ

write('x= '); readln(st); n:= post('/',st);

val(copy(st,1,n-1),x.chisl,p);

val(copy(st,n+1,length(st)-n),x.znam,p);

write('y= '); readln(st); n:= post('/',st);

val(copy(st,1,n-1),y.chisl,p);

val(copy(st,n+1,length(st)-n),y.znam,p);

{находим НОД для каждой дроби и сокращаем их}

n:=nod(x.chisl,x.znam);

x.chis:= x.chisl div n;

x.znam:= x.znam div n;

n:=nod(y.chisl,y.znam);

x.chis:= y.chisl div n;

x.znam:= y.znam div n;

writeln('Сокращенные дроби:');

writeln('X= ',x.chisl,'/',x.znam);

END.