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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.07.2011, 02:51   #1
suslik_
 
Регистрация: 04.07.2011
Сообщений: 6
Восклицание Как StringGrid может влиять на random ?

Код:
function ra(v:integer):integer;
var
  x:integer;
begin
  repeat
    randomize;
    x := random(51);   // случайная карта из колоды
  until koloda[x] = 0;  // если 0 - карта еще в колоде, можно раздавать
  koloda[x]:=v;         // пометить карту как розданную игроку v
  result:= x;             // выдать номер карты
  Form1.StringGrid1.Cells[(x mod 13), (x div 13)]:=IntToStr(v);  // для наглядности
end;
Изначально StringGrid использовался в тестирование программы для отображения розданных карт. Программу доделал, все работает как надо и StringGrid мне больше не нужен, удаляю его и программа не пашет!(выдает неправильные данные, в результате всегда проигрыш). Проверил весь код, кроме этого куска к StringGrid больше нигде не обращаюсь, везде работаю только с массивом koloda[x]. Как StringGrid может влиять на random, или на функцию или на программу целиком?




___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 04.07.2011 в 08:31.
suslik_ вне форума Ответить с цитированием
Старый 04.07.2011, 03:19   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Поведение странное, но теоретически никак. StringGrid только отображает инфу. Ищите ошибку в другом месте.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 04.07.2011, 08:37   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1-я (принципиальная!) ошибка.
Randomize НЕ НАДО крутить в цикле!! (А в идеале его вообще один раз надо выполнить при запуске приложения. Например, на событие формы OnCreate

2-e. random(51) вернёт число от 0 до 50. поэтому последняя карта вообще никогда не будет роздана!

3-е. не злоупотребляйте глобальными переменными! А уж тем более, когда Вы их изменяете в процедуре/функции!
(я имею в виду массив koloda[] )

Но, главное. по сути, я абсолютно согласен с Smitt&Wesson - стрингрид никак не может влиять!
(ну, если только в другом месте программы Вы из стрингрида не читаете какие-то данные, разумеется!)
Ищите все места обращения к стрингриду (на чтение оттуда!) и исправляйте!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 04.07.2011, 09:21   #4
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

4-е. Возможно где-то в обработчике СтрингГрида (например, клацание мышью) раньше проводились какие-либо манипуляции с колодой...

ЗЫ. А вообще логика странная. Как я понял вы игроков закрепляете за определенными картами, хотя по идее должно быть наоборот...
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 04.07.2011 в 09:23.
Utkin вне форума Ответить с цитированием
Старый 04.07.2011, 11:26   #5
suslik_
 
Регистрация: 04.07.2011
Сообщений: 6
По умолчанию

Цитата:
Randomize НЕ НАДО крутить в цикле!!
Исправлю и учту на будущее
Цитата:
random(51) вернёт число от 0 до 50.
Искал ошибку методом "научного тыка" и менял различные данные, на самом деле у меня там "x := random(52);"
Цитата:
ЗЫ. А вообще логика странная. Как я понял вы игроков закрепляете за определенными картами, хотя по идее должно быть наоборот...
Обращение к функции выглядит так pl[i,j]:=ra(i) , так что карты тоже закрепляются за игроками, но если не помечать в колоде карты как розданные , то их можно раздать более одного раза, а помечать их как розданные определенному игроку удобнее чем просто розданные.
suslik_ вне форума Ответить с цитированием
Старый 04.07.2011, 11:38   #6
suslik_
 
Регистрация: 04.07.2011
Сообщений: 6
По умолчанию

Цитата:
Но, главное. по сути, я абсолютно согласен с Smitt&Wesson - стрингрид никак не может влиять!
(ну, если только в другом месте программы Вы из стрингрида не читаете какие-то данные, разумеется!)
Ищите все места обращения к стрингриду (на чтение оттуда!) и исправляйте!
Я полностью согласен с Serge_Bliznykov и Smitt&Wesson , влиять никак не должен, но реальность расходиться с моим мнением. Искал через поиск (Ctrl+F) где вообще есть StringGrid, он только объявлен в типах и в выше приведенном коде.
suslik_ вне форума Ответить с цитированием
Старый 04.07.2011, 12:54   #7
suslik_
 
Регистрация: 04.07.2011
Сообщений: 6
По умолчанию

Создал новый проект, и скопировал в него весь код (без StringGrid) все работает правильно. Очевидно какой то глюк delphi.
suslik_ вне форума Ответить с цитированием
Старый 04.07.2011, 13:30   #8
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> Очевидно какой то глюк delphi

Да ну. Скорее очевидно, что у вас где-то обращение к неинициализированным данным, поэтому код работает по-разному. То, что он заработал в новом проекте, совсем не значит, что ошибка исправлена.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как несиправный жёсткий диск может влиять на загрузку CD-рома??? СисТемникс Компьютерное железо 2 28.10.2010 14:53
Как реализовать random float? VintProg Общие вопросы Delphi 6 18.08.2009 09:41
как в с помощью random заполнить одномерный массив вещественными числами Deniska112 Общие вопросы C/C++ 2 04.06.2009 09:36
Ко всем кто может хоть как-то подсказать как решить проблему porfonya Microsoft Office Access 1 26.05.2009 17:38
ещё раз про Random (вдогонку к закрытой теме 'НЕ ПОЙМУ КАК ВЫВИСТИ ЧИСЛО') Serge_Bliznykov Общие вопросы Delphi 1 20.04.2008 12:37