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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
sabich
0 / 0 / 0
Регистрация: 24.12.2013
Сообщений: 23
#1

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

30.12.2013, 21:47. Просмотров 388. Ответов 5
Метки нет (Все метки)

Задание: Нужно вывести массив из случайных чисел. Размер массива 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 работает все без проблем, как это понять?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.12.2013, 21:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Эксперты! Одномерный массив неповторяющихся чисел не могу понять почему криво работает (C++):

Не могу понять почему не работает (или правильно не работает) - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Не могу понять почему не работает - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; const int arrSize = 15; int main() { string Phone; ...

не могу понять почему не работает - C++
Пожалуйста ,помоги,найти ошибку... услвие задачи Подсчитать количество вхождений букв и слов в тексте #include&lt;fstream.h&gt; ...

Не могу понять почему не работает - C++
#include &quot;stdio.h&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; #define E 1e-6 int main() { float x,y,a; int n; ...

Не могу понять почему не работает - C++
#include &lt;iostream&gt; using namespace std; int main() { double a; double b; cout&lt;&lt;&quot;vvedite sumu deposita&quot;; cin&gt;&gt;a; ...

Задача: Функция получает одномерный массив и возвращает количество чисел с суммой цифр больше 20. Почему не работает? - C++
#include&lt;iostream.h&gt; #include&lt;conio.h&gt; #include&lt;stdlib.h&gt; int main() { const int N=10; int A; for (int i=0;i&lt;N;i++) cin...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
azoller
17 / 17 / 1
Регистрация: 03.05.2013
Сообщений: 114
30.12.2013, 21:58 #2
Так и пойми, то что ты на первой итерации выходишь из внутреннего цикла и у тебя j=-1 и она тут же инкрементируется и превращается в 0. Если же будет j=0 перед выходом, то на второй итерации у тебя будет j=1 уже, а тебе массив нужно ведь с 0 пробегать вновь.
Поэтому и -1 нужно там ставить.
1
Петррр
5956 / 3393 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
30.12.2013, 22:06 #3
Цитата Сообщение от sabich Посмотреть сообщение
Размер массива 8. Случайные числа от 1 до 8.
Заполнить массив 1 .. 8. Перемешать его через std::random_shuffle?
0
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 минуту
Петррр, под кодом вопрос
0
S_el
2100 / 1611 / 308
Регистрация: 15.12.2013
Сообщений: 6,451
30.12.2013, 23:11 #5
Цитата Сообщение от sabich Посмотреть сообщение
Если j инкременируется и превращается в 0, то какая разница какое у него было до этого значение, все равно будет 0. Вот этот момент я и не могу понять.
Вам-же уже написали,попробую пояснить проще:

У вас было j=-1 ,потом j++ и j стал 0.Индексация начинается с 0,поэтому проверятся будут все элементы массива.
Если вы в условном операторе делаете j=0,потом j++ и j=1,тогда j никогда не будет сравниваться с 0.
2
Байт
Эксперт C
16061 / 10330 / 1540
Регистрация: 24.12.2010
Сообщений: 19,458
31.12.2013, 02:12 #6
Одно из возможных решений в посте #8 первые 9 строк кода
Заполнить массив случайными неповторяющимися числами
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.12.2013, 02:12
Привет! Вот еще темы с ответами:

Не могу понять почему не работает программа - C++
int f,x,a,b,c; cin&gt;&gt;x; if (x&gt;0) {f=pow(-x,4); cout&lt;&lt;f;} else {f=x+92; cout&lt;&lt;f;} if (x==0) {f=0;

не могу понять почему не работает программа - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;clocale&gt; #include &lt;cmath&gt; using namespace std; int main () { setlocale...

Не могу понять почему программа работает не правильно! - C++
Задание: Программа находит в строке 1 символ который не входит во 2 заданную строку. Помогите исправить ошибку. ...

Ребятки,выручайте,не могу понять почему не работает - C++
В общем дали лабу на линейный алгоритм или ещё как то,а я не был на той паре когда это г... скидывали.в общем вот это- надо сделать в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.12.2013, 02:12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru