unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Label1: TLabel;
Label3: TLabel;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Memo1KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
type TIntArray = array of integer; // массив динамический, мы можем хранить сколько угодно чисел
{$R *.dfm}
{
Здравствуйте эксперты.
Помогите мне разобраться в следующей задаче. Программа Delphi 8.0.
Дана последовательность произвольных целых чисел. Два массива. Ввести 30 проивольных чисел в Memo1.
Определить в последовательности номера всех четных значений и вывести найденный массив из четных чисел в Memo2.
Определить количество элементов в полученном массиве и вывести в Label3.
При решении не удается обработать массив.
}
// функция разделяет строку на числа
function SplitStringToInt(src,delim:String):TIntArray;
var s:String;
x,i,z:integer;
begin
z := Pos(delim,src)-1;
if(z <=1)then exit;
s := Copy(src,1,z);
src := Copy(src,z+2,length(src));
i := 0;
while(s <> '')do
begin
SetLength(result,i+1);
result[i] := StrToIntDef(s,0);
inc(i);
z := Pos(delim,src)-1;
if z<= 0 then
begin
SetLength(result,i+1);
result[i] := StrToIntDef(src,0);
break;
end;
s := Copy(src,1,z);
src := Copy(src,z+2,length(src));
end;
end;
//--------------- функция получает массив целых чисел---------------------------
function GetEvenNumber({в hint сохраним номера}var hint:String;a:TIntArray):TIntArray;
var j,i,n:integer;
begin
j := 0;
n := length(a);
SetLength(result,n);
for i:=0 to n-1 do
begin
if a[i] mod 2 = 0 then
begin
hint := Format('%s-%d',[hint,i]);
SetLength(result,j+1);
result[j] := a[i]; inc(j);
end;
end;
end;
//------------------------------------------------------------------------------
procedure TForm1.Button1Click(Sender: TObject);
var i,n:integer;
s:String;
ar:TIntArray;
begin
s := Trim(Memo1.Text);
s := AnsiReplaceStr(s,#$D,' ');
s := AnsiReplaceStr(s,#$A,'');
if(length(s) <=0) then
begin
MessageBox(GetActiveWindow,'Не заполненны числа','Ошибка',MB_OK+MB_ICONSTOP);
Memo1.SetFocus;
exit;
end;
ar := SplitStringToInt(s,' ');
if(ar = nil) then exit
else
begin
Memo2.Clear;
s := '';
ar := GetEvenNumber(s,ar);
Label3.Caption := Format('Четные элементы в следующих позияциях:'#13+'%s',[s]);
n := length(ar);
Label1.Caption := Format('Всего найдено четных элементов: %d',[n]);
for i:=0 to n-1 do
Memo2.Lines.Add(IntToStr(ar[i]));
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Label3.WordWrap := true;
Label3.Height := 42;
Memo1.WordWrap := false;
end;
procedure TForm1.Memo1KeyPress(Sender: TObject; var Key: Char);
begin
if not (key in['.'..'9',' ']) then Key := #0; //запрет вводить не числа и пробел
end;
end.
Если Вы уже зарегистрированы на Портале - войдите в систему, если Вы еще не регистрировались - пройдите простую процедуру регистрации.