1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#include <iostream> #include <stdlib.h> //для rand() #include <time.h> //для time() using namespace std; /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ВЫДЕЛЕНИЕМ ПАМЯТИ*/ void init_array(int** &arr, const int N, const int M) { arr = new int*[N]; for (int i = 0; i<N; i++) arr[i] = new int[M]; } /*КОНЕЦ ФУНКЦИИ ВЫДЕЛЕНИЯ ПАМЯТИ*/ /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ЗАЧИСТКОЙ ПАМЯТИ*/ void free_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) delete[]arr[i]; delete[]arr; } //КОНЕЦ ФУНКЦИИ ОЧИСТКИ /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ЗАПОЛНЕНИЕМ МАССИВА*/ void fill_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) { for (int j = 0; j<M; j++) { arr[i][j] = rand() % 100; } } } //КОНЕЦ ФУНКЦИИ ЗАПОЛНЕНИЯ МАССИВА /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ВЫВОДОМ ЗНАЧЕНИЙ МАССИВА НА ЭКРАН*/ void print_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) { for (int j = 0; j<M; j++) { cout << arr[i][j] << '\t'; } cout << '\n'; } } //КОНЕЦ ФУНКЦИИ int main() { srand(unsigned(time(NULL))); //unsigned - чтобы не было предупреждений int** my_array; int row = 10; int col = 20; //Теперь можно создавать массивы динамически init_array(my_array, row, col); //выделили память fill_array(my_array, row, col); //заполнили массив значениями print_array(my_array, row, col); //вывели значения массива на экран free_array(my_array, row, col); //уничтожили массив cout << "\n\n"; row = 5; col = 7; //всё то же самое init_array(my_array, row, col); fill_array(my_array, row, col); print_array(my_array, row, col); free_array(my_array, row, col); cout << "\n\n"; row = 7; col = 5; init_array(my_array, row, col); fill_array(my_array, row, col); print_array(my_array, row, col); free_array(my_array, row, col); cout << "\n\n"; cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
#include <iostream> #include <stdlib.h> //для rand() #include <time.h> //для time() using namespace std; /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ВЫДЕЛЕНИЕМ ПАМЯТИ*/ void init_array(int** &arr, const int N, const int M) { arr = new int*[N]; for (int i = 0; i<N; i++) arr[i] = new int[M]; } /*КОНЕЦ ФУНКЦИИ ВЫДЕЛЕНИЯ ПАМЯТИ*/ /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ЗАЧИСТКОЙ ПАМЯТИ*/ void free_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) delete[]arr[i]; delete[]arr; } //КОНЕЦ ФУНКЦИИ ОЧИСТКИ /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ЗАПОЛНЕНИЕМ МАССИВА*/ void fill_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) { for (int j = 0; j<M; j++) { arr[i][j] = rand() % 100; } } } //КОНЕЦ ФУНКЦИИ ЗАПОЛНЕНИЯ МАССИВА /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ВЫВОДОМ ЗНАЧЕНИЙ МАССИВА НА ЭКРАН*/ void print_array(int** arr, const int N, const int M) { cout << "array " << N << ',' << M << ":\n"; for (int i = 0; i<N; i++) { for (int j = 0; j<M; j++) { cout << arr[i][j]; cout.width(5); //мы легко нашли, где происходит вывод на экран и немного изменили способ } cout << '\n'; } cout << "\n\n"; } //КОНЕЦ ФУНКЦИИ /*Добавили функцию, объединяющую одну и ту же последовательность вызовов*/ void worked_with_array(int** arr, const int N, const int M) { init_array(arr, N, M); //выделили память fill_array(arr, N, M); //заполнили массив значениями print_array(arr, N, M); //вывели значения массива на экран free_array(arr, N, M); //уничтожили массив } int main() { srand(unsigned(time(NULL))); //umsigned - чтобы не было предупреждений int** my_array = 0; int row = 9; int col = 20; //Теперь можно создавать массивы динамически worked_with_array(my_array, row, col); row = 3, col = 4; //делаем массив из 3 строк и 4 колонок worked_with_array(my_array, row, col); row = 7, col = 14; //делаем массив из 7 строк и 14 колонок worked_with_array(my_array, row, col); cin.get(); } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
#include <iostream> #include <stdlib.h> //для rand() #include <time.h> //для time() using namespace std; /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ЗАЧИСТКОЙ ПАМЯТИ*/ void free_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) delete[]arr[i]; delete[]arr; arr = 0; //Обозначаем, что участок памяти теперь свободен } //КОНЕЦ ФУНКЦИИ ОЧИСТКИ /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ВЫДЕЛЕНИЕМ ПАМЯТИ*/ int** init_array(int** arr, const int N, const int M) { if (arr) free_array(arr, N, M); //Если ранее память выделялась, чистим её arr = new int*[N]; for (int i = 0; i<N; i++) arr[i] = new int[M]; return arr; } /*КОНЕЦ ФУНКЦИИ ВЫДЕЛЕНИЯ ПАМЯТИ*/ /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ЗАПОЛНЕНИЕМ МАССИВА*/ void fill_array(int** arr, const int N, const int M) { for (int i = 0; i<N; i++) { for (int j = 0; j<M; j++) { arr[i][j] = rand() % 100; } } } //КОНЕЦ ФУНКЦИИ ЗАПОЛНЕНИЯ МАССИВА /*ФУНКЦИЯ, РАБОТАЮЩАЯ НАД ВЫВОДОМ ЗНАЧЕНИЙ МАССИВА НА ЭКРАН*/ void print_array(int** arr, const int N, const int M) { cout << "array " << N << ',' << M << ":\n"; for (int i = 0; i<N; i++) { for (int j = 0; j<M; j++) { cout << arr[i][j]; cout.width(5); } cout << '\n'; } cout << "\n\n"; } //КОНЕЦ ФУНКЦИИ /*Добавили функцию, объединяющую одну и ту же последовательность вызовов*/ void worked_with_array(int** arr, const int N, const int M) { arr = init_array(arr, N, M); //выделили память, обязательно присваиваем её в указатель fill_array(arr, N, M); //заполнили массив значениями print_array(arr, N, M); //вывели значения массива на экран free_array(arr, N, M); //уничтожили массив } int main() { srand(unsigned(time(NULL))); //umsigned - чтобы не было предупреждений int** my_array = 0; int row = 9; int col = 20; //Теперь можно создавать массивы динамически worked_with_array(my_array, row, col); row = 3, col = 4; //делаем массив из 3 строк и 4 колонок worked_with_array(my_array, row, col); row = 7, col = 14; //делаем массив из 7 строк и 14 колонок worked_with_array(my_array, row, col); cin.get(); } |
в fillarr, showarr передавать Arr по ссылке нет никакой необходимости.
сейчас нет такой необходимости и в delarr, но лучше было бы если бы он передавался всё-таки по ссылке и в конце очистки добавить Arr=NULL;