Форум по 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
По умолчанию

Как, задача поставлена, такой и ответ. Если что то конкретно надо обьяснить напиши.
Ответить с цитированием
  #7  
Старый 12.03.2010, 12:06
pavarotti pavarotti вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 19
Репутация: -10
Радость :)

Я не иронизирую. Ваши советы мне действительно помогли. Вы абсолютно правильно поняли постановку задачи. Оба кода полностью соответствуют моей проблеме! Еще раз спасибо за предложенные решения. Сейчас пытаюсь развивать свой проектик дальше до следующего творческого ступора. Как застряну, снова обращусь сюда за помощью.
Ответить с цитированием
  #8  
Старый 12.03.2010, 13:02
pavarotti pavarotti вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 19
Репутация: -10
По умолчанию Вот новый ступор и пришел... :)

Продолжение той же проблемки.
Как сделать, чтобы в стринггриде(или в мемо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  
Старый 12.03.2010, 14:10
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Цитата:
вместо чисел из списка в строчку выходили их названия
Названия чего? Чисел? Или к каждому числу привязано какое то название? Можно конкретней?
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #10  
Старый 17.03.2010, 14:55
pavarotti pavarotti вне форума
Прохожий
 
Регистрация: 28.11.2009
Сообщения: 19
Репутация: -10
Сообщение Вот я и о чем...

Чтобы прога выдавала в строчку не цифорки элементов, а к примеру Element1, Element2 и т.д. Присвоение значение этих ElementN указанно в моем предыдущем посте.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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