ВНИМАНИЕ! 24-26 октября состоятся родительские собрания. Подробнее
Toggle Bar

Turbo Pascal. Записи

 Запись - структура данных, состоящая из фиксированного числа элементов разного типа

Записи позволяют объединить в одну группу различные по типу и смыслу элементы.

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

Формат записи:

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

Служебное слово Record (запись) выполняет роль открывающей скобки, а оператор end – закрывающей скобки.

Понятие записи рассмотрим на примере ведомости списка учащихся с оценками.

Фамилия И.О. Оценка№1 Оценка №2 Оценка №3
1 Иванов И.И. 5 4 3
2 Степанов С.С. 4 4 4
3 Петров П.П. 5 5 5
4 Сидоров С.С. 3 4 3

 

Каждая строка в этой ведомости состоит из данных разного типа:

а) Порядковый номер – целое число;
б) Фамилия И.О. – строка символов;
в) Оценки – целое число.

Эти данные можно объединить в одну группу, называемой записью.

Введем обозначения:

 Ved – имя записи, 
 N – номер записи,
Fio – фамилия и инициалы,
Mark – оценки.
 

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

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

Type
Tved = Record
n:integer;
fio:string[30];
mark:array[1..3] of integer;
end;
Var
Ved of of Tved;

Обращения к записи записывается так:

Формат обращения:

 <имя переменной>.<имя поля> 

Пример

 Ved.fio:=’Иванов И.И.’; 
 Ved.mark[1]:=4; 
 Ved.mark[2]:=4; 
 Ved.mark[3]:=5; 

Массив записей объявляется следующим образом.

 Var 
 klass:array[1..4] of Tved; 

При работе с массивами записей доступ к элементам возможен двумя способами:

1. Обычный – ранее рассмотренный

for i:=1 to 4 do
begin
readln(klass[i].fio;
readln(rlass[i].mark[1];
readln(rlass[i].mark[2];
readln(rlass[i].mark[3];
end;{/codecitation }
<strong>2. С использованием оператора присоединения, который позволяет осуществить доступ к полям, таким образом, как если бы они были простыми переменными.</strong>
<em><strong>Формат оператора</strong></em>
<samp style="margin-left: 120px;">with <имя записи> do</samp> 
<samp style="margin-left: 120px;">begin</samp> 
<samp style="margin-left: 120px;"><оператор></samp> 
<samp style="margin-left: 120px;"><оператор></samp> 
<samp style="margin-left: 120px;">end;</samp> 
<strong>Пример.</strong>
{codecitation class="brush: pascal; first-line: 1;" }for i:=1 to 4 do
with klass[i] do
begin
readln(fio);
readln(mark[1];
readln(mark[2];
readln(mark[3];
end;

ЗАДАЧА 1. Написать программу, которая описывает ведомость успеваемости учебной группы. Ведомость содержит: фамилии учащихся, три оценки за последнюю четверть. Программа должна обеспечить ввод, вывод информации и вычисление средней оценки каждого учащегося.

Program zap2
Type 
Tved = record 
fio:string[30]; {фио}
mark:array[1..3] of integer; {оценки}
sr:real; {средняя оценка}
End; 
Tklass=array[1..30] of Tved; 

function readmark( var n:integer):integer {функция ввода оценок}
begin 
repeat 
readln(n); 
if ((n5))then writeln('Ошибка, повторите ввод!') else readmark:=n; 
until ((n>0) and (n<6)); 
End; 

var 
kol:integer; {кол-во учащихся}
klass: Tklass; 
i:integer; 

begin 
writeln('Введите количество учащихся kol<=30:'); 
readln(kol); 
writeln('Введите данные учащихся:'); 

for i:=1 to kol do 
with klass[i] do {ввод исходных данных c клавиатуры с помощью оператора with}
begin 
nz:=i 
writeln('Введите ФИО: '); readln(fio); 
writeln('Введите 1 оценку: ');
readmark(mark[1]); 
writeln('Введите 2 оценку: ');
readmark(mark[2]); 
writeln('Введите 3 оценку: ');
readmark(mark[3]); 
sr:= (mark[1]+mark[2]+mark[3])/3; 
End; 

for i:=1 to kol do 
 with klass[i] do begin {вывод исходных данных на экране с помощью оператора with}
 writeln(i,fio:30,mark[1]:6,mark[2]:6,
 mark[3]:6,sr:6:2) 
 end 
end.

Результат работы программы:

 1 Петров Ф.П. 3 4 4 3.67 
 2 Сидоров С.С. 4 4 4 4.00 
 3 Степанов С.С. 4 5 5 4.67 

ЗАДАЧА 2. Разработать программу «Учет товаров». Программа должна создавать файл, содержащий: наименование, стоимость и количество товара. Программа должна иметь меню, позволяющее выполнять следующие операции с файлом: чтение товара из файла, запись товара в файл, изменение характеристик товара, добавление товара в файл, удаление товара из файла.

Program zap_file;
type
 TF=record
 name:string[20];
 price:integer;
 count:integer;
 end;

var
 fz:file of TF;
 zap:TF;
 v:integer;
{-----процедура записи в файл------}
procedure fwrite;
var
 ch:char;
begin
{открываем файл для записи (создаем)}
 rewrite(fz);
 writeln('окончание ввода в файл - 0');
 repeat
 {ввод исходных данных c клавиатуры с помощью оператора with}
 with zap do begin
 write('Введите наименование: '); readln(name);
 write('Введите стоимость: '); readln(price);
 write('Введите количество: '); readln(count);
 end;
 {занесение записи в файл}
 write(fz,zap);
 writeln('Continue? (y/n)');
 readln(ch);
 until ch='n';
end;
{-----процедура чтения записей из файла------}
procedure fread;
var
 i:integer;
begin
{открываем файл для чтения}
 reset(fz);
{читаем запись из файла}
 i:=0;
 while not eof(fz) do begin
 i:=i+1;
 read(fz,zap);
{вывод записи с помощью оператора with}
 with zap do begin
 writeln(i:3,name:15,price:10,count:6);
 end;
 end;
{закрываем файл}
 close(fz);
end;
 {-----процедура добавления записей в файл------}
procedure fappend;
var
 ch:char;
begin
{открываем файл для чтения}
 reset(fz);
 writeln('окончание ввода в файл - 0');
{ устанавливаем указатель последнею запись в файле}
 seek(fz,filesize(fz));
 repeat
 {ввод исходных данных c клавиатуры с помощью оператора with}
 with zap do begin
 write('Введите наименование: '); readln(name);
 write('Введите стоимость: '); readln(price);
 write('Введите количество: '); readln(count);
 end;
{занесение записи в файл}
 write(fz,zap);
 writeln('Continue? (y/n)');
 readln(ch);
 until ch='n';
{закрываем файл}
 close(fz);
end;
 {-----процедура изменения записи в файле------}
procedure fcorrect;
var
 ch:char;
 n:integer;
begin
{ перед изменением записи - выводим все записи на экран}
 fread;
 reset(fz); {открываем файл для чтения}
 writeln('окончание ввода в файл - 0');
 writeln('Введите номер записи для изменения: ');
 readln(n);
 seek(fz,n-1);{устанавливаем указатель на требуемую запись в файле}
 repeat
{читаем с клавиатуры новые значения}
 with zap do begin
 write('Введите наименование: '); readln(name);
 write('Введите стоимость: '); readln(price);
 write('Введите количество: '); readln(count);
 end;
{новую запись записываем на место старой записи}
 write(fz,zap);
 writeln('Continue? (y/n)');
 readln(ch);
 until ch='n';
end;
 {-----процедура удаления записи из файла------}
procedure del;
var
 k, n:integer;
 j,i:integer;
 f:file of TF;
begin
{подготовка к удалению записей: переименование исходного
файла и открытие нового файла с тем же именем}
 rename(fz,'sclad.bak'); {переименовываем файл}
 reset(fz); {открываем файл для чтения}
 assign(f,'sclad.dat'); {связываем новый файл с переменной}
 rewrite(f); {открываем новый файл для записи}
 write('Введите номер удаляемой записи n= ');
 readln(n);
 i:=0;
 while not eof(fz) do begin
 {читаем запись из файла}
 read(fz,zap);
 {если запись не подлежит удалению, то записываем ее в новый файл}
 if in-1 then write(f,zap);
 i:=i+1;
 end;
close(fz); {закрываем файлы}
close(f);
reset(f); {открываем новый файл для чтения}
rewrite(fz); {открываем старый файл для записи}
 while not eof(f) do begin
 {записываем данные в старый файл}
 read(f,zap); write(fz,zap);
 end;
close(fz); {закрываем файлы}
close(f);
erase(f); {удаляем новый файл}
rename(fz, 'sclad.dat'); {переименовываем файл}
end;
begin
Assign(fz,'sclad.dat');
 repeat
 writeln(' MENU ');
 writeln('1-Write '); {запись в файл}
 writeln('2-Read '); {чтение записей из файла}
 writeln('3-Append '); {добавление записей в файл}
 writeln('4-Correct'); {изменение записи в файле}
 writeln('5-Del '); {удаление записи из файла}
 writeln('6-Exit '); {выход из меню}
 readln (v);
 case v of
 1: fwrite;
 2: fread;
 3: fappend;
 4: fcorrect;
 5: del;
 6: exit;
 end;
until v=6;
end.

Добавить комментарий
  • Комментарии не найдены
 
Our website is protected by DMC Firewall!