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

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

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

Бесконечный цикл. Двумерные массивы - C++

18.12.2015, 17:12. Просмотров 279. Ответов 15
Метки нет (Все метки)

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


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
#include <stdio.h>
#include <iostream>
const int N=6;
using namespace std;
void main()
{
int M[N][N], n1, n2, n3, C[N], I[N], a;
for (int i = 0; i < N; i++)
{
    for(int j=0;j<N;j++)    
    M[i][j] = rand() % 199-99;
}
 
for (int j = 0; j < N; j++)
{
    for (int i = 0; i < N; i++) 
    {
        if (i==0 && M[i][j]<0) n1=abs(M[i][j]); else n1=0;
        if (i==2 && M[i][j]<0) n2=abs(M[i][j]); else n2=0;
        if (i==4 && M[i][j]<0) n3=abs(M[i][j]); else n3=0;
    }
    if (j==0) C[0]=n1+n2+n3;
    if (j==1) C[1]=n1+n2+n3;
    if (j==2) C[2]=n1+n2+n3;
    if (j==3) C[3]=n1+n2+n3;
    if (j==4) C[4]=n1+n2+n3;
    if (j==5) C[5]=n1+n2+n3;
}   
 
for (int j=0;j<N;j++) I[j]=j;
for (int i=0;i<N-1;i++)
{
    for (int j=i+1;i<N;i++)
    {
        if (C[I[j]]<C[I[i]]) 
        {
            a=I[i];I[i]=I[j];I[j]=a;
        }
    }
}
 
for (int i=0;i<N;i+1) {
    for (int j=0;j<N;j+1)
    {
       cout<<M[i][I[j]];
    }
 cout<<endl;
}
 
system("pause");
}

Бесконечный цикл с -58.
Нашел в дебаге, что это I[j] принимает очень больше число, а так же все значения массива C равны 0.
Почему?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.12.2015, 17:12     Бесконечный цикл. Двумерные массивы
Посмотрите здесь:

Бесконечный цикл while - C++
Здравствуйте необходимо написать бесконечный цикл while , который при запуске программы постоянно выводил на экран char переменную &quot;y&quot; и...

Бесконечный цикл - C++
Задача: Ввести количество камней, ввести вес каждого камня, сложить камни в 2 кучки так чтобы разница между общими массами кучек были...

Бесконечный цикл - C++
Есть бесконечный цикл,благодаря которому постоянно вызываются функции. Из за этого бесконечного цикла глючит программу. Есть ли другой...

Бесконечный цикл - C++
Ребят, что-то цикл выполняется постоянно. Покажите ошибку мне/ #include &lt;iostream&gt; using namespace std; int main() { ...

Бесконечный цикл - C++
Так. Консоль CLR Вод программа: #include &quot;stdafx.h&quot; #include &quot;conio.h&quot; #include &quot;stdio.h&quot; using namespace...

Бесконечный цикл - C++
if (!(cin &gt;&gt; Mas &gt;&gt; Rost)) { cout &lt;&lt; &quot;Ошибка\n&quot;; continue; } В общем при вводе букв начинается бесконечный цикл, а надо...

Бесконечный цикл - C++
Как ввести программу в бесконечный цикл на C++ ? Смотрел видео где делали бесконечный цикл (НО!) это было на Small Basic'е, а мне нужно...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
18.12.2015, 17:19     Бесконечный цикл. Двумерные массивы #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
for (int j = 0; j<N; j++) I[j] = j;
    for (int i = 0; i<N - 1; i++)
    {
        for (int j = i + 1; j<N; j++)
        {
            if (C[I[j]]<C[I[i]])
            {
                a = I[i]; I[i] = I[j]; I[j] = a;
            }
        }
    }
 
    for (int i = 0; i<N; i++) {
        for (int j = 0; j<N; j++)
        {
            cout << M[i][I[j]];
        }
        cout << endl;
    }
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
18.12.2015, 17:41  [ТС]     Бесконечный цикл. Двумерные массивы #3
Благодарю!

Столько крови уже выпила эта задача

Добавлено через 5 минут
Теперь у меня числа неслучайные, они все время повторяются.
Как это исправить?
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
18.12.2015, 17:51     Бесконечный цикл. Двумерные массивы #4
подключить
C++
1
#include <time.h>
и
C++
1
2
for(int j=0;j<N;j++)    
    M[i][j] = rand() % 199-99;
заменить на
C++
1
2
3
4
for(int j=0;j<N;j++){ 
    srand (time(NULL));
    M[i][j] = rand() % 199-99;
}
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
18.12.2015, 17:57  [ТС]     Бесконечный цикл. Двумерные массивы #5
Теперь у меня случайные числа, но зато вот какие:
Миниатюры
Бесконечный цикл. Двумерные массивы  
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
18.12.2015, 18:00     Бесконечный цикл. Двумерные массивы #6
srand (time(NULL));
убрать
вызвать один раз только в начале майна
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
18.12.2015, 18:09  [ТС]     Бесконечный цикл. Двумерные массивы #7
Работает, только теперь сортировка неправильная:

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
#include <stdio.h>
#include <iostream>
#include <time.h>
 
const int N=6;
using namespace std;
void main()
{
    srand (time(NULL));
int M[N][N], n1, n2, n3, C[N], I[N], a;
for (int i = 0; i < N; i++)
{
    for(int j=0;j<N;j++){ 
    
    M[i][j] = rand() % 199-99;
}
}
 
for (int j = 0; j < N; j++)
{
    for (int i = 0; i < N; i++) 
    {
        if (i==0 && M[i][j]<0) n1=abs(M[i][j]); else n1=0;
        if (i==2 && M[i][j]<0) n2=abs(M[i][j]); else n2=0;
        if (i==4 && M[i][j]<0) n3=abs(M[i][j]); else n3=0;
    }
    if (j==0) C[0]=n1+n2+n3;
    if (j==1) C[1]=n1+n2+n3;
    if (j==2) C[2]=n1+n2+n3;
    if (j==3) C[3]=n1+n2+n3;
    if (j==4) C[4]=n1+n2+n3;
    if (j==5) C[5]=n1+n2+n3;
}   
 
for (int j=0;j<N;j++) I[j]=j;
for (int i=0;i<N-1;i++)
{
    for (int j=i+1;i<N;i++)
    {
        if (C[I[j]]<C[I[i]]) 
        {
            a=I[i];I[i]=I[j];I[j]=a;
        }
    }
}
 
for (int i=0;i<N;i++) {
    for (int j=0;j<N;j++)
    {
       cout<<M[I[j]][i]<<"\t";
    }
 cout<<endl;
}
 
system("pause");
}
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
18.12.2015, 19:17     Бесконечный цикл. Двумерные массивы #8
C++
1
2
3
4
5
6
    for (int i = 0; i < N; i++) 
    {
        if (i==0 && M[i][j]<0) n1=abs(M[i][j]); else n1=0;
        if (i==2 && M[i][j]<0) n2=abs(M[i][j]); else n2=0;
        if (i==4 && M[i][j]<0) n3=abs(M[i][j]); else n3=0;
    }
бред и индусский код.
for (int i = 0; i < N; i=i+2) - так сложно что ли сделать?
C++
1
2
3
4
5
6
    if (j==0) C[0]=n1+n2+n3;
    if (j==1) C[1]=n1+n2+n3;
    if (j==2) C[2]=n1+n2+n3;
    if (j==3) C[3]=n1+n2+n3;
    if (j==4) C[4]=n1+n2+n3;
    if (j==5) C[5]=n1+n2+n3;
для таких индусов как ты изобрели циклы. Хотел помочь, но от таких строчек желание как-то резко снижается.
и вообще,
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов.
а то что ты складываешь, это элементы на нечётных местах.
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
18.12.2015, 19:33  [ТС]     Бесконечный цикл. Двумерные массивы #9
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
так сложно что ли сделать?
Неопытность, не подумал о таком, в следующий раз применю.

Про циклы согласен, тут оправдания мне нету. Мог исправить, но раз вводилось в массив одно и то же, решил оставить.

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
а то что ты складываешь, это элементы на нечётных местах.
Так в чем проблема, если нечетные и нужны?

Спасибо за совет, теперь, если буду выкладывать куда свой код, лениться не буду.
Kuzia domovenok
1889 / 1744 / 117
Регистрация: 25.03.2012
Сообщений: 5,922
Записей в блоге: 1
18.12.2015, 20:04     Бесконечный цикл. Двумерные массивы #10
Цитата Сообщение от jirtreck Посмотреть сообщение
Характеристикой столбца целочисленной матрицы назовем сумму модулей его отрицательных нечетных элементов
это верно?
Если да, то почему ты считаешь i==0 i==2 i==4 ?

Добавлено через 1 минуту
элементы M[1][j] M[3][j]...итд принципиально что ли не могут быть чётными?

Добавлено через 40 секунд
может условие должно быть (M[i][j]%2==0 && M[i][j]<0) ???
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
19.12.2015, 04:53  [ТС]     Бесконечный цикл. Двумерные массивы #11
Что-то не доходило, - думал что надо было четные по порядку, а не по значению.

(M[i][j]%2!=0 && M[i][j]<0)

Так когда нулю равно, значит четное, или я чего-то не понимаю?

Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
or (int i = 0; i < N; i=i+2)
Как тогда из этого я смогу нормально найти n1 n2 n3 и добавить их? Понимаю из этого способа только сделать так, чтобы уменьшилось количество итераций в 2 раза, когда остальной код останется прежним.

Добавлено через 7 минут
Не получается у меня по-другому, только так:

C++
1
2
3
4
5
6
7
8
9
10
for (int j = 0; j < N; j++)
{
    for (int i = 0; i < N; i=i+2) 
    {
        if (i==0 && M[i][j]<0 && M[i][j]%2!=0) n1=abs(M[i][j]); else n1=0;
        if (i==2 && M[i][j]<0 && M[i][j]%2!=0) n2=abs(M[i][j]); else n2=0;
        if (i==4 && M[i][j]<0 && M[i][j]%2!=0) n3=abs(M[i][j]); else n3=0;
    }
     C[j]=n1+n2+n3;
}
Добавлено через 17 минут
Я бред написал...

Все еще пытаюсь по местам нечетные взять, когда значения надо
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
19.12.2015, 04:56     Бесконечный цикл. Двумерные массивы #12
C++
1
2
3
4
5
6
7
8
9
10
    for (int j = 0; j < N; j++)
    {
        C[j] = 0;//сумма модулей равна 0
        for (int i = 0; i < N; i++)//идем по столбцу
        {
            if (M[j][i] % 2 != 0 && M[j][i] > 0)//если отрицательное не четное
                C[j] += abs(M[j][i]);
        }
 
    }
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
19.12.2015, 05:34  [ТС]     Бесконечный цикл. Двумерные массивы #13
Спасибо!
Буду в таких случаях знать про волшебное += )))

Добавлено через 15 минут
Модернизировал программу, но вывод не по сортировке:

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
#include <stdio.h>
#include <iostream>
#include <time.h>
 
const int N=6;
using namespace std;
void main()
{
    srand (time(NULL));
int M[N][N], C[N], I[N], a;
for (int i = 0; i < N; i++)
{
    for(int j=0;j<N;j++){ 
    
    M[i][j] = rand() % 199-99;
}
}
 
for (int j = 0; j < N; j++)
{
C[j] = 0;//сумма модулей равна 0
for (int i = 0; i < N; i++)//идем по столбцу
{
if (M[j][i] % 2 != 0 && M[j][i] > 0)//если отрицательное и нечетное
C[j] += abs(M[j][i]);
}
 
}
 
for (int j=0;j<N;j++) I[j]=j;
for (int i=0;i<N-1;i++)
{
    for (int j=i+1;i<N;i++)
    {
        if (C[I[j]]<C[I[i]]) 
        {
            a=I[i];I[i]=I[j];I[j]=a;
        }
    }
}
 
for (int i=0;i<N;i++) {
    for (int j=0;j<N;j++)
    {
       cout<<M[i][I[j]]<<"\t";
    }
 cout<<endl;
}
 
system("pause");
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
19.12.2015, 06:49     Бесконечный цикл. Двумерные массивы #14
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
#include <stdio.h>
#include <iostream>
#include <time.h>
 
const int N = 6;
using namespace std;
void main()
{
    srand(time(NULL));
    int M[N][N], C[N], I[N], a;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++){
            M[i][j] = rand() % 199 - 99;
            std::cout << M[i][j] << '\t';
        }
        std::cout << '\n';
    }
 
    std::cout << '\n';
    std::cout << '\n';
    for (int j = 0; j < N; j++)
    {
        C[j] = 0;//сумма модулей равна 0
        for (int i = 0; i < N; i++)//идем по столбцу
        {
            if (M[i][j] % 2 != 0 && M[i][j] > 0)//если отрицательное и нечетное
                C[j] += abs(M[i][j]);
        }
        std::cout << C[j] << '\t';
 
    }
    std::cout << '\n';
    std::cout << '\n';
    for (int j = 0; j < N; j++) I[j] = j;
 
    
    for (int i = 1; i < N; i++)
    {
        int temp = I[i];
        int item = i - 1; 
 
        while (item >= 0 && C[I[item]] > C[temp])
        {
            I[item + 1] = I[item]; 
            I[item] = temp;
            item--;
        }
    }
 
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < N; j++)
        {
            cout << M[i][I[j]] << "\t";
        }
        cout << endl;
    }
 
    system("pause");
}
jirtreck
1 / 1 / 0
Регистрация: 25.09.2015
Сообщений: 32
19.12.2015, 11:29  [ТС]     Бесконечный цикл. Двумерные массивы #15
Благодарю! Все работает, только надо заменить знак больше на меньше в если.

C++
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 1; i < N; i++)
    {
        int temp = I[i];
        int item = i - 1; 
 
        while (item >= 0 && C[I[item]] > C[temp])
        {
            I[item + 1] = I[item]; 
            I[item] = temp;
            item--;
        }
    }
Если не трудно, можно расставить комментарии в этой части?
В некоторых местах в логику не врубился
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.12.2015, 11:47     Бесконечный цикл. Двумерные массивы
Еще ссылки по теме:

Бесконечный цикл - C++
#include &lt;iostream&gt; #include &lt;climits&gt; bool is_int(double); int main() { using namespace std; double num; cout &lt;&lt; &quot;Yo,...

Бесконечный цикл - C++
void Number(int &amp;K, int &amp;L, int N) { if (K &lt; 0 &amp;&amp; K &gt; L &amp;&amp; L &gt; N) { cout &lt;&lt; &quot;\nВведите границы для исключения элемeнтов из...

Бесконечный цикл While - C++
Здравствуйте, помогите пожалуйста с задачей. Условие - ввести массив, состоящий из х числа элементов, затем &quot;распаковать&quot; его в серию нулей...

Бесконечный цикл - C++
Почему компилятор выдает всякую ерунду при попытке воспроизвести этот код? Что его зацикливает? #include &quot;stdafx.h&quot; #include...

Бесконечный цикл - C++
Здравствуйте. Программа должна принимать некоторые значения, обрабатывать их и выдавать в виде статистики (нарисовать звездочками). ...


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

Или воспользуйтесь поиском по форуму:
Apostol584
238 / 144 / 72
Регистрация: 26.11.2012
Сообщений: 371
Завершенные тесты: 2
19.12.2015, 11:47     Бесконечный цикл. Двумерные массивы #16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
//сортировка вставками
 for (int i = 1; i < N; i++)
    {
        int temp = I[i];//здесь, храним текущий элемент
        int item = i - 1; //индекс предыдущего элемента
 
        while (item >= 0 && C[I[item]] > C[temp])//пока не первый элемент или предыдущий столбец больше текущего 
        {
            I[item + 1] = I[item]; //меняем элементы местами
            I[item] = temp;
            item--;
        }
    }
Yandex
Объявления
19.12.2015, 11:47     Бесконечный цикл. Двумерные массивы
Ответ Создать тему
Опции темы

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