Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.09.2018, 08:48   #11
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Всем спасибо. Буду пробовать вариант от Аватара, придется немного подкоректировать его.
Astrola вне форума Ответить с цитированием
Старый 13.09.2018, 09:43   #12
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Аватар, (если не трудно) можете изменить свой код под стринггриды.
У меня он обрастает ненужными циклами, долго пытался но не осилил, к примеру строка "for ti:=Low(p) to High(p) do begin" у меня после переписания создает ещё два цикла для перебора столбцов и строк стринггрида в итоге опять запутался в циклах.
Сам код вроде понятный, но когда переписываю под таблицы путаюсь в параметрах.
Astrola вне форума Ответить с цитированием
Старый 13.09.2018, 09:48   #13
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Сделайте функцию, которая просто принимает список слов (или что там у вас) и возвращает список с результатами (TStringList, ...) без всяких GUI компонентов.

Потом вызывайте ее и записывайте результат в стрингрид или куда там вам надо.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.09.2018, 09:51   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Сделайте функцию, которая просто принимает список слов (или что там у вас)
Так ему как раз это и надо - получить заданные списки слов.


Цитата:
Сообщение от Astrola Посмотреть сообщение
Сам код вроде понятный, но когда переписываю под таблицы путаюсь в параметрах.
Не переписывайте код под таблицы.
Напишите код, который объявляет динамические массивы и заполняет их данными из StringGrid.
Потом вызывайте код (с) Аватар и передавайте ему подготовленные массивы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.09.2018, 10:17   #15
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Так ему как раз это и надо - получить заданные списки слов.



Не переписывайте код под таблицы.
Напишите код, который объявляет динамические массивы и заполняет их данными из StringGrid.
Потом вызывайте код (с) Аватар и передавайте ему подготовленные массивы.
а насколько это будет правильно, копировать данные которые уже есть в таблице в массив (это ещё циклы) а потом обрабатывать его циклами, когда можно сразу обрабатывать данные напрямую из таблиц?
Astrola вне форума Ответить с цитированием
Старый 13.09.2018, 10:30   #16
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Примерно на 100500 раз "правильнее", чем обращаться к GUI компонентам везде.
Например не придется переписывать основную логику если вдруг понадобится не стрингрид, или сразу разные компоненты, или вообще не GUI.
И проще читать/писать код, меньше риск ошибки.
И проще тестировать автоматическими тестами.
Ну и в некоторых случаях работа с GUI компонентами может быть просто медленнее (например если много раз читать одно и то же оттуда или писать туда временные/промежуточные данные).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 13.09.2018, 10:55   #17
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
динамические массивы
только учти - индексация в динамических массивах с 0, а у тебя в правилах индексы колонок с 1. Только поэтому массивы объявлял с 1

зы

да, и for ti:=Low(p) to High(p) do это цикл по строкам. Откуда там еще два цикла?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 13.09.2018 в 11:38.
Аватар вне форума Ответить с цитированием
Старый 12.04.2019, 11:19   #18
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

К сожалению так и не получилось собрать всё в кучу, помогите переписать код Аватара под стринггриды вывод информации также в стринггрид.
В коде непонятен параметр "Maxj" где он берется как вычисляется и когда ему присваивается значение, вижу только сравнение с ним.

Последний раз редактировалось Astrola; 12.04.2019 в 11:50.
Astrola вне форума Ответить с цитированием
Старый 17.04.2019, 11:49   #19
Astrola
Пользователь
 
Регистрация: 04.09.2018
Сообщений: 16
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  i,j,k,akol,arow,w: Integer;
procedure Rec(Text: String; i1,j1,Maxj: Integer);
var
  ti: Integer;
  s: String;
begin
  for ti:=Low(p) to High(p) do
  begin
    if p[ti,r[i1,j1]]=''
    then Exit;
    s:=Text+p[ti,r[i1,j1]]+' ';
    if j1=Maxj
    then
    begin
      // вывод результата в таблицу 1 в указанный столбец начиная с указанной позиции
      StringGrid1.Cells[2,w+2]:=s;
      inc(w);
    end
    else Rec(s,i1,j1+1,Maxj);
  end;
end;
begin
  w:=0;
  // заполняем (p) массив из таблицы 2
  SetLength(p,0,0);
  SetLength(p,StringGrid2.ColCount,StringGrid2.RowCount);
  for akol:=0 to StringGrid2.ColCount-1 do
    for arow:=0 to StringGrid2.RowCount-1 do
      if StringGrid2.Cells[akol,arow]<>''
      then p[akol,arow]:=StringGrid2.Cells[akol,arow];
  // заполняем (r) массив из таблицы 3
  SetLength(r,0,0);
  SetLength(r,StringGrid3.ColCount,StringGrid3.RowCount);
  for akol:=0 to StringGrid3.ColCount-1 do
    for arow:=0 to StringGrid3.RowCount-1 do
      if StringGrid3.Cells[akol,arow]<>''
      then r[akol,arow]:=strtoint(StringGrid3.Cells[akol,arow]);

  for i:=Low(r) to High(r) do
  begin
    k:=-1;
    for j:=Low(r[i]) to High(r[i]) do
      if r[i,j]=0
      then Break
      else k:=j;
    if k<>-1
    then Rec('',i,Low(r[i]),k);
  end;
  ShowMessage('Обработка завершена.');
end;
*********************************** ****************
переделал под стринггриды из кода

Цитата:
Сообщение от Аватар Посмотреть сообщение
А разберешься?
Код:
const r: array[1..3, 1..3] of Integer = ((2,3,1),(2,1,0),(1,2,4)); //правила
      p: array[1..5, 1..4] of String  = (('стол','собрать','красный','пластмассовый'),
                                         ('стул','настроить','синий','керамический'),
                                         ('лампа','починить','белый','деревянный'),
                                         ('диван','','','бумажный'),
                                         ('кровать','','','гипсовый'));

procedure TForm1.Button1Click(Sender: TObject);
var i,j,k: Integer;
procedure Rec(Text: String; i1,j1,Maxj: Integer);
var ti,tn: Integer;
    s: String;
begin
  for ti:=Low(p) to High(p) do begin
    if p[ti,r[i1,j1]]='' then Exit;
    s:=Text+p[ti,r[i1,j1]]+' ';
    if j1=Maxj then Memo1.Lines.Add(s)
    else Rec(s,i1,j1+1,Maxj);
  end;
end;
begin
  for i:=Low(r) to High(r) do begin
    k:=-1;
    for j:=Low(r[i]) to High(r[i]) do if r[i,j]=0 then Break else k:=j;
    if k<>-1 then Rec('',i,Low(r[i]),k);
    Memo1.Lines.Add('');
  end;
end;
*********************************** *************
вывод результата по правилу 1 2 3 4:

стул
настроить
синий
керамический
лампа
починить
белый
деревянный
диван
кровать

и это всё, что я делаю не так?

*********************************** *************
должно быть :

стол собрать красный пластмассовый
стул собрать красный пластмассовый
...
перебор всех варантов




как в сообщениях сохранять табуляцию?

______________________
Используйте тег [CODE] (кнопка [CODE] в форме сообщения) при вставке кода на форум. Подробнее в FAQ

Последний раз редактировалось Astrola; 17.04.2019 в 14:13.
Astrola вне форума Ответить с цитированием
Старый 17.04.2019, 12:22   #20
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Astrola Посмотреть сообщение
как в сообщениях сохранять табуляцию?
нужно использовать форматирование тегом [CODE]
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор вариаций в двомерном масиве KotKod Microsoft Office Excel 3 20.02.2016 09:33
Генератор слов на кириллице Fedaykin Фриланс 2 09.11.2013 18:30
генератор слов Delphi7 -Jack- Общие вопросы Delphi 10 29.06.2012 19:55
Генератор слов!создание вопросы . kzmd Общие вопросы Delphi 15 16.10.2010 20:04
Генератор слов - что к чему? Ramal Общие вопросы Delphi 8 16.07.2009 01:11