Advertisement
Guest User

Untitled

a guest
Nov 15th, 2019
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.86 KB | None | 0 0
  1. #include <locale.h>
  2. #include <stdio.h>
  3. #include <windows.h>
  4. #include <conio.h>
  5.  
  6. int main()
  7. {
  8.     setlocale(LC_ALL, "Russian");
  9.     int i, j, g, n1;//Переменные иттерации, проверки и работы с массивом
  10.     int ** matrix_chg;//Матрица
  11.     int n_size;//Размерность
  12.     int min, gap, temp;//Переменные для сортировки Шелла и пузырька
  13.  
  14.     printf("Введите размерность матрицы: ");
  15.     if (!scanf("%d", &n_size)||n_size<0)//*Сверхинтеллектуальный* ввод
  16.     {
  17.         printf("\nВы ввели отрицательное число, аккуратнее!\n\n");
  18.         system("pause");
  19.         return 0;
  20.     }
  21.     system("CLS");
  22.     if(!(matrix_chg=(int**)calloc(n_size,sizeof(int*))))//Ввод матрицы через 2-ой указатель
  23.     {
  24.         printf("Недостаточно памяти!");
  25.         system("pause");
  26.         return 0;
  27.     }
  28.     for(i=0; i<n_size; i++)//(Позволяет удобнее оперировать с каждым столбцом или строкой)
  29.         if(!(matrix_chg[i]=(int*)calloc(n_size,sizeof(int))))  //В методе есть!
  30.         {
  31.             printf("Недостаточно памяти!");
  32.             free(matrix_chg[i]);
  33.             system("pause");
  34.             return 0;
  35.         }
  36.     for(i=0; i<n_size; i++)//Ввод *интеллектуальный* матрицы (matrix_chg[][])
  37.         for(j=0; j<n_size; j++)
  38.           do{
  39.             system("CLS");
  40.             printf("Введите значение matrix_chg[%d][%d]: ", i, j);
  41.             fflush(stdin);
  42.             n1=scanf("%d", (*(matrix_chg+i)+j));
  43.             }while(n1==0);
  44.     system("CLS");
  45.     printf("Исходная матрица matrix_chg: \n\n");//Вывод исходной матрицы
  46.     for(i=0; i<n_size; i++)
  47.     {
  48.         printf("\n");
  49.         for(j=0;j<n_size; j++)
  50.             printf("%4d", *(*(matrix_chg+i)+j));
  51.     }
  52.  
  53.  
  54.  
  55.  /*                                   //Сортировка Шелла для матрицы
  56.     for(i=0; i<n_size; i++)//Цикл столбцов
  57.         for (gap = n_size / 2; gap > 0; gap /= 2)//Цикл разрыва между элементами, которые следует сравнить
  58.             for (j = gap; j < n_size; j++)//Цикл строк
  59.             {
  60.                //Условие выбора значения для сравнения
  61.                     temp = *((matrix_chg+i)+j);//Выбор значения сравнения
  62.  
  63.                 for (g = j; g >= gap; g -= gap)//Цикл выборки значений для сравнения
  64.                 {
  65.                     if((*((matrix_chg+i)+(g-gap))<0) && (temp >*((matrix_chg+i)+(g-gap))))//Условие сравнения и сравнение
  66.                        *((matrix_chg+i)+g) = *((matrix_chg+i)+(g-gap);
  67.                     else
  68.                         break;
  69.                 }
  70.                 *((matrix_chg+i)+g) = temp;//Окончательная замена значений
  71.             }
  72. */
  73. /*
  74.  
  75.  
  76.         000000000000            00000000000
  77.       00000000     00000   000000     0000000
  78.     0000000             000              00000
  79.    0000000               0                 0000
  80.   000000                                    0000
  81.   00000                                      0000
  82.  00000                                      00000
  83.  00000           //Пузырек топ            000000
  84.   000000                                 0000000
  85.    0000000                              0000000
  86.      000000                            000000
  87.        000000                        000000
  88.           00000                     0000
  89.              0000                 0000
  90.                0000             000
  91.                  000         000
  92.                     000     00
  93.                       00!!00
  94.  */
  95.  
  96. for (j = n_size - 1; j >= 0; j--) {
  97.         gap = n_size;
  98.         for (g = 0; g < n_size; g++) {
  99.             gap--;
  100.         for (i = gap; i >= 0; i--) {
  101.  
  102.             if (*(*(matrix_chg + i) + j) > 0) continue;
  103.             if (*(*(matrix_chg + i) + j) < 0 && *(*(matrix_chg + gap) + j)>0) gap = i;
  104.                 if (*(*(matrix_chg + gap) + j) < (*(*matrix_chg + i) + j ))
  105.                 {
  106.  
  107.                     temp = *(*(matrix_chg + i) + j);
  108.                     *(*(matrix_chg + i) + j) = *(*(matrix_chg + gap) + j);
  109.                     *(*(matrix_chg + gap) + j) = temp;
  110.                 }
  111.             }
  112.         }
  113.  
  114.     }
  115.  
  116. /*
  117.     for(j=0; j<n_size; j++)
  118.     for(g=0; g<(n_size-1); g++)
  119.     {
  120.        gap=0;
  121.     for(i=(n_size-1); i>g; i--);
  122.     {
  123.        if((*((matrix_chg+(i-1))+j)<0) && (*((matrix_chg+(i-1))+j)<*((matrix_chg+i)+j)) && gap==0)
  124.        {
  125.            temp=*((matrix_chg+(i-1))+j);
  126.            *((matrix_chg+(i-1))+j)=*((matrix_chg+i)+j);
  127.            *((matrix_chg+i)+j)=temp;
  128.        }
  129.        else if(*((matrix_chg+i)+j)<0)
  130.        {
  131.             gap=*((matrix_chg+i)+j);
  132.             continue;
  133.        }
  134.        else if((*((matrix_chg+(i-1))+j)<0) && (*((matrix_chg+(i-1))+j)<gap) && gap<0)
  135.        {
  136.             temp=*((matrix_chg+(i-1))+j);
  137.             *((matrix_chg+(i-1))+j)=gap;
  138.             gap=temp;
  139.             gap=0;
  140.        }
  141.     }
  142.     }
  143.     */
  144.     /*
  145.     for (j =0; j<n_size; j++)
  146.         for(i=0; i<n_size; i++)
  147.         {
  148.             min=*((matrix_chg+i)+j);
  149.             for(g=i;g<n_size;g++)
  150.             {
  151.                 if(*((matrix_chg+g)+j)<min && *((matrix_chg+g)+j)<0)
  152.                 {
  153.                     temp=*((matrix_chg+g)+j);
  154.                     *((matrix_chg+g)+j)=min;
  155.                     min=temp;
  156.                 }
  157.             }
  158.         }
  159.     */
  160.     printf("\n\nПреобразованная матрица matrix_chg: \n\n");
  161.     for(i=0; i<n_size; i++)
  162.     {
  163.         printf("\n");
  164.         for(j=0;j<n_size; j++)
  165.             printf("%4d", *(*(matrix_chg+i)+j));
  166.     }
  167.     printf("\n\n");
  168.     system("pause");
  169.     return 0;
  170. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement