![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Как, задача поставлена, такой и ответ. Если что то конкретно надо обьяснить напиши.
|