Сортировка строк двухмерного динамического массива по возрастанию - 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;
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д