Óïðàæíåíèå. Ñîçäàéòå ïðèëîæåíèå, êîòîðîå âûâîäèò äâóìåðíûé ìàññèâ ñëó÷àéíûõ öåëûõ ÷èñåë â îáúåêòå StringGrid è îïðåäåëÿåò ìèíèìàëüíûé è ìàêñèìàëüíûé ýëåìåíòû, à òàêæå ñóììó ýëåìåíòîâ ìàññèâà, ðàñïîëîæåííûõ íà ãëàâíîé äèàãîíàëè.
Ñîçäàéòå ôîðìó, ñâîéñòâó Caption êîòîðîé ïðèñâîéòå çíà÷åíèå «Îáðàáîòêà äâóìåðíîãî ìàññèâà». Âûáåðèòå â ïàëèòðå êîìïîíåíòîâ ñòðàíèöû Additional êîìïîíåíò StringGrid è ðàçìåñòèòå åãî â ëåâîì âåðõíåì óãëó ôîðìû. Çàäàéòå äëÿ ñâîéñòâ ColCount (êîëè÷åñòâî ñòîëáöîâ) è RowCount (êîëè÷åñòâî ñòðîê) çíà÷åíèÿ 6. Çàäàéòå äëÿ ñâîéñòâ FixedCols è FixedRows (êîëè÷åñòâî ôèêñèðîâàííûõ, íåïðîêðó÷èâàåìûõ ñòîëáöîâ è ñòðîê, èñïîëüçóåìûõ äëÿ ðàçìåùåíèÿ íàäïèñåé íîìåðîâ ñòîëáöîâ è ñòðîê).
Ñïðàâà îò îáúåêòà StringGrid ðàçìåñòèòå êíîïêó Buttonl è çàäàéòå äëÿ åå ñâîéñòâà Caption çíà÷åíèå «Çàïîëíèòü». Íèæå îáúåêòà StringGrid ðàçìåñòèòå ïàíåëü GroupBoxl è ïðèñâîéòå åå ñâîéñòâó Caption çíà÷åíèå «Îïðåäåëèòü». Íà äàííîé ïàíåëè ðàçìåñòèòå êîìïîíåíòû CheckBoxl, CheckBox2, ÑïåñêÂîõÇ è íàçíà÷üòå ñâîéñòâó Caption çíà÷åíèÿ «Ìèíèìàëüíûé ýëåìåíò», «Ìàêñèìàëüíûé ýëåìåíò», «Ñóììà ýëåìåíòîâ ãëàâíîé äèàãîíàëè», ñîîòâåòñòâåííî. Ñïðàâà îò êîìïîíåíòîâ CheckBoxl, CheckBox2, ÑïåñêÂîõÇ ðàçìåñòèòå êîìïîíåíòû Editl, Edit2, Edit3 è óäàëèòå òåêñò Editl, Edit2, Edit3 èç ñîîòâåòñòâóþùèõ êîìïîíåíòîâ. Ïðàâåå ïàíåëè GroupBoxl ðàçìåñòèòå êíîïêó Button2 è çàäàéòå äëÿ åå ñâîéñòâà Caption çíà÷åíèå «Âû÷èñëèòü».
Ñîõðàíèòå ôàéë ïðîåêòà è ïðîãðàììíîãî ìîäóëÿ. Ïðåæäå ÷åì ñîçäàâàòü îáðàáîò÷èêè ñîáûòèé ùåë÷êà ìûøüþ ïî êíîïêàì Buttonl è Button2, ñëåäóåò äîáàâèòü â ðàçäåë îïèñàíèÿ ïåðåìåííûõ äàííîãî ìîäóëÿ öåëî÷èñëåííûå ïåðåìåííûå I è J, ïðåäíàçíà÷åííûå äëÿ õðàíåíèÿ èíäåêñîâ ìàññèâà (I – íîìåð ñòîëáöà, J – íîìåð ñòðîêè).
var
Forml : TForm1;
I, J : integer;
Äëÿ ïîëó÷åíèÿ ïîäñêàçêè Delphi ïî îáúåêòó StringGridl, óêàçàâ îáúåêò, íàæìèòå F1.  îêíå Delphi Help ïðîñìîòðèòå îáùóþ èíôîðìàöèþ î íàçíà÷åíèè îáúåêòà. Ùåëêíóâ ìûøüþ ïî ññûëêå Properties (Ñâîéñòâà), îòêðîéòå îêíî ñî ñïèñêîì ñâîéñòâ îáúåêòà, è, âûáèðàÿ íóæíûå ñâîéñòâà, íàïðèìåð, Cells, ColCount è ò. ï., ïðîñìîòðèòå ñïðàâî÷íóþ èíôîðìàöèþ. Äëÿ âîçâðàòà ê ïðåäûäóùåìó ýêðàíó ñïðàâêè âîñïîëüçóéòåñü êíîïêîé Íàçàä â ïàíåëè èíñòðóìåíòîâ îêíà Delphi Help. Ùåëêàÿ ìûøüþ ïî ññûëêàì Methods (Ìåòîäû) è Events (Ñîáûòèÿ), ïðîñìîòðèòå ñïèñîê ìåòîäîâ è ñîáûòèé îáúåêòà. Äëÿ ïðîñìîòðà ïðèìåðîâ ñëåäóåò ùåëêíóòü ìûøüþ ïî ññûëêå Example. Çàâåðøèâ ïðîñìîòð ñïðàâî÷íîé èíôîðìàöèè, çàêðîéòå îêíî Delphi Help.
Ñîçäàéòå ïðîöåäóðó îáðàáîò÷èêà ñîáûòèÿ ùåë÷êà ìûøüþ íà êíîïêå Buttonl, â êîòîðîé ñíà÷àëà áóäåò âûïîëíåíà îïåðàöèÿ âûâîäà íîìåðîâ ñòðîê è ñòîëáöîâ, à çàòåì ÿ÷åéêè StringGridl áóäóò çàïîëíåíû ñëó÷àéíûìè öåëûìè ÷èñëàìè. Äëÿ ýòîãî âûáåðèòå â îêíå Èíñïåêòîðà îáúåêòîâ îáúåêò Buttonl è íà ñòðàíèöå Ñîáûòèÿ ïðîèçâåäèòå äâîéíîé ùåë÷îê íà ïóñòîì ïîëå ñïèñêà â ñîáûòèè OnClick. Ïîñëå ýòîãî îòðåäàêòèðóéòå çàãîòîâêó ïðîöåäóðû îáðàáîò÷èêà ýòîãî ñîáûòèÿ ñëåäóþùèì îáðàçîì:
procedure TForml.ButtonlClickCSender: TObject);
{çàïîëíåíèå ìàññèâà}
begin
Randomize;
with StringGridl do {âûâåñòè íîìåðà ñòðîê â 0-ì ñòîëáöå è ñòîëáöîâ â 0-é ñòðîêå}
begin
1:=0; {ñòîëáåö 0}
for J:= 1 to RowCount - 1 do {âûâåñòè íîìåðà ñòðîê}
Cells[I,J] := IntToStr(J);
J:=0; {ñòðîêà 0}
for I:= 1 to ColCount - 1 do {âûâåñòè íîìåðà ñòîëáöîâ}
Cells[I,J] := IntToStr(I);
end;
with StringGridl do {âûâåñòè â òàáëèöå ýëåìåíòû äâóìåðíîãî ìàññèâà}
for I := 1 to ColCount - 1 do for J:= 1 to RowCount - 1 do
begin
Cells[I,J] := IntToStr(Round(Sin(Random(100))*100));
end;
end;
Äëÿ ñîçäàíèÿ ïðîöåäóðû îáðàáîòêè ìàññèâà âûáåðèòå â îêíå Èíñïåêòîðà îáúåêòîâ îáúåêò Button2 è íà ñòðàíèöå Ñîáûòèÿ ïðîèçâåäèòå äâîéíîé ùåë÷îê íà ïóñòîì ïîëå ñïèñêà â ñîáûòèè OnClick. Ïîñëå ýòîãî îòðåäàêòèðóéòå çàãîòîâêó ïðîöåäóðû îáðàáîò÷èêà ýòîãî ñîáûòèÿ ñëåäóþùèì îáðàçîì:
procedure TForml.Button2Click(Sender: TObject); {îáðàáîòêà ìàññèâà}
var
Min, Max, Sum : Integer; {ëîêàëüíûå ïåðåìåííûå – ðåçóëüòàòû îáðàáîòêè ìàññèâà}
begin
if Checkbox1.Checked then {îïðåäåëåíèå Min-ýëåìåíòà}
with StringGrid1 do begin
Min:=StrToInt(Cells[l,l]); {ïóñòü - ýòî Min-ýëåìåíò}
for I := 1 to ColCount - 1 do
for J:= 1 to RowCount - 1 do
if StrToInt(Cells[I,J])
Min:=StrToInt(Cells[I,J]);
Edit1.Text:=IntToStr(Min):
end
else Edit1.Text:=";
if Checkbox2.Checked then {îïðåäåëåíèå Ìàõ-ýëåìåíòà}
with StringGrid1 do begin
Max:=StrToInt(Cells[l,l]); {ïóñòü - ýòî Ìàõ-ýëåìåíò}
for I := 1 to ColCount - 1 do
for J:= 1 to RowCount - 1 do
if StrToInt(Cells[I,J])>Max then
Max:=StrToInt(Cells[I,J]);
Edit2.Text:=IntToStr(Max);
end
else Edit2.Text: = ";
if Checkbox3.Checked then {âû÷èñëåíèå Sum}
with StringGrid1 do
begin
Sum:=0; {îáíóëèòü çíà÷åíèå ñóììû ïåðåä ïîäñ÷åòîì}
for i := 1 to ColCount - 1 do
Sum:=Sum+StrToInt(Cells[I,I]);
Edit3.Text:=IntToStr(Sum);
end
else
Edit3.Text:='';
end;
Êàê âèäíî èç òåêñòà ïðîöåäóðû, â íåé èìååòñÿ òðè ôðàãìåíòà, êàæäûé èç êîòîðûõ âûïîëíÿåò âû÷èñëåíèÿ, åñëè ñâîéñòâî Checked ñîîòâåòñòâóþùåãî ôëàæêà (Checkbox1, Checkbox2 èëè Checkbox3) èìååò çíà÷åíèå True. Îïåðàòîðû òèïà Edit1.Text:="; Edit2.Text:="; Edit3.Text:="; îáåñïå÷èâàþò î÷èñòêó ñîîòâåòñòâóþùåãî îêíà Edit, åñëè âû÷èñëåíèå íå ïðîâîäèëîñü. Äëÿ îáðàùåíèÿ ê ýëåìåíòó ìàññèâà, ðàñïîëîæåííîìó íà ãëàâíîé äèàãîíàëè StringGrid1, óêàçûâàåòñÿ îäèíàêîâûé íîìåð ñòðîêè è ñòîëáöà Cells[I,I].
Ñîõðàíèòå ôàéëû ïðîåêòà è ïðîãðàììíîãî ìîäóëÿ, îòêîìïèëèðóéòå è çàïóñòèòå ïðîãðàììó íà âûïîëíåíèå. Ùåëêíóâ ìûøüþ íà êíîïêå Çàïîëíèòü, ïðîâåðüòå çàïîëíåíèå íàäïèñåé íîìåðîâ ñòðîê è ñòîëáöîâ, à òàêæå çàïîëíåíèå îáúåêòà StringGrid çíà÷åíèÿìè ýëåìåíòîâ äâóìåðíîãî ìàññèâà. Óáåäèòåñü, ÷òî ïðèëîæåíèå ïðàâèëüíî îáðàáàòûâàåò äâóìåðíûé ìàññèâ: îïðåäåëÿåò ìèíèìàëüíîå è ìàêñèìàëüíîå çíà÷åíèå, âû÷èñëÿåò ñóììó ýëåìåíòîâ íà ãëàâíîé äèàãîíàëè.
Ïîñëå ïðîâåðêè ðàáîòû ïðèëîæåíèÿ çàêðîéòå åãî îêíî.
|