Óïðàæíåíèå 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].
|