For i:=1 to n do begin
With rec^[i] do
WriteLn('¦ ',masN^[i]:7,' ¦ ',name:21,' ¦ ',material:18,' ¦',kolvo:19,' ¦');
if i<>n then
WriteLn('¦---------+-----------------------+--------------------+--------------------¦');
end;
WriteLn('L---------¦-----------------------¦--------------------¦---------------------');
readkey;
end;
procedure FinRec(n:byte;rec:ptrdetals;var Pole:string;var k:byte;var masFind:ptrdetals;masN:ptrarr);
const
z=3;
Men:array[1..z] of string=(
'Название детали',
'Материал детали',
'Количество деталей');
var
i,b,ans:byte;
j,c,ord_,buff:integer;
answ:string[20];
begin
clrscr;
if l=0 then begin
WriteLn('Сначала нужно ввести записи!');
readkey;
exit;
end;
Write('Введите критерий поиска: ');
ShowMeny(z,1,WhereY+1,25,WhereY+1+z,Men,ans);
Case ans of
1: Pole:='название';
1: Pole:='материал';
1: Pole:='количество';
end;
if ans=3 then
Write('Введите количество искомых деталей: ')
else begin
Write('Введите ');
if ans=1 then
Write('название');
if ans=2 then
Write('материал');
Write(' искомой детали: ');
end;
ReadLn(answ);
k:=0;
For i:=1 to n do
Case ans of
1: begin
if rec^[i].name=answ then begin
inc(k);
with masFind^[k] do begin
name:=rec^[i].name;
material:=rec^[i].material;
kolvo:=rec^[i].kolvo;
end;
masN^[k]:=i; end end;
2: begin
if rec^[i].material=answ then begin
inc(k);
with masFind^[k] do begin
name:=rec^[i].name;
material:=rec^[i].material;
kolvo:=rec^[i].kolvo;
end;
masN^[k]:=i; end end;
3: begin
ord_:=0;
b:=0;
For j:=length(answ) downto 1 do begin
inc(b);
buff:=1;
For c:=1 to j-1 do
buff:=buff*10;
ord_:=ord_+(ord(answ[b])-48)*buff;
end;
if rec^[i].kolvo=ord_ then begin
inc(k);
with masFind^[k] do begin
name:=rec^[i].name;
material:=rec^[i].material;
kolvo:=rec^[i].kolvo;
end;
masN^[k]:=i; end end;
end;
end;
begin
new(sklad);
new(masFind);
new(masN);
new(masNF);
l:=0;
Repeat
clrscr;
Write('Программа обработки записей по деталям. ');
Write('Вы можете: ');
ShowMeny(k,1,WhereY+1,25,WhereY+1+k,a,choose);
Case choose of
1: AddRec(l,sklad,masN);
2: DelRec(l,sklad);
3: begin
Clrscr;
TabRec(l,sklad,masN);
end;
4: begin
FinRec(l,sklad,Pole,klFind,masFind,masNF);
clrscr;
WriteLn('Результаты поиска по полю ',Pole,':');
TabRec(klFind,masFind,masNF) end;
5: begin
dispose(sklad);
dispose(masFind);
dispose(masNF);
dispose(masN);
textattr:=$07;
exit end;
end;
until false;
end.
Что нужно знать:
· запись – Структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов, называемых полями записи.
· операции с записями – К записи в целом применим оператор присваивания (если записи одного типа), все остальное (выражения отношения, арифметические и тд.) применимо только к полям записи.
· поле записи, селектор – Поле записи – компонента записи определенного типа и имеющая имя. Делятся на фиксированные и вариантной. Вариантная часть задается с помощью оператора case ... of и может состоять из нескольких вариантов. Case задает особое поле записи – поле признака, которое определяет, какой из вариантов в каждый момент выполнения программы должна быть одна из расположенных в операторе case констант – константы выбора (селектора).
· статическое и динамическое распределения памяти – Статическая память – память выделяемая при запуске программы (код программы, коды подключаемых модулей, сегмент данных (глобальные переменные и типизированные константы), стек); Динамическая память (heap) – память, выделяемая по требованию программы. Heap занимает всю свободную ОП.
· переменная-указатель (ссылка) – Переменная, занимающая в памяти 4 байта и хранящая в себе адрес первого байта, переменной на значение которой указывает сылка.
· операции с указателями - ?
· разветвление программы по нескольким направлениям - ?
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.