Сортировка строк двухмерного динамического массива по возрастанию - 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;
}