Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УП лабораторные работы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
779.26 Кб
Скачать

4. Тесты

Истина или ложь?

Каждое из представленных ниже утверждений либо верно, либо нет.

  1. Вложение подпрграмм не допускается.

  2. Отличия в описании функции и процедуры касаются только заголовка и раздела операторов.

  3. Функционально самостоятельная часть программы, обладающая собственным именем и набором локальных имен, называется подпрограммой.

  4. Вызов функции осуществляеся по ее имени из любых точек тела программы.

  5. Количество вызовов функции в программе не должно превышать двух раз.

  6. Если идентефикаторы допускается использовать только в рамках одной подпрограммы, то такие идентификаторы называются глобальными.

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

  8. Функция, чтобы ее можно было вызвать в программе, должна быть обьявлена в разделе описаний программы.

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

  10. В Turbo Pascal наличие в теле функции оператора вызова самой себя не допускается.

Работа №11

Тема: Записи.

Цель: Изучить фиксированные и вариантные записи пользователя.

1. Перечень знаний и умений, необходимых для выполнения лабораторной работы

Перед тем, как приступить к выполнению лабораторной работы, студенту необходимо ознакомиться со следующим материалом:

  • правила объявления записей пользователя;

  • определение записей;

  • назначение и синтаксис записей языка Turbo Pascal.

2. Пример решения задачи

При решении многих задач возникает необходимость хранить и обрабатывать совокупности данных различного типа. Запись, в отличие от массивов, множеств и файлов, является составной структурой данных. Если отдельно взятый массив, множество или файл всегда включают элементы одинакового типа, то записи могут объединять в единое целое любое число структур данных других типов: простых переменных, массивов, множеств, записей и файлов.

В языке Pascal различают фиксированные и вариантные записи.

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

Общий вид описания записи следующий:

Type <имя записи> = record

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

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

……

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

end;

Обращение к полю осуществляется указанием <имени записи>.<имя поля>

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

Опишем запись:

Type Spisok=record

Fam:string[15]; {поле фамилии ученика}

B:array[1..5] of byte; {поле оценок}

Srb:real; {поле среднего балла}

End;

Пример типа Spisok будет хранить структуру, содержащую информацию об одном ученике.

Для хранения информации обо всех 20 учениках класса, введем массив klass, предоставляющий собой массив записей указанного вида:

Var klass:array[1..20] of spisok;

Ввод исходных данных в массив записей можно осуществлять следующем образом:

1 способ:

For i:=1 to 20 do

Begin

Writeln(‘Введите фамилию’,i,’-го ученика:’);

readln(klass[i].fam); {Считывание поля Фамилия, обращение к полю через точку}

Writeln(‘Введите оценки по пяти предметам’,i,’-го ученика:’);

For j:=1 to 5 do

readln(klass[i].b[j]); {Считывание поля оценок}

End;

Ввод исходных данных в поле записи можно осуществлять также с использованием оператора присоединения With <переменная> do

2 способ:

For i:=1 to 20 do

With klass[i] do

Begin

Writeln(‘Введите фамилию:’);

Readln(fam); {при обращении к полю fam не указывается имя записи}

Wrileln(‘Введите оценки:’);

For j:=1 to 5 do

readln(b[j]); {считывание поля оценок}

End;

Сравните оба способа, чем они отличаются друг от друга?

Программа для решения рассматриваемой задачи может быть записана следующим образом:

Program recs;

Type spisok=record

Fam: string[15]; {поле фамилия}

B:array[1..5] of byte; {поле оценок}

Srb:real; {поле среднего балла}

End;

Var klass: array[1..20] of spisok; {Объявление массива записей klass}

P:spisok;

i,m:integer;

Sbmax:real;

Begin {начало программы}

Writeln(’введите кол-во учеников класса’); readln(m);

{Заполнение записи для каждого ученика класса:}

For i:=1 to m do

Begin

Writeln(‘Введите фамилию’,i,’-го ученика:’);

readln(klass[i].fam); {Считывание поля фамилия }

Writeln(‘Введите оценки по пяти предметам’,i,’-го ученика:’);

For j:=1 to 5 do

readln(klass[i].b[j]); {считывание поля оценок}

End;

{Подсчет среднего балла для каждого i-того ученика класса:}

For i:=1 to m do

With klass[i] do

Srb:=(b[1]+b[2]+b[3]+b[4]+b[5])/5;

{Нахождение максимального среднего балла из всех учеников:}

Sbmax:=0; {Начальное значение максимального среднего балла равное нулю}

For i:=1 to m do

if klass[i].srb>=sbmax then sbmax:=klass[i].srb;

{Вывод результата списка учеников имеющих максимальный средний балл:}

For i:=1 to m do {для каждого i-того ученика }

if klass[i].srb=sbmax {если средний балл i-того ученика равен максимальному среднему баллу}

then {тогда}

with klass[i] do

writeln(fam:20,’ – ‘,srb:6:3); {выводим фамилию и средний балл этого ученика}

readln;

End.