![]() |
|
|
Регистрация | << Правила форума >> | 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
|
|||
|
|||
![]() Как, задача поставлена, такой и ответ. Если что то конкретно надо обьяснить напиши.
|
#7
|
|||
|
|||
![]() Я не иронизирую. Ваши советы мне действительно помогли. Вы абсолютно правильно поняли постановку задачи. Оба кода полностью соответствуют моей проблеме! Еще раз спасибо за предложенные решения. Сейчас пытаюсь развивать свой проектик дальше до следующего творческого ступора.
![]() |
#8
|
|||
|
|||
![]() Продолжение той же проблемки.
Как сделать, чтобы в стринггриде(или в мемо2), вместо чисел из списка в строчку выходили их названия по примеру: 8:=Element1; 9:=Element2; 10:=Element3; 11:=Element4; 13:=Element5; 14:=Element6; 15:=Element7; 30:=Element8; 44:=Element9; 55:=Element10; 91:=Element11; 183:=Element12; |
#9
|
||||
|
||||
![]() Цитата:
В начале был Бит, потом Байт и только потом появилось Слово... |
#10
|
|||
|
|||
![]() Чтобы прога выдавала в строчку не цифорки элементов, а к примеру Element1, Element2 и т.д. Присвоение значение этих ElementN указанно в моем предыдущем посте.
|