Задать вопрос
@KeksikProg

Как не повторять весь код, если после условного оператора меняется сравнение?

Преподаватель попросил изменить код в курсовом, чтобы после условного оператора не повторять весь код заново и предоставил вот такой пример:

... 
if(b) ptr_array[13][j] > ptr_array[13][j + 1]
else ptr_array[13][j] < ptr_array[13][j + 1]
...

Я его не понимаю, не понимаю можно ли так вообще сделать и как это реализовать. Вот мой код нынешний, который меня попросили поменять:

void sort_2d_array(int ptr_array[12][15]) {

int tmp;

int choose;


printf("Сортировка:\n1. По возрастанию\n2. По убыванию\n");

scanf_s("%d", &choose);


if (choose == 1) {

for (int i = 0; i < 15; i++) {

for (int j = 0; j < 12; j++) {

if (ptr_array[13][j] > ptr_array[13][j + 1]) {

for (int k = 0; k < 15; k++) {

tmp = ptr_array[k][j];

ptr_array[k][j] = ptr_array[k][j + 1];

ptr_array[k][j + 1] = tmp;

}

}

}

}

}

if (choose == 2) {

for (int i = 0; i < 15; i++) {

for (int j = 0; j < 11; j++) {

if (ptr_array[13][j] < ptr_array[13][j + 1]) {

for (int k = 0; k < 15; k++) {

tmp = ptr_array[k][j];

ptr_array[k][j] = ptr_array[k][j + 1];

ptr_array[k][j + 1] = tmp;

}

}

}

}

}

}
  • Вопрос задан
  • 97 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
Alexandroppolus
@Alexandroppolus
кодир
втупую:
if ((choose == 1 && ptr_array[13][j] > ptr_array[13][j + 1]) || (choose == 2 && ptr_array[13][j] < ptr_array[13][j + 1])) {


ну а по-красоте это делается через указатель на функцию сравнения, как во всех библиотечных сортировках
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019
Bigdata Engineer
Множитель (-1) или (+1) слева и справа от знака равно может перевернуть смысл сравнения.

int m = choose == 1 ? 1 : -1;
return m * ptr_array[13][j] > m * ptr_array[13][j + 1]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы