Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.03.2010, 12:10
pavarotti pavarotti вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 19
Репутация: -10
Стрелка Вопрос по компоненту Memo

как организовать немного специфичную работу 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  
Старый 09.03.2010, 12:35
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Закинуть элементы в масив, и суммировать в цикле. Спрашивайте конкретнее, что не понятно.
Ответить с цитированием
  #3  
Старый 09.03.2010, 13:34
Asinkrit Asinkrit вне форума
Местный
 
Регистрация: 29.10.2009
Сообщения: 446
Репутация: 271
По умолчанию

Простая задача, держи:

Код:
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  
Старый 09.03.2010, 14:20
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Вот еще вариант, тут строчки с суммами 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: Пользуемся тегами! При рецедиве - бан!

Последний раз редактировалось Admin, 12.03.2010 в 11:58.
Ответить с цитированием
  #5  
Старый 12.03.2010, 10:59
pavarotti pavarotti вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 19
Репутация: -10
Радость Всем большое спасибо!

Просто тащусь от таких конструктивных и ёмких ответов!
Коды действительно очень помогли, copy-paste и всё заработало как швейцарские часы!
Спасибо вам, ребята! Просмотрел и продумал предложенные коды - теперь буду знать как полноценно работать с memo и listbox'ом в подобной ситуации!
Ответить с цитированием
  #6  
Старый 12.03.2010, 11:54
Taddy23 Taddy23 вне форума
Новичок
 
Регистрация: 28.04.2009
Сообщения: 54
Репутация: 10
По умолчанию

Как, задача поставлена, такой и ответ. Если что то конкретно надо обьяснить напиши.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:51.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025