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

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

23.02.2017, 18:22. Показов 4256. Ответов 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 / 7078 / 265
Регистрация: 11.08.2016
Сообщений: 3,970
23.02.2017, 18:38
Сделай массивчик с числами от 1 до 10 и случайным образом перетасуй его.
1
1617 / 1182 / 553
Регистрация: 08.01.2012
Сообщений: 4,561
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 / 7078 / 265
Регистрация: 11.08.2016
Сообщений: 3,970
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,561
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,561
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,561
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,561
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,561
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 / 7078 / 265
Регистрация: 11.08.2016
Сообщений: 3,970
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
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru