Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

Найдите суммы элементов матрицы по строкам - C++

21.04.2013, 18:38. Просмотров 1049. Ответов 12
Метки нет (Все метки)

Здравствуйте товарищи (вернее сказать "Вечер добрый" (это если по Москве))
Сегодня решил сделать пару задачек на тему квадратных матриц. При реализации задач возникли некоторые вопросы и трудности (поясню ниже кода).
Собственно, вот и код:
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
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int Proizwedenie(int z)
{
    int resultat=0;
    while (z>0)
    {
        resultat *= z % 10;
        z /= 10;
    }
    return resultat;
}
 
int main()
{
    const int N = 4; // строчки
    const int M = 3; // столбцы
    int matrix[N][M];
    int a; //нижняя граница элементов
    int b; //верхняя граница элементов
    cout << "Wwedite a ";
    cin >> a;
    cout << "Wwedite b ";
    cin >> b;
    srand(time(NULL)*1000);
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            matrix[i][j]=rand()%(b-a)+a;
        }
    }
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<M; j++)
        {
            cout << matrix[i][j] << '\t';
        }
        cout << endl;
    }
// сумма элементов строк матрицы
    int s[N];
    for (int i=0; i<N; i++)
    {
        s[i]=0;
        for (int j=0; j<M; j++)
        {
            s[i] +=matrix[i][j];
        }
    }
    for (int i=0; i<N; i++)
    {
        cout << "Summa elemenow stroki=" << s[i] << endl;
    }
// максимальный элемент матрицы
    int max=matrix[0][0];
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (matrix[i][j]>max)
            {
                max=Proizwedenie(matrix[i][j]);
            }
        }
    }
    cout << "Rezultat:" << endl;
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            cout << max << '\t';
        }
        cout << endl;
    }
    return 0;
}
А теперь чуть подробнее.
Задания следующие:

1.Объявите двумерный целочисленный массив, в котором n x m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Распечатайте массив в виде таблицы. Найдите суммы элементов массива по строкам. Распечатайте найденные суммы по образцу:
Сумма элементов 0-й строки равна ...
Сумма элементов 1-й строки равна ....

2. Объявите двумерный целочисленный массив, в котором n x m элементов. Выполните генерацию массива случайными целыми числами из промежутка [a; b). Замените в массиве максимальные элементы каждой строки произведением их цифр. Распечатайте массив в виде таблицы дважды: до и после замены.

А теперь ВОПРОСЫ:
1. Задание №1 я сделал, НО я не могу понять как мне реализовать, чтобы результат мне выдавался, как указанно в задаче (результат в моем коде не указывает сумма какой и-той строки он просто пишет - "Результат= сумма и-той строки матрицы" и так для всех строк матрицы)
2. Нахожу минимальный элемент матрицы, создал отдельный метод, который по идее реализует произведение элементов максимального числа строки матрицы, НО выводит результат не верный)

Помогите, пожалуйста, в задаче и, по возможности, разъясните что где и как (я хочу понять суть, а не просто скопировать)
Заранее благодарен.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2013, 18:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найдите суммы элементов матрицы по строкам (C++):

Вычисление суммы элементов матрицы по строкам - C++
помогите, пожалуйста, написать программу, которая вводит по строкам с клавиатуры двумерный массив и вычисляет сумму его элементов по...

