Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 478
от 28.07.2006, 10:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 353, Экспертов: 41
В номере:Вопросов: 3, Ответов: 6


Вопрос № 49880: Здравствуйте уважаемые эксперты!скажите пожалуйста если например int random = rand(); то генерация чисел будет происходить в пределах разрешимых для типа int? и еще почему когда я ввел программу с генерацией случайных чисел| программа- игра магич...
Вопрос № 49890: Здравствуйте уважаемые эксперты. Подскажите пожалуйста, как работать с MS Word'ом из C++. точнее из Borland C++ Builder. Знаю как это делается в VB и Delphi. Вроде бы технология такая же, но не получается. Желательно с примером. Если знаете, где про ...
Вопрос № 49927: Здравствуйте уважаемые! Ответьте пожалуйста на вопрос что такое TMetaClass и с чем его едят. Спасибо...

Вопрос № 49.880
Здравствуйте уважаемые эксперты!скажите пожалуйста если например int random = rand(); то генерация чисел будет происходить в пределах разрешимых для типа int?
и еще почему когда я ввел программу с генерацией случайных чисел| программа- игра магическое число |сначала выдается одно и тоже число? большое спасибо!
Отправлен: 22.07.2006, 11:29
Вопрос задал: Иванов Игорь Михайлович (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, IgorGTX!

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 и с чем его едят. Спасибо
Отправлен: 23.07.2006, 09:42
Вопрос задал: Байдак И.Б. (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Physicist
Здравствуйте, Байдак И.Б.!

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
Комментарий оценки:
Спасибо за информацию


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.35 от 27.07.2006
Яндекс Rambler's Top100

В избранное