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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [c++]генерация seed для random из строки 
:(
    Опции темы
musclerider
Дата 12.4.2012, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не хотел создавать новую тему. Итак, суть проблемы:

Пишу консольную программу, инфометр. Задача: выводить случайное значение от 1 до 100 при введении данных. Значение должно быть строго привязано к вводимым данным (т.е. если я ввожу "50" и мне выдает 14%, то оно всегда должно выводить 14% когда я ввожу "50"). Проблема заключается в том, что при введении цифровых значений все работает как надо, но при введении слов без цифровых значений все время выдает 50%, вне зависимости от слова или набора букв. А надо, что-бы как с цифрами - в зависимости от набора букв должно выдаваться конкретное значение). Код программы выглядит так:

Код
#include <iostream>
using namespace std; 
int main()
    {cout << "Vvedite infu: " << endl;

    int infa;
    cin >> infa; 
    int procent;
    srand(infa);
    procent = rand() % 100;
    cout << "Infa " << procent << "%" << endl;
return 0;}


Модератор: не забываем пользоваться кнопочкой "Код"

Это сообщение отредактировал(а) bsa - 12.4.2012, 23:53
PM MAIL   Вверх
bsa
Дата 12.4.2012, 23:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



musclerider, тогда тебе необходимо считывать не число, а строку.
А к случайным числам это имеет мало отношения.
PM   Вверх
musclerider
Дата 13.4.2012, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Уже решил вопрос, некогда было на форуме отписать. Но все равно спасибо!
(char infa;)


PM MAIL   Вверх
bsa
Дата 13.4.2012, 10:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



musclerider, char принимает только один символ.  smile 
Тебе необходимо использовать std::string и std::getline.
PM   Вверх
borisbn
Дата 13.4.2012, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(musclerider @  13.4.2012,  00:34 Найти цитируемый пост)
(char infa;)

и как ты теперь введёшь 0 (не '0', а 0) ? или 8 ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
musclerider
Дата 13.4.2012, 18:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я просто нуб еще, только пару дней назад заинтересовался программированием. Сейчас попробую разобраться.
Пока вот такая печалька: "не существует подходящей функции преобразования из "std::string" в "unsigned int"
Похоже придется выдумывать как преобразовать string что-бы запихнуть его в srand, я наверное выражаюсь как быдло  smile 

Это сообщение отредактировал(а) musclerider - 13.4.2012, 18:36
PM MAIL   Вверх
volatile
Дата 13.4.2012, 19:12 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(musclerider @  13.4.2012,  18:19 Найти цитируемый пост)
я наверное выражаюсь как быдло

нормально выражаетесь. 
Вам имхо хеш функция от строки нужна. а при хорошей хеш функции, уже и ранд, не нужен будет.

PM MAIL   Вверх
bsa
Дата 13.4.2012, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



musclerider, можно, конечно, последовать совету volatile, но, думаю, тебе стоит просто просуммировать все символы строки:
Код
int sum = 0;
for(std::string::iterator i = str.begin(), e = str.end(); i != e; ++i)
   sum += static_cast<unsigned char>(*i);
Фактически, это и есть "хэш" функция. Но очень простая и ненадежная. Хотя тебе подойдет.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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