Форум программистов, компьютерный форум CyberForum.ru

Баг в коде(псевдо-рандомные числа) - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Баг в коде(псевдо-рандомные числа) http://www.cyberforum.ru/cpp-beginners/thread916083.html
Здраствуйте, суть программы в том чтобы в цикле выдавало определенное количество рандомных значений элементом массива, например если 10 значений, то числа от 0 до 9 без повторений. Иногда при запуске 1 элемент массива дает одинаковое значение другого элемента, причем етот баг происходит только с ним Вот код: #include <iostream> #include <math.h> #include <stdlib.h> #include <time.h> using...
C++ Сумма ряда Здравствуйте! Помогите написать пожалуйста программу... Вычисление суммы первых n членов последовательности. Пользователь вводит натуральное число n. Программа рассчитывает и выводит на экран сумму первых n членов последовательности http://www.cyberforum.ru/cpp-beginners/thread916064.html
Как определить системную дату? C++
Как найти текущую системную дату на компе, а именно год и записать в переменную типа int?
Спрятать сообщение в png файл C++
Работал с BMP файлом - там всё просто. Но с png возникли трудности - формат сжатый, а именно zlib. Что делать? Как спрятать текст в png файл? Лазил на английских сайтах, но так толком и не нашёл ничего.
C++ Подскажите, где ошибка http://www.cyberforum.ru/cpp-beginners/thread916046.html
Не могу понять, почему не комплируется. Программирую первый день) #include <iostream> #include <istream> #include <ostream> using namespace std; int main () { setlocale (LC_ALL,"Russian"); float slash; float x;
C++ Алгоритм сжатия LZ Если у кого есть, поделитесь кодом, пожалуйста:-/ подробнее

Показать сообщение отдельно
Гром
 Аватар для Гром
199 / 118 / 10
Регистрация: 20.03.2009
Сообщений: 1,076
Записей в блоге: 16
02.07.2013, 06:51     Баг в коде(псевдо-рандомные числа)
Нужно использовать цикл while и проводить столько итераций, сколько потребуется для генерации корректного значения. Представьте, что однажды рандом вам 1000 раз подряд сгенерирует неправильное число, а у на всю программу только 100 итераций (кстати, это только неправильно - зачем проверять совпадение со всеми элементами, когда мы генерируем только второй-третий, а в последующих еще мусор?)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
#include <cstdlib>
#include <ctime>
 
bool IsMember(const int* arr, size_t sz, int x)
 {
 for (size_t i = 0; i < sz; ++i)
  if (x == arr[i])
   return true;
 return false;
 }
 
int main()
{
const size_t Size = 10;
int array[Size];
for (size_t i = 0; i < Size; ++i)
 {
 bool Ok = false;
 int a;
 while (! Ok)
  {
  Ok = true;
  a = rand() % Size;
  if (IsMember(array, i, a))
   Ok = false;
  }
 array[i] = a;
 std::cout << a << "\t";
 }
}
alsav22, при повторной генерации нужно заново сравнивать со всеми предыдущими элементами, не только с тем, с которым совпало сейчас. И желательно все-таки использовать while, когда число итераций заранее неизвестно. Хотя работать будет и так.
 
Текущее время: 16:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru