Расчет квадратной матрицы на с++

Автор: Пользователь скрыл имя, 17 Ноября 2011 в 00:38, курсовая работа

Описание работы

Задание 1.
Осуществить циклический сдвиг элементов квадратной матрицы размерности mxm на n элементов вправо. n может быть больше m (сформировать статический массив, определить значения его элементов и выполнить задачу).
Задание 2.
Дана целочисленная прямоугольная матрица размерности n на m. Упорядочить её строки по возрастанию количества одинаковых элементов в каждой строке, а также найти номер первого из столбцов, не содержащих ни одного отрицательного элемента (решить задачу, используя динамическое выделение памяти и обработку массива с применением указателей).

Содержание

Постановка задачи ………………………………………. 3
Алгоритм программы …………………………………… 4
Функции программы ……………………………………. 9
Реализация программ ………………………………….. 10
Листинги программ …………………………………….. 12
Список используемой литературы ……………………. 16

Работа содержит 1 файл

РГР_алгоритмы.doc

— 414.50 Кб (Скачать)

      cin>>m;//Ввод количества столбцов

      int **matr=new int *[n];//Инициализация и выделение памяти под строки массива указателей

      int i,j;

      for (i=0;i<n;i++)

            matr[i]=new int [m];//Выделение памяти под элементы массива

      cout<<"\t\t\tMASSIV-MATRIX"<<endl;

      for (i=0;i<n;i++)//Просмотр строк массива

            for (j=0;j<m;j++)//Просмотр столбцов массива

            {

                  *(*(matr+i)+j)=rand()%10-5;//Инициализация каждого элемента

                  if (j==m-1)

                        cout<<*(*(matr+i)+j)<<"\n\n\n\n";//Вывод на экран

                  else

                        cout<<*(*(matr+i)+j)<<"\t";//Вывод на экран

            }

      int **temp=new int *[n];//Инициализация и выделение памяти под строки массива указателей

      for (i=0;i<n;i++)//Просмотр строк

            temp[i]=new int [m];

      int k,sum,work;

      for (i=0;i<n;i++)

            for (j=0;j<m;j++)//Просмотр столбцов

            {

                  sum=0;//Переменная,в которой накапливается количество mas[i][j] элемента в i-той строке

                  work=*(*(matr+i)+j);// Переменная,в которой хранится значение mas[i][j]-того элемента.

                  for (k=0;k<m;k++)

                  {

                        if (*(*(matr+i)+k)==work)

                              sum++;

                        if (k==m-1)

                              *(*(temp+i)+j)=sum;

                  }

            } 

      //Формирование  массива tempstr

    int *tempstr=new int [n];//Массив,каждый tempstr[i]-тый элемент которого соответствует максимальному элементу массива temp[i][j] в каждой i-той строке

      for (i=0;i<n;i++)//Просмотр строк

      {

            work=*(*(temp+i)+0);

            for (j=0;j<m;j++)//Просмотр столбцов

            {

                  if (*(*(temp+i)+j)>work)

                        work=*(*(temp+i)+j);

                  if (j==m-1)

                        *(tempstr+i)=work;

            }

      }

      int min;

      for (i=0;i<n;i++)

      {

            min=*(tempstr+i);

            work=i;

            for (k=i;k<n;k++)

            {

                  if (*(tempstr+k)<min)

                  {

                        min=*(tempstr+k);

                        work=k;

                  }

            }

            for(j=0;j<m;j++)

            {

                  sum=*(*(matr+i)+j);

                  *(*(matr+i)+j)=*(*(matr+work)+j);

                  *(*(matr+work)+j)=sum;

            }

            sum=*(tempstr+i);

            *(tempstr+i)=*(tempstr+work);

            *(tempstr+work)=sum;

      }

      cout<<"\t\t\tNEW MASSIV-MATRIX"<<endl;

      for (i=0;i<n;i++)

            for (j=0;j<m;j++)

            {

                  if (j==m-1)

                        cout<<*(*(matr+i)+j)<<"\n\n\n\n";

                  else

                        cout<<*(*(matr+i)+j)<<"\t";

            }

      for (j=0;j<n;j++)

      {

            sum=*(*(matr+0)+j);

            for (i=0;i<m;i++)

            {

                  if (*(*(matr+i)+j)<0)

                        sum=*(*(matr+i)+j);

                  if (i==n-1)

                  {

                        if (sum>=0)

                        {

                              cout<<"INDEX STOLBCA BEZ OTRIZATELNIH ELEMENTOV="<<j<<endl;

                              j=n-1;

                              i=m-1;

                        }

                  }

            }

      }

      for (i=0;i<n;i++)

         delete temp[i];

      delete temp;

      delete tempstr;

     } 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

6 Список используемой  литературы

     1) Конспект лекций;

      2) Культин Н. Б. «С/С++ в задачах и примерах.» – СПб.:БХВ-Петербург,          2008. – 228 с.:ил.;

      3) Б. Страуструп  «Введение в язык С++»;

      4) В. В.  Подбельский «Язык С++». 
       
       
       
       
       

Информация о работе Расчет квадратной матрицы на с++