16
Пример: Для каждого из 25 учеников класса известны фамилия и оценки (в баллах) по пяти дисциплинам. Требуется вычислить среднюю оценку каждого ученика и выбрать человека, имеющего максимальный средний балл. В данном случае: илия – строка из 15 символов, оценка – целое число, средний балл – вещественное (действительное) число.

Пример:

  • Upload
    louie

  • View
    37

  • Download
    0

Embed Size (px)

DESCRIPTION

Пример:. Для каждого из 25 учеников класса известны фамилия и оценки (в баллах) по пяти дисциплинам. Требуется вычислить среднюю оценку каждого ученика и выбрать человека, имеющего максимальный средний балл. В данном случае:. Фамилия – строка из 15 символов, оценка – целое число, - PowerPoint PPT Presentation

Citation preview

Page 1: Пример:

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

В данном случае:

Фамилия – строка из 15 символов, оценка – целое число, средний балл – вещественное (действительное) число.

Page 2: Пример:

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

Записи – это структурированный тип данных, содержащий набор объектов разных типов

Составляющие запись объекты называются полями. В записи каждое поле имеет свое собственное имя.

Page 3: Пример:

Описание записи Имя записи имена объектив, составляющих запись и их типы.

Type <имя записи> = Record <поле 1>: <тип 1>; <поле 2>: <тип 2>; … <поле n>: <тип n>End;

Page 4: Пример:

Type pupil = Record fam: String[15]; {поле фамилии ученика} b1,b2,b3,b4,b5: 2..5; {поля баллов по дисциплинам} sb: real {поле среднего балла}End;

pupil

fam b1 b2 b3 b4 b5 sb

ЗАПИСЬ

Строка из 15символов

2..5Вещественный

тип

Page 5: Пример:

Чтобы хранить в памяти ЭВМ информацию о всех 25 учениках класса, необходимо ввести массив klass, представляющий массив записей:

Примечания:1.Имена полей, составляющих запись, не должны

повторяться.2.Каждое поле записи может иметь любой тип

(кроме файлового), в частности, оно может быть снова записью.

Var klass: Array[1..25] Of pupil;

Page 6: Пример:

Доступ к полям записи

1-й способ: указанием имени переменной и имени поля.Например, klass[2].fam, klass[3].sb, klass[1].b4.

Поэтому ввод фамилий и оценок учащихся, т.е. элементов массива klass можно задать так:

For i:= 1 to 25 do Begin Readln (klass[ i ].fam); Readln (klass[ i ].b1); Readln (klass[ i ].b2); Readln (klass[ i ].b3); Readln (klass[ i ].b4); Readln (klass[ i ].b5); End;

Page 7: Пример:

Доступ к полям записи

2-й способ: использованием оператора присоединения, который позволяет осуществить доступ к полям записи таким образом, как если бы они были простыми переменными.Его общий вид:

Внутри оператора к компонентам записи можно обращаться с помощью имени соответствующего поля:

For i:= 1 to 25 do With klass[ i ] do Begin Readln (fam); Readln (b1, b2, b3, b4, b5); End;

With <имя записи> Do <оператор>

Page 8: Пример:

program zapici;const n = 10; m = 6; {n – кол-во учеников; m - кол-во оценок}

type pupel = record fam: string[15]; b:array[1..m] of 2..5; sb:real end;var klass:array[1..n] of pupel; i,j: integer; sbmax: real;

Программа:

Page 9: Пример:

Begin {ввод исходных данных} for i:=1 to n do with klass[ i ] do begin writeln(‘Введите фамилию и пять шесть оценок'); readln(fam); for j:=1 to m do readln(b[ j ]); end;

Page 10: Пример:

for i:=1 to n do {вычисление среднего балла} with klass[i] do begin sb:=0; for j:=1 to m do sb:=sb+b[j]/m; end; sbmax:=0; {поиск мах среднего балла} for i:=1 to n do if klass[i].sb >= sbmax then sbmax:=klass[i].sb; writeln(‘Фамилия':18,‘Оценки':18,'‘Ср.балл':15);writeln; for i:=1 to n do if klass[i].sb=sbmax then with klass[i] do begin write(fam:20,' - '); for j:=1 to m do write(b[j]:3); writeln(' - ',sb:6:3) end; readln;end.

Page 11: Пример:

Задачи:1. Вывести на экран информацию об

ученике «ФамилияХ»

2. Вывести на экран фамилии учеников, имеющих оценки 5 по первым двум дисциплинам

3. Распечатать фамилии учеников с максимальным средним баллом

4. Рассортировать учеников по убыванию среднего балла

Page 12: Пример:

Пример. Определить дату завтрашнего дня.

Пусть дата вводится следующим образом:

27 5 2006

Type year = 1500..2100; month = 1..12; day = 1..31; data = Record y: year; m: month; d: day; end;Var dat, next: data;

Первая цифра – это число, вторая – месяц, третья – год.

Page 13: Пример:

Function Leap( yy:year ):boolean;

Begin {определяет високосный год или нет}

Leap:= ( yy mod 4 = 0 ) And ( yy mod 400 <> 0 );

End;

Function Dmonth( mm: month; yy: year ): day;

Begin {кол-во дней данного месяца в данном году}

Case mm of

1,3,5,7,8,10,12: dmonth:=31;

4,6,9,11: dmonth:=30;

2: if Leap( yy ) Then Dmonth:=29 Else Dmonth:=28;

End;

End;

Page 14: Пример:

Procedure Tomorrow(td: data; Var nd: data);

begin {определяет завтрашнюю дату}

If td.d <> Dmounth( td.m, td.y) {если это не последний

день месяца}

then With nd Do Begin d:= td.d + 1; m:= td.m; y:= td.y End

else if td.m = 12 {если это последний день месяца}

then With nd Do Begin d:= 1; m:= 1; y:= td.y + 1; End {декабрь}

else With nd Do Begin d:=1; m:= td.m + 1; y:- td.y End; {не декабрь}

End;

Page 15: Пример:

Begin

Writeln(‘Введите сегодняшнее число, месяц, год’);

Readln(dat.d, dat.m, dat.y);

Tomorrow(dat, next);

Writeln(‘Завтра будет ‘);

Writeln(next.d, ‘ , ‘, next.m, ‘ , ‘, next.y);

Readln;

End.

Page 16: Пример:

Задачи: Написать дату, определяющую:

1.Дату предыдущего дня;

2.Дату, которая наступит через m дней;

3.Дату, которая была за m дней до сегодняшнего дня;

4.Количество суток, прошедших от даты t1 до t2;

5.День недели, выпавший на дату t1, если известно, что в первый день нашей эры был понедельник.