Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 16
1

Написать программу с рекурсивной функцией, заменяющую максимальне значение в матрице на сумму всех отрицательных элемент

19.11.2019, 11:09. Показов 537. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Дана матрица N на N. Необходимо написать программу, в которой сначала находится максимальное значение среди всех элементов, после находится сумма отрицательных элементов это двумерного массива, и после реккжурсивно заменить каждое максимальное значение на сумму отрицательных. Пример: дано а[2][2] = {{5, -1},{-1,3}} результат а[2][2] = {{-2,-1},{-1,3}} Иными слова, уровень рекурсии равен количеству элементов равных максимальному. В этом примере мы заменяем 5 только раз, то есть уровень рекурсии 1, если же в примере вместо 3 подставитт 5, то у нас будет уже 2 элемента равных максимально и уровень рекурсии будет уже 2. И так далее. Я написал программу, которая работает исправно только если в главной функции в функцию changer передать числа (то есть на место max и sum_otr передать заведомо известные значения, если брать предыдущий пример, то это были бы числа 5 и -2 соответственно). Но когда я передаю в функцию переменные с результатами функции нахождения максимального и суммы от*ицательных или же сами функции напрямую, то получаю непонятный ответ. Если я введу массив из первого примера, то получаю а[2][2] = {{6300064,-1},{-1,3}}, то есть вместо -2 на месиюте пятёрки получаю огромное число 6300064. Как это исправить? Всё дело в компиляторе?
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
#include <iostream>
#define N 2
void input_m(int a[][N])
{
std::cout << "Enter matrix elements - each with a new line:\n";
    for (int i = 0; i < N; i++)
        for (int j=0; j < N; j++)
        {
            std::cout << "A[" << i << "," << j << "] = ";
            std::cin >> a[i][j];
        }
}
int maximum(int a[][N])
{
    int max(a[0][0]);
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
        max = ((max < a[i][j]) ? a[i][j] : max);
    std::cout << "Maximum value: " << max << "\n\n";
return max;
}
 
int minus_summa(int a[][N])
{
    int sum_otr(0);   
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < N; ++j)
    sum_otr += ((a[i][j] < 0) ? a[i][j] : 0);
    std::cout << "Sum of negative numbers: " << sum_otr << "\n\n";
}
 
void changer(int a[][N], int max, int sum_otr, int i, int j)
{
    bool locate(false);
    while((locate == false) || (i < N))
    {
        locate = ((a[i][j] == max) ? true : false);
        if (a[i][j] == max)
        a[i][j] = sum_otr;
         ++j;
        if (j == N)
        {
            j = 0;
            ++i;
        }
    }
    if (i < N)
    changer(a,max,sum_otr,i,j);
}
 
void output_m(int a[][N])
{
for (int i = 0; i < N; i++)
    {
        for (int j=0; j < N; j++)
            std::cout << a[i][j] << " ";
        std::cout << "\n";
    }
}
 
main()
{
int a[N][N], t1, t2; 
input_m(a);
changer(a,maximum(a),minus_summa(a),0,0);
output_m(a);
return 0;
}
Добавлено через 5 минут
УЖЕ НЕ НУЖНО! Я только что заметил, что не возвращаю значение в функции minus_summa и это всё исправило. Просто-напросто передавался мусор из ячейки памяти, отведенныэой функции в стеке. Целых полчаса понять не мог. Кароче, не заморачивайтесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2019, 11:09
Ответы с готовыми решениями:

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

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

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

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

0
19.11.2019, 11:09
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.11.2019, 11:09
Помогаю со студенческими работами здесь

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

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

Написать программу с рекурсивной функцией
Написать программу с рекурсивной функцией, вычисляющей:...

Написать программу с рекурсивной функцией
Написать программу с рекурсивной функцией, вычисляющей:


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru