Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63

Рандом без повторений

23.02.2017, 18:22. Показов 4205. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
При нажатии на кнопку сгенерировать число от 1 до 10, которое не будет повторятся при повторном нажатии на кнопку. Цикл будет прекращаться после 10-го нажатия, то есть, когда пройдет каждая из цифр по одному разу. Число выводить в Label. ПОВТОРЕНИЕ НЕДОПУСТИМО! Каким образом это организовать? Ничего толкового не нашел, что бы мне подошло.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2017, 18:22
Ответы с готовыми решениями:

Рандом без повторов
Ребят подскажите как можно срандомить с числа 100 допустим 30 чисел которые не будут повторятся.

Рандом чисел без повтора
Добрый вечер ребят подскажыте код который сможет срандомить и присвоить 10-тю переменым 10 разных плюсових чисел без повтора я написал но...

Random без повторений
Здравствуйте. Возможно, эта тема не раз поднималась на форуме, но, к сожалению, не нашел, то что нужно. А проблема такая. Я хочу сделать...

18
694 / 6888 / 265
Регистрация: 11.08.2016
Сообщений: 3,915
23.02.2017, 18:38
Сделай массивчик с числами от 1 до 10 и случайным образом перетасуй его.
1
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
23.02.2017, 19:09
C++
1
2
3
4
5
6
7
8
9
int a[10];
for(int i=0; i<10; i++) a[i]=i+1;
randomize();
for(int l=10; l; l--)
{
    int n=random(l);
    cout<<a[n]<<endl;
    for(int j=n; j<l-1; j++) a[j]=a[j+1];
}
0
694 / 6888 / 265
Регистрация: 11.08.2016
Сообщений: 3,915
23.02.2017, 20:04
Или
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int a[10];
for(int i=0; i<10; i++) a[i]=i+1;
randomize();
for(int i=0; i<10; i++)
{
    int n=random(10);
    int h=a[n];
    a[n]=a[i];
    a[i]=h;
}
for(int i=0; i<10; i++)
   cout<< a[i]<<' ';
cout<<'\n';
1
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63
23.02.2017, 20:26  [ТС]
Ладно, попробуем по-другому. Этот номер мне нужен, что выбирать рандомный вариант case из switch(). То есть, генерируется номер, вставляется в switch и выбирается case.
P.S. Делаю программу-тесты, в case находится вопрос и 3 варианта ответа, поэтому нужно, чтобы каждый case проходил всего один раз. Всего должно быть 10 нажатий на кнопку, т.к. вопросов всего 10.
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
23.02.2017, 20:30
Builder не установлен? #3,4 проверить нельзя?
0
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63
23.02.2017, 22:48  [ТС]
Установлен, первым делом проверил. Повторы всё равно есть. Я код ставлю не в консольку, ставлю в кнопку. Естественно, убираю cout и т.д., в switch указываю, чтобы выводило параметр a[i]. В чем может быть проблема?
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
23.02.2017, 22:55
#3 скриншот повторов
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
24.02.2017, 12:22
Mr_Twain, вам уже Ivandur дал дельный совет. Не знаете, как "перетасовать"? Например так__
C++
1
2
3
4
   /* #include <algorithm>  */
    int A[10];
    for(int i=0;i<10;i++) A[i]=i;    // заполнение
    std::random_shuffle(&A[0],&A[10]);   // перемешивание
Повторений не будет.
2
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63
24.02.2017, 16:09  [ТС]
Цитата Сообщение от MansMI Посмотреть сообщение
#3 скриншот повторов
Как я вам сделаю скриншот того, что вопросы повторяются?

Если вопрос в тестах повторяется, значит, и число из массива повторяется, логично же? Потому что число будет подаваться в switch.
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
24.02.2017, 16:21
при повторе скриншоты не делаются? хорошо, я попробую
Изображения
 
0
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63
24.02.2017, 16:46  [ТС]
Сколько раз мне ещё написать, что я использую НЕ КОНСОЛЬНЫЙ РЕЖИМ. Прочитайте моё сообщение #5 и #7. Мне не нужен вывод массива, мне нужно просто зарандомить число, подать его в switch и вывести вопрос, который будет под этим номером. А главное, сделать так, чтобы из 10 вопросов не было ни одного повторяющегося, то есть, чтобы не повторялись варианты case.
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
24.02.2017, 17:17
никто и не подписывался супер-пупер оконное приложение разбирать, показано как получить 10 не повторяющихся значений, а алгоритм этот можно использовать где угодно, я так и "Верю Не Верю", "Никто не хочет быть миллионером", "Морской бой" делал, оконные
0
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63
24.02.2017, 18:30  [ТС]
Простая программа-тесты - это "супер-пупер оконное приложение"? Я вам описал уже несколько раз, что нужно сделать. Если на словах не очень понятно, могу предоставить код программы.
0
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,560
24.02.2017, 18:34
обойдусь
0
 Аватар для Mr_Twain
1 / 1 / 0
Регистрация: 21.02.2016
Сообщений: 63
25.02.2017, 15:20  [ТС]
Спасибо за помощь.

Добавлено через 19 часов 46 минут
Почему-то повторы всё равно остались. Подскажите, в чем ошибка? Вот код.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Button4Click(TObject *Sender)
{
k++;
if (k>=10) Button4->Enabled=false;
Button4->Caption=k;
int a[10];
for(int i=0; i<10; i++) a[i]=i+1;
randomize();
for(int l=10; l; l--)
{
int n=random(l);
for(int j=n; j<l-1; j++) a[j]=a[j+1];
Label2->Caption=a[n]; }
}
Требуется, чтобы при нажатии кнопки в Label выводилось число от 1 до 10, при этом, оно НЕ ДОЛЖНО повторяться ни разу. То есть, за 10 нажатий должны пройти все 10 чисел.
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
25.02.2017, 17:44
Цитата Сообщение от Mr_Twain Посмотреть сообщение
Сколько раз мне ещё написать, что я использую НЕ КОНСОЛЬНЫЙ РЕЖИМ. Прочитайте моё сообщение #5 и #7. Мне не нужен вывод массива, мне нужно просто зарандомить число, подать его в switch и вывести вопрос, который будет под этим номером. А главное, сделать так, чтобы из 10 вопросов не было ни одного повторяющегося, то есть, чтобы не повторялись варианты case.
Цитата Сообщение от Mr_Twain Посмотреть сообщение
Почему-то повторы всё равно остались. Подскажите, в чем ошибка? Вот код.
Потому что вы не хотите слушать, что вам хотят сказать. Заведите массив и пишите в него рандомные числа из диапазона, но перед тем как добавлять число (индекс вопроса) в массив, проверяйте, есть ли уже такое.
1
279 / 156 / 52
Регистрация: 30.06.2011
Сообщений: 1,712
25.02.2017, 22:14
Лучший ответ Сообщение было отмечено Mr_Twain как решение

Решение

Первый вариант, предложенный Ivandur и реализованный nick42. Повторений нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <algorithm>
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 static int i = 0;
 static int num[10];
 
 if(!i)
  {
   randomize();
   for(int i = 0; i < 10; i++) num[i] = i + 1;
   std::random_shuffle(num, &num[10]);
  }
 
 Label1->Caption = String(num[i]);
 Button1->Enabled = ++i < 10;
}
1
694 / 6888 / 265
Регистрация: 11.08.2016
Сообщений: 3,915
26.02.2017, 08:25
То есть, при нажатии кнопки должно выдаваться следующее число? Сделай массивчик членом формы и перетасуй в FormCreate. Потом при клике увеличивай номер позициии.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.02.2017, 08:25
Помогаю со студенческими работами здесь

Масив без повторений
Как заполнить рандомно масив без повторений от 0 к 16? Либо перемешать уже готовый масив заполненый от 0 к 16 по порядку.

Генерация случайных чисел от 1 до 9 без повторений
Помогите, не могу понять в чем дела, вроде все правильно и ошибок нет, но при запуске чет она у меня не работает

Рандом без повторений
Есть рандом от 1 до 8... Как сделать так, чтобы если рандом выкинул цифру, то после, он ее уже не повторял?

Рандом без повторений
Как рандомом заполнить файл БЕЗ повторений чисел?

Рандом без повторений
Здравствуйте! Искал по форуме, но так и не нашел подходящее решение такой задачи: пользователь вводит К ПРИМЕРУ число 7. я беру от него...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru