1 / 16

Пример:

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

louie
Télécharger la présentation

Пример:

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. Комбинированный тип данных (записи) Записи – это структурированный тип данных, содержащий набор объектов разных типов Составляющие запись объекты называются полями. В записи каждое поле имеет свое собственное имя.

  3. Описание записи • Имя записи • имена объектив, составляющих запись и их типы. Общий вид: Type <имя записи> = Record <поле 1>: <тип 1>; <поле 2>: <тип 2>; … <поле n>: <тип n> End;

  4. Type pupil =Record fam: String[15]; {поле фамилии ученика} b1,b2,b3,b4,b5: 2..5;{поля баллов по дисциплинам} sb: real {поле среднего балла} End; Для нашей задачи: pupil sb fam b1 b2 b3 b4 b5 ЗАПИСЬ Имя записи Поля записи Вещественный тип Строка из 15 символов 2..5 Тип записей

  5. Чтобы хранить в памяти ЭВМ информацию о всех 25 учениках класса, необходимо ввести массив klass, представляющий массив записей: Var klass: Array[1..25] Of pupil; • Примечания: • Имена полей, составляющих запись, не должны повторяться. • Каждое поле записи может иметь любой тип (кроме файлового), в частности, оно может быть снова записью.

  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;

  7. Доступ к полям записи 2-й способ:использованием оператора присоединения, который позволяет осуществить доступ к полям записи таким образом, как еслибы они были простыми переменными. Его общий вид: With <имя записи> Do <оператор> Внутри оператора к компонентам записи можно обращаться с помощью имени соответствующего поля: For i:= 1 to 25 do With klass[ i ] do Begin Readln (fam); Readln (b1, b2, b3, b4, b5); End;

  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;

  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;

  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.

  11. Задачи: • Вывести на экран информацию об ученике «ФамилияХ» • Вывести на экран фамилии учеников, имеющих оценки 5 по первым двум дисциплинам • Распечатать фамилии учеников с максимальным средним баллом • Рассортировать учеников по убыванию среднего балла

  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;

  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;

  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;

  15. Begin Writeln(‘Введите сегодняшнее число, месяц, год’); Readln(dat.d, dat.m, dat.y); Tomorrow(dat, next); Writeln(‘Завтра будет‘); Writeln(next.d, ‘ , ‘, next.m, ‘ , ‘, next.y); Readln; End.

  16. Задачи: Написать дату, определяющую: • Дату предыдущего дня; • Дату, которая наступит через mдней; • Дату, которая была за mдней до сегодняшнего дня; • Количество суток, прошедших от даты t1до t2; • День недели, выпавший на дату t1, если известно, что в первый день нашей эры был понедельник.

More Related