Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11

Почему цикл for не работает не до конца?

25.05.2017, 19:02. Показов 2213. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно было найти кол-во одинаковых элементов в строках матрицы [Например в строке: (1 1 2 2 4 5 5) ОТВЕТ: 6 ]. Я сделал копию исходного массива, и короче я начинал сравнение тогда и только тогда, когда при переборе следующих элементов мы встретим такой же, дальше мы просто сравниваем наш элемент в строке исходной матрицы с всеми элементами копии матрицы, заводим счетчик, приравниваем к нулю используемые элементы копии матрицы , чтоб дальше не было повторов. КОРОЧЕ ТАМ ЛИ СТОИТ BREAK и вообще че не так, когда больше 2 одинаковых цифр прога не работает или грузится, ничего не происходит вообщем, буду благодарен ,если что-то посоветуете.

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
int *K = new int[str];
       for (i = 0; i < str; i++)
       {// A - исх. массив, В - копия, К - массив кол-ва одинаковых элементов
           count = 0;
           for (j = 0; j < stolb-1; j++)
           {  
                   for (k = j + 1; k < stolb; k++)
                   {
                       if (A[i*stolb + j] == A[i*stolb + k])
                       { 
                           for (j = 0; j < stolb; j++) {
                               for (k = 0; k < stolb; k++) {
                                   if (A[i*stolb + j] == B[i*stolb + k])
                                   {
                                       count = count + 1;
                                       B[i*stolb + j] = 0;
                                   }
                               }
                              break;
                           }                
                       }
                   }
           }
          K[i] = count;
           cout << "K[" << i << "] = " << K[i] << endl;
       }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.05.2017, 19:02
Ответы с готовыми решениями:

Цикл не работает до конца
Уважаемые господа, здравствуйте! Помогите, пожалуйста, с проблемой. Это послание относится к тем, кто имеет дело с...

Почему до конца не работает программа?
Подсчитать сумму элементов, расположенных между первым максимальных и последним минимальным элементами. Если максимальный элемент...

Не понимаю до конца почему не работает пару вещей в программе.
Суть следующая. В первой программе все работает нормально.кроме вывода результата на экран.он выводится как код ASC.а нужно обычным...

6
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
25.05.2017, 19:06
Reoalo, код отформатируй нормально, чтобы было видно: какие скобки к чему относятся.
0
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
25.05.2017, 19:27  [ТС]
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
int *K = new int[str];
    for (i = 0; i < str; i++)
    {// A - исх. массив, В - копия, К - массив кол-ва одинаковых элементов
        count = 0;
        for (j = 0; j < stolb - 1; j++)
        {
            for (k = j + 1; k < stolb; k++)
            {
                if (A[i*stolb + j] == A[i*stolb + k])
                {
                    for (j = 0; j < stolb; j++) 
                    {
                        for (k = 0; k < stolb; k++) 
                        {
                            if (A[i*stolb + j] == B[i*stolb + k])
                            {
                                count = count + 1;
                                B[i*stolb + j] = 0;
                            }
                        }
                        break;
                    }
                }
            }
        }
        K[i] = count;
        cout << "K[" << i << "] = " << K[i] << endl;
    }
Добавлено через 1 минуту
Сделано
0
23 / 23 / 6
Регистрация: 23.03.2013
Сообщений: 245
25.05.2017, 21:29
А кто разрешил 2 раза использовать j ?
Или так и было задумано,я в код не вникал
0
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
25.05.2017, 21:37  [ТС]
Сложно сказать, скорее да чем нет, мы как бы заново начинаем цикл и сравниваем элемент исходной матрицы с элементами копии матрицы, начиная с 0 элемента в копии при этом
0
79 / 41 / 24
Регистрация: 03.02.2017
Сообщений: 116
26.05.2017, 11:24
C++
1
2
3
4
5
6
7
8
9
10
for (j = 0; j < stolb; j++) {
    for (k = 0; k < stolb; k++) {      // k = 0 ???
        if (A[i*stolb + j] == B[i*stolb + k])
        {
            count = count + 1;
            B[i*stolb + j] = 0;      // +j ???
        }
    }
break;     // безусловный выход из цикла
}
Довольно сложно разбираться в куче вложенных циклов, еще и не видя полностью кода. Поэтому я не уверен на 100% в том, что напишу.

Номера строк в тексте ниже, даны по участку кода в моем комментарии.

Первое. Во внутренних циклах j=0 (строка 1) и k=0 (строка 2), в результате в строке 3 гарантированно будет равно, так как ячейка в массиве А сравнивается со своим близнецом в массиве В.
Второе. В строке 3 мы сравниваем с B[...+k], а в строке 6 присваиваем B[...+j], я так понимаю это присвоение, чтобы исключить ячейку B[] из дальнейшего положительного результата сравнения, тогда в 6 строке тоже должно быть B[...+k].
Третье. Оператор break должен иметь условие выхода, то есть
C++
1
2
if()
    break;
