Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> вопросы по Visual C++ 
:(
    Опции темы
Inlude
Дата 9.2.2009, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 9.2.2009

Репутация: нет
Всего: нет



Здравствуйте! Я начал программировать на С++, используя компилятор Visual С++, и у меня появились вопросы.Вот они:
1)Какая функция для выпадения случайного числа?Там есть Random, но у неё нету даже параметров для указания того же диапазона. 
2)Есть ли в Visual C++ функции на подобии IntToStr и StrToInt? И как их использовать.
3)Этот вопрос у меня касается С++, какая функция опрашивает клавиатуру?
я делал так:
Код

char simvol;
int i;
simvol = getch();
switch(simvol)
{
  case #13: i += 1; //на этой строке у меня ошибка, а какая я не могу понять((, скажите плиз, какая ошибка и правильно ли я опрашиваю клавиатуру?  
//#13 - это код клавиши Enter.
}  



Это сообщение отредактировал(а) Inlude - 9.2.2009, 18:05
PM MAIL   Вверх
Earnest
Дата 9.2.2009, 18:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: нет
Всего: 183



1) rand, о диапазонах заботься сам.
2) itoa & atoi; использовать их нужно так же как и любые другие С-функции
3) Вообще-то тебе надо начать с учебника по C++. "#13" в C++ является недопустимым выражением. Нужно писать просто "13".




--------------------
...
PM   Вверх
voov
Дата 9.2.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Патамушта мы пилоты
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 29.11.2007

Репутация: нет
Всего: 8



Здравствуй, Inlude!
На первые 2 твоих вопроса отвечу, что есть такая штука как МСДН. Ее как раз и сделали, чтобы не было таких вопросов.

Цитата(Inlude @  9.2.2009,  18:03 Найти цитируемый пост)
на этой строке у меня ошибка, а какая я не могу понять

описание ошибки компилятор пишет в окне output, если непонятно что написано, то скопируй и добавь к вопросу. без этого мало шансов что ктото сможет помочь (это на будущее). 

забудь про #13
Код

case '\n': i += 1;


Это сообщение отредактировал(а) voov - 9.2.2009, 18:44
PM MAIL   Вверх
zim22
Дата 9.2.2009, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 29
Всего: 69



Код

case '\r':  i += 1;

плюс инициализируй переменную i, а то в ней мусор содержится.
Код

int i = 0;



--------------------
PM MAIL   Вверх
pan2004
Дата 9.2.2009, 20:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



1. Функция как уже сказали rand(), находится в cmath, о диапазонах заботься сам. На самом деле это очень просто, поэтому эта возможность и не встроена. Например rand()%11 выдаст простое целое число в диапазоне от 0 до 10 включительно. Перед первым вызовом функции желательно вызвать srand(time(0)); иначе числа будут ..не совсем случайными smile 
2. Способов очень много(просто завались), причем стандартные не обязательно являются удобными или быстрыми. Например, функции типа itoa/atoi я ненавижу(и тому есть причины).  Хорошая статья FAQ по этому поводу Преобразование строки в число и обратно


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
bsa
Дата 10.2.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(pan2004 @ 9.2.2009,  20:56)
1. Функция как уже сказали rand(), находится в cmath, о диапазонах заботься сам. На самом деле это очень просто, поэтому эта возможность и не встроена. Например rand()%11 выдаст простое целое число в диапазоне от 0 до 10 включительно.

Для получения равномерного распределения случайных числе в диапазоне [rmin;rmax) рекомендуется делать так: 
Код
double r = rmin + double(rmax - rmin) * rand() / (RAND_MAX + 1.0);
Это позволит получить более правильное равномерное распределение, чем вариант с остатком от деления.

Цитата(pan2004 @ 9.2.2009,  20:56)
 Перед первым вызовом функции желательно вызвать srand(time(0)); иначе числа будут ..не совсем случайными smile 
Я бы сказал так: один раз в начале программы.

Цитата
Код
  case #13: i += 1; //на этой строке у меня ошибка, а какая я не могу понять((, скажите плиз, какая ошибка и правильно ли я опрашиваю клавиатуру?  
//#13 - это код клавиши Enter.
Начнем с того, что 13 - это код символа "возврат карретки" ('\r'). 10 - код символа "конец строки" ('\n'). В большинстве случаев ты вряд ли встретишь код 13. Обычно, используется код 10. В любом случае, тебе "решетка" не нужна. Убери ее - в Си преобразование числа в символ происходит "на лету".

Это сообщение отредактировал(а) bsa - 10.2.2009, 16:52
PM   Вверх
GoldFinch
Дата 10.2.2009, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



забавно, но в паскалях (делфи) случайное число в диапазоне получается умножением, а не делением (остатком) как в С
как известно умножение быстрее деления
PM MAIL ICQ   Вверх
Dronchik
Дата 10.2.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Звукач ёмаё
**


Профиль
Группа: Участник
Сообщений: 451
Регистрация: 1.5.2007

Репутация: 1
Всего: 37



GoldFinch, согласись, что тебе ни кто не мешает написать свою функцию для создания случайных чисел, если тебя не устраивает стандартная. smile 


--------------------
Вместо слов делай дело, от которого ты фанатеешь. (с)

PM MAIL WWW ICQ   Вверх
GoldFinch
Дата 10.2.2009, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



Dronchik, можно весь С++ написать, но это никак не связано с качеством самого языка
у такой особенности есть свое объяснение, С(С++) кроссплатформенный, а ограничение диапазона случайного числа умножением использует платформозависимую особенность умножения на x86 системах
т.е. изза того что на С можно писать на какихнибудь ARMах, на ПК ты должен использовать заведомо медленный код

PM MAIL ICQ   Вверх
pan2004
Дата 10.2.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 2
Всего: 9



GoldFinch, смешно smile 
Еще вопрос, что медленее - брать остаток от деления(целочисленная операция), или умножать(floating point вычисления). Не говоря уже о том, что компилятор операцию типа rand()%2 может неплохо оптимизировать.


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
GoldFinch
Дата 10.2.2009, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 6
Всего: 26



pan2004, rand()%2 это частный случай, обычно вместо этого пишут rand()&1, т.к. и уже оптимизировано, и логично по смыслу операции - берем 1 случайный двоичный разряд
и почему деление - целочисленная операция, а умножение нецелочисленная? О_о
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0558 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.