Автор: Пользователь скрыл имя, 07 Марта 2013 в 02:12, курс лекций
Лекция 1. Представление алгоритмов на языке Программирования ПаскальАВС.
Лекция 2. Построение линейных алгоритмов
Лекция 3. Алгоритмы, содержащие структуру ветвления.
Лекция 4. Алгоритмы, содержащие структурные операторы циклов.
...
Лекция 9. Файловый тип данных
Лекция 8.
Комбинированный тип данных
В лекции рассматриваются следующие вопросы:
1.Понятие записи и поля записи.
2.Объявление типа и переменных этого типа.
3.Массивы записей.
4.Оператор над записями.
5.Примеры решения
задач с использованием
1.Понятие записи и поля записи
Наиболее гибкий и
удобный механизм построения структур
данных самой разной длины заложен
в комбинированном типе. Значения
комбинированного типа предназначены
главным образом для
2.Объявление типа и переменных этого типа
Формат объявления комбинированного типа следующий:
1 способTypeИмя комбинированного типа = record Имя поля 1: тип компонентов поля 1; . . . . . Имя поля N : тип компонентов поляN; Var Имя записи : Имя комбинированного типа; |
2 способ VarИмя записи : record Имя поля 1: тип компонентов поля 1; . . . Имя поля N : тип компонентов поляN; End; |
Record – служебное слово переводится запись, имя комбинированного типа и имя записи дает пользователь.
Пример. Рассмотрим запись, которая состоит из следующих компонент: фамилия студента, день, месяц и год рождения, домашний адрес и телефон. Такую запись можно объявить следующим образом:
Type
Student = Record
Fio, Adres, Telefon : String;
Den, Mes, God : Integer;
End;
Var a: Student;
Отсюда видно, что если в записи имеется несколько полей одинакового типа, то их можно перечислить через запятую и тип указать один раз.
Формат объявления переменной типа запись обозначает только структуру этой перменной. Чтобы записи присвоить какое-то значение, необходимо присвоить значения всем полям этой записи. Обращение к отдельному полю происходит по следующему формату:
Имя записи.Имя поля |
Такую комбинацию называют сложным именем. Поскольку обращение к каждому полю происходит по его названию, то при объявлении записи в разделе Type, порядок полей не имеет никакого значения.
Задача. Даны две простые дроби a/b и c/d. Представить их в виде записи и найти сумму. Если можно, то сократить полученную простую дробь.
Решение. Простую дробь можно представить в виде записи, у которой будет два поля: одно – это числитель простой дроби, второе поле – это знаменатель простой дроби. Оба поля будут иметь целый тип.
Program а4;
Type
dr = Record
ch,zn: Integer;
End;
Var x,y,s:dr;
{Процедура нахождения наибольшего общего делителя двух чисел. Такая процедура нам понадобится для сокращения полученной дроби}
Procedure NOD(a,b:Integer: Var d:Integer);
Begin
While a<>b do If a>b Then a:=a-b Else b:=b-a;
D:=a;
End;
Begin
{Ввод исходных данных}
Writeln(‘Ввести числитель и знаменатель первой дроби х’);
Readln(x.ch, x.zn);
Writeln('Ввести числитель и знаменатель второй дроби y');
Readln(y.ch, y.zn);
{Нахождение суммы двух дробей s=x+y}
s.ch:=x.ch*y.zn+y.ch*x.zn;
s.zn:=x.zn*y.zn
{Вывод полученной дроби без сокращения}
Writeln(x.ch,’/’,x.zn,’+’,y.ch
s.ch,’/’,s.zn,’=’);
Nod(s.ch,s.zn,n); {обращение к процедуре}
{делим отдельно числитель и знаменатель полученной дроби на наибольший общий делитель}
s.ch:=s.ch div n;
s.zn:=s.zn div n;
{вывод сокращенной дроби с той же строке}
Write(s.ch,’/’,s,zn);
Writeln;
Еnd.
3.Массивы записей
Из записей можно составлять массивы.
Задача. Дан список городов и количество жителей в каждом городе. Вывести названия тех городов, количество жителей которых более 100 тысяч человек.
Решение. Один город можно представить в виде записи с полями: название и количество жителей. Поскольку городов несколько, то они образуют массив.
Program а43;
Type
{в разделе объявлений сначала необходимо объявить тип записи, а затем тип массива, т.к. он состоит из типа записей}
gor = Record
nazw: String[20];
kol: Integer;
End;
Mas=array[1..100] of gor;
Var g:mas;
N,i:Integer;
Begin
{Ввод исходных данных}
Writeln(‘Ввести количество городов’);
Readln(n);
{вводится значение
каждого поля для каждой
For i:=1 to n do
Begin
Writeln('Ввести название',I,’города’);
Readln(g[i].nazw);
Writeln('Ввести количество жителей ', I, ’города’);
Readln(g[i].kol);
End;
{Сначала выведем заголовок
таблицы, в которой будут
Writeln(‘ название города количество жителей’);
{Вывод городов и количество их жителей}
For i:=1 to n do Writeln(g[i].nazw:20,g[i].kol:
{Вывод названия тех городов, у которых количество жителей более 100 тысяч}
Writeln(‘Ответ’);
For i:=1 to n do
If g[i].kol>100 Then writeln(g[i].nazw);
Writeln;
Readln;
End.
4.Оператор над записями
Обращение к полям записи имеет громозкий вид. Это не всегда удобно, особенно, если имя записи длинное слово. Чтобы сократить такую запись, введен специальный оператор, который называется оператор над записями. Формат такого оператора следующий:
With Имя записи do Begin операторы End; |
Один раз указав в этом операторе имя записи, далее с названиями полей этой записи можно работать как с простыми переменными.
5.Примеры
решения задач с
Задача. Имеется следующая таблица:
Материал |
Плотность кг/м3 |
Температура плавления |
Алюминий |
2700 |
657 |
Вольфрам |
19300 |
390 |
Медь |
8900 |
1083 |
Свинец |
11300 |
327 |
Олово |
7300 |
232 |
Цинк |
7100 |
419 |
Найти и вывести названия материалов с наибольшей плотностью и наименьшей температурой плавления.
Решение. Каждую строку этой таблицы представим в виде записи, у которой три поля: название, плотность и температура, а из записей составим массив.
Program а5;
Type
{объявление типа запись}
mat = Record
nazw: String[20];
pl, temp: Integer;
End;
{объяление типа массив из записей}
Mas=array[1..100] of mat;
{объявление простых переменных}
Var m:mas;
n,i:Integer;
Begin
{Ввод исходных данных}
Writeln(‘Ввести количество материалов’);
Readln(n);
For i:=1 to n do
With m[i] do
Begin
Writeln('Ввести название',I,’материала’);
Readln(nazw);
Writeln('Ввести плотность ',I,’материала’);
Readln(pl);
Writeln(‘Ввести температуру плавления’,I,’материала’);
Readln(temp);
End;
{вывод на экран заголовка таблицы, в которой будет помещен исходный массив}
Writeln(‘ название материала плотность температура плавления’);
{Вывод на экран введенного массива}
For i:=1 to n do
With m[i] do Begin
Writeln(nazw:20,pl:10,temp:10)
End;
{Нахождение материала с наибольшей плотностью }
Max:=m[1].pl; Nom1:=1;
For i:=2 to n do
With m[i] do {использования оператора над записями}
Begin
If pl>max Then Begin max:=pl, nom1:=I;End;
End;
Writeln(‘Материал c наибольшей плотностью’,m[nom1].nazw);
{Нахождение материала
с наименьшей температурой
Min:=m[1].temp; Nom2:=1;
For i:=2 to n do
With m[i] do
Begin
If temp<min
Then Begin min:=temp, nom2:=I;End;
End;
Writeln(‘Материал с наименьшей температурой плавления’, m[nom2].nazw);
Writeln;
Readln;
End.
Информация о работе Лекции по "Языкам и методам программирования" (PascalABC)