Консультация № 159930
08.02.2009, 14:17
0.00 руб.
0 2 2
Здравствуйте. Уважаемые эксперты, для вас мой вопрос , возможно, покажется простым и наивным, но у меня, как начинающего, это вызвало затруднение. Суть вот в чем. В окне memo1 набирается вручную произвольный одномерный массив из целых чисел. Нужно определить четные числа и вывести полученный массив (с четными числами) в окно memo2.
Я думаю использовать функцию Odd(n) со значением not, но реализовать это на практике у меня, что-то не получается.

Обсуждение

Неизвестный
08.02.2009, 15:50
общий
это ответ
Здравствуйте, Vlad9240!
вот пример: URL >>парсер массива мемо

Приложение:
procedure TForm1.Button1Click(Sender: TObject);
var s,s1:String;
i,j,x,a:integer;
begin
for i:= 0 to Memo1.Lines.Count-1 do // пока есть линии
begin
s := Memo1.Lines[i]; // получаем первую строку
j := length(s); // получаем её размер
s1 := ''; // очищаем временную переменную с числом (в строке)
for x:=1 to j+2 do // пока не кончится строка
begin
if (s[x] <> ' ') and (s[x] <> '') then // если это не пробел и не конец строки
s1 := s1+s[x] // складываем символ
else // иначе
if s1 <> '' then // если s1 не пустая
begin
a := StrToIntDef(s1,0) mod 2; // смотрим на деление на 2 (четное)
if a = 0 then // если делится без остатка, значит четное
Memo2.Text := Memo2.Text + ' '+s1; // к Memo2 добовляем число
s1 := ''; // очищаем переменную
end;
end;
Memo2.Lines.Add(''); // добавляем строку.
end;
end;
Неизвестный
08.02.2009, 16:02
общий
это ответ
Здравствуйте, Vlad9240!
Попробуйте развить такой вариант

Приложение:
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
s: String;
begin
// если массив не задан вываоливаемся
if length(trim(Memo4.Lines.Text)) = 0 then
Exit;
// зададим начальные значения
i := 0;
s := '';
// очистим Memo вывода
Memo5.Lines.Clear;
// просмотрим Memo в цикле
while i <= length(Memo4.Lines.Text) do
begin
// предполагается, что разделитель - пробел
if Memo4.Lines.Text[i] <> ' ' then
s := s + Memo4.Lines.Text[i]
else
begin
// если встретили пробел
// проверим значение предварительно удалив лишние пробелы
// для преобразования строки в число используем StrToInt
// при соответствии условию добавим его в Memo5
s := trim(s);
if not odd(StrToInt(s)) then
Memo5.Lines.Text := Memo5.Lines.Text + s + ' ';
// сбросим временную строку
s := '';
end;
i := i + 1;
end;
end;
Форма ответа