1 / 1 / 0
Регистрация: 27.11.2017
Сообщений: 132
1

Функция для работы с двумя двумерными массивами

30.11.2019, 14:02. Показов 1106. Ответов 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
#include <iostream>
 
using namespace std;
 
int max_all(int[][6]);
 
int max_all(int m[][6], int n) {
    int max = m[0][0];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (m[i][j] > max)
                max = m[i][j];
    int s = 0;
    for (int j = 0; j < n; j++)
        s += m[0][j];
    max += s;
    return (max);
}
 
int main()
{
    int a[6][6] = { {1,1,1,1,1,1},
                 {2,2,2,2,2,2},
                 {3,3,3,3,3,3},
                 {4,4,4,4,4,4},
                 {5,5,5,5,5,5},
                 {6,6,6,6,6,10} };
 
    int b[5][5] = { {1,1,1,1,1},
                 {2,2,2,2,2},
                 {3,3,3,3,3},
                 {4,4,4,4,4},
                 {5,5,5,5,8} };
 
    int a1 = max_all(a, 6);
    int b1 = max_all(b, 5);
 
    if (a1 > b1)
        cout << a1 << endl;
    else
        cout << b1 << endl;
}
Функция отказывается работать со вторым массивом b. Как сделать чтобы работала для двух массивов?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.11.2019, 14:02
Ответы с готовыми решениями:

Методы для работы с двумерными массивами
Всем привет. Нужно написать методы для работы с двумерными массивами. А именно: 1) Ввод массива...

Разработка программ для работы с двумерными массивами
Если не сложно ,помогите с заданием Задание: Дан массив целых случайных чисел (в диапазоне от...

Разработать программу для работы с двумерными массивами
горю с курсавой. помогите составить программу: Разработать программу для работы с двумерными...

Использование текстовых файлов для работы с двумерными массивами.
Нужна помощь в составлении программы! Составить код программы для обработки числовых данных,...

11
Модератор
Эксперт С++
13245 / 10387 / 6210
Регистрация: 18.12.2011
Сообщений: 27,784
30.11.2019, 14:14 2
Используйте динамические массивы Образцы (шаблоны) программ для типовых задач
Ваша функция станет такой
C++
1
2
3
4
5
6
7
8
9
10
11
12
int max_all(int** mas, int n) {
    int max = mas[0][0];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (mas[i][j] > max)
                max = mas[i][j];
    int s = 0;
    for (int j = 0; j < n; j++)
        s += mas[0][j];
    max += s;
    return (max);
}
0
1 / 1 / 0
Регистрация: 27.11.2017
Сообщений: 132
30.11.2019, 14:19  [ТС] 3
Пробовал, не выходит. На эти строки ругается:
C++
1
2
int a1 = max_all(a, 6);
int b1 = max_all(b, 5);
0
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
30.11.2019, 14:31 4
что нужно находить в функции ? напишите условие задачи
0
1 / 1 / 0
Регистрация: 27.11.2017
Сообщений: 132
30.11.2019, 14:34  [ТС] 5
Дан массив А(6,6) и В(5,5) из целых чисел. Найти максимальный элемент массива и увеличить его на сумму элементов первой строки. Определить, в каком массиве максимальный элемент больше.
0
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
30.11.2019, 15:27 6
Vov4ik_, учитывая, что требуется сравнить max, нужно или возвращать найденные значения через параметры или для каждого вычисления сделать свою функцию (в коде второй вариант). сравнение добавьте сами
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
 
void Random (int **x, int N)
{
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
        x[i][j]=rand()%9 + 1;
}        
        
int Max (int **x, int N) 
{
    int max = x[0][0];
    for (int i = 0; i < N; i++)
        for (int j = 0; j < N; j++)
            if (x[i][j] > max) max=x[i][j];
    return max;
}
 
int SumFirstRow (int *x, int N)
{               
    int sum=0;
    for (int j = 0; j < N; j++)
        sum+=x[j];    
    return sum;
} 
 
void Print (int **x, int N)
{
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)       
        cout << x[i][j] << " ";        
    cout << "\n";
    }
}    
 
int main()
{
    srand((int)time(0));
    int n=6, m=5, max_A, max_B;
    
      int **A = new int*[n];
    for (int i = 0; i < n; i++)
         A[i]=new int[n];
         
      int **B = new int*[m];
    for (int i = 0; i < m; i++)
         B[i]=new int[m];
         
    Random (A,n);
    cout << "Array A:\n";
    Print (A,n);
    max_A=Max(A,n);
    cout << "result=" << max_A+SumFirstRow(A[0],n) << "\n";
 
    Random (B,m);
    cout << "Array B:\n";
    Print (B,m);
    max_B=Max(B,m);
    cout << "result=" << max_B+SumFirstRow(B[0],m) << "\n";  
    
    for (int i = 0; i < n; i++)
    delete[]A[i];
    delete[]A;
    for (int i = 0; i < m; i++)
    delete[]B[i];
    delete[]B;
system("pause");
return 0;
}
0
1 / 1 / 0
Регистрация: 27.11.2017
Сообщений: 132
30.11.2019, 15:30  [ТС] 7
Мне нужно в уже существующей программе сделать эту функцию, так что бы она универсально работала с двумя массивами. Ошибка буквально в одной строке.
0
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
30.11.2019, 15:44 8
Цитата Сообщение от Vov4ik_ Посмотреть сообщение
Мне нужно в уже существующей программе сделать эту функцию, так что бы она универсально работала с двумя массивами. Ошибка буквально в одной строке.
я сбросил код под условие задачи. какие есть ещё варианты - сообщил выше. нужно сравнивать не max_all (максимум+сумма), а максимумы массивов. если Вы хотите продолжать делать неправильно - продолжайте, но без моего участия
0
1 / 1 / 0
Регистрация: 27.11.2017
Сообщений: 132
01.12.2019, 10:33  [ТС] 9
Все решил, вот код:

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
#include <iostream>
 
using namespace std;
 
template <int Rows, int Cols>
 
int max_all(int(&m)[Rows][Cols], int n) {
 
    int max = m[0][0];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (m[i][j] > max)
                max = m[i][j];
    int s = 0;
    for (int j = 0; j < n; j++)
        s += m[0][j];
    max += s;
    return (max);
}
 
int main()
{
    int a[6][6] = { {1,1,1,1,1,1},
                    {2,2,2,2,2,2},
                    {3,3,3,3,3,3},
                    {4,4,4,4,4,4},
                    {5,5,5,5,5,5},
                    {6,6,6,6,6,10} };
 
    int b[5][5] = { {1,1,1,1,1},
                    {2,2,2,2,2},
                    {3,3,3,3,3},
                    {4,4,4,4,4},
                    {5,5,5,5,8} };
 
    int a1= max_all(a,6);
    int b1= max_all(b,5);
 
    if (a1 > b1)
        cout << a1 << endl;
    else
        cout << b1 << endl;
}
Вот собственно строки которые были нужны:

C++
1
2
3
template <int Rows, int Cols> //шаблон с параметрами
 
int max_all(int(&m)[Rows][Cols], int n) //сама функция
0
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
01.12.2019, 12:39 10
Vov4ik_, когда Вы поймёте, что
максимальный элемент
отличается от
максимальный элемент + сумма строки

Вам нужно сравнить максимальные элементы, а Вы сравниваете максимальные элементы + сумма строки. Так как суммы строк в большинстве случаев не равны (массивы разные), то и результаты сравнения первого сравнения (сравнения максимальных) могут не совпадать с результатами второго сравнения (сравнения максимальных + сумма строки)
То есть Вы решили задачу неправильно. Как исправить смотрите в сообщении №6 этой темы.

Цитата Сообщение от Vov4ik_ Посмотреть сообщение
//шаблон с параметрами
шаблоны здесь вообще не нужны - у Вас два целочисленных массива
0
1 / 1 / 0
Регистрация: 27.11.2017
Сообщений: 132
01.12.2019, 13:01  [ТС] 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
#include <iostream>
 
using namespace std;
 
template <int Rows, int Cols>
 
int max_all(int(&m)[Rows][Cols], int n) {
 
    int max = m[0][0];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (m[i][j] > max)
                max = m[i][j];
    int s = 0;
    for (int j = 0; j < n; j++)
        s += m[0][j];
    max += s;
    return (max);
}
 
template <int Rows, int Cols>
 
int max(int(&m)[Rows][Cols], int n) {
 
    int max = m[0][0];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            if (m[i][j] > max)
                max = m[i][j];
    
    return (max);
}
 
int main()
{
    int a[6][6] = { {1,1,1,1,1,1},
                    {2,2,2,2,2,2},
                    {3,3,3,3,3,3},
                    {4,4,4,4,4,4},
                    {5,5,5,5,5,5},
                    {6,6,6,6,6,10} };
 
    int b[5][5] = { {1,1,1,1,1},
                    {2,2,2,2,2},
                    {3,3,3,3,3},
                    {4,4,4,4,4},
                    {5,5,5,5,8} };
 
    int c1 = max(a,6);
    int c2 = max(b,5);
    int a1= max_all(a,6);
    int b1= max_all(b,5);
 
    setlocale(LC_ALL,"Rus");
    cout <<"Максимальный элемент увеличенный на сумму элементов 1-й строки массива А: "<< a1<<endl;
    cout <<"Максимальный элемент увеличенный на сумму элементов 1-й строки массива B: " << b1 << endl;
 
    if (c1 > c2)
        cout <<"Max элемент массива А больше чем В и равен: "<< c1 << endl;
    else
        cout <<"Max элемент массива В больше А и равен: "<< c2 << endl;
}
0
7427 / 5021 / 2891
Регистрация: 18.12.2017
Сообщений: 15,694
01.12.2019, 13:11 12
Vov4ik_, это уже лучше. только max высчитываете 2 раза (это не нужно). почему Вы упорно не хотите посмотреть сообщение №6 и разобраться как это делается ? не хотите использовать динамические массивы - переделайте на статические (динамические использовал, потому что их проще передавать в функции). Для нахождения максимума первой строки весь массив в функцию передавать не нужно - только первую строку.

и ещё раз:
Цитата Сообщение от Yetty Посмотреть сообщение
шаблоны здесь вообще не нужны - у Вас два целочисленных массива
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.12.2019, 13:11
Помогаю со студенческими работами здесь

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

Типовые алгоритмы работы с двумерными массивами
Добрый день. Нужна помощь до завтра!Перевести на язык С++\\ просто это походу паскаль. на С++ не...

Построение и программирование алгоритмов работы с двумерными массивами
Данная целочисленная матрица размером n * m. Написать программу, которая формирует двумерный массив...

Разработка алгоритма и программы работы с двумерными массивами
(разработать алгоритм и программу решения задачи)-исходные данные: НАЙТИ СУММУ ЭЛЕИЕНТОВ ВТОРОЙ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru