Комбинированный тип данных (Record)

Содержание

Слайд 2

Комбинированный тип данных (Record)

При работе с массивами основное ограничение заключается в том,

Комбинированный тип данных (Record) При работе с массивами основное ограничение заключается в
что каждый элемент должен иметь один и тот же тип. Однако при решении многих задач возникает необходимость хранить и обрабатывать совокупности данных различного типа как единое целое. Для этого применяется запись.
Запись – это составной тип данных, содержащий набор элементов разных типов. Составляющие запись элементы называются ее полями. В записи каждое поле имеет собственное имя. Чтобы описать запись, необходимо указать имя записи и имена объектов, составляющих запись и их типы.
Общий вид такой:
Type <имя записи> =
<поле 1>:<тип 1>;
<поле 2>:<тип 2>;

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

Слайд 3

Примеры объявления типа данных Record

Пример 1.
Объявление записи в разделе Var
Запись в

Примеры объявления типа данных Record Пример 1. Объявление записи в разделе Var
записной книжке
Var
address: record
Famil:string[25];
Name: string[15];
City: string[20];
Street: string[40];
Home:integer;
Telephone:integer
End;

Пример 2.
Объявление записи в разделе Type
Запись в записной книжке
Type address=record
Famil:string[25];
Name: string[15];
City: string[20];
Street: string[40];
Home:integer;
Telephone:integer
End;
Var
friend: array[1..15] of address:

Слайд 4

Примеры объявления типа данных Record

Пример 3.
Type year=1583..3000;
Month=1..12;
Day=1..31;
date= record
dyear: year;
dmonth:

Примеры объявления типа данных Record Пример 3. Type year=1583..3000; Month=1..12; Day=1..31; date=
Month;
dday: Day;
End;
Var mas: array[1..15] of date;

Пример 4.
Type
date= record
year: 1900..2100;
month: 1..12;
day: 1..31;
End;
pupil= record
Famil, Name,Otch: string[25];
Birthday: date;
Class: 1..11;
End;
Var spisok: array[1..1000] of pupil:

Слайд 5

Оператор With

Обращения к полям записи могут быть громоздки, для упрощения работы с

Оператор With Обращения к полям записи могут быть громоздки, для упрощения работы
записями предназначен оператор With:
With <Имя записи>do<оператор>;
Один раз указав переменную типа запись в операторе With, можно работать с именами полей как с обычными переменными, т.е. без указания переменной типа запись

For i:=1 to 15 do
Begin
Writeln(‘Введите фамилию’);
Readln(friend[i]. famil);
Writeln(‘Введите имя’);
Readln(friend[i]. Name);
….
Clrscr
End;

For i:=1 to 15 do
With friend[i] do
Begin
Writeln(‘Введите фамилию’);
Readln(famil);
Writeln(‘Введите имя’);
Readln(Name);
….
Clrscr
End;

Слайд 6

Решение задач

Задача1: В классе 30 учеников. Введите фамилии и оценки по 8

Решение задач Задача1: В классе 30 учеников. Введите фамилии и оценки по
предметам для каждого ученика, найдите средний балл и выведите на печать фамилию и средний балл лучшего ученика.

Uses crt;
Type sved = record
Famil:string[25];
P1,p2,p3,p4,p5,p6,p7,p8:1..5;
Ocsr:real
End;
Var
Spisok:array[1..30] of sved;
Z:sved; I,n:integer; Champ:real;
Begin
For i:=1 to 30 do
With spisok[i] do Begin
Writeln(‘Введите фамилию ученика’);
Readln(famil);
Writeln(‘Введите оценки по 8 предметам’);
Readln(P1,p2,p3,p4,p5,p6,p7,p8);
Clrscr
End;

Описание и ввод данных: фамилии и оценок по 8 предметам

продолжение

Слайд 7

Решение задач

Задача1: В классе 30 учеников. Введите фамилии и оценки по 8

Решение задач Задача1: В классе 30 учеников. Введите фамилии и оценки по
предметам для каждого ученика, найдите средний балл и выведите на печать фамилию и средний балл лучшего ученика.

For i:=1 to 30 do
With spisok[i] do
Begin
Ocsr:=( P1+p2+p3+p4+p5+p6+p7+p8)/8;
End;
Champ:=0;
For i:=1 to 30 do
If spisok[i]. Ocsr>= Champ then Champ:= spisok[i]. Ocsr;
For i:=1 to 30 do
If spisok[i]. Ocsr= Champ then
With spisok[i] do
Writeln(Famil:30,’---‘,ocsr:8:2);
Readln;
End.

Подсчет среднего балла каждого ученика, поиск максимального (Champ) и вывод на печать

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

Слайд 8

Решение задач

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

Решение задач Задача 3 В некотором вузе абитуриенты проходят предварительное тестирование, по
которого могут быть допущены к сдаче вступительных экзаменов в первом потоке. Тестирование проводится по трем предметам, по каждому предмету абитуриент может набрать от 0 до 100 баллов. При этом к сдаче экзаменов в первом потоке допускаются абитуриенты, набравшие по результатам тестирования не менее 30 баллов по каждому из трех предметов. На вход программы подаются сведения о результатах предварительного тестирования. Известно, что общее количество участников тестирования не превосходит 300.
В первой строке вводится количество абитуриентов, принимавших участие в тестировании, N. Далее следуют N строк, имеющих следующий формат:
<Фамилия> <Имя> <Баллы>,
Здесь <Фамилия> - строка, состоящая не более чем из 20 символов;
<Имя> - строка, состоящая не более чем из 15 символов;
<Баллы> - строка, содержащая три целых числа, разделенных пробелом, соответствующих баллам, полученным при тестировании по каждому из трех предметов.

продолжение

Слайд 9

Решение задач

Задача 3 (продолжение условия)
При этом <Фамилия> <Имя> , <Имя> и

Решение задач Задача 3 (продолжение условия) При этом , и разделены одним
<Баллы> разделены одним пробелом.
Примеры входных строк:
Петренко Наталья 58 66 38
Антипов Сергей 99 50 72
Напишите программу, которая будет выводить на экран фамилии и имена абитуриентов, допущенных к сдаче экзаменов в первом потоке. При этом фамилии и имена абитуриентов можно выводить в произвольном порядке.

Var a: array[1..300] of record
name: string;
sum: integer;
end;
C:char; i,j,N,s,m:integer;

Описание переменных

Слайд 10

begin
Readln(N); {cчитано количество абитуриентов}
for i:=1 to N do
begin
a[i].name:=‘’;
repeat
read(c);
a[i].name:= a[i].name+c;
until c=‘ ‘;

begin Readln(N); {cчитано количество абитуриентов} for i:=1 to N do begin a[i].name:=‘’;
{считана фамилия}
Repeat
read(c);
a[i].name:= a[i].name+c;
until c=‘ ‘; {считано имя}
a[i].sum:=0;
for j:=1 to 3 do
begin
read(m);
if m>= 30 then a[i].sum:= a[i].sum+1;
end;
end;
for i:=1 to N do
if a[i].sum=3 then writeln(a[i].name);
readln;
end.

РЕШЕНИЕ

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

Слайд 11

Задачи повышенной сложности

На вход программы подаются сведения о сдаче экзаменов учениками

Задачи повышенной сложности На вход программы подаются сведения о сдаче экзаменов учениками
9-х классов некоторой средней школы. В первой строке сообщается количество учеников N, которое не меньше 10, но не превосходит 100, каждая из следующих N, строк имеет следующий формат:
<Фамилия><Имя><оценки>,
где <Фамилия> - строка, состоящая не более чем из 20 символов, <Имя> - строка, состоящая не более из 15 символов,
<оценки> - три целых числа, соответствующие оценкам по пятибалльной системе.
<Фамилия> и <Имя>, а также <Имя> и <оценки> разделены одним пробелом.
Пример входной строки:
Иванов Петр 4 2 4
Требуется написать программу, которая будет выводить на экран фамилии и имена неуспевающих учеников (имеющихся по результатам экзаменов хотя бы одну двойку), располагая их в порядке уменьшения числа двоек.

Слайд 12

Решение

Uses crt;
var p:array[1..100] of record
name:string;
sum: integer;
end;
N,i,j,m:integer;
c:char;
begin
readln(N);
for i:=1 to

Решение Uses crt; var p:array[1..100] of record name:string; sum: integer; end; N,i,j,m:integer;
N do
begin
p[i].name:=‘’;
repeat
read(c);
p[i].name:= p[i].name+c;
until c:=‘ ‘; {считана фамилия}
Repeat
read(c);
p[i].name:= p[i].name+c;
until c:=‘ ‘; {считано имя}

p[i].sum:=0;
for i:=1 to 3 do
begin
read(m);
if m= 2 then
p[i].sum:=p[i].sum+1;
end; {подсчитано
количество двоек}
readln;
end;
For i:=1 to N do
If p[i].sum=3 then writeln(p[i].name);
{ вывод учащихся с 3 двойками}
For i:=1 to N do
If p[i].sum=2 then writeln(p[i].name);
{ вывод учащихся с 2 двойками}
For i:=1 to N do
If p[i].sum=1 then writeln(p[i].name);
{ вывод учащихся с 1 двойкой}
end.

Слайд 13

Задачи повышенной сложности

На вход программы подаются сведения о багаже пассажиров некоторого

Задачи повышенной сложности На вход программы подаются сведения о багаже пассажиров некоторого
поезда. В первой строке сообщается количество пассажиров N, которое не может быть отрицательным числом, каждая из следующих N, строк имеет следующий формат: <Фамилия><Имя><количество вещей>. Здесь <Фамилия> - строка, состоящая не более чем из 20 символов, <Имя> - строка, состоящая не более из 15 символов, <количество вещей> - целое число, в диапазоне от 0 до 9. <Фамилия> и <Имя>, а также <Имя> и <количество вещей> разделены одним пробелом.
Пример входной строки:
Емельянова Екатерина 4
Требуется написать программу, которая будет выводить на экран фамилии и имена пассажиров, имеющих более 2 вещей. Строки данных выводить на экран упорядоченными по фамилии.
Пример вывода:
Емельянова Екатерина 4
Сергеев Григорий 3
Якушев Антон 4
Имя файла: Комбинированный-тип-данных-(Record).pptx
Количество просмотров: 44
Количество скачиваний: 0