Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
54
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int get_command ();
  5. void print(int ** array, int rows, int * row_sizes); //array of pointers to arrays of integers, array of sizes of arrays to integers, number of rows in matrix
  6. void deallocate (int ** array, int *rows, int * row_sizes); //call &!!!!!
  7. void define (int ** array, int *rows, int * row_sizes); //call &!!!!!
  8.  
  9. int main(void)
  10. {
  11.  
  12.     int ** array = NULL;
  13.     int * row_sizes = NULL;
  14.     int rows=0;
  15.  
  16.     while (1)
  17.     {
  18.         switch (get_command())
  19.         {
  20.             case 1: //print array
  21.             {
  22.                 if (!array)
  23.                 {
  24.                     print (array, rows, row_sizes);
  25.                 }
  26.                 else
  27.                 {
  28.                     printf ("Массив еще РЅРµ был введен.\n");
  29.                 }
  30.  
  31.                 break;
  32.             }
  33.             case 2: //new array
  34.             {
  35.                 deallocate (array, &rows, row_sizes);
  36.                 define (array, &rows, row_sizes);
  37.  
  38.                 break;
  39.             }
  40.             case 3: //exit
  41.             {
  42.                 deallocate (array, &rows, row_sizes);
  43.  
  44.                 return 0;
  45.             }
  46.         }
  47.     }
  48. }
  49.  
  50. int get_command ()
  51. {
  52.     int command;
  53.     printf ("Выберите команду:\n1 - Распечатать массив\n2 - Запросить новый РІРІРѕРґ данных\n3 - Выход РёР· программы\n");
  54.     scanf ("%d", &command);
  55.     while (command < 1 || command > 3)
  56.     {
  57.         printf ("Пожалуйста, введите корректный номер команды: ");
  58.         scanf ("%d", &command);
  59.     }
  60.     return command;
  61. }
  62.  
  63. void print(int ** array, int rows, int *row_sizes)
  64. {
  65.    
  66.     for (int i = 0; i < rows; i++)
  67.     {
  68.         for (int j = 0; j < row_sizes[i]; j++)
  69.         {
  70.             printf ("%d ", array[i][j]);
  71.         }
  72.         printf ("\n");
  73.     }
  74. }
  75.  
  76. void deallocate (int ** array, int *rows, int * row_sizes)
  77. {
  78.     if (!array)return;
  79.     for (int i = 0; i < *rows; i++)
  80.     {
  81.         free ((array)[i]);
  82.         (array[i]) = NULL;
  83.     }
  84.     free (array);
  85.     free (row_sizes);
  86.     *rows = 0;
  87. }
  88.  
  89. int get_number ()
  90. {
  91.     int x;
  92.     do
  93.     {
  94.         scanf ("%d", &x);
  95.     } while (x <= 0);
  96.     return x;
  97. }
  98.  
  99. void define (int ** array, int *rows, int * row_sizes)
  100. {
  101.     printf ("Количество строк: ");
  102.     *rows = get_number();
  103.     int len = *rows * sizeof(int);
  104.     row_sizes = new int[*rows];
  105.     (array) = (int**) malloc (*rows * sizeof(int*));
  106.     if ((array) != NULL)
  107.     {
  108.  
  109.         for (int i = 0; i < *rows; i++)
  110.         {
  111.             printf ("Количество элементов РІ %d строке: ", i + 1);
  112.             (row_sizes)[i] = get_number();
  113.             (array)[i] = (int *) malloc ((row_sizes)[i] * sizeof (int));
  114.  
  115.             if ((array)[i] != NULL)
  116.             {
  117.                 printf ("%d строка: ", i + 1);
  118.                 for (int j = 0; j < (row_sizes)[i]; j++)
  119.                 {
  120.                     scanf ("%d", &(array)[i][j]);
  121.                 }
  122.             }
  123.             else
  124.             {
  125.                 exit (1);
  126.             }
  127.         }
  128.     }
  129.     else
  130.     {
  131.         exit (1);
  132.     }
  133.  
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement