Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral

7.  Построить объемное изображение (призму, пирамиду, шар и т. п.), используя графические примитивы.

8.  Осуществите анимацию (движение) любой геометрической фигуры.

§12. Комбинированные типы данных (записи)

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

Запись - это структура данных, состоящая из фиксированного числа компонент, называемых полями, причем в одном поле данные имеют одинаковый тип, в разных полях могут иметь разные типы. В отличие от массива доступ к компонентам записи (поля) осуществляется не по индексу, а по имени поля.

В виде записи оформляются величины, которые должны быть описаны несколькими параметрами, например:

а) оценки учеников по нескольким предметам

б) анкетные данные работника

в) сведения о книге в библиотеке

г) комплексные числа в математике

При определении комбинированного типа задаются имя и тип каждого поля.

Запись может быть описана двумя способами.

1. Непосредственное описание в разделе описания переменных

var <имя записи>:record

<имя поля 1>: <тип поля 1>;

<имя поля 2>: <тип поля 2>;

…;

<имя поля n>: <тип поля n>;

end;

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

<имя записи>.<имя поля>

Такие имена в программах используются так же, как и переменные других типов.

2. Описание нового типа в разделе описания типов. В этом случае создается новый тип данных, который может быть использован в качестве типа переменных наряду с типами real, integer, string и т. д. в разделе описания переменных.

НЕ нашли? Не то? Что вы ищете?

Общий вид описания и задания типа RECORD:

type <имя типа> = record

<поле 1>: <тип поля 1>;

<поле 2>: <тип поля 2>;

. . . . .

<поле n>: <тип поля n>;

end;

var <имя1>, <имя2>,…,<имяN>: <имя типа>;

<имя типа> - идентификатор типа ЗАПИСЬ

<поле> – идентификатор каждого поля записи

<тип поля> - тип каждого поля записи

<имя> - идентификаторы переменных типа ЗАПИСЬ

Поля одного типа при описании могут объединяться

Пример 1:

type r = record

x, y:real;

s:char;

end;

var rec: r;

Для переменной rec типа ЗАПИСЬ составные имена запишутся в виде:
rec. x, rec. y и rec. s

Пример 2: В математике комплексными называются числа вида: с = a + bi, где

В Паскале нет стандартного типа для комплексных чисел. Определим его с помощью записи.

type complex=record

re: real;

im: real;

end;

var с: complex;

где re, im - идентификаторы полей, complex - идентификатор записи, с - переменная типа ЗАПИСЬ. Поля переменной с обозначаются c. re и c. im.

Пример 3:

type rec: record

n:integer;

fio:string[40];

ozenka:array[1..3] of integer;

end;

var x, p:rec;

Над полями можно проделывать те операции, которые характерны для соответствующего типа.

Пример 4: Вычислить сумму двух комплексных чисел.

Program complex;

uses crt;

type complex=record

re:real;

im:real;

end;

var x, y:complex;

s:complex;

Begin

clrscr;

write('введите действительную и мнимую части числа х:');

readln(x. re, x.im);

write('введите действительную и мнимую части числа у:');

readln(y. re, y.im);

s. re:=x. re+y. re; s. im:=x. im+y. im;

writeln('сумма равна ',s. re:4:2,' +i*',s. im:4:2)

End.

Пример 5: Построить структуру данных, описывающую книгу.

type book=record

avtor:string[30];

nazvanie:string[50];

izdat:string[20];

jear:integer;

str:1..600;

end;

var tom: book;

Как задать конкретные значения полей записи?

tom. avtor:='И. Виртэ'; tom. izdat:='Финансы и статистика';

tom. jear:=1982; tom. str:=152;

Пример 6: Имеется запись-ведомость. Необходимо подсчитать число учащихся - отличников и учащихся, фамилии которых начинаются на "А".

Program primer6;

uses crt;

type t=record

name: string;

bal: integer

end;

var spisok: t;

n, i,sum1,sum2:integer;

Begin

clrscr;

sum1:=0; sum2:=0;

write('введите количество учащихся в списке: '); readln(n);

writeln('введите фамилию и бал: ');

for i:=1 to n do

begin

write(i:2,' учащегося: фамилия-'); readln(spisok. name);

write('бал-');readln(spisok. bal);

if spisok. bal=5 then sum1:=sum1+1;

if copy(spisok. name,1,1)='а' then sum2:=sum2+1;

end;

writeln('число отличников = ',sum1:2);

writeln('количество учащихся на "а":',sum2:2)

End.

Возникает вопрос: «Можно ли задавая значения полей, не повторять имя переменной-записи?» Для сокращения записи при присваивании полям конкретных значений используется оператор присоединения.

Общий вид:

with <A> do <P>;

<A> - имя переменной типа RECORD,

<P> - оператор, в котором при ссылках на компоненты записи имя <А> можно опускать.

Используя данный оператор, пример 5 запишется следующим образом:

with tom do

begin

avtor:='и. виртэ'; izdat:='финансы и статистика';

jear:=1982; str:=152;

end;

Пример: Дана информация о пяти студентах: фамилия, год рождения, год поступления в техникум и оценки последней сессии. Распечатать список отличников. Информацию о каждом студенте оформить в программе в виде записи. Совокупность записей объединить в массив.

Program zapis;

uses crt;

const n=5;

type stud=record

fio: string[15];

gr: 1975..1985;

grt: 1995..1997;

ozenki: record

alg, ist, inf: 1..5;

end;

end;

var gruppa: array[1..n] of stud;

s1:stud;

i, j:integer;

Begin

clrscr;

with s1,ozenki do

begin

for i:=1 to n do

begin

writeln;

write(i:2,'студент: фио'); readln(fio);

write('год рождения: '); readln(gr);

write('год поступления: '); readln(grt);

write('оценки: алг.,ист.,пк: '); readln(alg, ist, inf);

gruppa[i]:=s1;

end;

end;

writeln; writeln('список отличников: ');

for i:=1 to n do

with gruppa[i],ozenki do

if (alg=5) and (ist=5) and (inf=5) then

writeln(fio,' годр=',gr:4,' годпт=',grt:4)

End.

Результат:

Вводим данные:

Воронов

1980

1995

3

4

3

Каратаев

1981

1995

5

5

5

Короткова

1981

1995

4

5

5

Романов

1980

1995

5

5

5

Макаров

1980

1995

3

4

4

Список отличников:

Каратаев годр=1981 годпт=1985

Романов годр=1980 годпт=1985

Вопросы

1. Что такое запись?

2. Для задания каких величин используют записи?

3. Какие способы описания записи Вы знаете?

4. Какой из этих способов более универсален?

5. Могут ли компоненты записи быть различных типов?

6. Как осуществляется доступ к полям записей?

7. Приведите примеры описание различных записей.

8. Для чего используется оператор присоединения?

9. В чем отличие записи от массивов и множеств?

Задания

1. Охарактеризуйте запись, заданную следующим описанием:

book: record

nazv: array[1..20] of char;

god_izd: 1000..1997;

price: real;

end;

Назвать компоненты записи и их типы.

2. Имеется описание:

type family=record

glava: string[20];

vozr:25..90;

deti: array[1..2] of record

name: string[10];

godr: 1900..2000;

end;

end;

var A, B: family;

Занести исходную информацию в переменную а без использования оператора присоединения и продублировать ее в переменную b.

Задание: Используя данную процедуру, удвоить каждую букву слова.

3. Известно, что

type clock=record

chas: 0..23;

min, sec: 0..59

end;

var T1,T2: clock;

Написать программу, которая вводит значения полей записей t1 и t2 и печатает TRUE, если t1 предшествует t2, и печатает FALSE в противном случае.

4. Определить запись, включающую в себя следующую информацию:

    название завода-изготовителя; название завода-поставщика сырья; номер магазина-потребителя; названия производимых товаров, 50 наименований; цена каждого товара за 1 штуку в рублях; количество каждого товара в штуках.

Все наименования содержат не более 15 символов.

5. Составить список учебной группы, включающей 25 человек. Для каждого учащегося указать дату рождения, год поступления в техникум, курс, группу, оценки каждого года обучения. Информацию о каждом учащемся оформить в программе в виде записи. Совокупность записей объединить в массив. Составить программу, которая обеспечивает ввод полученной информации, распечатку ее в виде таблицы, а также распечатку информации согласно конкретному варианту:

а)  распечатать анкетные данные студентов, успевающих на 4 и 5; упорядочить список студентов по среднему баллу и распечатать его.

б)  распечатать анкетные данные студентов, получивших за все время обучения одну оценку 4, а все остальные оценки - 5; упорядочить список студентов по среднему баллу последней сессии и распечатать его.

в)  распечатать список студентов, фамилии которых начинаются с буквы А, и их оценки за все время обучения; упорядочить список студентов по году рождения и распечатать его.

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

д)  распечатать фамилии и даты рождения студентов, не получивших ни одной оценки 3 за все время обучения; распечатать список отличников, упорядоченный по году рождения.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21