Advertisement
Domerk

Laba_Den

Nov 12th, 2013
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.61 KB | None | 0 0
  1. // Сортировка по возрастанию методом обмена без флага перестановки
  2. // Язык реализации - С++
  3.  
  4. #include <iostream>
  5.  
  6. #define PARAMETER 50 //константа
  7.  
  8. using namespace std;
  9.  
  10. //создаём структуру "Массив"
  11. //для объявления массива это вовсе не обязательно
  12. //но всё равно делаем так
  13. struct Arreys
  14. {
  15.     int Matr [PARAMETER] [PARAMETER]; //массив
  16.     int n; //число используемых строк и столбцов
  17. };
  18.  
  19. // объявляем функции, которые будем использовать
  20. struct Arreys Create (struct Arreys My_Matr);
  21. void Browse (struct Arreys My_Matr);
  22. struct Arreys Nulling (struct Arreys My_Matr);
  23. struct Arreys Sorting (struct Arreys My_Matr);
  24.  
  25. /*============================================*/
  26. /*============тело главной функции============*/
  27. /*============================================*/
  28. int main ()
  29. {
  30.     struct Arreys My_Matr; //создаём экземпляр структуры "Массив"
  31.     cout<<"  Select 1/2 the width of the square: ";
  32.     cin>>My_Matr.n; //находим n
  33.     cout<<endl;
  34.  
  35.     My_Matr=Create(My_Matr); //заполняем
  36.     cout<<"  Array:"<<endl;
  37.     Browse(My_Matr); //выводим на экран
  38.  
  39.     My_Matr=Sorting(My_Matr); //сортируем
  40.     cout<<"  Sorting:"<<endl;
  41.     Browse(My_Matr); //выводим на экран
  42.    
  43.     My_Matr=Nulling(My_Matr); //обнуляем
  44.     cout<<"  Nulling:"<<endl;
  45.     Browse(My_Matr); //выводим на экран
  46.  
  47.     cin.sync(); //удерживаем экран до нажатия клавиши
  48.     cin.get();
  49.     return 0;
  50. }
  51. /*============================================*/
  52. // функция заполнения массива
  53. // принимает экзмепляр стуктуры "Массив"
  54. struct Arreys Create (struct Arreys My_Matr)
  55. {
  56.     int i, j; //переменные счётчика
  57.     for (i=0; i<(2*My_Matr.n); i++) //до последней строки
  58.     {
  59.         for (j=0; j<(2*My_Matr.n); j++) //до последнего столбца
  60.             My_Matr.Matr[i][j]=2*My_Matr.n - i; //заносим в ячейку общее число строк - номер текщей строки
  61.     }
  62.     return My_Matr; //возвращаем массив
  63. }
  64. /*============================================*/
  65. // функция просмотра массива
  66. void Browse (struct Arreys My_Matr)
  67. {
  68.     int i, j; //переменные
  69.     cout<<endl;
  70.     for (i=0; i<(2*My_Matr.n); i++) //по строкам
  71.     {
  72.         cout<<"  ";
  73.         for (j=0; j<(2*My_Matr.n); j++) //по столбцам
  74.         {
  75.             cout<<My_Matr.Matr[i][j]; //выводим инфу на экран
  76.         }
  77.         cout<<endl;
  78.     }
  79.     cout<<endl;
  80. }
  81.  
  82. /*============================================*/
  83. // функция обнуления массива
  84. struct Arreys Nulling (struct Arreys My_Matr)
  85. {
  86.     int i, j; //переменные
  87.    
  88.     //обнуление верхней половины матрицы
  89.     for (i=1; i<My_Matr.n; i++)
  90.     {
  91.         // обнуление левой части
  92.         for (j=0; j<i; j++)
  93.         {
  94.             My_Matr.Matr[i][j] = 0; //обнуляем
  95.         }
  96.  
  97.         // обнуление правой части
  98.         for (j=2*My_Matr.n-1; j>=2*My_Matr.n-i; j--)
  99.         {
  100.             My_Matr.Matr[i][j] = 0; // обнуляем
  101.         }
  102.     }
  103.  
  104.     // обнуление нижней части
  105.     for (i=My_Matr.n; i<2*My_Matr.n; i++)
  106.     {
  107.         // обнуление левой части
  108.         for (j=0; j<2*My_Matr.n-i-1; j++)
  109.         {
  110.             My_Matr.Matr[i][j] = 0; // обнуляем
  111.         }
  112.  
  113.         // обнуление правой части
  114.         for (j=2*My_Matr.n-1; j>i; j--)
  115.         {
  116.             My_Matr.Matr[i][j] = 0; // обнуляем
  117.         }
  118.  
  119.     }
  120.  
  121.     return My_Matr; //возвращаем массив
  122. }
  123.  
  124.  
  125. /*============================================*/
  126. // функция сортировки массива
  127. struct Arreys Sorting (struct Arreys My_Matr)
  128. {
  129.     int i, j, k, s, z; //куча переменных
  130.     i=0;
  131.     //сортировка левой половины матрицы
  132.     for (j=0; ((j<=i)&&(j<My_Matr.n-1)); j++) //по столбцам
  133.     {
  134.         for (k=0; k<=(2*j); k++) //перестановки
  135.         {
  136.             for (i=0; ((i<=j)&&(i<2*My_Matr.n-1)); i++) //строки
  137.             {
  138.                 if (My_Matr.Matr[i-1][j]>My_Matr.Matr[i][j])
  139.                 {
  140.                     //если выполняется условие
  141.                     //меняем местами инфу в ячейках
  142.                     z=My_Matr.Matr[i-1][j];
  143.                     My_Matr.Matr[i-1][j]=My_Matr.Matr[i][j];
  144.                     My_Matr.Matr[i][j]=z;
  145.                 }
  146.             }
  147.             for (i=0, s=2*My_Matr.n-1; ((i<=j)||(s>=2*My_Matr.n-2*j)); i++, s--)
  148.             {
  149.                 //сравниваем верх с низом
  150.                 if (My_Matr.Matr[i][j]>My_Matr.Matr[s][j])
  151.                 {
  152.                     z=My_Matr.Matr[i][j];
  153.                     My_Matr.Matr[i][j]=My_Matr.Matr[s][j];
  154.                     My_Matr.Matr[s][j]=z;
  155.                 }
  156.                 //и приводим в порядок низ
  157.                 if (My_Matr.Matr[s-1][j]>My_Matr.Matr[s][j])
  158.                 {
  159.                     z=My_Matr.Matr[s-1][j];
  160.                     My_Matr.Matr[s-1][j]=My_Matr.Matr[s][j];
  161.                     My_Matr.Matr[s][j]=z;
  162.                 }
  163.             }
  164.         }
  165.     }
  166.  
  167.     //сортируем два средних столбца
  168.  
  169.     for (j=My_Matr.n-1; j<=My_Matr.n; j++)
  170.     {
  171.         for (k=0; k<=(2*j); k++)
  172.         {
  173.             for (i=0; i<2*My_Matr.n; i++)
  174.             {
  175.                 if (My_Matr.Matr[i-1][j]>My_Matr.Matr[i][j])
  176.                 {
  177.                     //если выполняется условие
  178.                     //меняем местами инфу в ячейках
  179.                     z=My_Matr.Matr[i-1][j];
  180.                     My_Matr.Matr[i-1][j]=My_Matr.Matr[i][j];
  181.                     My_Matr.Matr[i][j]=z;
  182.                 }
  183.             }
  184.         }
  185.     }
  186.     //===============================================
  187.  
  188.     //сортировка правой половины матрицы
  189.     for (j=My_Matr.n+1; j<2*My_Matr.n; j++)
  190.     {
  191.         for (k=0; k<=(2*j+1); k++)
  192.         {
  193.  
  194.             //сравниваем верх с низом
  195.  
  196.             for (i=0, s=2*My_Matr.n-1; ((i<2*My_Matr.n-j)||(s>2*My_Matr.n-j)); i++, s--)
  197.             {
  198.                 //сравниваем верх с низом
  199.                 if (My_Matr.Matr[i][j]>My_Matr.Matr[s][j])
  200.                 {
  201.                     z=My_Matr.Matr[i][j];
  202.                     My_Matr.Matr[i][j]=My_Matr.Matr[s][j];
  203.                     My_Matr.Matr[s][j]=z;
  204.                 }
  205.                 //и приводим в порядок низ
  206.                 if (My_Matr.Matr[s-1][j]>My_Matr.Matr[s][j])
  207.                 {
  208.                     z=My_Matr.Matr[s-1][j];
  209.                     My_Matr.Matr[s-1][j]=My_Matr.Matr[s][j];
  210.                     My_Matr.Matr[s][j]=z;
  211.                 }
  212.             }
  213.  
  214.  
  215.             //сортируем верхнюю часть
  216.             for (i=1; i<2*My_Matr.n-j; i++)
  217.             {
  218.                 z=My_Matr.Matr[i-1][j];
  219.                 My_Matr.Matr[i-1][j]=My_Matr.Matr[i][j];
  220.                 My_Matr.Matr[i][j]=z;
  221.             }
  222.            
  223.  
  224.         }
  225.     }
  226.  
  227.     return My_Matr; //возвращаем то, что получилось
  228. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement