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

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

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

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

21.04.2013, 18:38. Просмотров 729. Ответов 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. Нахожу минимальный элемент матрицы, создал отдельный метод, который по идее реализует произведение элементов максимального числа строки матрицы, НО выводит результат не верный)

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

C++ Функция: подсчет числа отрицательных элементов массива, и суммы положительных элементов матрицы
C++ Класс "Матрица" для нахождения суммы, разности, умножения матриц и суммы элементов матрицы.
Найти сумму элементов квадратной матрицы по строкам и вывести на экран C++
C++ Многомерные массивы. Поиск количества тех элементов матрицы,которые больше суммы остальных элементов своего столбца
C++ Получить новую матрицу путем вычитания от элементов каждого столбца первой матрицы суммы элементов соответствующих строк второй матрицы
C++ Вычисление суммы элементов матрицы по строкам
C++ Ввод по строкам с клавиатуры двумерного массива и вычисление суммы его элементов по четным столбцам
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
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]);
Вы уже сравниваете не элементы матрицы, а произведение цифр какого-то числа из матрицы с элементом матрицы
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 18:51  [ТС]     Найдите суммы элементов матрицы по строкам #3
Можно, пожалуйста, по подробнее (я не совсем понял).

Добавлено через 20 секунд
Имеется в виду после 68-й строки.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 18:52     Найдите суммы элементов матрицы по строкам #4
Что именно уточнить?
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 18:53  [ТС]     Найдите суммы элементов матрицы по строкам #5
Вы указываете мне после 68-й строки я
Цитата Сообщение от metaluga145 Посмотреть сообщение
сравниваете не элементы матрицы, а произведение цифр какого-то числа из матрицы с элементом матрицы
Я не совсем понимаю что в данном случае вы имеете в виду.
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],а в последующих итерациях уже сравниваете числа матрицы с произведением цифр, и потому находите не максимальный элемент
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:00  [ТС]     Найдите суммы элементов матрицы по строкам #7
Ясно в чем дело.
Не подскажите, как с такой проблемой разобраться?
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
21.04.2013, 19:05     Найдите суммы элементов матрицы по строкам #8
iiyuijkhgfjf, самое простое,что приходит на ум-это двойной проход по массиву. Первым проходом ищете максимальный элемент,а вторым сравнивая максимальное значение с элементами матрицы, заменяете на произведение те элементы, которые равны максимальному.
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]);
            }
 
        }
    }
У меня почему-то возникли подозрения насчет правильности метода произведения (т.к. результат выводит нули (матрица, состоящая из нулей))
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;
        }
    }
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;
}
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:44  [ТС]     Найдите суммы элементов матрицы по строкам #12
Вот и скриншот
Миниатюры
Найдите суммы элементов матрицы по строкам  
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.04.2013, 19:52     Найдите суммы элементов матрицы по строкам
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
iiyuijkhgfjf
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
21.04.2013, 19:52  [ТС]     Найдите суммы элементов матрицы по строкам #13
Толком не могу понять, что именно у меня не так.
Yandex
Объявления
21.04.2013, 19:52     Найдите суммы элементов матрицы по строкам
Ответ Создать тему
Опции темы

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