Вычислить суммы элементов по строкам матрицы - C++
/*Дана матрица B размером 54. Составить программу формирования вектора, элементы которого равны сумме элементов строк (столбцов) матрицы...

Определение суммы минимальных элементов по всем строкам прямоугольной матрицы - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include &lt;malloc.h&gt; using...

Сформировать суммы элементов строк матрицы и суммы элементов столбцов матрицы - C++
Добрый день господа программисты, я к вам с небольшим вопросом. Мне необходимо написать программу в которой генерируется матрица...

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

Вычислить сумму элементов матрицы по строкам - C++
4.Данный целочисленный массив В. Вычислить сумму элементов этого массива по строкам.

12
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 18:49 #2
1. Вместо
C++
1
cout << "Summa elemenow stroki=" << s[i] << endl;
написать
C++
1
cout << "Summa elemenow "<<i<<" stroki=" << s[i] << endl;
Добавлено через 5 минут
2. После выполнения 68-й строки
C++
1
max=Proizwedenie(matrix[i][j]);
Вы уже сравниваете не элементы матрицы, а произведение цифр какого-то числа из матрицы с элементом матрицы
0
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 18:51  [ТС] #3
Можно, пожалуйста, по подробнее (я не совсем понял).

Добавлено через 20 секунд
Имеется в виду после 68-й строки.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 18:52 #4
Что именно уточнить?
0
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 18:53  [ТС] #5
Вы указываете мне после 68-й строки я
Цитата Сообщение от metaluga145 Посмотреть сообщение
сравниваете не элементы матрицы, а произведение цифр какого-то числа из матрицы с элементом матрицы
Я не совсем понимаю что в данном случае вы имеете в виду.
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 18:56 #6
Цитата Сообщение от iiyuijkhgfjf Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
int max=matrix[0][0];
  for (int i=0; i<N; i++)
     {
         for (int j=0; j<M; j++)
            {
                if (matrix[i][j]>max)
                {
                       max=Proizwedenie(matrix[i][j]);
                }
            }
      }
Здесь Вы присваиваете max первый элемент матрицы. Потом начинаете проходить по матрице в цикле. Допустим оно нашло такой элемент,который больше макс, тогда выполняется строка
C++
1
max=Proizwedenie(matrix[i][j]);
в которой Вы присваиваете max уже произведение цифр числа matrix[i][j],а в последующих итерациях уже сравниваете числа матрицы с произведением цифр, и потому находите не максимальный элемент
0
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:00  [ТС] #7
Ясно в чем дело.
Не подскажите, как с такой проблемой разобраться?
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 19:05 #8
iiyuijkhgfjf, самое простое,что приходит на ум-это двойной проход по массиву. Первым проходом ищете максимальный элемент,а вторым сравнивая максимальное значение с элементами матрицы, заменяете на произведение те элементы, которые равны максимальному.
0
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:13  [ТС] #9
metaluga145, имеете в виду что-то наподобе этого?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int max=matrix[0][0];
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (matrix[i][j]>max)
            {
                max=matrix[i][j];
            }
        }
    }
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            max=Proizwedenie(matrix[i][j]);
        }
    }
Добавлено через 4 минуты
Вернее сказать вот
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int max=matrix[0][0];
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (matrix[i][j]>max)
            {
                max=matrix[i][j];
            }
        }
    }
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (max>matrix[i][j])
            {
                max=Proizwedenie(matrix[i][j]);
            }
 
        }
    }
У меня почему-то возникли подозрения насчет правильности метода произведения (т.к. результат выводит нули (матрица, состоящая из нулей))
0
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 19:13 #10
Ну почти.
C++
1
2
3
4
5
6
7
8
9
int temp=Proizwedenie(max);
for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (matrix[i][j]==max)
            matrix[i][j]=temp;
        }
    }
0
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:31  [ТС] #11
Что-то я не совсем так делаю т.к. ответ мягко говоря не тот (как выложить картинку, хочу показать что именно выводит)
Вот код:
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
#include <iostream>
#include <math.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int Proizwedenie(int z)
{
    int resultat=0;
    while (z>0)
    {
        resultat *= z % 10;
        z /= 10;
    }
    return resultat;
}
 
int main()
{
    const int N = 4; // строчки
    const int M = 3; // столбцы
    int matrix[N][M];
    int a; //нижняя граница элементов
    int b; //верхняя граница элементов
    cout << "Wwedite a ";
    cin >> a;
    cout << "Wwedite b ";
    cin >> b;
    srand(time(NULL)*1000);
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            matrix[i][j]=rand()%(b-a)+a;
        }
    }
    for(int i=0; i<N; i++)
    {
        for(int j=0; j<M; j++)
        {
            cout << matrix[i][j] << '\t';
        }
        cout << endl;
    }
    int s[N];
    for (int i=0; i<N; i++)
    {
        s[i]=0;
        for (int j=0; j<M; j++)
        {
            s[i] +=matrix[i][j];
        }
    }
    for (int i=0; i<N; i++)
    {
        cout << "Summa elemenow stroki " <<i<< " = " << s[i] << endl;
    }
    int max=matrix[0][0];
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (matrix[i][j]>max)
            {
                max=matrix[i][j];
            }
        }
    }
    int temp=Proizwedenie(max);
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            if (matrix[i][j]==max)
            matrix[i][j]=temp;
        }
    }
 
    cout << "Rezultat:" << endl;
    for (int i=0; i<N; i++)
    {
        for (int j=0; j<M; j++)
        {
            cout << max << '\t';
        }
        cout << endl;
    }
    return 0;
}
0
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:44  [ТС] #12
Вот и скриншот
0
Миниатюры
Найдите суммы элементов матрицы по строкам  
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:52  [ТС] #13
Толком не могу понять, что именно у меня не так.
0
21.04.2013, 19:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 19:52
Привет! Вот еще темы с ответами:

Получить новую матрицу путем вычитания от элементов каждого столбца первой матрицы суммы элементов соответствующих строк второй матрицы - C++
Даны две целочисленные квадратные матрицы 4-го порядка. Получить новую матрицу путем вычитания от элементов каждого столбца первой матрицы...

Найти сумму элементов квадратной матрицы по строкам и вывести на экран - C++
найти сумму элементов квадратной матрицы по строкам и вывести на экран

Класс "Матрица" для нахождения суммы, разности, умножения матриц и суммы элементов матрицы. - C++
Всем привет. Вы могли бы протестировать работу на предмет ошибок, и если нетрудно указать места, где можно было бы написать код как-то...

Определить количество элементов матрицы, больших суммы остальных элементов его столбца - C++
Дана матрица A размером nxm. Определить k-количество особых элементов массива A, считая его элемент особым, если он больше суммы остальных...


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

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

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