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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> rand(), C++ 
:(
    Опции темы
BreakPointMAN
Дата 29.4.2006, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ммм... наверное, прав... пошел я читать Стандарт и Алену C++.. smile 


--------------------
"Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце")
PM WWW ICQ   Вверх
Kuber
Дата 29.4.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 7.4.2006
Где: #vingrad

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



Думаю это не совсем к теме.smile
Люблю С++ за то(еще много за чтоsmile) что одно решение можно представить различными способами коих множество. Наверное многие тоже такого мнения. 
--------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:)    
PM ICQ   Вверх
Fin
Дата 29.4.2006, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



nikitao, srand нужен только для того, чтобы сбить генератор псевдослучайных чисел. Он никак не решает проблему 0.

Добавлено @ 23:29 
А что мне действительно нравится, так эта конструкция
Код

        if(n=1) i++;
        if(n=1) j+2; 
        if(n=1) a[i+1][j+2]=false;
        if(n=1 && a[i+1][j+2]) knight(i,j,n,a); 
        cout<<n<<endl;
        if(n=2) i+2;
        if(n=2) j++;
        if(n=2) a[i+2][j+1]=false;
        if(n=2 && a[i+2][j+1]) knight(i,j,n,a);
        cout<<n<<endl;
  

Это сообщение отредактировал(а) Fin - 29.4.2006, 23:50


--------------------
Пролетал мимо.
PM MAIL   Вверх
nikitao
Дата 29.4.2006, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


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

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



Fin, или я тебя не понял или ты говоришь не правду:
Код

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int x=rand();
    cout<<x;
    getch();
}

У меня всегда при запуске выдаёт 41,а у тебя будет выдовать другое,но постоянное число smile  


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Fin
Дата 29.4.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



nikitao, Вот именно. Что постоянное число.  Произведи свой эксперемент дальше. И увидеш, что числа будут меняться. 
Код

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    int x;
    for(int i=0; i<4; i++)
    {
          x=rand();
          cout<<x << endl;
    }
    getch();
}


Чтобы этого не происходило при каждом запуске программы, ставят в самом начале вызов функции srand.  

Это сообщение отредактировал(а) Fin - 29.4.2006, 23:39


--------------------
Пролетал мимо.
PM MAIL   Вверх
nikitao
Дата 29.4.2006, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


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

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



 smile А это в этом смысле. smile  


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
Fin
Дата 29.4.2006, 23:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Та конструкция из кода, что я привел. Вот она решает проблему. Правда на распечатке должно быть сначало 1, а затем 2. Если учесть, что функция knight(i,j,n,a); никак не влияет на переменную n. 


--------------------
Пролетал мимо.
PM MAIL   Вверх
Helicopterr
Дата 1.5.2006, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Fin)
srand нужен только для того, чтобы сбить генератор псевдослучайных чисел. Он никак не решает проблему 0

  srand() (start rand) инициализирует rand, что необходимо для его работы.  

Код

srand(time(0)); //нужно записать в начале ф-ции
   

Это сообщение отредактировал(а) Helicopterr - 1.5.2006, 06:19


--------------------
people can fly
PM MAIL   Вверх
papam
Дата 1.5.2006, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добренький папаша могу скинуть готовую прогу!Напиши куда!Тыж мне помогал!!!!!!!!!!!!!!!!!!!!! 
--------------------
No Fucking Future
PM MAIL ICQ   Вверх
Heremum
Дата 1.5.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вы чего тут так извратились? Алгоритм простейший: генерируем с помощью rand() числа от -2 до 2:
Код

...
while(1)
{
    somevalue = rand()%4 - 4;
    if (somevalue == 0)
        somevalue = rand()%4 - 4;
    else
        break;
}
...
 
PM MAIL ICQ   Вверх
Helicopterr
Дата 1.5.2006, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Heremum
а ты результат своего кода видел?
у меня это:
-3, -2, -1, -3, -4, -2, -2, -2, -4
А теперь прочти условие задачи...
+ еще маленькая проблемка эта последовательность (у тебя на компе может быть другой) будет такой же при новом запуске программы. 
Вот мы тут и... как ты там написал? извращаемся?

 


--------------------
people can fly
PM MAIL   Вверх
AISIN
Дата 4.5.2006, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Heremum @  1.5.2006,  18:53 Найти цитируемый пост)
код C++
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:


...
while(1)
{
    somevalue = rand()%4 - 4;
    if (somevalue == 0)
        somevalue = rand()%4 - 4;
    else
        break;
}


Цитата(Helicopterr @  1.5.2006,  23:50 Найти цитируемый пост)
-3, -2, -1, -3, -4, -2, -2, -2, -4

просто нужно     somevalue = rand()%4 - 4; 
исправить на somevalue = rand()%3 -rand()%3
 if (somevalue == 0)
somevalue = rand()%3 -rand()%3
Cразу скажу результата, не видел но должно работать
    

Это сообщение отредактировал(а) AISIN - 4.5.2006, 15:14
--------------------
Внимание!!! Внимание!!!Запущена программа по завоеванию мира!!!Выполненно 0,000000000000000000000000000000000000000000000000000002%
PM MAIL   Вверх
Heremum
Дата 4.5.2006, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

#include <stdio.h>
#include <stdlib.h>

void main()
{
    int somevalue = rand()%2 - 2;
    for (int i = 0; i < 5000; i++)
    {
        somevalue = rand()%2 - 2;
        if (somevalue == 0)
            somevalue = rand()%2 - 2;
    }
}

Значения в диапозоне [-2; 2].  

Это сообщение отредактировал(а) Heremum - 4.5.2006, 18:06
PM MAIL ICQ   Вверх
Fin
Дата 4.5.2006, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дракон->Спать();
**


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

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



Heremum, Я надеюсь, ты условия задачи читал более внимательно, чем все остальные.
Цитата

Итак, как сделать так, чтобы рандились, либо -1, либо -2, либо 1, либо 2.

В данном коде 
Код

        somevalue = rand()%2 - 2;
        if (somevalue == 0)
            somevalue = rand()%2 - 2;

somevalue всегда будет или -1 или -2. Ты никогда не получиш значения 1 или 2. Так что твое высказывание 
Цитата

Вы чего тут так извратились? 

не совсем понятно.

По моему личному мнению, наиболее простой и надежный вариант предложил Void Только его нужно чуть доработать.
Код

int n;
{
    static const int cases[] = {-2, -1, 1, 2};
    n = cases[rand()%4];
}
 


--------------------
Пролетал мимо.
PM MAIL   Вверх
Void
Дата 4.5.2006, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

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



Fin, я не случайно написал так, как написал, а не rand() % 4. Это дает более равномерное распределение в случае ГПСЧ. 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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