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

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

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

Поменять местами наибольшие элементы в верхней и нижней половинах матрицы (подпрограммы) - C++

06.07.2015, 12:15. Просмотров 367. Ответов 9
Метки нет (Все метки)

В матрице A( n- строк, m- столбцов; n- четное) поменять местами наибольшие элементы в ее верхней и нижней половинах. Для поиска индексов наибольшего элемента в заданной части матрицы использовать подпрограмму.

Для поиска наиб. элементов в верхней и нижней частях матрицы нужно использовать одну и ту же функцию. Функцию я написала. Для верхней части наиб. элемент находится правильно, но для нижней нет. Как это исправить?
И как потом поменять эти элементы местами и вывести готовую матрицу?

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
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
int f(int *Matr, int stroka, int stolb) // функция для поиска индекса наибольшего элемента
{
    int maxi=0;
    for (int i = 0; i < stroka*stolb; ++i)
    {
        if( Matr[maxi] < Matr[i] )
        {
            maxi=i;
       }
    }
    cout << "\nMaximalniy element : A[" << maxi <<"]= "<< Matr[maxi];
 }
 
int main()
{
    int N(100), M(100);
    cout << "Vvedite kolichestvo strok: " << "\nN=";
    cin >> N;
    if (N&1)
    {
        cout << "Kolichestvo strok dolgno bit chetnim. Vvedite zanovo.";
        return -1;
    }
    cout << "Vvedite kolichestvo stolbcov: "<< "\nM=";
    cin >> M;
    int arrA[N*M];
    for (int i=0; i<N;i++)
        for (int j=0; j<M;j++)
        {
            cout<< "Vvedite element matrici A["<<i<<"]["<<j<<"]=";
            cin >> arrA[i*M+j];
        }
 
    for (int i=0; i<N; i++)
    {
        cout<<("[ ");
        for (int j=0; j<M;j++)
        {
            cout << arrA[i*M+j];
        }
        cout <<(" ]\n");
    }
   
    f(arrA,N/2,M); // поиск наиб. элемента в верхней половине
 
    f(arrA,N,M);  //поиск наиб. элемента в нижней половине
    return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.07.2015, 12:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Поменять местами наибольшие элементы в верхней и нижней половинах матрицы (подпрограммы) (C++):

Поменять местами наибольшие элементы в верхней и нижней половинах матрицы - C++
В матрице A( n- строк, m- столбцов; n- четное) поменять местами наибольшие элементы в ее верхней и нижней половинах. Для поиска индексов...

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

В матрице А(4-строки, 3-столбца) поменять местами наибольшие элементы в первом и третьем столбцах - C++
В матрице А(4-строки, 3-столбца) поменять местами наибольшие элементы в первом и третьем столбцах

менять местами символы в массиве в нижней и верхней четверти - C++
суть такова. есть код, который созддает массив случайных чисел заданного размера. диагонали равны 0. нужно просто поменять местами верхнюю...

Определить, в какой из половин матрицы (верхней или нижней) больше нулевых элементов - C++
Для матрицы А(n строк, m столбцов, n-четное) определить, в какой из ее половин (верхней или нижней) больше нулевых элементов. Для подсчета...

Поменять местами элементы главной и побочной диагонали матрицы и найти столбцы, элементы которых убывают - C++
С++ Задана матрица A(n,n). Поменять местами элементы главной и побочной диагонали. В преобразованной матрице найти столбцы, элементы...

9
Рыжий Лис
Просто Лис
346 / 271 / 80
Регистрация: 17.05.2012
Сообщений: 1,116
Записей в блоге: 4
06.07.2015, 12:30 #2
А этот код уже не работает?
Разработка подпрограммы
Поменять местами наибольшие элементы в верхней и нижней половинах матрицы (подпрограммы)
0
Nkey
308 / 61 / 10
Регистрация: 21.12.2011
Сообщений: 285
Завершенные тесты: 2
06.07.2015, 12:32 #3
adiiiik,
C++
1
f(arrA,N,M);  //поиск наиб. элемента в нижней половине
Здесь же идет от первой строки до последней

Добавлено через 3 минуты
Можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
int f(int *Matr, int start, int stroka, int stolb) // функция для поиска индекса наибольшего элемента
{
    int maxi=0;
    for (int i = start; i < stroka*stolb; ++i)
    {
        if( Matr[maxi] < Matr[i] )
        {
            maxi=i;
       }
    }
    cout << "\nMaximalniy element : A[" << maxi <<"]= "<< Matr[maxi];
 }
Вызывать так:
C++
1
2
3
    f(arrA,0,N/2,M); // поиск наиб. элемента в верхней половине
 
    f(arrA,N/2,N,M);  //поиск наиб. элемента в нижней половине
1
adiiiik
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 42
06.07.2015, 12:36  [ТС] #4
Работает, но сказали переделать, так как не совсем подходит под условие задания
0
Рыжий Лис
Просто Лис
346 / 271 / 80
Регистрация: 17.05.2012
Сообщений: 1,116
Записей в блоге: 4
06.07.2015, 13:04 #5
Только добавить
C++
1
return maxi;
и
C++
1
2
int maxi1 = f(arrA,0,N/2,M); // поиск наиб. элемента в верхней половине
int maxi2 = f(arrA,N/2,N,M);  //поиск наиб. элемента в нижней половине
1
Даценд
Модератор
Эксперт .NET
3419 / 3340 / 1718
Регистрация: 20.04.2015
Сообщений: 6,150
06.07.2015, 13:17 #6
Цитата Сообщение от adiiiik Посмотреть сообщение
Для поиска наиб. элементов в верхней и нижней частях матрицы нужно использовать одну и ту же функцию.
Есть 2 варианта:
1) одним вызовом функции находить максимумы вверху и внизу. Для этого в функции нужно делать 2 цикла 0<=i<n/2 и n/2<=i<n. Первый найдет максимум вверху, второй - внизу.
2) находить максимумы разными вызовами. Для этого в функцию нужно передавать 4 параметра: указатель, номер первой строки (при первом вызове - 0, при втором n/2), номер последней строки (при первом вызове n/2-1, при втором n-1), количество столбцов.
1
adiiiik
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 42
06.07.2015, 13:21  [ТС] #7
все равно не верно в нижней половине находит
0
adiiiik
0 / 0 / 0
Регистрация: 09.04.2015
Сообщений: 42
06.07.2015, 13:34  [ТС] #8
если по второму варианту, то такой код?

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
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
 
int f(int *Matr, int pervStroka,int stroka, int stolb) // функция для поиска индекса наибольшего элемента
{
    int maxi=0;
    for (int i = 0; i < stroka*stolb; ++i)
    {
        if( Matr[maxi] < Matr[i] )
        {
            maxi=i;
            return maxi;
       }
    }
   //cout << "\nMaximalniy element : A[" << maxi <<"]= "<< Matr[maxi];
 }
 
int main()
{
    int N(100), M(100);
    cout << "Vvedite kolichestvo strok: " << "\nN=";
    cin >> N;
    if (N&1)
    {
        cout << "Kolichestvo strok dolgno bit chetnim. Vvedite zanovo.";
        return -1;
    }
    cout << "Vvedite kolichestvo stolbcov: "<< "\nM=";
    cin >> M;
    int arrA[N*M];
    for (int i=0; i<N;i++)
        for (int j=0; j<M;j++)
        {
            cout<< "Vvedite element matrici A["<<i<<"]["<<j<<"]=";
            cin >> arrA[i*M+j];
        }
 
    for (int i=0; i<N; i++)
    {
        cout<<("[ ");
        for (int j=0; j<M;j++)
        {
            cout << arrA[i*M+j];
        }
        cout <<(" ]\n");
    }
 
    int max1= f(arrA,0,N/2-1,M); // поиск наиб. элемента в верхней половине
    cout << max1;
 
   int max2= f(arrA,N/2,N-1,M);  //поиск наиб. элемента в нижней половине
cout<< max2;
    return 0;
}
0
Nkey
308 / 61 / 10
Регистрация: 21.12.2011
Сообщений: 285
Завершенные тесты: 2
06.07.2015, 13:44 #9
C++
1
2
3
4
5
6
7
8
9
10
11
12
int f(int *Matr, int start, int stroka, int stolb) // функция для поиска индекса наибольшего элемента
{
    int maxi=stolb*start;
    for (int i = maxi; i < stroka*stolb; ++i)
    {
        if( Matr[maxi] < Matr[i] )
        {
            maxi=i;
       }
    }
    cout << "\nMaximalniy element : A[" << maxi <<"]= "<< Matr[maxi];
 }
Так попробуйте
1
Даценд
Модератор
Эксперт .NET
3419 / 3340 / 1718
Регистрация: 20.04.2015
Сообщений: 6,150
06.07.2015, 13:54 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
функция, возвращает номер (индекс) максимального элемента:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int f(int *Matr, int pervStroka, int stroka, int stolb) // функция для поиска индекса наибольшего элемента
{
    int max=Matr[pervStroka*stolb];
    int maxi=pervStroka*stolb;
    for (int i = pervStroka*stolb; i < stroka*stolb; ++i)
    {
        if( max < Matr[i] )
        {
            max=Matr[i];
            maxi=i;
       }
    }
    return maxi;
}
Вызовы:
C++
1
2
int max1= f(arrA, 0, N/2, M);
int max2= f(arrA, N/2, N, M);
Затем по индексам меняете элементы:
C++
1
2
3
int tmp=arrA[max1];
arrA[max1]=arrA[max2];
arrA[max2]=tmp;
1
06.07.2015, 13:54
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.07.2015, 13:54
Привет! Вот еще темы с ответами:

Поменять местами элементы матрицы - C++
ЗАДАНИЕ ТАКОЕ: Дано: прямоугольные матрицы A и B. Поменять местами последние отрицательные элементы матрицы. Нахождение последнего...

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

Поменять местами элементы матрицы - C++
Добрый день , я составил код по условию, но матрицы у меня меняются не сверху в низ, а слева направо, как мне это исправить? вот...

Поменять местами элементы матрицы - C++
Работа с квадратными массивами В задаче рассматривается двумерный массив с одинаковым количеством строк и столбцов; такой массив...


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

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

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