diff --git a/my_c/dynamic.c b/my_c/dynamic.c new file mode 100644 index 0000000..244efd5 --- /dev/null +++ b/my_c/dynamic.c @@ -0,0 +1,52 @@ +#include +#include +#include + +#include "my_funcs.h" + +int crete_cube_matrix(void *** matrix, unsigned int n, unsigned int type_size) +{ + int error_code = 1; + + *matrix = calloc(n, sizeof(void*)); + if (*matrix) + { + for (unsigned int i = 0; i < n; i++) + { + (*matrix)[i] = calloc(n, type_size); + if (!(*matrix)[i]) + { + error_code = 0; + break; + } + } + } + else + error_code = 0; + + return error_code; +} + +void free_cube_matrix(void *** matrix, unsigned int n) +{ + for (unsigned int i = 0; i < n; i++) + free((*matrix)[i]); + free(*matrix); +} + +int scan_array_matrix(void *** matrix, unsigned int n, char * specifiere) +{ + int scan_el_cnt = 0; + for (unsigned int i = 0; i < n; i++) + scan_el_cnt += scan_array((*matrix)[i], n, specifiere); + return scan_el_cnt; +} + +void print_array_matrix(void *** matrix, unsigned int n, char * type, char * specifiere) +{ + for (unsigned int i = 0; i < n; i++) + { + print_array((*matrix)[i], n, type, specifiere); + printf("\n"); + } +} diff --git a/my_c/dynamic.h b/my_c/dynamic.h new file mode 100644 index 0000000..b680e59 --- /dev/null +++ b/my_c/dynamic.h @@ -0,0 +1,57 @@ +#ifndef dynamic_h +#define dynamic_h + +/* +Алгоритм выделения памяти для динамической матрицы +Входные значения: +matrix - указатель на матрицу +n - размер матрицы +type_size - размер одного элемента +Возвращаемое значение: +0 - ошибка выделения памяти +1 - нет ошибки +*/ +int crete_cube_matrix(void *** matrix, unsigned int n, unsigned int type_size); + +/* +Алгоритм освобождения памяти для динамической матрицы +Входные значения: +matrix - указатель на матрицу +n - размер матрицы +*/ +void free_cube_matrix(void *** matrix, unsigned int n); + +/* +Алгоритм ввода матрицы +Входные данные: +matrix - указатель на матрицу +n - размер матрицы +specifiere - спецификатор типа +Список спецификаторов: +с - char +d - int +f - float +ld - long +lf - double +Возвращаемые значения: +количество считанных значений +*/ +int scan_array_matrix(void *** matrix, unsigned int n, char * specifiere); + +/* +Алгоритм вывода динамической матрицы +Входные данные: +matrix - указатель на матрицу +n - размер массива +type - спецификатор типа +Список спецификаторов: +с - char +d - int +f - float +ld - long +lf - double +specifiere - спецификатор формата вывода +*/ +void print_array_matrix(void *** matrix, unsigned int n, char * type, char * specifiere); + +#endif