1. Задача - Конфети
Движение:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Randomize;
shape1.Left:=Random(200);
shape1.Top:=Random(300);
Цвет:
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Form1.Shape1.Brush.Color:=RGB(Random(256), Random(256), Random(256));
Размер:
Form1.Shape1.Height:=Random(150)+70;
Итого, 2 таймера и сколько нужно Shape.
2. Задание массива
Заполняем двумерный массив в StringGrid рандомно:
procedure TForm1.ButtonRandomClick(Sender: TObject);
var i,j:integer;
begin
i:=1;j:=1;
for j:=1 to Form1.StringGrid1.RowCount do
for i:=1 to Form1.StringGrid1.ColCount do
StringGrid1.Cells[i-1,j-1]:=FloatToStr(random(1000)+random(10)*random(100));
end;
Смена диагоналей 1 вариант:
seGA*: масссив ты создаш двумерный, далее его в стринггрид занесешь
seGA*: теперь у тебя получается например 5 элементов строки и 5 элементов по диагонали, ну это зависит от размерности массива
seGA*: далее создаешь цикл фор на 5 действий
seGA*: теперь следует определится с индексами элементов, т.е. просто представить какие индексы имеют элементы строки и диагонали
seGA*: строки имеют индексы 11 21 31 41 51 например
seGA*: а диагонали 11 22 33 44 55
seGA*: теперь придумать зависимость чтобы 11 остался на месте 21 поменялся с 22 31 с 33 ит.д.
for i:=1 to max do
begin
x:=a[1,i];
a[1,i]:=a[i,i];
a[i,i]:=x;
end;
for i:=1 to max do
for j:=1 to max do
StringGrid5.Cells[i-1,j-1]:=inttostr(a[i,j]);
seGA*: замена всегда производится через переменную
seGA*: в данном примере х
Смена диагоналей 2 вариант:
procedure TForm1.ButtonDiagonaliClick(Sender: TObject);
var i,j:integer;
buf: string;
begin
i:=0; j:=0;
while i <= (n-1) do
begin
buf:=StringGrid1.Cells[i,j];
StringGrid1.Cells[i,j]:=StringGrid1.Cells[(n-1-i),j];
StringGrid1.Cells[(n-1-i),j]:=buf;
i:=i+1; j:=j+1;
end;
Размер:
procedure TForm1.ButtonRazmerClick(Sender: TObject);
begin
n:=StrToInt(Form1.EditRazmer.Text);
Form1.StringGrid1.RowCount:=n;
Form1.StringGrid1.ColCount:=n;
end;
Порядок:
procedure TForm1.ButtonPoryadokClick(Sender: TObject);
var i,j,k,buf: integer;
b:array of integer;
f:boolean;
begin
i:=1; j:=1; k:=1;
SetLength(b, (n*n));
for j:=1 to n do
for i:=1 to n do
begin
b[k]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
k:=k+1;
end;
repeat
f:=false;
for k:=1 to (n*n) do
begin
if b[k]>b[k+1] then
begin
f:=true;
buf:=b[k];b[k]:=b[k+1];b[k+1]:=buf;
end;
end;
until not f;
k:=1;
for j:=1 to Form1.StringGrid1.RowCount do
for i:=1 to Form1.StringGrid1.ColCount do
begin
StringGrid1.Cells[i-1,j-1]:=IntToStr(b[k]); k:=k+1;
end;
end;
Сумма элементов:
var
Form1: TForm1;
byteArray : Array of Byte;
i,j,k : Integer;
begin
SetLength(byteArray, 5);
ShowMessage('Длина массива = '+IntToStr(Length(byteArray)));
for i := 0 to 4 do
byteArray:=i*(22);
j:=byteArray[1]+byteArray[3]+byteArray[5];
k:=byteArray[2]+byteArray[4];
ShowMessage('byteArray элемент 1 = '+IntToStr(byteArray[1])+','+#13#10+
'byteArray элемент 2 = '+IntToStr(byteArray[2])+
','+#13#10+'byteArray элемент 3 = '+IntToStr(byteArray[3])+
','+#13#10+'byteArray элемент 4 = '+IntToStr(byteArray[4])+
','+#13#10+'byteArray элемент 5 = '+IntToStr(byteArray[5])+
','+#13#10+'сумма нечетных элементов = '+IntToStr(j)+
',''сумма четных элементов = '+IntToStr(k));
ShowMessage('элемент массива 4 = '+IntToStr(byteArray[4]));
ShowMessage('сумма нечетных элементов = '+IntToStr(j));
ShowMessage('сумма четных элементов = '+IntToStr(k));