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

Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает - C++

Восстановить пароль Регистрация
 
sabich
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 23
30.12.2013, 21:47     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает #1
Задание: Нужно вывести массив из случайных чисел. Размер массива 8. Случайные числа от 1 до 8. Числа не должны повторяться.
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
setlocale(LC_CTYPE,"rus");
 
const int size=8;
int Numb[size];
srand(time(NULL));
for(int i=0;i<size;i++)
{
    Numb[i] = rand()%8+1;
    for(int j=0;j<i;j++)
    {
        if(Numb[i]==Numb[j])
        {
            Numb[i]=rand()%8+1;
            j=-1;
        }
    }
cout<<Numb[i]<<' ';
}
 
return 0;
}
А теперь собственно вопрос. Если j=0, то бывают повторы нулевого элемента массива. С -1 работает все без проблем, как это понять?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 21:47     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает
Посмотрите здесь:

Не могу понять почему не работает прога(структуры) C++
C++ не могу понять почему не работает
C++ не могу понять почему не работает std::sort()
не могу понять почему не работает программа C++
Не могу понять почему программа работает не правильно! C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
azoller
17 / 17 / 1
Регистрация: 03.05.2013
Сообщений: 114
30.12.2013, 21:58     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает #2
Так и пойми, то что ты на первой итерации выходишь из внутреннего цикла и у тебя j=-1 и она тут же инкрементируется и превращается в 0. Если же будет j=0 перед выходом, то на второй итерации у тебя будет j=1 уже, а тебе массив нужно ведь с 0 пробегать вновь.
Поэтому и -1 нужно там ставить.
Петррр
 Аватар для Петррр
5916 / 3353 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
30.12.2013, 22:06     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает #3
Цитата Сообщение от sabich Посмотреть сообщение
Размер массива 8. Случайные числа от 1 до 8.
Заполнить массив 1 .. 8. Перемешать его через std::random_shuffle?
sabich
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 23
30.12.2013, 23:03  [ТС]     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает #4
Цитата Сообщение от azoller Посмотреть сообщение
Так и пойми, то что ты на первой итерации выходишь из внутреннего цикла и у тебя j=-1 и она тут же инкрементируется и превращается в 0. Если же будет j=0 перед выходом, то на второй итерации у тебя будет j=1 уже, а тебе массив нужно ведь с 0 пробегать вновь.
Поэтому и -1 нужно там ставить.
Если j инкременируется и превращается в 0, то какая разница какое у него было до этого значение, все равно будет 0. Вот этот момент я и не могу понять. А первая итерация цикла i вообще не заходит в цикл j, так что значение j вроде крутится только в цикле j.

Добавлено через 1 минуту
Петррр, под кодом вопрос
S_el
1908 / 1503 / 296
Регистрация: 15.12.2013
Сообщений: 5,920
30.12.2013, 23:11     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает #5
Цитата Сообщение от sabich Посмотреть сообщение
Если j инкременируется и превращается в 0, то какая разница какое у него было до этого значение, все равно будет 0. Вот этот момент я и не могу понять.
Вам-же уже написали,попробую пояснить проще:

У вас было j=-1 ,потом j++ и j стал 0.Индексация начинается с 0,поэтому проверятся будут все элементы массива.
Если вы в условном операторе делаете j=0,потом j++ и j=1,тогда j никогда не будет сравниваться с 0.
Байт
 Аватар для Байт
13988 / 8819 / 1230
Регистрация: 24.12.2010
Сообщений: 15,975
31.12.2013, 02:12     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает #6
Одно из возможных решений в посте #8 первые 9 строк кода
Заполнить массив случайными неповторяющимися числами
Yandex
Объявления
31.12.2013, 02:12     Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает
Ответ Создать тему
Опции темы

Текущее время: 05:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru