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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 29.11.2012, 16:07
Van-89 Van-89 вне форума
Прохожий
 
Регистрация: 20.11.2012
Адрес: Новокузнецк
Сообщения: 25
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Ошибочное появление Random числа вне диапазона

Здравствуйте подскажите пожалуйста в чем проблема...
Время от времени появляется Random числа вне диапазона...

Описание программы:

Программа использует canvas и рисует шары которые отталкиваются по диагонали от стенок...

Кнопка Больше увеличивает на 1 количество шаров и задаёт каждому новому шару случайные параметры в заданном диапазоне...

Параметры каждого шара заносятся в массив... так же движения шаров обрабатывает созданный модуль 'mod1'...
Изображения
Тип файла: jpg Снимок.JPG (35.2 Кбайт, 14 просмотров)
Вложения
Тип файла: rar Новая папка.rar (171.7 Кбайт, 6 просмотров)
Ответить с цитированием
  #2  
Старый 29.11.2012, 17:03
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,907
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

Все верно, у тебя случайно вычисляются координаты центра окружности, т.о. получается что до центра она может заползать за пределы рамки.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Aristarh Dark за это полезное сообщение:
OTVET2 (18.01.2013), Van-89 (29.11.2012)
  #3  
Старый 29.11.2012, 17:59
Van-89 Van-89 вне форума
Прохожий
 
Регистрация: 20.11.2012
Адрес: Новокузнецк
Сообщения: 25
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Но я в Random'e делал поправку на это...
По идее ничего не должно вылезать... да и еще так сильно...
Ответить с цитированием
  #4  
Старый 29.11.2012, 18:19
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Van-89
Но я в Random'e делал поправку на это...
По идее ничего не должно вылезать... да и еще так сильно...
У тебя в проверке на отражении такой код:
Код:
    If (y<27) or (y>477) then yy:=-yy;
    If (x<27) or (x>621) then xx:=-xx;
Будем считать что это правильные значения, значит x должно принимать значения от 27 до 621, а y от 27 до 477, что в виде кода так:
Код:
x := 27 + Random(621 - 27 + 1);
y := 27 + Random(477 - 27 + 1);
У тебя же в коде написано так:
Код:
      mass[m1,0,0,1]:=27+random(477);
      mass[m1,0,1,1]:=27+random(621);
Конечно будет вылезать.

Последний раз редактировалось poli-smen, 29.11.2012 в 18:24.
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо poli-smen за это полезное сообщение:
OTVET2 (18.01.2013), Van-89 (29.11.2012)
  #5  
Старый 29.11.2012, 19:23
Van-89 Van-89 вне форума
Прохожий
 
Регистрация: 20.11.2012
Адрес: Новокузнецк
Сообщения: 25
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасибо разобрался))

К сожаление у меня довольно часто возникают проблемы с установкой диапазона((
Ответить с цитированием
  #6  
Старый 30.11.2012, 05:17
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Van-89
К сожаление у меня довольно часто возникают проблемы с установкой диапазона((
В таком случае можно написать функцию-обёртку над стандартной функцией Random и пользоваться ею:
Код:
function Random2(A, B: Integer): Integer;
begin
  Result := A + Random(B - A + 1);
end;
Или например так:
Код:
function Random2(A, B: Integer): Integer;
begin
  Result := Min(A, B) + Random(Abs(A - B) + 1);
end;
И теперь если нужно получить случайные числа например от 27 до 621 то вместо:
Код:
x := 27 + Random(621 - 27 + 1);
Делаешь просто:
Код:
x := Random2(27, 621);
А при использовании второго варианта функции Random2 можно и так:
Код:
x := Random2(621, 27);
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
OTVET2 (18.01.2013)
  #7  
Старый 30.11.2012, 18:33
Van-89 Van-89 вне форума
Прохожий
 
Регистрация: 20.11.2012
Адрес: Новокузнецк
Сообщения: 25
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасиб)

Есть еще один вопрос только из другой темы...
Мне в label нужно вывести символ "█" из таблицы ascii... или аналогичный ему... возможно ли это?...

Если просто скопировать его то он отображается как точка... а если использовать его код "219" то он выводится как буква "Ы"
Изображения
Тип файла: jpg Снимок.JPG (12.9 Кбайт, 3 просмотров)
Ответить с цитированием
  #8  
Старый 30.11.2012, 18:47
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,094
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Van-89
Спасиб)

Есть еще один вопрос только из другой темы...
Мне в label нужно вывести символ "█" из таблицы ascii... или аналогичный ему... возможно ли это?...

Если просто скопировать его то он отображается как точка... а если использовать его код "219" то он выводится как буква "Ы"

В Винде есть такая программка - CharacterMap.
Согласно ей, твой символ - 2588 (█).
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо lmikle за это полезное сообщение:
OTVET2 (18.01.2013), Van-89 (30.11.2012)
  #9  
Старый 30.11.2012, 18:50
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Van-89
Мне в label нужно вывести символ "█" из таблицы ascii... или аналогичный ему... возможно ли это?...

Если просто скопировать его то он отображается как точка... а если использовать его код "219" то он выводится как буква "Ы"
Если тебе нужно чтобы в TLabel символы из второй половины таблицы отображались не в кодировке Windows-1251, а в старой DOS-овской CP866 то выбери соответствующий шрифт для этого, например "Terminal".
Если же тебе нужно чтобы в TLabel можно было применять любое разнообразие символов, то тебе нужно установить TLabel с поддержкой юникода, вот например последняя бесплатная версия компонент TNT.
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо poli-smen за это полезное сообщение:
OTVET2 (18.01.2013), Van-89 (30.11.2012)
  #10  
Старый 30.11.2012, 20:47
Van-89 Van-89 вне форума
Прохожий
 
Регистрация: 20.11.2012
Адрес: Новокузнецк
Сообщения: 25
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Спасиб еще раз) всё работает))
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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