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

Тема в разделе "Общие вопросы по С и С++", создана пользователем ermackprogramis, 17 дек 2010.

  1. ermackprogramis

    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");
    }
    И еще такой вопрос как сделать что бы выводило все минимальные и максимальные элементы.Я пробовал, но ничего не выйшло.
     
  2. ierofant

    ierofant Гость

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

    Код (C++):
    void replace()
    {
    float tmp = mas[imin][jmin];
    mas[imin][jmin]=mas[imax][jmax];
    mas[imax][jmax]=tmp;
    }
    И ещё вопрос, что за "все" минимальные и максимальные элементы? Я думал минимальный и максимальный элементы могут быть только в единственном числе.
     
  3. ierofant

    ierofant Гость

    Или ты имеешь в виду минимальный и максимальный элемент в каждой строке, к примеру. Но в программе-то у тебя ищется минимальный и максимальный элемент для всей матрицы.
     
  4. ermackprogramis

    ermackprogramis Гость

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

    ierofant Гость

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

    ermackprogramis Гость

    Да ты прав,спасибо за помощь!!
     
Загрузка...

Поделиться этой страницей