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

Поиск:

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


Эксперт
***


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

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



Итак, как сделать так, чтобы рандились, либо -1, либо -2, либо 1, либо 2. Функция вызывается рекурсивно, надо, чтобы постоянно рандилось в разной последовательности. 


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
BreakPointMAN
Дата 29.4.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В чем проблема? 


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


Эксперт
***


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

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



Надо запрограммировать смещение коня в шахматах. Для этого мне надо чтобы рандились эти четыре числа.  


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
BreakPointMAN
Дата 29.4.2006, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну и? что не получается-то? как функция rand() работает, ты знаешь? 


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


Шустрый
*


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

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



Цитата(ДобренькийПапаша @ 29.4.2006,  19:38)
Итак, как сделать так, чтобы рандились, либо -1, либо -2, либо 1, либо 2. Функция вызывается рекурсивно, надо, чтобы постоянно рандилось в разной последовательности.

Код

switch(rand()%3)
        {
        case 0:
            Tmp=-1;
            break;
        case 1:
            Tmp=-2;
            break;
        case 2:
            Tmp=1;
            break;
        case 3:
            Tmp=2;
            break;
        }


Попробуй так... 
--------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:)    
PM ICQ   Вверх
BreakPointMAN
Дата 29.4.2006, 20:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Kuber, Бог ты мой! А еще подлиннее нельзя было?!??!?!?  smile  smile  


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


Эксперт
***


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

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



Рандит только 0. Прога конечно в разработке)))). Тут много неправильно пока что.

Код

#include <iostream.h>
#include <math.h>
#include <stdlib.h>

void knight(int i, int j, int n, bool a[8][8])
{
    
    for(;;)
    {
        switch(rand()%3)
        {
            
        case 0:
            n=-1;
            break;
        case 1:
            n=-2;
            break;
        case 2:
            n=1;
            break;
        case 3:
            n=2;
            break;
        }
        n=rand()%3;
        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;
    }
    

}
void main()
{
    int i=0, j=0, n;
    bool a[8][8];
    knight(i,j,n,a);
}
 


--------------------
Меня зовут Себастьян Парейра, торговец чёрным деревом.
PM MAIL   Вверх
BreakPointMAN
Дата 29.4.2006, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

n=(n=rand()%4)>1?n-1:n-2;

Вот и всё.

Код

        case 3:
            n=2;
            break;
        }
        n=rand()%3; // затираешь новым значением нужное значение n
        if(n=1) i++;
 


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


Эксперт
****


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

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



Цитата

Бог ты мой! А еще подлиннее нельзя было?!??!?!?       

если вы в таком тоне притендуете на краткость и оптимальность своего кода
Код

n=(n=rand()%4)>1?n-1:n-2;

то вынужден вас расстроить это не самое идеально решение


ЗЫ: это что бы вам предупреждения не влиплять 


--------------------
- Дурак учится на своих ошибках, умный на чужих.
 - умные учатся у дураков
PM MAIL ICQ   Вверх
BreakPointMAN
Дата 29.4.2006, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Step @  29.4.2006,  21:00 Найти цитируемый пост)
то вынужден вас расстроить это не самое идеально решение

Ну, я не утверждал, что мое решение "самое идеально"...  smile Если вы знаете решение более "идеально", просветите нас, неразумных!  smile  Всегда приятно посмотреть на более красивый и короткий код, чем написанный собой. 


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


Опытный
**


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

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



Можно так еще... равновероятность повыше будет:
Код

n=(n=(rand() /((RAND_MAX+1)/4) ))-1-1*(n<=1);
  

Это сообщение отредактировал(а) BreakPointMAN - 29.4.2006, 22:01


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


λcat.lolcat
****


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

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



BreakPointMAN, во-первых, UB smile Двойное изменение n между точками следования.
Во-вторых, для въезжания в этот код требуется (ну по крайней мере мне) секунд 10–15. Write-only, одним словом. Хотя, если сопроводить комментарием…

Я бы, пожалуй, написал так, не претендуя ни на краткость, ни на производительность, но, надеюсь, на очевидность производимых действий:
Код
int n;
{
    static const int cases[] = {-2, -1, 1, 2};
    n = cases[4 * rand() / (RAND_MAX + 1)];
}
 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
BreakPointMAN
Дата 29.4.2006, 23:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Void @  29.4.2006,  22:35 Найти цитируемый пост)
Двойное изменение n между точками следования.

Не-а...  smile или, быть может, я не вижу... Где?

В остальном согласен. 


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


λcat.lolcat
****


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

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



Код
(n=(rand() /((RAND_MAX+1)/4) ))

Раз assignment.
Код
n=(/***/)-1-1*(n<=1);

Два assignment.

Ы? smile 


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
nikitao
Дата 29.4.2006, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Господа,вы в своих спорах завязли,а человек ответа на свою проблему не получил smile 
Вообще полностью согласен с Void.С++сты часто с убийственным рвением укарачивают,сжымают код(благо язык очень гибкий),но про читабельность просто забывают. smile 
Ладно теперь по делу:
ДобренькийПапаша, у тебя всегда генерируется ноль из-за того что ты забыл про вызов srand()  smile

Добавлено @ 23:15 
А вот теперь,давайте пофлудим  smile 
Конструкции типа
Код

n=(n=(rand() /((RAND_MAX+1)/4) ))-1-1*(n<=1);

уже нехороши хатя бы тем,что два опытных программиста начинают спорить про их работаспасобность.Сегодня пусть эта конструкция работает,а завтра в попых чуть-чуть измененная уже не будет.Т е мы стоим на грани(если не перешли) практически безпречинно.Я не говорю ,что код надо упрощать до предела,просто во всем еадо знать меру. smile  

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


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype 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.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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