![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
как организовать немного специфичную работу c memo?
Постановка задачи: В memo выводится список чисел, вроде: 9 55 15 11 9 44 15 14 8 9 44 15 13 9 9 44 14 13 10 9 44 14 13 10 9 44 10 10 (все элементы разделены между собой пробелом или скажем знаком +). Как можно работать с этими данными? Т.е. скажем, например начать складывать, начиная с первого с каждым последующим пока не получится определенная сумма, например 90 (9 55 15 11). Как только 90 набралось, программа выводит использованные элементы скажем в Listbox. Затем возвращается в memo и считает последующие элементы, отбросив предыдущие, и также считает до 90 (9 44 15 14 8) и выносит, использованные на этот раз элементы в следующую строку в Listbox'e. И так до конца списка элементов. О том, что должно обязательно получится именно 90, уже заранее известно. |
|
#2
|
||||
|
||||
|
Закинуть элементы в масив, и суммировать в цикле. Спрашивайте конкретнее, что не понятно.
|
|
#3
|
|||
|
|||
|
Простая задача, держи:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
tmpStr, tmpStr2:String;
i,s,n:integer;
begin
with ListBox1.Items do
begin
BeginUpdate;
Clear;
tmpStr:='';
tmpStr2:='';
S:=0;
if Length(Memo1.Text) > 0 then
for i:=1 to Length(Memo1.Text) do
if Memo1.Text[i] in [#32, #13, #10] then
begin
if TryStrToInt(tmpStr,N) then
if N > 0 then
begin
if S+N <= 90 then
begin
Inc(S,N);
tmpStr:='';
end
else
begin
Add(tmpStr2+' = '+IntToStr(S));
tmpStr:='';
tmpStr2:='';
S:=N;
end;
tmpStr2:=tmpStr2+IntToStr(N)+' ';
end
end
else tmpStr:=tmpStr+Memo1.Text[i];
EndUpdate;
end;
end; |
|
#4
|
|||
|
|||
|
Вот еще вариант, тут строчки с суммами 90 выводятся во 20-ое мемо окошко, и учитывалось что числа разделены +
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
k:array of integer;
a,b,с:string;
i,S:integer;
begin
i,j:=0;
b:=memo1.lines.text; // мемо1 - в котором искомая строка чисел
while pos('+',b)>0 do // это если числа разделены + если пробелом то #9
begin
a:=b;
delete(a,pos('+',a),length(a));
try
k[i]:=strtoint(a);
except
k[i]:=0;
end;
delete (b,1,pos('+',b));
i:=i+1;
if pos('+',b)>0 then
try
k[i+1]:=strtoint(b);
except
k[i+1]:=0;
end;
end;
S:=0;
l:=1;
for i:=1 to length(k) do
begin
S:=S+k[i];
if S=90 then // если суммы будут точно равны 90
begin
for j:=l to i do
begin
c:=c+' '+inttostr(k[j]);
memo2.lines.add(c); //выводим строчку с числами во 2-е мемо окошко
end;
l:=i+1;
S:=0;
end;
end;
end;Последний раз редактировалось Admin, 12.03.2010 в 11:58. |
|
#5
|
|||
|
|||
|
Просто тащусь от таких конструктивных и ёмких ответов!
Коды действительно очень помогли, copy-paste и всё заработало как швейцарские часы! Спасибо вам, ребята! Просмотрел и продумал предложенные коды - теперь буду знать как полноценно работать с memo и listbox'ом в подобной ситуации! |
|
#6
|
|||
|
|||
|
Как, задача поставлена, такой и ответ. Если что то конкретно надо обьяснить напиши.
|