Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 09.08.2019
Сообщений: 88
1

Исправить код с массивами

27.08.2019, 16:00. Показов 1188. Ответов 5
Метки нет (Все метки)

Если запускать через локальный отладчик WIndows то перестает выдавать числа после 4 строки, хотя я ждал, а если нажимать на F10 то все работает. Подскажите в чем проблема, пожалуйста. И если массив total[] увеличить до 96, d1 до 24 в цикле do,поставить в цикле for(int = 1; i<=20;i++) изменить на 96, то тоже зависает, и если через локальный отладчик тоже зависает
и через в F10 тоже. Помогите пожалуйста!!!!!!!!!!!!!!!!!!!!!!!!!!!!


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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#include "pch.h"
#include <iostream>
#include <string>
#include <string.h>
#include <ctime>
using namespace std;
int main()
{
    int a, b, c, d, e, f, i, ac, r1;
    int r2 = 0; 
    int u = 0;
    int t = 0;
    r1 = 0;
    b = -1;
    ac = 0;
    c = 0;
    d = 0;
    a = 0;
    f = 0;
    i = 0;
    e = 0;
    int d1 = 0;
    char str[4];
    string slovo = "1234";
    int size = slovo.length();
    srand(time(NULL));
    char total[20]; 
    int arr2[4];
    for (int i = 0; i < size; i++)
    {
        str[i] = '0';
    }
    for (int i = 0; i < 20; i++)
    {
        total[i] = '0';
    }
    //////////////////////////////////////////////
    do
    {
        srand(time(NULL));
        int k = rand() % size;
        for (int i = 0; i < size; i++)
        {
            if (arr2[i] == k)
            {
                r2 = 0;
            }
        }
        if (r2 != 0)
        {
            arr2[e++] = k;
            str[a++] = slovo[k];
            f++;
        }
        r2 = 5;
    } while (f != size);
    a = 0;
    f = 0;
    e = 0;
    for (int i = 0; i < size; i++)
    {
        arr2[i] = -1;
    }
    do 
    {
            for (int i = 1; i <= 20; i++)
            {   
                c = i;
                c--;
                b++;
                if (total[c] == str[b] && total[c] != '0'&& str[b] != '0')
                {
                    t++;
                }
                if (i % 4 == 0 && i != 0)
                {
                    b = -1;
                    t = 0;
                }
                if (t >= 3)
                {
                    t = 0;
                    b = -1;
                    u = 3;
                    break;
                }
                else
                {
                    u = 1;
                }
            }
            if (u == 1)
            {
                b = -1;
                t = 0;
                for (int i = 0; i < size; i++)
                {
                    if (total[r1] == '0')
                    {
                        total[r1] = str[i];
                        cout << total[r1];
                        r1++;
                    }
                } 
                d1++;
                cout << endl;
            }
                do
                {
                    srand(time(NULL));
                    int k = rand() % size;
                    for (int i = 0; i < size; i++)
                    {
                        if (arr2[i] == k)
                        {
                            r2 = false;
                        }
                    }
                    if (r2 != false)
                    {
                        arr2[e++] = k;
                        str[a++] = slovo[k];
                        f++;
                    }
                    r2 = 5;
                } while (f != size);
                a = 0;
                f = 0;
                e = 0;
        for (int i = 0; i < size; i++)
        {
            arr2[i] = -1;
        }
    } while (d1 != 5);
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.08.2019, 16:00
Ответы с готовыми решениями:

Работа с массивами - исправить ошибки
Проблема вот в чём: При компиляции ошибок не возникает, программа нормально начинает работать. Но...

Скажите, пожалуйста, как исправить исправить код в процедуре
задание такое :Дан одномерный массив. Переместить нулевые элементы массива в начало, сдвинув...

Как вставить div в PHP код (в echo) - исправить код
Народ как вставить div в php код точнее в echo В этот код:&lt;?php //отсеивание $dir = &quot;MP3...

Код, который включает/выключает светодиоды на клавиатуре. Исправить код
Есть код, который включает/выключает светодиоды (Caps Lock, Num Lock и Scroll Lock) по нажатию...

5
Модератор
Эксперт С++
10872 / 8991 / 5408
Регистрация: 18.12.2011
Сообщений: 24,040
27.08.2019, 16:36 2
Лучший ответ Сообщение было отмечено LexaNoob как решение

Решение

1.
строки 40 и 110:
Цитата Сообщение от LexaNoob Посмотреть сообщение
srand(time(NULL));
Цитата Сообщение от LexaNoob Посмотреть сообщение
srand(time(NULL));
не просто лишние, а вредные - заставляют генерировать одинаковые числа, т.к. между вызовами меньше 1 секунды.
2.
строка 28
Цитата Сообщение от LexaNoob Посмотреть сообщение
int arr2[4];
объявили и неинициализировали
а в строке 44
Цитата Сообщение от LexaNoob Посмотреть сообщение
if (arr2[i] == k)
пытаемся этот мусор сравнить с со значением переменной k
1
0 / 0 / 0
Регистрация: 09.08.2019
Сообщений: 88
27.08.2019, 23:18  [ТС] 3
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#include "pch.h"
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
    int a, b, c, d, e, f, i, ac, r1;
    int r2 = 0;
    int u = 0;
    int t = 0;
    r1 = 0;
    b = -1;
    ac = 0;
    c = 0;
    d = 0;
    a = 0;
    f = 0;
    i = 0;
    e = 0;
    int d1 = 0;
    char str[4];
    char slovo [999] ="1234";
    char total[96]; //массив для храние вариантов равен факториалу slovo * str
    int arr2[4];///// рандом числа 
    ///////////////////////////////////////////////   Заполнение массива
    for (int i = 0; i < strlen(slovo); i++)
    {
        str[i] = '0';
    }
    for (int i = 0; i < 96; i++)
    {
        total[i] = '0';
    }
    //////////////////////////////////////////////
    do
    {
        int k = rand() % strlen(slovo);
        for (int i = 0; i < strlen(slovo); i++)
        {
            if (arr2[i] == k)
            {
                r2 = 0;
            }
        }
        if (r2 != 0)
        {
            arr2[e++] = k;
            str[a++] = slovo[k];
            f++;
        }
        r2 = 5;
    } while (f != strlen(slovo));
    a = 0;
    f = 0;
    e = 0;
    for (int i = 0; i < strlen(slovo); i++)
    {
        arr2[i] = -1;
    }
    do //// основной цикл на кол-во
    {
        for (int i = 1; i <= 100; i++)
        {
            c = i;
            c--;
            b++;
            if (total[c] == str[b] && total[c] != '0'&& str[b] != '0')
            {
                t++;
            }
            if (i % 4 == 0 && i != 0)
            {
                b = -1;
                t = 0;
            }
            if (t >= 3)
            {
                t = 0;
                b = -1;
                u = 3;
                break;
            }
            else
            {
                u = 1;
            }
        }
        if (u == 1)
        {
            b = -1;
            t = 0;
            for (int i = 0; i < strlen(slovo); i++)
            {
                if (total[r1] == '0')
                {
                    total[r1] = str[i];
                    cout << total[r1];
                    r1++;
                }
            }
            d1++;
            cout << " " << d1;
            cout << endl;
        }
        do
        {
 
            int k = rand() % strlen(slovo);
            for (int i = 0; i < strlen(slovo); i++)
            {
                if (arr2[i] == k)
                {
                    r2 = 0;
                }
            }
            if (r2 != 0)
            {
                arr2[e++] = k;
                str[a++] = slovo[k];
                f++;
            }
            r2 = 5;
        } while (f != strlen(slovo));
        a = 0;
        f = 0;
        e = 0;
        for (int i = 0; i < strlen(slovo); i++)
        {
            arr2[i] = -1;
        }
    } while (d1 != 24);///////////// конец цыкла
    return 0;
}
0
Модератор
Эксперт С++
10872 / 8991 / 5408
Регистрация: 18.12.2011
Сообщений: 24,040
28.08.2019, 06:58 4
Не вижу особых изменений.
Массив arr2 как был неинициализированным, так и остался.
И куда делась 26 строка начальной инициализации датчика случайных чисел?

И, наконец, напишите постановку задачи.
0
0 / 0 / 0
Регистрация: 09.08.2019
Сообщений: 88
28.08.2019, 10:45  [ТС] 5
arr2 инициализируется потом туда записываются рандом числа, а по ним генерируется строка, а потом я их очищаю, записываю -1 потому что в массиве нет такого индекса и задача должна выводить все перестановки строки,кроме '0' и можно мне объяснить почему в том цикле который я отметил в комментариях можно написать 1, хотя по моей логике такого быть не должно. Там должна стоять цифра 4320, а с ней не работает.

Добавлено через 1 час 1 минуту
Цикл в строке 62
0
Модератор
Эксперт С++
10872 / 8991 / 5408
Регистрация: 18.12.2011
Сообщений: 24,040
28.08.2019, 10:52 6
Цитата Сообщение от LexaNoob Посмотреть сообщение
arr2 инициализируется
Еще раз:

строка 21
Цитата Сообщение от LexaNoob Посмотреть сообщение
int arr2[4];
объявили и неинициализировали
далее, а в строке 40
Цитата Сообщение от LexaNoob Посмотреть сообщение
if (arr2[i] == k)
пытаемся этот мусор сравнить с со значением переменной k
А уже потом в строках 56-59:
Цитата Сообщение от LexaNoob Посмотреть сообщение
C++
1
2
3
4
for (int i = 0; i < strlen(slovo); i++)
 {
 arr2[i] = -1;
 }
И, ЕЩЕ РАЗ: напишите постановку задачи.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.08.2019, 10:52

Помощь в написании контрольных, курсовых и дипломных работ здесь.

как исправить код на динамический массив-код уже написан только на статическом
#include &lt;iostream&gt; #include &lt;iostream&gt; #include &quot;string.h&quot; using namespace std; const...

Переделать код с массивами
Вот у меня есть код, который удаляет стoлбeц укaзанный, переделать нужн чтобы удалял строку, я...

Изменить код с массивами
Вот у меня есть код, который удаляет стoлбeц укaзанный, переделать нужн чтобы удалял строку, я...

Готовый код по работе с массивами
Так как не нашел на сайте раздела типа &quot;Кладовка&quot;, то пишу здесь. Просьба к модератором перенести...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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