Вариант 16

Дана целочисленная прямоугольная матрица:

  1. упорядочить строки по возрастанию количества одинаковых элементов в каждой строке;
  2. найти номер первого из столбцов, не содержащих ни одного отрицательного элемента.

Код программы:

//---------------------------------------------------------------------------
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<windows.h>
#include<iomanip.h>
#include<vcl.h>
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------
char *rus(const char *text); 
int main(int argc, char* argv[])
 {
  randomize();
  int n,m,i,j,k,jnum=-1,maxcnt=0,pos=0,buf_a=0,buf_b=0;
  bool not_neg;
  cout<<rus("Введите размерность массива:")<<endl;
  cout<<rus("Введите количество строк:    n=");cin>>n;
  cout<<rus("Введите количество столбцов: m=");cin>>m;

  int **a=new int*[n];                 //объявление основного массива
  for(i=0;i<n;i++)a[i]=new int [m];

  int **a1=new int*[n];              //объявление  массива для хранения
  for(i=0;i<n;i++)a1[i]=new int [m];// количества повторяющихся элементов
  for(i=0;i<n;i++)                  //заполнение массива 0, иначе идет некорректное
   for(j=0;j<m;j++)a1[i][j]=0;     //присваивание при подсчете элементов в массиве
  int *b=new int[i];     //объявление массива для хранения максимального числа
                           // повторяющихся элементов в каждой строке массива
//---------------------------------------------------------------------------
  cout<<rus("\nВведите элементы массива:")<<endl<<endl;
  for(i=0;i<n;i++)
   {
    for(j=0;j<m;j++)
     {
      a[i][j]=-3+random(17);      //заполняем массив
      cout<<setw(4)<<a[i][j];    //случайными числами
     }
    cout<<endl;
   }
//---------------------------------------------------------------------------
//поиск столбца без отрицательного элемента
  for(j=0;j<m;j++)
   {
    not_neg=true;
    for(i=0;i<n;i++)
    if(a[i][j]<0)
     {
      not_neg=false;
      break;
     }
    if(not_neg)
     {
      jnum=j;
      break;
     }
   }
  if(-1==jnum)cout<<rus("\nСтолбцов не содержащих ни одного отрицательного элемента НЕТ!")<<endl;
  else cout<<rus("\nНомер первого из столбцов не содержащий ни одного отрицательного элемента: ")<<(jnum+1);
//---------------------------------------------------------------------------
//поиск максимального количества повторяющихся элементов в каждой строке
  cout<<endl;
  for(i=0;i<n;i++)
   {
    maxcnt=0;
    for(j=0;j<m;j++)
     for(k=j+1;k<m;k++)
      if(a[i][j]==a[i][k])
       a1[i][j]++;
    for(j=0;j<m;j++)
     if(a1[i][j]>maxcnt)
    maxcnt=a1[i][j];
    b[i]=maxcnt+1;
   }
//вывод матрицы с количеством максимального элемента в каждой строке
  cout<<rus("Вывод матрицы с количеством максимального элемента в каждой строке:");
  cout<<endl<<endl;
  for(i=0;i<n;i++)
   {
    for(j=0;j<m;j++)
    cout<<setw(4)<<a[i][j];
    cout<<setw(8)<<b[i]<<endl;
   }
  cout<<endl;
// упорядочивание строк матрицы по возрастанию количества одинаковых элементов в каждой строке
  for(i=0;i<n;i++)
   {
    maxcnt=b[i];
    pos=i;
    for(j=i+1;j<n;j++)
     if(b[j]<maxcnt)
      {
       maxcnt=b[j];
       pos=j;
      }
    buf_b=b[i];
    b[i]=maxcnt;
    b[pos]=buf_b;

    for(k=0;k<m;k++)
     {
      buf_a=a[i][k];
      a[i][k]=a[pos][k];
      a[pos][k]=buf_a;
     }
   }
//---------------------------------------------------------------------------
//  вывод упорядоченной матрицы
  cout<<rus("\nУпорядоченные строки матрицы по возрастанию количества одинаковых элементов:")<<endl;
  cout<<endl<<endl;
  for(i=0;i<n;i++)
   {
    for(j=0;j<m;j++)
    cout<<setw(4)<<a[i][j];
    cout<<setw(8)<<b[i]<<endl;
   }
  getch();
  return 0;
 }
//---------------------------------------------------------------------------
char bufrus[256];
char *rus(const char *text)
 {
  CharToOem(text, bufrus);
  return bufrus;
 }
//---------------------------------------------------------------------------

Результат работы программы:

Результат работы. Шестнадцатый вариант. Двумерные массивы

Вариант 15
Вариант 17
error: Content is protected !!