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

Сумма строк - C++

Восстановить пароль Регистрация
 
hhhhhh
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 20
17.12.2013, 22:30     Сумма строк #1
если сток меньше, чем столбцов, все нормально. Наоборот выдает ошибку. Что нужно изменить?
Матрицу ввожу вручную

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Находим сумму элементов строк отсортированного массива
 
    cout << "Summa elementov strok:\n";
 
for (i = 0; i < n; i++)  
    {
        for (j = 0; j < m; j++)
 
            temp[i] += a[i][j];                       
 
        cout<< temp[i]<<"\t";    // Печатаем сумму в виде одномерной матрицы.
 
    }
 
    _getch();
 
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
outoftime
║XLR8║
 Аватар для outoftime
505 / 427 / 33
Регистрация: 25.07.2009
Сообщений: 2,297
18.12.2013, 08:45     Сумма строк #2
Код в студию
hhhhhh
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 20
18.12.2013, 19:42  [ТС]     Сумма строк #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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
 
int a[100][100], temp[100];
int  n, m;
int i, j, h, k;
 
// Пусть матрица вводиться вручную с клавиатуры.
 
 
 
cout << " Vvedite kolichestvo strok n= \n";
cin >> n;                                            //ввод количества строк с клавиатуры.
cout << "Vvedite kolichestvo stolbchov m=\n";
cin >> m;                                         //ввод количества столбцов с клавиатуры.
cout << "\n";
 
 
for (i = 0; i < n; i++)
{
    for (j = 0; j < m; j++)
    {
        cout << "[" << i << "][" << j << "] : ";
        cin >> a[i][j];                                 //ввод значения элементов матрицы с клавиатуры.
 
    }
}
 
 
cout << "\n\nMatricha: \n";
for (i = 0; i < n; i++)                               //цикл для вывода матрицы на экран
{
    cout << "\n";
    for (j = 0; j < m; j++)
        cout << a[i][j] << "\t";
}
 
 
 // Находим суммы элементов столбцов
    for (j = 0; j < m; j++) 
    {
        for (i = 0; i < n; i++)       
            temp[j] += a[i][j];            // Записываем  дополнительный массив для суммы столбцов данной матрицы
 
    }
    cout << "\n";
 
 
 
// Сортируем методом выбора.
 
    for (j = 0; j < m; j++)      
    {         
        for (k = j + 1; k < m; k++) 
        {
 
            if (temp[j] > temp[k])      // По условию: сортировка происходит по возрастанию сумм столбцов
            {
 
                h = temp[j];
 
                temp[j] = temp[k];           // Заменяем значения исходного массива на новый, для дальнейшего использования при сортировки
 
                temp[k] = h;
 
                for (i = 0; i < n; i++)
                {
 
                    h = a[i][j];                       //Переставляем столбцы  по возрастанию сумм
 
                    a[i][j] = a[i][k];
 
                    a[i][k] = h;
 
                }
            }
        }
    }
 
 
 
// Печатаем отсортированную матрицу.
 
    cout << "Otsortirovannai matrich:\n";
    for (i = 0; i < n; i++)   
    {       
        for (j = 0; j < m; j++)  
        {
 
            cout << a[i][j] << "\t";
 
        }
        cout << "\n";
    }
 
    cout << "\n" << "\n";
 
 
    for (j = 0; j < m; j++)            // Обнуляем дополнительный массив
 
        temp[j] = 0;
 
// Находим сумму элементов строк отсортированного массива
 
    cout << "Summa elementov strok:\n";
 
for (i = 0; i < n; i++)  
    {
        for (j = 0; j < m; j++)
 
            temp[i] += a[i][j];                       
 
        cout<< temp[i]<<"\t";    // печатаем сумму в виде одномерной матрицы.
 
    }
 
    _getch();
 
    return 0;
}
hhhhhh
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 20
18.12.2013, 19:55  [ТС]     Сумма строк #4
вид ошибки


Сумма строк
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,787
18.12.2013, 20:06     Сумма строк #5
Сделайте динамический массив. У вас в коде наверняка идет обращение к элементу, который вы "не считали". Так как рамзер указан 100x100, то такое может быть сплошь и рядом
Тем более вы при обнулении, вот тут:

C++
1
2
3
  for (j = 0; j < m; j++)            // Обнуляем дополнительный массив
 
        temp[j] = 0;
только первые 2 обрабатываете, 3 туда не входит, так как n>m
hhhhhh
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 20
18.12.2013, 21:04  [ТС]     Сумма строк #6
А есть ли способ без динамического массива? С ним могут возникнуть проблемы
Ev_Hyper
 Аватар для Ev_Hyper
1806 / 1627 / 435
Регистрация: 15.12.2013
Сообщений: 5,787
18.12.2013, 21:10     Сумма строк #7
Можно и без него)
Я же написал почему такое число выводит, сделайте вот так:
C++
1
2
3
    for (j = 0; j < 100; j++)            // Обнуление
 
        temp[j] = 0;
И везде где обнуляете, пишите границу не n или m, а ту которую вы задавали при объявлении.


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
int a[100][100], temp[100];
int  n, m;
int i, j, h, k;
 
// ГЏГіГ±ГІГј Г¬Г*òðèöГ* ââîäèòüñÿ âðó÷Г*ГіГѕ Г± ГЄГ«Г*ГўГЁГ*òóðû.
 
 
 
cout << " Vvedite kolichestvo strok n= \n";
cin >> n;                                            //ââîä êîëè÷åñòâГ* ñòðîê Г± ГЄГ«Г*ГўГЁГ*òóðû.
cout << "Vvedite kolichestvo stolbchov m=\n";
cin >> m;                                         //ââîä êîëè÷åñòâГ* ñòîëáöîâ Г± ГЄГ«Г*ГўГЁГ*òóðû.
cout << "\n";
 
 
for (i = 0; i < n; i++)
{
    for (j = 0; j < m; j++)
    {
        cout << "[" << i << "][" << j << "] : ";
        cin >> a[i][j];                                 //ââîä Г§Г*Г*Г·ГҐГ*ГЁГї ýëåìåГ*òîâ Г¬Г*òðèöû Г± ГЄГ«Г*ГўГЁГ*òóðû.
 
    }
}
 
 
cout << "\n\nMatricha: \n";
for (i = 0; i < n; i++)                               //öèêë äëÿ âûâîäГ* Г¬Г*òðèöû Г*Г* ГЅГЄГ°Г*Г*
{
    cout << "\n";
    for (j = 0; j < m; j++)
        cout << a[i][j] << "\t";
}
 
 
 // ГЌГ*õîäèì ñóììû ýëåìåГ*òîâ ñòîëáöîâ
    for (j = 0; j < m; j++) 
    {
        for (i = 0; i < n; i++)       
            temp[j] += a[i][j];            // Г‡Г*ïèñûâГ*ГҐГ¬  Г¤Г®ГЇГ®Г«Г*èòåëüГ*ûé Г¬Г*Г±Г±ГЁГў äëÿ ñóììû ñòîëáöîâ Г¤Г*Г*Г*îé Г¬Г*òðèöû
 
    }
    cout << "\n";
 
 
 
// Ñîðòèðóåì ìåòîäîì âûáîðГ*.
 
    for (j = 0; j < m; j++)      
    {         
        for (k = j + 1; k < m; k++) 
        {
 
            if (temp[j] > temp[k])      // ГЏГ® óñëîâèþ: ñîðòèðîâêГ* ïðîèñõîäèò ГЇГ® âîçðГ*Г±ГІГ*Г*ГЁГѕ ñóìì ñòîëáöîâ
            {
 
                h = temp[j];
 
                temp[j] = temp[k];           // Г‡Г*ìåГ*ГїГҐГ¬ Г§Г*Г*Г·ГҐГ*ГЁГї èñõîäГ*îãî Г¬Г*Г±Г±ГЁГўГ* Г*Г* Г*îâûé, äëÿ Г¤Г*ëüГ*åéøåãî èñïîëüçîâГ*Г*ГЁГї ïðè ñîðòèðîâêè
 
                temp[k] = h;
 
                for (i = 0; i < n; i++)
                {
 
                    h = a[i][j];                       //ÏåðåñòГ*âëÿåì ñòîëáöû  ГЇГ® âîçðГ*Г±ГІГ*Г*ГЁГѕ ñóìì
 
                    a[i][j] = a[i][k];
 
                    a[i][k] = h;
 
                }
            }
        }
    }
 
 
 
// ГЏГҐГ·Г*ГІГ*ГҐГ¬ îòñîðòèðîâГ*Г*Г*ГіГѕ Г¬Г*òðèöó.
 
    cout << "Otsortirovannai matrich:\n";
    for (i = 0; i < n; i++)   
    {       
        for (j = 0; j < m; j++)  
        {
 
            cout << a[i][j] << "\t";
 
        }
        cout << "\n";
    }
 
    cout << "\n" << "\n";
    
 
    for (j = 0; j < 100; j++)            // ГЋГЎГ*óëÿåì äîïîëГ*èòåëüГ*ûé Г¬Г*Г±Г±ГЁГў
 
        temp[j] = 0;
 
// ГЌГ*õîäèì ñóììó ýëåìåГ*òîâ ñòðîê îòñîðòèðîâГ*Г*Г*îãî Г¬Г*Г±Г±ГЁГўГ*
 
    cout << "Summa elementov strok:\n";
 
for (i = 0; i < n; i++)  
    {
        for (j = 0; j < m; j++)
 
            temp[i] += a[i][j];                       
 
        cout<< temp[i]<<"\t";    // ГЇГҐГ·Г*ГІГ*ГҐГ¬ ñóììó Гў âèäå îäГ*îìåðГ*îé Г¬Г*òðèöû.
 
    }
 
    _getch();
 
    return 0;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.12.2013, 21:21     Сумма строк
Еще ссылки по теме:

C++ Двумерный массив, сумма строк
Длинная арифметика: сумма двух строк C++
C++ Подсчитать количество строк матрицы у которых сумма элементов положительная

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

Или воспользуйтесь поиском по форуму:
hhhhhh
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 20
18.12.2013, 21:21  [ТС]     Сумма строк #8
ВЫ меня спасли, огромное спасибо.
Yandex
Объявления
18.12.2013, 21:21     Сумма строк
Ответ Создать тему
Опции темы

Текущее время: 12:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru