![]() |
|
|
#1
|
|||
|
|||
|
При нажатии на button1 получается результат в memo:
| 1 | 2 | 3 | 4 | 5 | 6 а нужно так: | 1 | 4 | 2 | 5 | 3 | 6 Как сделать?) Код:
private
Edits:array[1..3,1..1] of TEdit;
Edits2:array[1..3,1..1] of TEdit;
Results:array[1..3,1..1] of integer;
Results2:array[1..3,1..1] of integer;
public
...
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
const
StartIndex:array[1..3]of integer=(1,2,3);
StartIndex2:array[1..3]of integer=(4,5,6);
var
i,j, i2,j2: Integer;
begin
for i:=1 to 3 do
for j:=1 to 1 do
Edits[i,j]:=TEdit(FindComponent('Edit'+Inttostr((StartIndex[i]+j-1))));
for i2:=1 to 3 do
for j2:=1 to 1 do
Edits2[i2,j2]:=TEdit(FindComponent('Edit'+Inttostr((StartIndex2[i2]+j2-1))));
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, i2, j2: Integer;
StrResult, StrResult2, s, s2 : String;
begin
Label1.Caption := '1';
Button2Click(nil);
StrResult := '';
StrResult2 := '';
//--------------
for j := 1 to 3 do
begin
s := '';
for i := 1 to 1 do
s := s + ' | ' + IntToStr(Results[j, i]);
StrResult := StrResult + s + #13#10;
end;
for i := 1 to 3 do
for j := 1 to 1 do
Results[i, j] := 0;
//--------------
for j2 := 1 to 3 do
begin
s2 := '';
for i2 := 1 to 1 do
s2 := s2 + ' | ' + IntToStr(Results2[j2, i2]) + ' | ' + IntToStr(Results[j, i]);
StrResult2 := StrResult2 + s2 + #13#10;
end;
for i2 := 1 to 3 do
for j2 := 1 to 1 do
Results2[i2, j2] := 0;
//--------------
Memo1.Lines.Text := StrResult2;
//Memo2.Lines.Text := ;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i,j, i2,j2: Integer;
begin
Label1.Caption:=IntToStr(StrToInt(Label1.Caption)+1);
for i:=1 to 3 do
begin
for j:=1 to 1 do
begin
inc(Results[i,j],StrToIntDef(Edits[i,j].Text,0));
Edits[i,j].Text:='0';
end;
end;
for i2:=1 to 3 do
begin
for j2:=1 to 1 do
begin
inc(Results2[i2,j2],StrToIntDef(Edits2[i2,j2].Text,0));
Edits2[i2,j2].Text:='0';
end;
end;
end; |
|
#2
|
|||
|
|||
|
Код:
const
S : String = '123456';
var
I : Integer;
Buf : String;
begin
For I := 1 To Length(S) div 2 Do
Begin
Buf := '|' + S[i];
If I*2 <= Length(S) Then Buf := Buf + '|' + S[I*2];
Memo1.Lines.Add(Buf);
End;
end; |
| Этот пользователь сказал Спасибо lmikle за это полезное сообщение: | ||
GrabbeR (25.02.2014)
| ||
|
#3
|
||||
|
||||
|
Если принципиально использование массива, то тогда вот
Код:
...
// Memo1: TMemo;
// Button1: TButton;
// Edit1: TEdit;
...
procedure TForm1.Button1Click(Sender: TObject);
var
i, cnt: integer;
arr: array of string; //integer;
s: string;
begin
// Edit1.Text:= '1 2 3 4 5 6';
cnt:= 0;
// кол-во чисел в строке
for i := 1 to Length(Edit1.Text) do
if Edit1.Text[i] = ' ' then Inc(cnt);
// инициализация массива
SetLength(arr, cnt+1);
s:= '';
cnt:= 0;
// заполнение массива
for i:= 1 to Length(Edit1.Text) do
begin
if Edit1.Text[i] <> ' ' then s:= s + Edit1.Text[i];
if (Edit1.Text[i] = ' ') or (i = Length(Edit1.Text)) then
begin
arr[cnt]:= s; //StrToInt(s);
s:= '';
Inc(cnt);
end;
end; {for i}
// определяем кол-во строк в Memo1
cnt:= Length(arr) div 2;
if Length(arr) mod 2 > 0 then Inc(cnt); // не четный ряд
Memo1.Clear;
// и собсно сам лисапет с заполнением Memo
for i := 0 to cnt-1 do
begin
// элемент первого столбца
s:= '| ' + arr[i];//IntToStr(arr[i]);
// элемент колонки 2
if i * 2 < Length(arr)-1 then
s:= s + ' | ' + arr[cnt+i] //IntToStr(arr[i])
else
s:= s + ' | '; // пустышка на случай нечётного размера
Memo1.Lines.Add(s);
end; {for i}
end; |
| Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
GrabbeR (25.02.2014)
| ||
|
#4
|
|||
|
|||
|
Спасибо, помогли разобраться следующим способом:
Код:
Memo1.Clear;
for i:=1 to 3 do
begin
Memo1.Lines.Add(Format(' | %d | %d',[Results[i,1],Results2[i,1]]));
Results[i,1]:=0;
Results2[i,1]:=0;
end; |
|
#5
|
|||
|
|||
|
Народ, там есть куда более простое решение!
|
|
#6
|
|||
|
|||
|
Цитата:
|