Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- int get_command ();
- 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
- void deallocate (int ** array, int *rows, int * row_sizes); //call &!!!!!
- void define (int ** array, int *rows, int * row_sizes); //call &!!!!!
- int main(void)
- {
- int ** array = NULL;
- int * row_sizes = NULL;
- int rows=0;
- while (1)
- {
- switch (get_command())
- {
- case 1: //print array
- {
- if (!array)
- {
- print (array, rows, row_sizes);
- }
- else
- {
- printf ("Массив еще не был введен.\n");
- }
- break;
- }
- case 2: //new array
- {
- deallocate (array, &rows, row_sizes);
- define (array, &rows, row_sizes);
- break;
- }
- case 3: //exit
- {
- deallocate (array, &rows, row_sizes);
- return 0;
- }
- }
- }
- }
- int get_command ()
- {
- int command;
- printf ("Выберите команду:\n1 - Распечатать массив\n2 - Запросить новый ввод данных\n3 - Выход из программы\n");
- scanf ("%d", &command);
- while (command < 1 || command > 3)
- {
- printf ("Пожалуйста, введите корректный номер команды: ");
- scanf ("%d", &command);
- }
- return command;
- }
- void print(int ** array, int rows, int *row_sizes)
- {
- for (int i = 0; i < rows; i++)
- {
- for (int j = 0; j < row_sizes[i]; j++)
- {
- printf ("%d ", array[i][j]);
- }
- printf ("\n");
- }
- }
- void deallocate (int ** array, int *rows, int * row_sizes)
- {
- if (!array)return;
- for (int i = 0; i < *rows; i++)
- {
- free ((array)[i]);
- (array[i]) = NULL;
- }
- free (array);
- free (row_sizes);
- *rows = 0;
- }
- int get_number ()
- {
- int x;
- do
- {
- scanf ("%d", &x);
- } while (x <= 0);
- return x;
- }
- void define (int ** array, int *rows, int * row_sizes)
- {
- printf ("Количество строк: ");
- *rows = get_number();
- int len = *rows * sizeof(int);
- row_sizes = new int[*rows];
- (array) = (int**) malloc (*rows * sizeof(int*));
- if ((array) != NULL)
- {
- for (int i = 0; i < *rows; i++)
- {
- printf ("Количество элементов в %d строке: ", i + 1);
- (row_sizes)[i] = get_number();
- (array)[i] = (int *) malloc ((row_sizes)[i] * sizeof (int));
- if ((array)[i] != NULL)
- {
- printf ("%d строка: ", i + 1);
- for (int j = 0; j < (row_sizes)[i]; j++)
- {
- scanf ("%d", &(array)[i][j]);
- }
- }
- else
- {
- exit (1);
- }
- }
- }
- else
- {
- exit (1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement