Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2022, 14:41   #1
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию Ввести матрицу. Составить функцию нахождения суммы четных элементов в каждой строке. Составить новый массив из результатов вызовов функций. Массив отсортировать по убыванию.

Ввести матрицу. Составить функцию нахождения суммы четных элементов в каждой строке. Составить новый массив из результатов вызовов функций. Массив отсортировать по убыванию. Все массивы и матрицу вывести.

У меня есть такой код, но в результате выполнения в конце выводятся нули, хотя их быть не должно.
Знаю как сделать с break, но мне нужен способ без него. Заранее благодарен)

Снимок.PNG

Код:
#include <iostream>
using namespace std;

int* poisksum(int matrix[10][10],int &n, int &m, int &k) {
    int* sum = new int[k];
    int sum1=0, z=0;
    for (int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            if (matrix[i][j] % 2 == 0) {
                sum1 += matrix[i][j];
            }
        }
        sum[z++] = sum1; // записываем результат суммы
        sum1 = 0;
    }
    return sum;
}
void sort(int* a, int& n){
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (a[j] < a[j + 1]) {
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}


int main()
{
  int A[10][10], n, m, k=0;
  cout << "Введите количество строк:";
  cin >> n;
  cout << "Введите количество столбцов:";
  cin >> m;

  for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) {
            cout << "\nX[" << i << "][" << j << "] = ";
            cin >> A[i][j];
        }
        
    for (int i=0; i<n; i++) {
            for (int j=0; j<m; j++) {
                if (A[i][j] % 2 == 0) {
                    k++;
                }
            }
    }
    int *b;
    b = poisksum(A, n, m, k);
    cout << "Array:" << endl;
        for(int i = 0; i < k; i++){
            cout << b[i] << " ";
        }
 cout << endl;
 
    sort(b, k);
  cout << "Result:" << endl;
  for(int i = 0; i < k; i++){
      cout << b[i] << " ";
  }
}
himecu вне форума Ответить с цитированием
Старый 11.05.2022, 15:33   #2
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 751
По умолчанию

Сначала статический массив, потом динамический. Если нужен динамический массив - посмотрите синтаксис в Интернете. Как параметр передается там тоже по-другому - смотрите.
Cuprum5 вне форума Ответить с цитированием
Старый 11.05.2022, 15:35   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 751
По умолчанию

Память выделили - высвободите, пожалуйста.
Cuprum5 вне форума Ответить с цитированием
Старый 11.05.2022, 15:38   #4
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

Cuprum5, Тут дело не в массивах.
Я просто знаю код с break после k++ и он рабочий
for (int i=0; i<n; i++) {
for (int j=0; j<m; j++) {
if (A[i][j] % 2 == 0) {
k++;
}
}
}
himecu вне форума Ответить с цитированием
Старый 11.05.2022, 15:40   #5
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 751
По умолчанию

Между for-ами sum(k) обнуляйте. И фигурные скобки поставить не забудьте.
Cuprum5 вне форума Ответить с цитированием
Старый 11.05.2022, 15:55   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Вы в переменной k посчитали количество четных во всей матрице, а не построчно или количество строк с четными элементами. Почувствуйте разницу в формулировках.
По количеству четных элементов во всех строках матрицы вы выделили массив B и заполнили только те его элементы, которые соответствуют строкам с четными элементами (не по индексам, а по порядку). Вывели весь массив B.
macomics вне форума Ответить с цитированием
Старый 11.05.2022, 16:05   #7
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

Cuprum5, то есть вот так:
for (int i=0; i<n; i++) {
k=0;
for (int j=0; j<m; j++) {
if (A[i][j] % 2 == 0) {
k++;
}
}
}
himecu вне форума Ответить с цитированием
Старый 11.05.2022, 16:11   #8
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 751
По умолчанию

Да.
Cuprum5 вне форума Ответить с цитированием
Старый 11.05.2022, 16:13   #9
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Да.
И это не поможет.
macomics вне форума Ответить с цитированием
Старый 11.05.2022, 16:14   #10
himecu
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 32
По умолчанию

Cuprum5,
Теперь так выводит:
Снимок1.PNG

Код:
#include <iostream>
using namespace std;

int* poisksum(int matrix[10][10],int &n, int &m, int &k) {
    int* sum = new int[k];
    int sum1=0, z=0;
    for (int i=0; i<n; i++) {
        for(int j=0; j<m; j++) {
            if (matrix[i][j] % 2 == 0) {
                sum1 += matrix[i][j];
            }
        }
        sum[z++] = sum1; // записываем результат суммы
        sum1 = 0;
    }
    return sum;
}
void sort(int* a, int& n){
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (a[j] < a[j + 1]) {
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}


int main()
{
  int A[10][10], n, m, k;
  cout << "Введите количество строк:";
  cin >> n;
  cout << "Введите количество столбцов:";
  cin >> m;

  for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++) {
            cout << "\nA[" << i << "][" << j << "] = ";
            cin >> A[i][j];
        }
        
    for (int i=0; i<n; i++) {
       k=0;
            for (int j=0; j<m; j++) {
                if (A[i][j] % 2 == 0) {
                    k++;
                }
            }
    }
    int *b;
    b = poisksum(A, n, m, k);
    cout << "Array:" << endl;
        for(int i = 0; i < k; i++){
            cout << b[i] << " ";
        }
 cout << endl;
 
    sort(b, k);
  cout << "Result:" << endl;
  for(int i = 0; i < k; i++){
      cout << b[i] << " ";
  }
}
himecu вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан массив m*n. Составить массив из наименьших элементов каждой строки данного массива. Найти сумму наибольшего и наименьшего элемента массива. Miriam_ Паскаль, Turbo Pascal, PascalABC.NET 2 23.04.2017 11:18
массив А[N] из элементов типа short integer (целое восьмиразрядное со знаком). Составить программу нахождения максимального и минимального элемента. Mikki_mini Помощь студентам 3 11.12.2016 10:32
PascalABC.NET составить массив из первых 10 результатов вычислений. ser18 Помощь студентам 5 06.03.2016 22:21
Двумерный массив. Отсортировать столбцы матрицы по убыванию количества элементов кратных 3 СержГрановский Паскаль, Turbo Pascal, PascalABC.NET 4 06.03.2014 09:05
процедуры, цикл нахождения четных элементов каждой строки массива и вычисление из суммы nikepol Помощь студентам 0 15.06.2011 16:43