Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
karinka4840
0 / 0 / 1
Регистрация: 17.12.2015
Сообщений: 24
#1

Найти сумму элементов квадратной матрицы в тех строках, которые содержат хотя бы один отрицательный элемент

01.01.2016, 16:19. Просмотров 568. Ответов 9
Метки нет (Все метки)

Дано задание: Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.
Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

Вот код:
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
#include <iostream>
#include <locale>
#include <iomanip>
#include <math.h>
using namespace std;
 
int main()
{
    int const n = 8; // Размер матрицы 8х8
    int m[n][n];
    
    cout << "Задаем матрицу \n";
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            cout << "Введите элемент[" << i+1 << "][" << j+1 << "]: ";
            cin >> m[i][j];
        }
    }
    
    cout << "\n";
    
    cout << "Исходная матрица: \n";
    for(int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for(int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << m[i][j] << " ";
        }
    }
    
    cout << "\n\n";
    
    //Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.*
    
    bool flag = false;
    int sum_od, index_str=0, index_stb=0, k;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            sum_od = 0;
            for(k = 0; k < n; ++k)
            {
                if(m[i][k] == m[k][j])
                {
                    sum_od++;
                    if(sum_od == n)
                    {
                        index_str = i;
                        index_stb = j;
                        flag = true;
                    }
                }
            }
        }
    }
    
    if(flag == true)
    {
        cout << "Индекс одинаковой строки: " << index_str
        << "\nИндекс одинакового столбца: " << index_stb << "\n\n";
    }
    else
        cout << "Одинаковых строк и столбцов нет!\n\n";
    
    //Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.
    
    
    flag=true;
    int sum1=0;
    for (int i =0; i < n; i++)
    {
        int sum=0;
        bool flag1=true;
        for(int j=0;j<n;j++)
        {
            sum += m[i][j];
            if (m[i][j] < 0)
            {
                
                flag1=false;
            }
        }
        if (flag1==false)
        {
            flag=false;
            sum1+=sum;
        
        }
    }
    if (flag==true)
        cout<< "Отрицательных элементов нет!\n";
    else
        cout <<sum1<<" Сумма всех отрицательных элементов: \n\n";
    return 0;
}
Проблема в том, что при компиляции, если в матрице есть одинаковые стока и столбец на 0 позиции, то программа выдает, что индексы на 0 позициях, все ок, но если позиция 2, то выдает он, что позиция 1
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.01.2016, 16:19
Ответы с готовыми решениями:

Найти сумму элементов в тех строках матрицы, которые содержат хотя бы один отрицательный элемент
#include &quot;stdafx.h&quot; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;iostream&gt;...

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

Найти сумму элементов матрицы в тех строках, которые содержат хотя бы один отрицательный элемент
Вариант 7 Задание 1 Для заданной матрицы размером 8 на 8 найти такие k, что...

Найти сумму элементов в тех строках матрицы, которые содержат хотя бы один отрицательный элемент
Для заданной матрицы размера NxN найти такое k, что k-я строчка матрицы...

Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент
1) В одномерном массиве состоящем из n целых элементов, вычислить: а)...

9
Scorpik1
7 / 7 / 5
Регистрация: 27.07.2011
Сообщений: 31
01.01.2016, 20:38 #2
Цитата Сообщение от karinka4840 Посмотреть сообщение
Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.
karinka4840, а вы точно правильно поняли задание? Может быть, подразумевалось , что вам надо просто проверить не совпадает ли k-ая строка и k-ый столбец? И если они совпадают, то именно эти k и вывести.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            sum_od = 0;
            for(k = 0; k < n; ++k)
            {
                if(m[i][k] == m[k][j])
                {
                    sum_od++;
                    if(sum_od == n)
                    {
                        index_str = i;
                        index_stb = j;
                        flag = true;
                    }
                }
            }
        }
    }
-так никто не делает.
чтобы сравнить строчку и столбец есть более простой выход:
в цикле проверять:
C++
1
m[i][j]==m[j][i]
и флажок использовать, если они все одинаковые.
0
karinka4840
0 / 0 / 1
Регистрация: 17.12.2015
Сообщений: 24
01.01.2016, 20:44  [ТС] #3
Scorpik1, написано же, найти такие k, т.е я так понимаю что ищем индексы... да и препод согласен с решением, только вот глюк не понравился
0
Scorpik1
7 / 7 / 5
Регистрация: 27.07.2011
Сообщений: 31
01.01.2016, 20:55 #4
Цитата Сообщение от karinka4840 Посмотреть сообщение
найти такие k, т.е я так понимаю что ищем индексы...
Правильно, я вам об этом выше и написал. Подразумевая, под k - индекс.
Цитата Сообщение от Scorpik1 Посмотреть сообщение
может быть, подразумевалось , что вам надо просто проверить не совпадает ли k-ая строка и k-ый столбец? И если они совпадают, то именно эти k и вывести.
. Вы просто в своем коде лишние операции делаете.
Либо я не понимаю суть вашего задания.
0
karinka4840
0 / 0 / 1
Регистрация: 17.12.2015
Сообщений: 24
01.01.2016, 21:22  [ТС] #5
Scorpik1, так программа и выводит какие индексы совпадают) или Вы имеете в виду, что можно все сократить просто сравнивая через это:
Цитата Сообщение от Scorpik1 Посмотреть сообщение
m[i][j]==m[j][i]
и выводить что " да есть совпадение, оно в 3 стр и 4 стл"?
0
Scorpik1
7 / 7 / 5
Регистрация: 27.07.2011
Сообщений: 31
01.01.2016, 21:36 #6
karinka4840, по поводу уменьшения - вы правильно поняли. Будет на 1 цикл меньше.


Цитата Сообщение от karinka4840 Посмотреть сообщение
и выводить что " да есть совпадение, оно в 3 стр и 4 стл"?
- этого она никогда не выведет. Т.к исходя из вашей формулировки формулировки: у вас должна
Цитата Сообщение от karinka4840 Посмотреть сообщение
что k-я строка матрицы совпадает с k-м столбцом
т.е ( 2 строка со 2 столбцом и т.д) и именно эти индексы k и должны быть напечатаны.(в нашем случае k=2 и т.д в зависимости от того, какие строчки совпали.) Причем k - одинаковое должно быть у столбца и у строки.

По крайней мере, я так понимаю ваше задание.
0
karinka4840
0 / 0 / 1
Регистрация: 17.12.2015
Сообщений: 24
01.01.2016, 21:51  [ТС] #7
Цитата Сообщение от Scorpik1 Посмотреть сообщение
Причем k - одинаковое должно быть у столбца и у строки.
Почему? а если совпала 1 строка и 2 столбец, должна же вывести стр 1 стл 2

Цитата Сообщение от Scorpik1 Посмотреть сообщение
m[i][j]==m[j][i]
Тогда этот способ не подойдет получается


Что-то я запуталась, в общем получается, что надо пройтись по матрице, посмотреть есть ли совпадения строк и столбцов, и если они есть, вывести их индексы, и необязательно это 1-1 или 2-2, может быть 1-2 или 2-3 и эта программа делает это, но она выдает позиции по разному, если стоят на 0, то выдает 0, е если на 1, выдает 2 (считая с 0 естественно)
0
Scorpik1
7 / 7 / 5
Регистрация: 27.07.2011
Сообщений: 31
01.01.2016, 21:57 #8
Цитата Сообщение от karinka4840 Посмотреть сообщение
надо пройтись по матрице, посмотреть есть ли совпадения строк и столбцов, и если они есть, вывести их индексы, и необязательно это 1-1 или 2-2, может быть 1-2 или 2-3 и эта программа делает это, но она выдает позиции по разному, если стоят на 0, то выдает 0, е если на 1, выдает 2 (считая с 0 естественно)
- Это совершенно другое задание, нежели вы написали вверху в условии. Именно это я и пытался у вас узнать.
0
karinka4840
0 / 0 / 1
Регистрация: 17.12.2015
Сообщений: 24
01.01.2016, 22:20  [ТС] #9
Scorpik1, в общем, необходимо помочь усовершенствовать эту программу, для работы без глюков и сбоев, т.е именно код этот, который может и не совсем по заданию
0
Scorpik1
7 / 7 / 5
Регистрация: 27.07.2011
Сообщений: 31
01.01.2016, 22:38 #10
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
#include <iostream>
#include <locale>
#include <iomanip>
#include <math.h>
using namespace std;
void f(int m[][8], int k);
 
int main()
{
    int const n = 8; // Размер матрицы 8х8
    int m[n][n];
 
    cout << "Задаем матрицу \n";
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            cout << "Введите элемент[" << i + 1 << "][" << j + 1 << "]: ";
            cin >> m[i][j];
        }
    }
 
    cout << "\n";
 
    cout << "Исходная матрица: \n";
    for (int i = 0; i < n; i++)
    {
        cout << "\n" << "\t";
        for (int j = 0; j < n; j++)
        {
            cout << setw(3) << setiosflags(ios::left) << m[i][j] << " ";
        }
    }
 
    cout << "\n\n";
 
    //Для заданной матрицы размером 8 на 8 найти такие k, что k-я строка матрицы совпадает с k-м столбцом.*
 
    for (int i = 0; i < 8; i++){
        f(m, i);
    }
 
    bool flag = false;
 
     flag = true;
    int sum1 = 0;
    for (int i = 0; i < n; i++)
    {
        int sum = 0;
        bool flag1 = true;
        for (int j = 0; j<n; j++)
        {
            sum += m[i][j];
            if (m[i][j] < 0)
            {
 
                flag1 = false;
            }
        }
        if (flag1 == false)
        {
            flag = false;
            sum1 += sum;
 
        }
    }
    if (flag == true)
        cout << "Отрицательных элементов нет!\n";
    else
        cout << sum1 << " Сумма всех отрицательных элементов: \n\n";
    return 0;
}
//n -строчка
//m - столбец
void f(int m[][8], int k){
    int kol = 0;
    for (int i = 0; i < 8; i++){
        for (int j = 0; j < 8; j++){
            if (m[k][j] = m[j][i]) kol++;
            if (kol == 8) cout << "Совпадают n=" << k << "и m=" << i;
        }
        kol = 0;
    }
}
Протестируйте. Пробовал на банальных примерах, вроде работает.
0
01.01.2016, 22:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2016, 22:38

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

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

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


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

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

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