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

Поменять местами максимальные элементы заданных матриц. Как упростить программу?

11.12.2014, 18:15. Показов 961. Ответов 5
Метки нет (Все метки)

Дали задачу, я её решил, и по-моему получилось как-то нерационально. Подскажите, как можно упростить код?
Заранее благодарен.
Вот условие задачи:
Даны две матрицы А и В. Написать программу, меняющую местами максимальные элементы этих матриц. Нахождение максимального элемента матрицы оформить в виде процедуры.
А вот код моей программы:
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>
#include <cstdlib>
 
using namespace std;
void search(float **a, int n, int m, float **b, int k, int l)
{   float amax=a[0][0], bmax=b[0][0]; int ia=0, ja=0, ib=0, jb=0;
    for (int i=0;i<n;i++)
    for (int j=0;j<m;j++)
       if(amax<a[i][j]) {amax=a[i][j]; ia=i, ja=j;}
    for (int i=0;i<k;i++)
    for (int j=0;j<l;j++)
       if(bmax<b[i][j]) {bmax=b[i][j]; ib=i, jb=j;}
    a[ia][ja]=bmax;
    b[ib][jb]=amax;
    cout<<"\nResult\n";
    cout<<"\nMatrica A\n";
    for (int i=0;i<n;i++)
       {cout<<"\n";
       for (int j=0;j<m;j++)
       cout<<a[i][j]<<" ";}
    cout<<"\n"<<"\nMatrica B\n";
    for (int i=0;i<k;i++)
       {cout<<"\n";
       for (int j=0;j<l;j++)
       cout<<b[i][j]<<" ";}
    cout<<"\n";
}
 
int main(int argc, char *argv[]) 
{   int i, j, n, m, k, l;
    float max;
    printf("\nMatrica A[nxm]\n");
    cout<<"n="; cin>>n; cout<<"m="; cin>>m; 
    cout<<"\nVvod matrici\n"<<endl;
    float **a=new float *[n];
    for (i=0;i<n;i++)
    a[i]=new float(m);
    for (i=0;i<n;i++)
    for (j=0;j<m;j++)
    { printf("a[%i][%i]: ",i+1,j+1);
      cin>>a[i][j];
    }
    printf("\nMatrica B[nxm]\n");
    cout<<"n="; cin>>k; cout<<"m="; cin>>l; 
    cout<<"\nVvod matrici\n"<<endl;
    float **b=new float *[k];
    for (i=0;i<k;i++)
    b[i]=new float(l);
    for (i=0;i<k;i++)
    for (j=0;j<l;j++)
    { printf("b[%i][%i]: ",i+1,j+1);
      cin>>b[i][j];
    }
    for (i=0;i<k;i++)
    {  cout<<"\n";
       for (j=0;j<l;j++)
           cout<<b[i][j]<<" ";
    }
    search(a, n, m, b, k, l);
    system("PAUSE");
    return EXIT_SUCCESS;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2014, 18:15
Ответы с готовыми решениями:

Поменять местами максимальные элементы двух матриц
Даны матрицы A и В размерностью NxM, элементы которых вводятся с клавиатуры. Нужно найти...

Поменять местами строки матриц, содержащие максимальные элементы
Ввести две матрицы действительных чисел 4х5. Поменять местами строки матриц, содержащие...

Определить максимальные элементы и поменять их местами в каждом из двух заданных массивов
1.Дано два массива действительных чисел. Определить максимальные элементы в каждом массиве и...

Написать программу, меняющую местами максимальные элементы двух заданных матриц
Даны две матрицы А и В. Написать программу, меняющую местами максимальные элементы этих матриц....

5
34 / 34 / 47
Регистрация: 22.02.2014
Сообщений: 107
11.12.2014, 18:23 2
Лучше написать процедуру поиска максимального только для одной матрицы и вызвать её два раза. Потом уже в main`е свапнуть максимальные элементы местами.
1
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
11.12.2014, 18:33  [ТС] 3
Извиняюсь, этот фрагмент программы лишний, забыл удалить
Цитата Сообщение от Руслан Голубков Посмотреть сообщение
for (i=0;i<k;i++)
* * { *cout<<"\n";
* * * *for (j=0;j<l;j++)
* * * * * *cout<<b[i][j]<<" ";
* * }
Добавлено через 1 минуту
OnePiece, я тоже думал на эту тему, но у меня не хватило идей, возможно и знаний, её реализовать. Можешь по подробнее объяснить?
0
34 / 34 / 47
Регистрация: 22.02.2014
Сообщений: 107
11.12.2014, 23:24 4
Код самой функции
C++
1
2
3
4
5
6
void search(float **a, int n, int m, int *maxi, int *maxj)
{   float amax=a[0][0], bmax=b[0][0]; int ia=0, ja=0, ib=0, jb=0;
    for (int i=0;i<n;i++)
    for (int j=0;j<m;j++)
       if(amax<a[i][j]) {amax=a[i][j]; maxi=i, maxj=j;}
}
Это будет в main
C++
1
2
3
4
5
6
7
8
9
10
11
int *maxi;
int *maxj;
search(**a, n, m, *maxi, *maxj);
maxi1=*maxi;
maxj1=*maxj;
search(**b, k, l, *maxi, *maxj);
maxi2=*maxi;
maxj2=*maxj;
temp=a[maxi1][maxj1];
a[maxi1][maxj1]=b[maxi2][maxj2];
b[maxi2][maxj2]=temp;
Код не компилировал, возможно нужно будет его дорабатывать.
Если непонятно, посмотрите тему "Указатели c++"
1
0 / 0 / 0
Регистрация: 02.12.2014
Сообщений: 5
12.12.2014, 09:22  [ТС] 5
Спасибо большое, выручил
0
Форумчанин
Эксперт CЭксперт С++
8170 / 5020 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
12.12.2014, 09:24 6
Можно добавить форматирование(перносы строк, табы, разделяющие пустые линии) - это упростит удобочитаемость.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.12.2014, 09:24

Поменять местами максимальные элементы матриц
Если, Вас не затруднит, то напишите, каким образом, более правильно решать подобную задачу:...

Поменять местами максимальные элементы матриц
Ув. формчани, помогите решить задачку такого сорта. Поменять местами максимальные элементы матриц...

Поменять местами максимальные элементы матриц
кто может помочь решить лабораторную

В заданных массивах A и B поменять местами максимальные элементы
3. В заданных массивах A и B поменять местами максимальные элементы. Вывести на экран...


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

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

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