У вас цикл в строке 1 завершится после первой же итерации из-за break.

Если это не поможет, выложи код полностью, чтоб можно было в IDE запустить.
0
0 / 0 / 0
Регистрация: 23.04.2017
Сообщений: 11
26.05.2017, 14:31  [ТС]
Вот я исправил, единственное только он неправильно сортирует строки, хотя считает все верно
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
#include<iostream>
#include<algorithm>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    int i, j, k, count, str, stolb;
    cout << "Введите кол-во строк и столбцов матрицы" << endl;
    cin >> str >> stolb;
    int *A = new int[str*stolb];
    for (i = 0; i < str; i++)
    {
        cout << "Элемент для {" << i << "} строки" << endl;
        cout << "Введите  " << stolb << " элементов" << endl;
        for (j = 0; j < stolb; j++)
        {
            cin >> A[i*stolb + j];
        }
    }
    int *B = new int[i*stolb + j]; // Создаем копию матрицы А
    for (i = 0; i < str; i++)
    {
        for (j = 0; j < stolb; j++)
        {
            B[i*stolb + j] = A[i*stolb + j];
        }
    }
    int *K = new int[str]; создаем массив из кол-ва одинаковых элементов на строке
    // Находим одинаковое кол-во значений в строках
    int chis = 0;
    count = 0;
    bool flag = false;
for (i = 0; i < str; i++)
    {
        count = 0;
        j = 0;
        while (j < stolb)
        {
            chis = A[i*stolb+j];
            for (k = j + 1; k < stolb; k++)
            {
                if (B[i*stolb+k] == chis && B[i*stolb+k] != 0) { count++; B[i*stolb+k] = 0; flag = true; }       //флаг есть ли похожие, если нашелся то включаем
            }
            if (flag) { flag = false; count++; }
            j++;
            K[i] = count;
        }
        cout << "K[" << i << "] = " << K[i] << endl;
    }
// сортируем массивы К и А одновременно (Где то здесь ошибка)
for (i = 0; i < str - 1; i++)
    {
        for ( int l = 1; l < str; l++)
        {
                if (K[i] <= K[l])
                {
                    for (j = 0; j < stolb; j++) 
                                        {
                        int temp = K[i];
                        K[i] = K[l];
                        K[l] = temp;
                        temp = A[i*stolb + j];
                        A[i*stolb + j] = A[l*stolb + j];
                        A[l*stolb + j] = temp;
                    }
                }
        }
    }
// Вывод отсортированного массива на экран
    for (i = 0; i < str; i++)
    {
        for (j = 0; j < stolb; j++)
        {
            cout << A[i*stolb + j] << " ";
        }
        cout << "\n";
    }
    cout << endl;
 
    delete[] A;
    delete[] B;
    delete[] K;
    system("pause");
 
    return 0;
}
Добавлено через 6 минут
То есть, он то сортирует строки, но при этом забывает переставить первый стобец из первой и последней строки. При этом массив K[i] все считает верно, почему он не сортирует все как надо, по смыслу же все норм!?

Добавлено через 23 секунды
То есть, он то сортирует строки, но при этом забывает переставить первый стобец из первой и последней строки. При этом массив K[i] все считает верно, почему он не сортирует все как надо, по смыслу же все норм!?

Добавлено через 13 минут
Стоп, он перестает перставлять строки при матрице 5 на 5 и выше, остальное вроде норм
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.05.2017, 14:31
Помогаю со студенческими работами здесь

Почему не работает цикл?
Добрый день! Не могу разобраться почему не работает цикл public class InFor { void inFor() { double u; int i,...

Почему не работает цикл while
&lt;?php $_hwid = $_GET; define('_HOST','localhost'); define('_LOGIN','rot'); define('_PASS',''); $DB = 'vktools'; $TABLE = 'Key';...

Почему цикл не работает?
&lt;html&gt; &lt;head&gt;&lt;title&gt;Палиндром&lt;/title&gt; &lt;/head&gt; &lt;body&gt; &lt;script type=&quot;text/javascript&quot;&gt; function palindrom(str) { var text =...

Почему не работает цикл for
Ситуация такая. Заполняем матрицу символами: &gt;&gt; y=. Функция trans12 зависит от размерности y. создала файл-функцию. Цикл if: если...

Почему не работает цикл?
Задача на скриншоте. Пытался использовать цикл так как дорога кольцевая и надо result сокращать каждый раз если байкер пройдет больше...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки 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
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru