Вопрос № 49880: Здравствуйте уважаемые эксперты!скажите пожалуйста если например int random = rand(); то генерация чисел будет происходить в пределах разрешимых для типа int?
и еще почему когда я ввел программу с генерацией случайных чисел| программа- игра магич...Вопрос № 49890: Здравствуйте уважаемые эксперты. Подскажите пожалуйста, как работать с MS Word'ом из C++. точнее из Borland C++ Builder. Знаю как это делается в VB и Delphi. Вроде бы технология такая же, но не получается. Желательно с примером. Если знаете, где про ...Вопрос № 49927: Здравствуйте уважаемые! Ответьте пожалуйста на вопрос
что такое TMetaClass и с чем его едят. Спасибо...
Вопрос № 49.880
Здравствуйте уважаемые эксперты!скажите пожалуйста если например int random = rand(); то генерация чисел будет происходить в пределах разрешимых для типа int?
и еще почему когда я ввел программу с генерацией случайных чисел| программа- игра магическое число |сначала выдается одно и тоже число? большое спасибо!
rand() возвращает случайные числа в интервале от 0 до RAND_MAX, которое обычно равно 0x7fff (32767). Последовательность случайных чисел генерируется всегда одна и та же, если не задать начальное значение генератора "случайным". Обычно для этого применяют такую конструкцию:
srand( (unsigned)time( NULL ) );
Ответ отправил: Physicist (статус: 8-ой класс)
Ответ отправлен: 22.07.2006, 11:47 Оценка за ответ: 5 Комментарий оценки: Отлично!огромное спасибо!
Отвечает: arctic
Здравствуйте, IgorGTX!
1) Генерация будет происходить в пределах разрешиміх для int, потому што функция обявлена как int rand().
2) Штоб функия не возвращала одно и тоже число нужно инициализыровать генератор случайных чисел. Для етого подключи
<time.h> и вызови функцию srand(time(0)).
3) Штоб числа возвращались в определенным диапазоне, например [-10;10] нужно вызвать функцию таким способом:
rand()%21 - 10;
Здесь: 21 - количество целых чисел в диапазоне; Изначально rand возвратит число в диапазоне [0;20].
Отнимая 10 мы добемса желаемого результата.
Ответ отправил: arctic (статус: 2-ой класс)
Ответ отправлен: 22.07.2006, 13:49
Отвечает: Sid123
Здравствуйте, IgorGTX!
1) Да, даже в short влезет т.к возвращается значение от 0 до RAND_MAX (32767).
2) Используй srand(). Иногда нужно просто не полениться залесть в MSDN. Вот пример из него...
Приложение:
Ответ отправил: Sid123 (статус: 1-ый класс)
Ответ отправлен: 24.07.2006, 07:56
Вопрос № 49.890
Здравствуйте уважаемые эксперты. Подскажите пожалуйста, как работать с MS Word'ом из C++. точнее из Borland C++ Builder. Знаю как это делается в VB и Delphi. Вроде бы технология такая же, но не получается. Желательно с примером. Если знаете, где про это почитать можно, киньте ссылку. Заранее спасибо.
Отправлен: 22.07.2006, 14:25
Вопрос задал: GINes (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Sid123
Здравствуйте, GINes!
Вариант один...работать с Word как с AxtiveX объектом. Всё прекрастно написано в MSDN.
Ответ отправил: Sid123 (статус: 1-ый класс)
Ответ отправлен: 24.07.2006, 07:47
Отвечает: Santana
Здравствуйте, GINes!
С Буилдером ставятся примеры. См ...CBuilder6ExamplesPWordDemo там все довольно доходчиво
Ответ отправил: Santana (статус: 4-ый класс)
Ответ отправлен: 24.07.2006, 19:12
Вопрос № 49.927
Здравствуйте уважаемые! Ответьте пожалуйста на вопрос что такое TMetaClass и с чем его едят. Спасибо
TMetaClass - это как бы указатель на класс (не на объект класса, а на сам класс!). Я так понимаю, что TMetaClass пришлось вести программистам из Borland, когда они делали BorlandC++ из Delphi. И "привычные" в Delphi метаклассы, которые очень просто водились там языковой конструкцией "class of" пришлось реализовывать на C++ через класс TMetaClass (и, соответственно, ввести языковую конструкцию __classid).
Метакласс можно представить просто как информацию о классе. Получить метакласс для любого класса - наследника TObject можно через метод ClassType этого класса. Этот метод вернет указатель на TMetaClass (TClass).
Вот методы TMetaClass:
ShortString ClassName() - возвращает имя класса;
bool ClassNameIs(const AnsiString &string) - проверяет, является ли метакласс указателем именно на этот класс (string - имя класса);
TClass ClassParent() - метакласс для предка класса;
void * ClassInfo() - возвращает указатель на RTTI-таблицу;
long InstanceSize() - размер экземпляра класса
bool InheritsFrom(TClass aClass) - проверить, является ли класс наследником другого класса;
void * MethodAddress(const ShortString &Name) - получить адрес метода по его имени;
ShortString MethodName(void *Address) - получить имя метода по его адресу;
На мой взгляд, TMetaClass нужен только для нормальной работы VCL. Даже в help'е про __classid сказано: "Оператор __classid был добавлен для поддержки VCL. Этот оператор обычно не должен использоваться программистами C++Builder напрямую".
Ответ отправил: Physicist (статус: 8-ой класс)
Ответ отправлен: 23.07.2006, 10:34 Оценка за ответ: 5 Комментарий оценки: Спасибо за информацию