Óïðàæíåíèå. Ñîçäàéòå ïðèëîæåíèå, êîòîðîå ïðåäëàãàåò ïîëüçîâàòåëþ ââåñòè ðàçìåð ìàññèâà è ñîçäàòü ìàññèâ ñëó÷àéíûõ öåëûõ ÷èñåë, à çàòåì, èñïîëüçóÿ ïåðåêëþ÷àòåëè, óêàçàòü ïîðÿäîê ñîðòèðîâêè (ïî íåóáûâàíèþ, ïî íåâîçðàñòàíèþ), âûïîëíèòü ñîðòèðîâêó è ïðîñìîòðåòü îòñîðòèðîâàííûé ìàññèâ.
Ñîçäàéòå ôîðìó, äëÿ ñâîéñòâà Caption çàäàéòå çíà÷åíèå «Ëèíåéíàÿ ñîðòèðîâêà ìàññèâà». Íà ôîðìå ðàçìåñòèòå êîìïîíåíòû Editl, Edit2 è Edit3, êíîïêó Buttonl, äëÿ ñâîéñòâà Caption êîòîðîé çàäàéòå çíà÷åíèå «Ñîçäàòü ìàññèâ». Óäàëèòå òåêñò Editl, Edit2, Edit3 èç ñîîòâåòñòâóþùèõ êîìïîíåíòîâ. Ðàçìåñòèòå íà ôîðìå êîìïîíåíòû Labell, Label2 è çàäàéòå äëÿ èõ ñâîéñòâ Caption çíà÷åíèÿ «×èñëî ýëåìåíòîâ» è «Èñõîäíûé ìàññèâ» ñîîòâåòñòâåííî.
Íèæå îáúåêòà Edit3 íà ôîðìå ðàçìåñòèòå ïàíåëü RadioGroupl, äëÿ ñâîéñòâà Caption êîòîðîé çàäàéòå çíà÷åíèå «Ïîðÿäîê ñîðòèðîâêè». Äëÿ âûáîðà ïîðÿäêà ñîðòèðîâêè çàäàéòå äâà ïåðåêëþ÷àòåëÿ â ïàíåëè RadioGroupl è ïîäïèñè ê íèì. Âûáðàâ â Èíñïåêòîðå îáúåêòîâ êîìïîíåíò RadioGroupl, íà ñòðàíèöå ñâîéñòâ âûáåðèòå ñâîéñòâî Items, çàòåì â îêíå String List Editor ââåäèòå ñïèñîê ýëåìåíòîâ: Ïî íåâîçðàñòàíèþ, Ïî íåóáûâàíèþ è íàæìèòå ÎÊ. Ñïðàâà îò ïàíåëè RadioGroupl ðàçìåñòèòå êíîïêó Button2, äëÿ ñâîéñòâà Caption êîòîðîé çàäàéòå çíà÷åíèå «Îòñîðòèðîâàòü».
 íèæíåé ÷àñòè ôîðìû ðàçìåñòèòå Edit3 äëÿ âûâîäà îòñîðòèðîâàííîãî ìàññèâà. Íàä îáúåêòîì Edit3 ðàçìåñòèòå îáúåêò Label3, äëÿ ñâîéñòâà Caption êîòîðîãî çàäàéòå çíà÷åíèå «Îòñîðòèðîâàííûé ìàññèâ». Âûðîâíÿéòå êîìïîíåíòû íà ôîðìå. Çàôèêñèðóéòå ïîëîæåíèå êîìïîíåíòîâ íà ôîðìå, âûáðàâ â ìåíþ Delphi êîìàíäó Edit – Lock Controls.
Ñîõðàíèòå ôàéë ïðîåêòà è ïðîãðàììíîãî ìîäóëÿ. Àíàëîãè÷íî ïðåäûäóùåìó ïðèìåðó, ïðåæäå ÷åì ñîçäàâàòü îáðàáîò÷èêè ñîáûòèé ùåë÷êà ìûøüþ ïî êíîïêàì Buttonl è Button2, îïèøèòå ãëîáàëüíûå ïåðåìåííûå öåëîãî òèïà N è I, ãäå N – ðàçìåð ìàññèâà, à I – ïîðÿäêîâûé íîìåð ýëåìåíòà ìàññèâà, à òàêæå Ì – äèíàìè÷åñêèé ìàññèâ öåëûõ ÷èñåë.
var
Forml: TForml;
N, I : integer;
M : array of integer; {îïèñàíèå äèíàìè÷åñêîãî ìàññèâà öåëûõ ÷èñåë}
Äëÿ ïðåäóïðåæäåíèÿ îøèáêè ââîäà â îêíî Editl íå÷èñëîâîãî çíà÷åíèÿ ââåäèòå îáðàáîòêó ñîáûòèÿ íàæàòèÿ êëàâèøè â îêíå Editl, ÷òîáû çàïðåòèòü ââîä ëþáûõ ñèìâîëîâ, êðîìå öèôð îò 0 äî 9. Äëÿ ñîçäàíèÿ ïðîöåäóðû îáðàáîò÷èêà ñîáûòèÿ íàæàòèÿ êëàâèøè â îêíå Editl âûáåðèòå â îêíå Èíñïåêòîðà îáúåêòîâ êîìïîíåíò Editl è íà ñòðàíèöå Events (Ñîáûòèÿ) äâàæäû ùåëêíèòå ëåâîé êíîïêîé ìûøè íà ïóñòîì ïîëå ñïèñêà â ñîáûòèè OnKeyPress. Ïîñëå ýòîãî â òåêñò ïðîöåäóðû îáðàáîò÷èêà ñîáûòèÿ äîáàâüòå ñëåäóþùèé îïåðàòîð: if not (Key in ['0'..'9']) then Key:=#O;. Ïîëíûé òåêñò ïðîöåäóðû îáðàáîò÷èêà ñîáûòèÿ áóäåò âûãëÿäåòü ñëåäóþùèì îáðàçîì:
procedure EditlKeyPress(Sender: TObject; var Key: Char);
begin
if not (Key in ['0'..'9']) then Key:=#0;
end;
Ñîçäàíèå ìàññèâà öåëûõ ÷èñåë îïèøèòå â ïðîöåäóðå îáðàáîò÷èêà ñîáûòèÿ ùåë÷êà ìûøüþ íà êíîïêå Buttonl. Äëÿ ñîçäàíèÿ ïðîöåäóðû îáðàáîò÷èêà ñîáûòèÿ âûáåðèòå â îêíå Èíñïåêòîðà îáúåêòîâ îáúåêò Buttonl, çàòåì íà ñòðàíèöå Ñîáûòèÿ ïðîèçâåäèòå äâîéíîé ùåë÷îê íà ïóñòîì ïîëå ñïèñêà â ñîáûòèè OnClick. Ïîñëå ýòîãî â îêíå Ðåäàêòîðà êîäà â çàãîòîâêó ïðîöåäóðû îáðàáîò÷èêà ñîáûòèÿ ââåäèòå ñëåäóþùèé òåêñò:
procedure TForml.ButtonlClick(Sender: TObject);
begin
Randomize;
N:=StrToInt(Editl.Text); {÷èñëî ýëåìåíòîâ ìàññèâà}
SetLength(M, N); {çàäàòü äèíàìè÷åñêîìó ìàññèâó Ì äëèíó N}
Edit2.Text: = ' ';
for I:= 0 to N-l do {çàïîëíèòü ìàññèâ ñëó÷àéíûìè çíà÷åíèÿìè öåëûõ ÷èñåë}
begin
M[I]:= Round(Sin(Random(100))*100);
{ïðèñâîèòü ýëåìåíòó ìàññèâà ñëó÷àéíîå çíà÷åíèå}
Edit2.Text:=Edit2.Text+' '+Intostr(M[I]);
{âûâåñòè ýëåìåíòû ìàññèâà}
end;
end;
Îáðàáîòêà ñîáûòèÿ íàæàòèÿ êíîïêè Button2 «Âû÷èñëèòü» íà÷èíàåòñÿ ñ ñîðòèðîâêè ìàññèâà, êîòîðóþ ìîæíî çàïèñàòü ñ ïîìîùüþ îïåðàòîðà öèêëà for.
Äëÿ õðàíåíèÿ íîìåðà ýëåìåíòà ìàññèâà, ñðàâíèâàåìîãî ñ òåêóùèì (èìåþùèì íîìåð I) ââåäåì ïåðåìåííóþ öåëîãî òèïà J. Äëÿ çàïîìèíàíèÿ ýëåìåíòà ìàññèâà ïðè îáìåíå â ïðîöåññå ñîðòèðîâêè ââåäåì ïåðåìåííóþ Ò.
Ëèíåéíàÿ ñîðòèðîâêà ìàññèâà âûïîëíÿåòñÿ ïóòåì ïåðåñòàíîâêè ýëåìåíòîâ â ìàññèâå ïðè ñîáëþäåíèè ñëåäóþùèõ óñëîâèé: åñëè â íåîòñîðòèðîâàííîé ÷àñòè ìàññèâà íàéäåí ýëåìåíò ñ íîìåðîì J, áîëüøèé, ÷åì ýëåìåíò ñ íîìåðîì I (äëÿ ñîðòèðîâêè ïî íåâîçðàñòàíèþ), èëè ìåíüøèé, ÷åì ýëåìåíò ñ íîìåðîì I (äëÿ ñîðòèðîâêè ïî íåóáûâàíèþ). Ïîýòîìó ìîæíî çàïèñàòü ñëåäóþùèé îïåðàòîð if then else ñ ñîñòàâíûì óñëîâèåì:
if (RadioGroupl.ItemIndex=O) and (M[I]<M[J]) or (RadioGroupl.Itemlndex=l) and (M[I]>M[J]) then
Ïåðåñòàíîâêà ýëåìåíòîâ ìàññèâà îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì òðåòüåé ïåðåìåííîé:
Ò := Ì[1]; {çàïîìíèòü íà âðåìÿ çíà÷åíèå Ì[1]}
M[I] := M[J];
M[J] := Tmp;
Âûâîä îòñîðòèðîâàííîãî ìàññèâà â îêíå Edit3 ìîæíî çàïèñàòü îïåðàòîðîì:
for I:=0 to N-l do
Edi t3.Text:=Edi t3.Text+' '+IntToStr(M[I]);
 öåëîì òåêñò ïðîöåäóðû ñîðòèðîâêè è âûâîäà îòñîðòèðîâàííîãî ìàññèâà áóäåò âûãëÿäåòü ñëåäóþùèì îáðàçîì:
procedure TForml.Button2Cli ck(Sender: TObject);
var
J,T : integer;
begin
Edit3.Text: = ' ';
for I:= 0 to N - 2 do {èçìåíÿòü ðàçìåð íåîòñîðòèðîâàííîé ÷àñòè ìàññèâà}
for J:=1+1 to N-l do {ñðàâíèâàåì ïîî÷åðåäíî 1-é ýëåìåíò íåîòñîðòèðîâàííîé ÷àñòè ìàññèâà ñî âñåìè îò I+1-ãî äî êîíöà}
begin {âûáîð îïåðàöèè â çàâèñèìîñòè îò çíà÷åíèÿ ñâîéñòâà RadioGroupl.Itemlndex}
if (RadioGroupl.ItemIndex=O) and (M[I]<M[J]) or (RadioGroupl.Itemlndex=l) and (M[I]>M[J]) then
{åñëè â íåîòñîðòèðîâàííîé ÷àñòè ìàññèâà íàøëè J-é ýëåìåíò, áîëüøèé ÷åì 1-é (äëÿ ñîðòèðîâêè ïî íåâîçðàñòàíèþ) èëè ìåíüøèé ÷åì 1-é (äëÿ ñîðòèðîâêè ïî íåóáûâàíèþ)}
begin {îáìåíÿòü ìåñòàìè ýëåìåíòû ìàññèâà}
Ò := Ì[1]; {çàïîìíèòü íà âðåìÿ çíà÷åíèå Ì[1]}
Ì[1] := M[J];
M[J] := T;
end;
end;
for I:=0 to N-l do {âûâåñòè îòñîðòèðîâàííûé ìàññèâ}
Edit3.Text:=Edit3.Text+' '+IntToStr(M[I]);
end;
Ñîõðàíèòå ôàéëû ïðîåêòà è ïðîãðàììíîãî ìîäóëÿ, îòêîìïèëèðóéòå è çàïóñòèòå ïðîãðàììó íà âûïîëíåíèå. Çàäàâàÿ ðàçëè÷íûå çíà÷åíèÿ ÷èñëà ýëåìåíòîâ ìàññèâà è ùåëêàÿ ìûøüþ íà êíîïêå Ñîçäàòü ìàññèâ, ñîçäàâàéòå ëèíåéíûé ìàññèâ öåëûõ ÷èñåë. Âûáèðàÿ ïðè ïîìîùè ïåðåêëþ÷àòåëåé â ïàíåëè RadioGroupl âàðèàíò ñîðòèðîâêè è ùåëêàÿ ìûøüþ íà êíîïêå.
Ïîñëå îêîí÷àíèÿ ïðîâåðêè ðàáîòû ïðèëîæåíèÿ çàêðîéòå åãî îêíî.
|