Site icon C/C++ Структурное программирование

Вариант 13

Дана прямоугольная матрица:
Осуществить циклический сдвиг элементов матрицы на n элементов вправо или вниз (в зависимости от введенного режима), n может быть больше количества элементов в строке или столбце.

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

//---------------------------------------------------------------------------
#include<iostream.h>
#include<conio.h>
#include<math.h>
#include<iomanip.h>
#include<windows.h>
#include<fstream.h>
#include<vcl.h>
#pragma hdrstop
#pragma argsused
//---------------------------------------------------------------------------
char *rus(const char *text); //объявление функции для распознавания русских букв
int main(int argc, char* argv[])
 {
  int n,m,l,i,j,k,nmin,mmin,buf_a,q=0;        //объявление переменных
  cout<<rus("Введите размерность массива:")<<endl;
  cout<<rus("\nВведите количество строк:    n=");cin>>n;
  cout<<rus("Введите количество столбцов: m=");cin>>m;
  cout<<rus("Введите количество циклов сдвига: l=");cin>>l;
  cout<<rus("Нажмите 1, чтобы осуществить сдвиг матрицы вниз, 2-сдвиг вправо: q=");cin>>q;
  float **a=new float*[n];               //объявление массива
  for(i=0;i<n;i++)a[i]=new float[m];
  cout<<rus("\nВведите элементы массива:")<<endl<<endl;
  randomize();
  for(i=0;i<n;i++)
   {
    for(j=0;j<m;j++)
     {
      a[i][j]=-5+random(20); //случайное заполнение массива
      cout<<setw(4)<<a[i][j];    //вывод массива
     }
    cout<<endl;
   }
  if(0==q)cout<<rus("\nВы не ввели направление сдвига!");
  else
   {
    for(k=0;k<l;k++)
     {
      if(1==q)
       {
        for(i=n-1;i>0;i--)
         {
          nmin=i-1;
          for(j=0;j<m;j++)
           {
            buf_a=a[i][j];
            a[i][j]=a[nmin][j];
            a[nmin][j]=buf_a;
           }
         }
       }
      if(2==q)
       {
        for(j=m-1;j>0;j--)
         {
          mmin=j-1;
          for(i=0;i<n;i++)
           {
            buf_a=a[i][j];
            a[i][j]=a[i][mmin];
            a[i][mmin]=buf_a;
           }
         }
       }
     }
    cout<<endl;
    cout<<rus("\nСдвинутая матрица:")<<endl<<endl;
    for(i=0;i<n;i++)
     {
      for(j=0;j<m;j++)
      cout<<setw(4)<<a[i][j];             //вывод сдвинутой матрицы
      cout<<endl;
     }
   }
  getch();
  return 0;
 }
//---------------------------------------------------------------------------
char bufrus[256];
char *rus(const char *text)
 {
  CharToOem(text, bufrus);
  return bufrus;
 }
//---------------------------------------------------------------------------

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

Вариант 12
Вариант 14
Exit mobile version