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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.01.2018, 20:24   #11
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Я пас
Изображения
Тип файла: jpg 23972_original.jpg (19.0 Кб, 80 просмотров)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 28.01.2018, 22:28   #12
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Я пас
не работает три совпадения:

Код:
for i:=0 to 4 do
      begin
      if ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'telegram')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'bar')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'cherry')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'prune')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'melon')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'orange')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'seven')) or
         ((SelEx[i] = 2 ) and (AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]].PictureName = 'apple')) then
      begin
      Break;  // выходим из цикла
      Application.ProcessMessages;
beegl вне форума Ответить с цитированием
Старый 29.01.2018, 11:27   #13
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

подсчет всех комбинаций (число всех и каждой картинки)
1.промежуточный вариант
Код:
var
  telegram, bar, cherry, prune, melon, orange, seven, apple: integer;
  unknown: integer;// число показа каждой картинки
  
telegram:=0; ... apple:=0; unknown:=0; // пока их нет
for i:=0 to x do begin
  n:=selex[i]; 
  if n>=0 then s:=AdvSmoothSpinner2.Columns[0].CustomItems[n].PictureName else s:='---'; //какая картина на самом деле 
       if s='telegram' then Inc(telegram) //и считаем по каждому наименованиЮ
  else if s='bar' then Inc(bar)
  else if ...
  else Inc(unknown);
  ...
  else if s='apple' then Inc(apple)
  else ;
end;
// а теперь проверяем все картинки(их количество)
if unknown>0 then showmessage('по крайней мере есть одна непонятка')
else if telegam>=3 then showmessage('по крайней мере(НЕ МЕНЬШЕ) ТРИ telegram')
else if bar=3 then showmessage('РОВНО ТРИ bar')
 ...
else if apple<=3 then showmessage(НЕ БОЛЕЕ чем ТРИ apple')
else Showmessage('нет НИ одной тройки')
2. окончательный вариант
Код:
var
  stat: array[0..M+1] of record picname: string; val: integer;
  
stat[0].picname:='telegram'; 
stat[1].picname:='bar';
...
stat[M].pickname:='apple';
stat[M+1].pickname:='---';

for j:=0 to X+1 do stat[j].val:=0; // stat[:=0; ... apple:=0; unknown:=0;
for i:=0 to x do begin
  n:=selex[i]; 
  if n>=0 then s:=AdvSmoothSpinner2.Columns[0].CustomItems[n].PictureName else s:='---';
  for j:=0 to M+1 do 
    if stat[j].pickname=s then begin Inc(stat[j].val); break; end;
end;

if stat[M+1].val=0 then begin
  r:=M+1;
  for j:=0 to M do 
    if stat[j].val>3 then begin r:=j; break; end;
  if r<=M then ShowMessage('по крайней мере три ' +stat[r].pickname);
end
else showmessage('по крайней мере есть одна непонятка')
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.01.2018 в 11:31.
evg_m вне форума Ответить с цитированием
Старый 29.01.2018, 13:08   #14
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
подсчет всех комбинаций (число всех и каждой картинки)
а это будет работать, для 3-х случаев?

Код:
for i:= 0 to 4 do
  begin
    if SelEx[i] = 2 then          //  SelEx[i] всегда = 2 - значит результат = 3-м
      with AdvSmoothSpinner2.Columns[0].CustomItems[SelEx[i]] do
      begin
        if (PictureName = 'telegram') or
           (PictureName = 'bar') or
           (PictureName = 'cherry') or
           (PictureName = 'prune') or
           (PictureName = 'melon') or
           (PictureName = 'orange') or
           (PictureName = 'seven') or
           (PictureName = 'apple') then
         begin
           Break;  // выходим из цикла
           Application.ProcessMessages;
         end;
      end;
   end;
beegl вне форума Ответить с цитированием
Старый 29.01.2018, 17:05   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
а это будет работать, для 3-х случаев?
а какие это случаи?
скажи что ты хочешь проверить?
-- есть хотя бы три одинаковых картинки.
-- есть не менее трех "apple"
...
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.01.2018 в 17:08.
evg_m вне форума Ответить с цитированием
Старый 30.01.2018, 00:39   #16
beegl
instagram
Участник клуба
 
Аватар для beegl
 
Регистрация: 24.05.2008
Сообщений: 1,453
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
скажи что ты хочешь проверить?
Result := совпадения из 5-ти, 4-х или 3-х случаев

оно, рабочий пример:

Код:
procedure TForm1.SpinnerColumnsEx;
var
  a: array [0 .. 4] of Integer;
  c: array [0 .. 7] of Integer;
  i, m, n: Integer;
begin
  Randomize;
  if FTicks <= 80 then
    begin
      TMSFMXSpinner1.Columns[4].SelectedValue := Random(8);
      if FTicks <= 60 then
        begin
          TMSFMXSpinner1.Columns[3].SelectedValue := Random(8);
          if FTicks <= 40 then
            begin
              TMSFMXSpinner1.Columns[2].SelectedValue := Random(8);
              if FTicks <= 20 then
                begin
                  TMSFMXSpinner1.Columns[1].SelectedValue := Random(8);
                  if FTicks <= 4 then
                    TMSFMXSpinner1.Columns[0].SelectedValue := Random(8);
                end;
            end;
        end;
    end;

  Inc(FTicks);
  if FTicks > 80 then
    begin
      TMSFMXButton1.Enabled := True;
      Timer1.Enabled := False;
      a[0] := Floor(TMSFMXSpinner1.Columns[0].SelectedValue);
      a[1] := Floor(TMSFMXSpinner1.Columns[1].SelectedValue);
      a[2] := Floor(TMSFMXSpinner1.Columns[2].SelectedValue);
      a[3] := Floor(TMSFMXSpinner1.Columns[3].SelectedValue);
      a[4] := Floor(TMSFMXSpinner1.Columns[4].SelectedValue);

      for i := Low(c) to High(c) do
        c[i] := 0;

      for i := Low(a) to High(a) do
        Inc(c[a[i]]);

      m := 0;
      n := 0;
      for i := Low(c) to High(c) do
        if c[i] > m then
          begin
            m := c[i];
            n := i;
          end;

      if m < 2 then
        Label6.Text := 'none'
      else
        Label6.Text := 'Число совпадений для числа ' + n.ToString + ' равно ' + m.ToString;
    end;
end;
Извиняюсь за офф, а есть какой-то Random() функция улучшена, "своими руками"? .. чтоб подстроить до количества случаев, .. не такой сложный Random() как родной.

Последний раз редактировалось beegl; 30.01.2018 в 02:06. Причина: edit text
beegl вне форума Ответить с цитированием
Старый 30.01.2018, 09:04   #17
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
совпадения из 5-ти, 4-х или 3-х случаев
совпадения ЧЕГО?
должно быть 5 (4| 3) одинаковых и без разницы каких именно?
5 хоть "telegram" ... хоть "apple"(то что считал и проверял я, или что ты там пытаешься "сосчитать и проверить"), а если нет 5 то хоть 4 или даже 3.

P,S. найти МАКСИМАЛЬНОЕ количество ОДИНАКОВЫХ величин и желательно бы узнать что это такое будет?
P.P.S. А если таких максимальных будет несколько?
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 30.01.2018 в 09:13.
evg_m вне форума Ответить с цитированием
Старый 30.01.2018, 09:33   #18
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
совпадения ЧЕГО?
должно быть 5 (4| 3) одинаковых и без разницы каких именно?
да. он же однорукого бандита (см. слот-машина) делает.
и уже есть рабочий код (см. #16) // по крайней мере этот код устраивает ТС

Цитата:
Сообщение от evg_m Посмотреть сообщение
А если таких максимальных будет несколько?
там всего пять выпавших предметов (слотов). несколько максимальных может быть, если выпало по два совпадения.


Цитата:
Сообщение от beegl Посмотреть сообщение
Извиняюсь за офф, а есть какой-то Random() функция улучшена, "своими руками"? .. чтоб подстроить до количества случаев, .. не такой сложный Random() как родной.
что сложного в родном Random ?
как и что Вы хотите "улучшить" в функции Random() ?

Последний раз редактировалось Serge_Bliznykov; 30.01.2018 в 09:35.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск совпадений в диапазоне и поставление значения соседней от совпавшей ячейки, Поиск совпадений в диапазоне ANshag Microsoft Office Excel 3 08.09.2015 16:35
помогите доделать garic888270 Помощь студентам 2 23.12.2009 20:31
помогите доделать innaa639 Паскаль, Turbo Pascal, PascalABC.NET 1 21.05.2009 09:52
Помогите доделать Povar Паскаль, Turbo Pascal, PascalABC.NET 1 16.05.2008 14:43