Сортировка строк двухмерного динамического массива по возрастанию - C (СИ)
Формулировка задачи:
Помогите,пожалуйста, написать программу так,чтобы программный код, выполняющий действия пунктов меню выполнялся в отдельных Я тут наколякал,но я не профи пока в программировании.Так что это не верно немного)))
функциях
. Ибез использования глобальных функций
. А вот исходный код,если что, без функций.Вот этот#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> int main() { setlocale(0, ""); srand(time(NULL)); int height = 0; int width = 0; int numb = 0; int numb2 = 0; int t = 0; int sort; int **a = NULL; a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; } printf("Программа сортировки строк двухмерного динамического массива по возрастанию\n\n"); do { fflush(stdin); printf("1. Задать размерность двухмерного массива\n"); printf("2. Выбор заполнения массива\n"); printf("3. Вывод необработанного массива\n"); printf("4. Обработка массива\n"); printf("5. Вывод обработанного массива на экран\n"); printf("0. Выход и программы\n"); scanf_s("%d", &numb); system("cls"); switch(numb) { case 1: { for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; height = 0; width = 0; do { fflush(stdin); printf("Введите размерность массива: "); printf("\nШирина:> "); scanf_s("%d", &width); printf("Высота:> "); scanf_s("%d", &height); system("cls"); } while ( height <= 0 || width <= 0); a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; } t = 1; break; } case 2: { if ( t > 0 ) { do { fflush(stdin); printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n"); scanf_s("%d", &numb2); system("cls"); } while ( numb2 != 1 && numb2 != 2 ); switch (numb2) { case 1: { printf("Заполните массив:\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("Введите элемент %d-ой строчки %d-ого столбца: ", i + 1, j + 1); scanf_s("%d", &a[i][j]); } system("cls"); } break; } case 2: { printf("Массив заполнен рандомно"); getchar(); getchar(); system("cls"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { a[i][j] = rand() % 50 - 25; } } break; } } t = 2; } else { printf("Задайте размерность массива\n"); getchar(); getchar(); system("cls"); } break; } case 3: { if ( t == 2 ) { printf("Вот сам массив:\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); getchar(); system("cls"); break; } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); break; } break; } case 4: { if ( t == 2 ) { int * x = NULL; for( int i = 0; i < height; ++ i ) { for( int j = i + 1; j < height; ++ j ) { if( a[i][0] > a[j][0] ) { x = a[i]; a[i] = a[j]; a[j] = x; } } } printf("Массив обработан\n"); getchar(); getchar(); system("cls"); t = 4; } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); } break; } case 5: { if ( t == 4 ) { printf("Вот обработанный массив\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); getchar(); system("cls"); } else { printf("Сделаете предыдущие шаги"); getchar(); getchar(); system("cls"); } break; } } } while ( numb != 0 ); for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; _CrtDumpMemoryLeaks(); return 0; }
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> #define _CRTDBG_MAP_ALLOC #include <crtdbg.h> void case1(int **a,int height,int width); void case1(int **a,int height,int width) { for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; height = 0; width = 0; do { fflush(stdin); printf("Введите размерность массива: "); printf("\nШирина:> "); scanf_s("%d", &width); printf("Высота:> "); scanf_s("%d", &height); system("cls"); } while ( height <= 0 || width <= 0); a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; } } void case2(int **a,int height,int width,int numb2); void case2(int **a,int height,int width, int numb2) { system("cls"); do { fflush(stdin); printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n"); scanf_s("%d", &numb2); system("cls"); } while ( numb2 != 1 && numb2 != 2 ); switch (numb2) { case 1: { printf("Заполните массив:\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("Введите элемент %d-ой строчки %d-ого столбца: ", i + 1, j + 1); scanf_s("%d", &a[i][j]); } system("cls"); } break; } case 2: { printf("Массив заполнен рандомно"); getchar(); system("cls"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { a[i][j] = rand() % 50 - 25; } } break; } } } void case3(int **a,int height,int width); void case3(int **a,int height,int width) { system("cls"); printf("Вот сам массив:\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); system("cls"); } void case4(int **a,int height,int width, int *x); void case4(int **a,int height,int width, int *x) { system("cls"); for( int i = 0; i < height; ++ i ) { for( int j = i + 1; j < height; ++ j ) { if( a[i][0] > a[j][0] ) { x = a[i]; a[i] = a[j]; a[j] = x; } } } printf("Массив обработан\n"); getchar(); system("cls"); } void case5(int **a,int height,int width); void case5(int **a,int height,int width) { system("cls"); printf("Вот обработанный массив\n"); for ( int i = 0; i < height; i ++ ) { for( int j = 0; j < width; j ++ ) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); system("cls"); } void del(int **a,int height); void del(int **a,int height) { for ( int i = 0; i < height; i ++ ) { delete [] a[i]; } delete [] a; } int print( int n ); int print( int n ) { if ( 1 == n ) { fflush(stdin); printf("1. Задать размерность двухмерного массива\n"); printf("2. Выбор заполнения массива\n"); printf("3. Вывод необработанного массива\n"); printf("4. Обработка массива\n"); printf("5. Вывод обработанного массива на экран\n"); printf("0. Выход и программы\n"); } int m; scanf_s("%d", &m); getchar(); return m; } int main() { setlocale(0, ""); srand(time(NULL)); int height = 0; int width = 0; int numb2 = 0; int t = 0; int sort; int **a = NULL; int *x = NULL; a = new int * [height]; for ( int i = 0; i < height; i ++ ) { a[i] = new int [width]; } printf("Программа сортировки строк двухмерного динамического массива по возрастанию\n\n"); int menu = 0; do { menu = print(1); switch(menu) { case 1: { case1(a,height,width); t = 1; break; } case 2: { if ( t > 0 ) { case2(a,height,width, numb2); t = 2; } else { printf("Задайте размерность массива\n"); getchar(); getchar(); system("cls"); } break; } case 3: { if ( t == 2 ) { case3(a,height,width); t = 3; break; } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); break; } break; } case 4: { if ( t == 3 ) { case4(a, height, width, x); t = 4; } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); } break; } case 5: { if ( t == 4 ) { case5(a,height,width); } else { printf("Сделаете предыдущие шаги"); getchar(); getchar(); system("cls"); } break; } } } while ( menu != 0 ); del(a,height); _CrtDumpMemoryLeaks(); return 0; }
Решение задачи: «Сортировка строк двухмерного динамического массива по возрастанию»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <locale.h> #include <time.h> void init() { setlocale(0, ""); srand(time(NULL)); printf( "Программа сортировки строк двухмерного динамического массива по возрастанию\n\n"); } int **alloc_array(int n_row, int n_col) { int **a =(int**)malloc (n_row*sizeof(int*)); for (int i = 0; i < n_row; i++) { a[i] = (int*)malloc(n_col*sizeof(int)); } return a; } // int ***a, чтобы вернуть из функции адрес массива void case1(int ***a, int *n_col, int *n_row) { do { //1\fflush(stdin); printf("Введите размерность массива: "); printf("\nШирина:> "); scanf("%d", n_col); printf("Высота:> "); scanf("%d", n_row); //system("cls"); } while (*n_row <= 0 || *n_col <= 0); //здесь отдаем адрес наружу *a = alloc_array(*n_row, *n_col); } void case2(int **a, int n_row, int n_col) { int vybor; if (a != NULL) { do { //fflush(stdin); printf("Выберите:\n 1. С клавиатуры\n 2. Рандомно\n"); scanf("%d", &vybor); system("cls"); } while (vybor != 1 && vybor != 2); switch (vybor) { case 1: { printf("Заполните массив:\n"); for (int i = 0; i < n_row; i++) { for (int j = 0; j < n_col; j++) { printf("Введите элемент %d-ой строчки %d-ого столбца: ", i + 1, j + 1); scanf("%d", &a[i][j]); } system("cls"); } break; } case 2: { printf("Массив заполнен случайными числами"); getchar(); getchar(); system("cls"); for (int i = 0; i < n_row; i++) { for (int j = 0; j < n_col; j++) { a[i][j] = rand() % 50 - 25; } } break; } } } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); } } void case3(int **a, int n_row, int n_col) { if (a != NULL) { printf("Вот сам массив:\n"); for (int i = 0; i < n_row; i++) { for (int j = 0; j < n_col; j++) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); getchar(); system("cls"); } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); } } void case4(int **a, int n_row, int n_col) { if (a != NULL) { int x = 0; for (int i = 0; i < n_row; ++i) { for (int j = 0; j < n_col; ++j) { { // тут разобраться в вашем коде a[i][i] = 0; } } } printf("Массив обработан\n"); getchar(); getchar(); //system("cls"); } else { printf("Сделайте предыдущий шаг"); getchar(); getchar(); system("cls"); } } void case5(int **a, int n_row, int n_col) { if (a != NULL) { printf("Вот обработанный массив\n"); for (int i = 0; i < n_row; i++) { for (int j = 0; j < n_col; j++) { printf("%4d", a[i][j]); } printf("\n"); } getchar(); getchar(); system("cls"); } else { printf("Сделаете предыдущие шаги"); getchar(); getchar(); system("cls"); } } void destroy(int **a, int n_row) { for (int i = 0; i < n_row; i++) { free(a[i]); } free(a); } void menu() { int n_row = 0; int n_col = 0; int **a = NULL; init(); int vybor = 0; do { //fflush(stdin); printf("1. Задать размерность двухмерного массива\n"); printf("2. Выбор заполнения массива\n"); printf("3. Вывод необработанного массива\n"); printf("4. Обработка массива\n"); printf("5. Вывод обработанного массива на экран\n"); printf("0. Выход и программы\n"); scanf("%d", &vybor); system("cls"); switch (vybor) { case 1: { case1(&a, &n_row, &n_col); break; } case 2: { case2(a, n_row, n_col); break; } case 3: { case3(a, n_row, n_col); break; } case 4: { case4(a, n_row, n_col); break; } case 5: { case5(a, n_row, n_col); break; } } } while (vybor != 0); destroy(a, n_row); } int main() { menu(); return 0; }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д