Advertisement
Guest User

lab_05_0_extra_task

a guest
Apr 24th, 2019
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.30 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3.  
  4. #define N 10
  5.  
  6. int input_row(int array[], int len, int row);
  7. int len_of_num(int num);
  8. void print_array_cutted(int array[], int len, int to_cut);
  9. void print_array_wo_middle(int array[], int len, int elements);
  10. void print_array(int array[], int len);
  11.  
  12. typedef int matr_t[N][N];
  13.  
  14. int main(void)
  15. {
  16.     matr_t matrix;
  17.     int row, coll;
  18.     int i;
  19.     //int j;
  20.  
  21.     printf("Input number of rows ");
  22.     if ((scanf("%i", &row) != 1) || (row <= 0) || (row > 10))
  23.     {
  24.         printf("Wrong input!");
  25.         return 1;
  26.     }
  27.  
  28.     printf("Input number of collumns ");
  29.     if ((scanf("%i", &coll) != 1) || (coll <= 0) || (coll > 10))
  30.     {
  31.         printf("Wrong input!");
  32.         return 1;
  33.     }
  34.  
  35.     for (i = 0; i < row; i++)
  36.     {
  37.         if (input_row(matrix[i], coll, i))
  38.         {
  39.             printf("Wrong input!");
  40.             return 1;
  41.         }
  42.     }
  43.  
  44.     printf("\n\nInitial matrix:");
  45.     for (i = 0; i < row; i++)
  46.     {
  47.         printf("\n");
  48.         print_array(matrix[i], coll);
  49.     }
  50.  
  51.     int how_m_to_insert [row];
  52.     int coll_count = coll;
  53.  
  54.     for (i = 0; i < row / 2; i++)
  55.     {
  56.         if (coll_count > 2)
  57.         {
  58.             how_m_to_insert[i] = coll_count;
  59.             how_m_to_insert[row - 1 - i] = coll_count;
  60.             coll_count -= 2;
  61.         }
  62.         else
  63.         {
  64.             how_m_to_insert[i] = coll_count;
  65.             how_m_to_insert[row - 1 - i] = coll_count;
  66.         }
  67.     }
  68.  
  69.     if (row % 2) how_m_to_insert[row / 2] = coll_count;
  70.     printf("\n\nProcessed Matrix:\n");
  71.  
  72.     for (i = 0; i < row; i++)
  73.     {
  74.         print_array_cutted(matrix[i], coll, (coll - how_m_to_insert[i]));
  75.         printf("\n");
  76.     }
  77.  
  78.     //int how_m_to_insert [row];
  79.     //int coll_count = 2;
  80.     coll_count = 2;
  81.  
  82.  
  83.     for (i = 0; i < row / 2; i++)
  84.     {
  85.         if (coll_count < coll)
  86.         {
  87.             how_m_to_insert[i] = coll_count;
  88.             how_m_to_insert[row - 1 - i] = coll_count;
  89.             coll_count += 2;
  90.         }
  91.         else
  92.         {
  93.             how_m_to_insert[i] = coll_count;
  94.             how_m_to_insert[row - 1 - i] = coll_count;
  95.         }
  96.     }
  97.  
  98.     if (row % 2)
  99.         how_m_to_insert[row / 2] = coll;
  100.     else
  101.     {
  102.         how_m_to_insert[row / 2] = coll;
  103.         how_m_to_insert[(row / 2) - 1] = coll;
  104.     }
  105.  
  106.     printf("\n\nProcessed Matrix:\n");
  107.  
  108.     for (i = 0; i < row; i++)
  109.     {
  110.         print_array_wo_middle(matrix[i], coll, how_m_to_insert[i]);
  111.         printf("\n");
  112.     }
  113.  
  114.  
  115.  
  116.     return 0;
  117. }
  118.  
  119.  
  120. int input_row(int array[], int len, int row)
  121. {
  122.     int i; // Счётчик
  123.     int chr; // Число из потока ввода
  124.  
  125.     for (i = 0; i < len; i++)
  126.     {
  127.         printf("Input %i element of %i row of matrix: ", i + 1, row + 1);
  128.  
  129.         if (scanf("%i", &chr) == 1) array[i] = chr;
  130.         else return -1;
  131.     }
  132.  
  133.     return 0;
  134. }
  135.  
  136.  
  137. void print_array_cutted(int array[], int len, int to_cut)
  138. {
  139.     int i, j;
  140.     int spaces;
  141.  
  142.  
  143.     for (i = 0; i < to_cut/2; i++)
  144.     {
  145.         spaces = len_of_num(array[i]);
  146.         for (j = 0; j < spaces; j++) printf(" ");
  147.         printf(" ");
  148.  
  149.     }
  150.  
  151.     for (i = to_cut / 2; i < (len - to_cut / 2); i++)
  152.     {
  153.         printf("%i ", array[i]);
  154.     }
  155.  
  156.     return;
  157. }
  158.  
  159. void print_array_wo_middle(int array[], int len, int elements)
  160. {
  161.     int i, j;
  162.     int spaces;
  163.  
  164.  
  165.     if (elements == len)
  166.     {
  167.         for (i = 0; i < elements; i++)
  168.         {
  169.             printf("%i ", array[i]);
  170.  
  171.         }
  172.     }
  173.     else
  174.     {
  175.         for (i = 0; i < elements / 2; i++)
  176.         {
  177.             printf("%i ", array[i]);
  178.  
  179.         }
  180.  
  181.         for (i = elements / 2; i < (len - elements / 2); i++)
  182.         {
  183.             spaces = len_of_num(array[i]);
  184.             for (j = 0; j < spaces; j++) printf(" ");
  185.             printf(" ");
  186.         }
  187.  
  188.         for (i = (len - elements / 2); i < len; i++)
  189.         {
  190.             printf("%i ", array[i]);
  191.  
  192.         }
  193.     }
  194.  
  195.     return;
  196. }
  197.  
  198. int len_of_num(int num)
  199. {
  200.     int i;
  201.     int len = 0;
  202.  
  203.     if (num < 0) len = 1;
  204.     num = fabs(num);
  205.  
  206.     for (i = 1; i <= num; i *= 10) len++;
  207.  
  208.     return len;
  209. }
  210.  
  211. void print_array(int array[], int len)
  212. {
  213.     int i;
  214.  
  215.     for (i = 0; i < len; i++)
  216.     {
  217.         printf("%d ", array[i]);
  218.     }
  219.  
  220.     return;
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement