Замена минимального и максимального элемента местами.

  • Автор темы Автор темы ermackprogramis
  • Дата начала Дата начала
E

ermackprogramis

C++:
#include <iostream>
#include <string.h>
#include <time.h>
#include <stdlib.h>

using namespace std;

//обьявление переменных
int n,m;
float mas[10][15];
int maxel,imax,jmax,minel,imin,jmin;

// функция ввода элементов
void input()
{
//cout<<"enter number of the components the array "<<endl;
cout<<"Input number of rows"<<endl;
cin>>n;				//ввести количество рядков массива
cout<<"Input number of columns"<<endl;
cin>>m;
//инициализация генератора псевдослучайных чисел
srand((unsigned)(time(NULL)));	
for(int i=0;i<n;i++)					 //генерировать массив
for(int j=0;j<m;j++)
mas[i][j]=rand()%20; 
}

// вывод сгенерированого массива
void output1()
{
for(int i=0;i<n;i++) //вывести массив
{
for(int j=0;j<m;j++)
{
cout<<mas[i][j]<<' ';
}
cout<<endl;
}
}

//поиск максимального и минимального элемента
void finding()
{
//====================================
maxel=mas[0][0]; //начальное значение максимального элемента
jmax=0;
imax=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if (maxel<mas[i][j])
{
maxel=mas[i][j]; //запомнить максимальный элемент и его индексы
imax=i;					 
jmax=j;
}
//====================================
minel=mas[0][0]; //начальное значение минимального элемента
jmin=0;
imin=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if (minel>mas[i][j])
{
minel=mas[i][j]; //запомнить минимальный элемент и его индексы
imin=i;						
jmin=j;
}
(minel+maxel)/2;
}

// перестановка максимального и минимального элемента местами
void replace()
{
float tmp=mas[10][15];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
tmp=mas[imin][jmin];
mas[imin][jmin]=mas[imax][jmax];
mas[imax][jmax]=tmp;
}
}
}

//вывод массива после перестановки элементов
void output2()
{
puts("========================");
cout<<"Max element = "<<maxel<<endl;
cout<<" It's index "<<imax+1<<" "<<jmax+1<<endl;
puts("========================");
cout<<"Min element = "<<minel<<endl;
cout<<" It's index "<<imin+1<<" "<<jmin+1<<endl;
puts("========================");
cout<<"Sum = "<<(float)(minel+maxel)/2<<endl; // среднее арифметическое максимального и минимального элементов
cout<<endl;

for(int i=0;i<n;i++) //вывести массив
{
for(int j=0;j<m;j++)
{
cout<<mas[i][j]<<' ';
}
cout<<endl;
}
}

int main()
{
input();
output1();
finding();
replace();
output2();
system("pause");
}

И еще такой вопрос как сделать что бы выводило все минимальные и максимальные элементы.Я пробовал, но ничего не выйшло.
 
Вот рассмотрим функцию перестановки...
Ты можешь нам поведать зачем там цикл используется, я теряюсь в догадках.

C++:
void replace()
{
float tmp = mas[imin][jmin];
mas[imin][jmin]=mas[imax][jmax];
mas[imax][jmax]=tmp;
}

И ещё вопрос, что за "все" минимальные и максимальные элементы? Я думал минимальный и максимальный элементы могут быть только в единственном числе.
 
Или ты имеешь в виду минимальный и максимальный элемент в каждой строке, к примеру. Но в программе-то у тебя ищется минимальный и максимальный элемент для всей матрицы.
 
Извини,я может не правильно написал,но у меня числа случайно генерируются и иногда выходит два одинаковых элемента,которые иногда являются найбольшими или найменьшими.А про цикл мне дойшло после того как ты указал,спасибо, но что делать с тем что могут быть несколько одинаковых элементов?
 
но что делать с тем что могут быть несколько одинаковых элементов?

Так это тебе решать, что делать в этой ситуации. Можно усложнить алгоритм заполнения, чтобы все числа были разными, можно просто работать только с первыми найденными максимальными и минимальными числами, можешь придумать другие варианты... Ты же создатель этой программы, творец, вершитель её судьбы ... ;)
 
Да ты прав,спасибо за помощь!!
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!