Упражнение №1 для работы с записями

Упражнение 1. Создадим программу, организующую ввод следующих данных об учащихся: имя, фамилия, возраст, школа, класс, и записывающую их в массив записей, а затем выводящую сведения об учащихся по номеру записи и по номеру класса.

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

Record_Type = Record
Name : String[10];
SurName : String[20];
Age : Byte;
School : Integer;
Class : Byte;
End;

где

Name – поле для записи имени учащегося (строка до 10 символов);

SurName – поле для записи фамилии учащегося (строка до 20 символов);

Age – поле для записи возраста (так как значение возраста не превысит 255, тип поля можно описать как byte);

School – поле для записи номера школы (целое число);

Class – поле для записи номера класса (целое число).

В разделе описания переменных опишем массив Record_Array, состоящий из 10 записей об учащихся описанного выше типа Record_Type:

Record_Array : Аггау[1 .. 10] of Record_Type;

Для указания номера элемента массива введем переменную Number_of_Array, принимающую целые значения от 1 до 10. Для поиска учащихся введем целочисленную переменную Class, которая будет принимать значения номера класса, заданного с клавиатуры.

Для ввода данных об учащихся напишем процедуру, в которой выводятся запросы на ввод данных и считываются значения этих данных в соответствующие поля записи. Для обращения к полям записи используем точечную нотацию, т. е. будем указывать имя записи, а затем, после точки, – имя поля, например:

Record_Array[Number_of_Array].Name;

Процедура ввода данных в элемент с номером Number_of_Array массива записей Record_Array будет выглядеть следующим образом:

procedure Input_Data;

begin
Writeln (‘Введите данные №’ ,Number_of_Array,’ :’);
Write (‘ Ваше имя ? ‘);
Readln (Record_Array[Number_of_Array].Name);
Write С Фамилия ? ‘);
Readln (Record_Array[Number_of_Array].SurName);
Write (‘ Ваш возраст ? ‘);
Readln (Record_Array[Number_of_Array].Age); .
Write (‘ Школа ? ‘);
Readln (Record_Array[Number_of_Array].Class);
Write С и класс ? ‘);
Readln (Record Jrray[Number_of_Array].School);
Writeln
end;

Вывод на экран информации, хранящейся в одном элементе массива записей, реализуем с использованием предложения with … do, в котором укажем имя текущей записи – элемент с номером Number_of_Array массива записей Record_Array[Number_of_Array], вследствие чего оно будет автоматически присоединено ко всем именам полей, упоминаемым в теле предложения with. Эта процедура будет выглядеть следующим образом:

procedure Write_Data;
begin
{Haчano процедуры вывода на экран содержимого текущей записи}
with Record Array[Number_of_Array] do {Тело предложения with Record_Array [Number_of_Array] do}
Writeln (Имя : ‘.Name);
Writein С Фамилия : ‘.SurName);
Writeln С Возраст : ‘.Age);
Writeln С Школа : ‘,School);
Writeln С Класс : ‘,Class);
End; {Конец тела предложения with}
End; {Конец процедуры}

В первой части основной программы применим оператор for для записи данных о десяти учащихся в массив записей. В теле этого оператора вызывается процедура Input_Data, которая вводит данные в элемент массива с номером Number_of_Array.

for Number_of_Array:=l to 10 do
Input_Data;
Writeln;

Для вывода сведений об учащемся по номеру записи присвоим значение 5 номеру записи Number_of_Array в массиве данных и запишем вызов процедуры Write_Data. Этот фрагмент программы будет выглядеть так:

Writeln (‘Вывожу данные о пятом ученике : ‘);
Writeln;
Number_of_Array:-5;
Write_Data;

Для поиска учащегося по номеру класса запишем вывод запроса на ввод искомого номера класса и считывание его значения в переменную Class. После этого при помощи оператора for, изменяющего значение параметра Num-ber_of_Array от 1 до 10, выполним просмотр всех элементов массива записей, сравнивая значение переменной Class со значением соответствующего поля текущей записи.

Если условие Record_Array[Number_of_Array].Class-Class выполняется, значит, найдена запись об учащемся, удовлетворяющая условию поиска, поэтому после слова then разместим вызов процедуры Write_Data, которая будет выводить значения полей данной записи на экран.

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

Writeln (‘Вывожу данные по номеру класса : ‘);
Writeln;
Writeln (‘ Введите номер класса : ‘);
Readln (Class);
for Number_of_Array:=l to 10 do
If Record_Array[Number_of_Array].Class = Class then Write_Data;

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

program Pupil;
type Record_Type = Record {Описание типа записи}
Name : String[10];
SurName : String[20];
Age : Byte;
School : Integer;
Class : Byte;
end;
var
Record_Array : Array[l .. 10] of Record_Type;
Class : Byte;
procedure Input_Data; {Процедура ввода данных в массив записей}
begin
Writeln (‘Введите данные №’,Number_of_Array,’ :’);
Write (‘ Ваше имя ? ‘);
Readln (Record_Array[Number_of_Array].Name);
Write (‘ Фамилия ? ‘);
Readln (Record_Array[Number_of_Array].SurName);
Write (‘ Ваш возраст ? ‘);
Readln (Record_Array[Number_of_Array].Age);
Write С Школа ? ‘);
Readln (Record_Array[Number_of_Array].Class);
Write (‘ и класс ? ‘);
Readln (Record_Array[Number_of_Array].School):
Writeln
End;
procedure Write_Data; {Процедура вывода на экран содержимого текущей записи}
begin
with Record_Array[Number of_Array] do
begin
Writeln (‘ Имя : ‘,Name);
Writeln (‘ Фамилия : ‘,SurName);
Writeln (‘ Возраст ; ‘,Age);
Writeln (‘ Школа : ‘,School);
Writeln (‘ Класс : ‘,Class);
end;
end;
begin {Основная программа}
for Number_of_Array:=l to 10 do Input_Data;
Writeln;Writeln (‘Вывожу данные о пятом ученике : ‘);
Writeln;Number_of_Array:=5;
Write_Data;
Writeln (‘Вывожу данные по номеру класса : ‘);
Writeln;
Writeln (‘ Введите номер класса : ‘);
Readln (Class);
for Number_of_Array:=l to 10 do
If Record_Array[Number_of_Array].Class — Class then
Write_Data; end.

Для проверки работы программы запустите интегрированную среду программирования. Введите текст программы Pupil и запишите файл на диск под соответствующим именем, а затем откомпилируйте его. Проверьте работу программы, выполнив ее в пошаговом режиме с трассировкой процедур и наблюдая в окне просмотра за изменением значений переменных Num-ber_of_Array, Class, а также элементов массива Record_Array[Number_of_Array].

Добавить комментарий