![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Итак, как сделать так, чтобы рандились, либо -1, либо -2, либо 1, либо 2. Функция вызывается рекурсивно, надо, чтобы постоянно рандилось в разной последовательности.
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
В чем проблема?
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Надо запрограммировать смещение коня в шахматах. Для этого мне надо чтобы рандились эти четыре числа.
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
ну и? что не получается-то? как функция rand() работает, ты знаешь?
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Kuber |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 7.4.2006 Где: #vingrad Репутация: 1 Всего: 3 |
Попробуй так... --------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:) |
||||
|
|||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Kuber, Бог ты мой! А еще подлиннее нельзя было?!??!?!?
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| ДобренькийПапаша |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1278 Регистрация: 14.1.2006 Где: г.Москва Репутация: нет Всего: 7 |
Рандит только 0. Прога конечно в разработке)))). Тут много неправильно пока что.
-------------------- Меня зовут Себастьян Парейра, торговец чёрным деревом. |
|||
|
||||
| BreakPointMAN |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Вот и всё.
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
||||
|
|||||
| Step |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
если вы в таком тоне притендуете на краткость и оптимальность своего кода
то вынужден вас расстроить это не самое идеально решение ЗЫ: это что бы вам предупреждения не влиплять -------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
||||
|
|||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Ну, я не утверждал, что мое решение "самое идеально"... -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Можно так еще... равновероятность повыше будет:
Это сообщение отредактировал(а) BreakPointMAN - 29.4.2006, 22:01 -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
BreakPointMAN, во-первых, UB
Во-вторых, для въезжания в этот код требуется (ну по крайней мере мне) секунд 10–15. Write-only, одним словом. Хотя, если сопроводить комментарием… Я бы, пожалуй, написал так, не претендуя ни на краткость, ни на производительность, но, надеюсь, на очевидность производимых действий:
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
Не-а... В остальном согласен. -------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Void |
|
||||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Раз assignment.
Два assignment. Ы? -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
||||
|
|||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Господа,вы в своих спорах завязли,а человек ответа на свою проблему не получил
Вообще полностью согласен с Void.С++сты часто с убийственным рвением укарачивают,сжымают код(благо язык очень гибкий),но про читабельность просто забывают. Ладно теперь по делу: ДобренькийПапаша, у тебя всегда генерируется ноль из-за того что ты забыл про вызов srand() Добавлено @ 23:15 А вот теперь,давайте пофлудим Конструкции типа
уже нехороши хатя бы тем,что два опытных программиста начинают спорить про их работаспасобность.Сегодня пусть эта конструкция работает,а завтра в попых чуть-чуть измененная уже не будет.Т е мы стоим на грани(если не перешли) практически безпречинно.Я не говорю ,что код надо упрощать до предела,просто во всем еадо знать меру. Это сообщение отредактировал(а) nikitao - 29.4.2006, 23:11 -------------------- Жизнь - печальная штука. |
|||
|
||||
| BreakPointMAN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 725 Регистрация: 15.9.2004 Где: Saratov Репутация: 14 Всего: 24 |
-------------------- "Разруха не в клозетах, а в головах." © Ф.Ф. Преображенский (М.Булгаков, "Собачье сердце") |
|||
|
||||
| Kuber |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 7.4.2006 Где: #vingrad Репутация: 1 Всего: 3 |
Думаю это не совсем к теме.
Люблю С++ за то(еще много за что --------------------
Если меня угораздило написать что то умное и вам понравилось, то не забудте нажать [-]...:) |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
nikitao, srand нужен только для того, чтобы сбить генератор псевдослучайных чисел. Он никак не решает проблему 0.
Добавлено @ 23:29 А что мне действительно нравится, так эта конструкция
Это сообщение отредактировал(а) Fin - 29.4.2006, 23:50 -------------------- Пролетал мимо. |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
Fin, или я тебя не понял или ты говоришь не правду:
У меня всегда при запуске выдаёт 41,а у тебя будет выдовать другое,но постоянное число -------------------- Жизнь - печальная штука. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
nikitao, Вот именно. Что постоянное число. Произведи свой эксперемент дальше. И увидеш, что числа будут меняться.
Чтобы этого не происходило при каждом запуске программы, ставят в самом начале вызов функции srand. Это сообщение отредактировал(а) Fin - 29.4.2006, 23:39 -------------------- Пролетал мимо. |
|||
|
||||
| nikitao |
|
|||
![]() Кот-программист ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1206 Регистрация: 30.8.2005 Где: Спб Репутация: 1 Всего: 26 |
-------------------- Жизнь - печальная штука. |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Та конструкция из кода, что я привел. Вот она решает проблему. Правда на распечатке должно быть сначало 1, а затем 2. Если учесть, что функция knight(i,j,n,a); никак не влияет на переменную n.
-------------------- Пролетал мимо. |
|||
|
||||
| Helicopterr |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
srand() (start rand) инициализирует rand, что необходимо для его работы.
Это сообщение отредактировал(а) Helicopterr - 1.5.2006, 06:19 -------------------- people can fly |
||||
|
|||||
| papam |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 104 Регистрация: 2.2.2006 Где: Украина::Запорожь е Репутация: 1 Всего: 4 |
Добренький папаша могу скинуть готовую прогу!Напиши куда!Тыж мне помогал!!!!!!!!!!!!!!!!!!!!!
--------------------
No Fucking Future |
|||
|
||||
| Heremum |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 7.4.2006 Репутация: нет Всего: нет |
Вы чего тут так извратились? Алгоритм простейший: генерируем с помощью rand() числа от -2 до 2:
|
|||
|
||||
| Helicopterr |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 355 Регистрация: 20.8.2005 Где: Stavropol Репутация: 2 Всего: 3 |
Heremum
а ты результат своего кода видел? у меня это: -3, -2, -1, -3, -4, -2, -2, -2, -4 А теперь прочти условие задачи... + еще маленькая проблемка эта последовательность (у тебя на компе может быть другой) будет такой же при новом запуске программы. Вот мы тут и... как ты там написал? извращаемся? -------------------- people can fly |
|||
|
||||
| AISIN |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 185 Регистрация: 27.1.2005 Где: Пушкино Репутация: нет Всего: 1 |
просто нужно 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% |
|||
|
||||
| Heremum |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 68 Регистрация: 7.4.2006 Репутация: нет Всего: нет |
Значения в диапозоне [-2; 2]. Это сообщение отредактировал(а) Heremum - 4.5.2006, 18:06 |
|||
|
||||
| Fin |
|
||||||||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Heremum, Я надеюсь, ты условия задачи читал более внимательно, чем все остальные.
В данном коде
somevalue всегда будет или -1 или -2. Ты никогда не получиш значения 1 или 2. Так что твое высказывание
не совсем понятно. По моему личному мнению, наиболее простой и надежный вариант предложил Void Только его нужно чуть доработать.
-------------------- Пролетал мимо. |
||||||||
|
|||||||||
| Void |
|
|||
![]() λ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 |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
Void, В твоем случае, могут быть проблемы с откидыванием дробной части. Так как Все числа целочисленые.
Добавлено @ 23:12 Сейчас проверил у себя на компиляторе. Два подхода работают. Так что может быть я слишком перестраховываюсь -------------------- Пролетал мимо. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Fin, если RAND_MAX достаточно велик (хотя бы 255), проблем не будет.
-------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
| Fin |
|
|||
![]() Дракон->Спать(); ![]() ![]() Профиль Группа: Участник Сообщений: 687 Регистрация: 4.1.2006 Репутация: 3 Всего: 10 |
RAND_MAX стандартно равен 32767
А вот код генератора псевдослучайных чисел, который стандартно поставляется вместе с библиотеками С
Источник: http://algolist.manual.ru/maths/generator/standard.php -------------------- Пролетал мимо. |
|||
|
||||
| Void |
|
|||
![]() λcat.lolcat ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2206 Регистрация: 16.11.2004 Где: Zürich Репутация: 40 Всего: 173 |
Не совсем. В C99 сказано, что RAND_MAX должен быть не менее 32767. Что, впрочем, ситуации не меняет, спасибо за напоминание -------------------- “Coming back to where you started is not the same as never leaving.” — Terry Pratchett |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |