среда, 13 июля 2011 г.

С++: Динамические двухмерные массивы

Моя первая статья...

На примере моей первой лабораторной второго полусеместра 1го курса хочу показать вам, дорогие читатели, как я осваивал работу с динамическими массивами(одномерными и матрицами)

Итак, ниже задание и код, написаный на С++ в консоли, а также комментарии:

/*Лабораторная работа № 1

Разработать алгоритм решения задачи обработки двумерного массива размерности mxn.
Реализовать алгоритм на языке С++ с помощью функций с параметрами:
1)     функции ввода массива (в качестве параметров выступают массив и его размерность);
2)     функции вывода массива (в качестве параметров выступают массив и его размерность);
3)     функций (функции) расчета (может быть с возвращаемым значением или void-функций).
В главной функции должен быть реализован только вызов функций и вывод результатов на экран.
Данные разместить в динамической памяти.
Условие задачи выбрать по номеру в журнале. Для сортировки использовать тот же алгоритм, что и
в лабораторной работе № 1.
2.     Переставить столбцы матрицы так, чтобы элементы первой строки были отсортированы по убыванию
*/
#include<iostream>
using namespace std;
typedef int** tint; //для тогочтобы не писать все время int**. Так в коде приятней смотриться

///////////////////////////////////////////////////////////////////////////////////////////
//////////////////Функции ввода и вывода матрицы///////////////////////////////////////////
void Input_matr(tint y, int n, int m)
{
for (int i=0; i<n; i++)
for (int j=0; j<m; j++)
{
   cout<<"\n a["<<i<<"]["<<j<<"]=";
       cin>>y[i][j];
}

}

void Output_matr(tint y, int n, int m)
{
cout<<"\n";
for (int i=0; i<n; i++)
{
cout <<      endl;
for (int j=0; j<m; j++)
         {
             cout<<y[i][j]<<" ";
         }
}
cout<<"\n";
}

/////////////////////////////////////////////////////////////////////////////////////////
//Тк массив динамический, то его нужно создать и выделить под него память
//ниже приведены функции выделения и удаления памяти
void Memory_matr (tint&y, int n, int m)
{
       y = new int *[n];
       for (int i=0; i<n; i++)
             y[i]=new int[m];
}
void Delete_matr(tint&y,int n, int m)
{for(int i=0;i<n;i++)
{delete y[i]; y[i]=NULL;}
delete[]y; y=NULL;
}
///////////////////////////////////////////////////////////////////////////////////////////
//Функция сортировки матрицы по убыванию значений первой строки
void Sort_Insertion(int** y, int n , int m)
{
   int i,j,k,*b;
   b= new int [n];//локальный массив.Создание
   for (i=1; i<m; i++)
   {
    for (k=0; k<n; k++)
   {
    b[k]=y[k][i];
       j=i;
             while(j>0&&b[0]>y[0][j-1])
             {
             y[k][j]=y[k][j-1];
             j--;
             }
   }for(k=0;k<n;k++)
          y[k][j]=b[k];
   }
   delete[]b;//удаление локального массива
}
/////////////////////////////////////////////////////////////////////////////////////////
void main()
{ setlocale(LC_ALL, "Russian");//русские буквы в консоли
tint matr; //int** matr
int n,m;
cout<<"Число строк матрицы = ";
cin>>n;
cout<<"Число столбцов матрицы = ";
cin>>m;
Memory_matr(matr,n,m);//Выделение памяти
       Input_matr(matr,n,m);//Ввод матрицы
       cout<<"Задана матрица : ";
       Output_matr(matr,n,m);//Вывод матрицы
       Sort_Insertion(matr,n,m);//Сортировка
       cout <<"Обработаная матрица:";
       Output_matr(matr,n,m);
       Delete_matr(matr,n,m);//Удаление матрицы
       cin.get();//консоль ждет, когда нажмется любая клавиша
       cin.get();
}

Вот результат даной программы:


Комментариев нет:

Отправить комментарий