Проблемы с программой для сортировки чисел
Появилась проблема. Мне нужно написать программу, в которой пользователь задает 4 числа, после чего эти 4 числа сортируются. Первыми должны быть написаны не четные по возростанию, а потом четные по уменьшению. Вот так пытался сделать это я
#include <cmath>
#include <iostream>
using namespace std;
int func(int x,int y,int z,int k);
int main(int argc, char *argv[]){
QCoreApplication a(argc, argv);
int key = 1;
while (key == 1){
int a1, b, c, d;
cout << "\n Developer: 123456\n";
cout << "\n Enter a, b, c, d number: \n";
cin >> a1 >> b >> c >> d;
int x,y,z,k;
func(x,y,z,k);
cout << "\nEnter 1 for repeat, else 0";
cin >> key;
}
return a.exec();
}
int func(int x,int y,int z,int k){
int a1,b,c,d;
x=a1%2;
y=b%2;
z=c%2;
k=d%2;
if (x==0){
if (y==0){
if (z==0){
if (k==0){
if (b<c) swap (b,c);
if (a1<b) swap (a1,b);
if (c<d) swap (c,d);
cout << "\n" << a1 << b << c << d;
}
else {
if (b<c) swap (b,c);
if (a1<b) swap (a1,b);
cout << "\n" << d << a1 << b << c;
}
}
else if (k==0){
if (a1<b) swap (a1,b);
if (b<d) swap (b,d);
cout << "\n" << c << a1 << b << d;
}
else {
if (a1<b) swap (a1,b);
if (c>d) swap (c,d);
cout << "\n" << c << d << a1 << b;
}
}
else if (z==0){
if (k==0){
if (a1<c) swap (a1,c);
if (c<d) swap (c,d);
cout << "\n" << b << a1 << c << d;
}
else {
if (a1<c) swap (a1,c);
if (b>d) swap (b,d);
cout << "\n" << b << d << a1 << c;
}
}
else if (k==0){
if (a1<d) swap (a1,d);
if (b>c) swap (b,c);
cout << "\n" << b << c << a1 << d;
}
else {
if (b>c) swap (b,c);
if (c>d) swap (c,d);
cout << "\n" << b << c << d << a1;
}
}
else if (y==0){
if (z==0){
if (k==0){
if (b<c) swap (b,c);
if (c<d) swap (c,d);
cout << "\n" << a1 << b << c << d;
}
else {
if (a1>d) swap (a1,d);
if (b<c) swap (b,c);
cout << "\n" << a1 << d << b << c;
}
}
else if (k==0){
if (a1>c) swap (a1,c);
if (b>d) swap (b,d);
cout << "\n" << a1 << c << b << d;
}
else {
if (a1>c) swap (a1,c);
if (c>d) swap (c,d);
cout << "\n" << a1 << c << d << b;
}
}
else if (z==0){
if (k==0){
if(c<d) swap (c,d);
if (a1>b) swap (a1,b);
cout << "\n" << a1 << b << c << d;
}
else {
if (a1>b) swap (a1,b);
if (b>d) swap (b,d);
cout << "\n" << a1 << b << d << c;
}
}
else if (k==0){
if (a1>b) swap (a1,b);
if (b>c) swap (b,c);
cout << "\n" << a1 << b << c << d;
}
else {
if (a1>b) swap (a1,b);
if (b>c) swap (b,c);
if (c>d) swap (c,d);
cout << "\n" << a1 << b << c << d;
}
}
По итогу в консоли выводится какой-то набор цифр, которые я не задавал переменным.
Спасибо за помощь. Нашел ошибки
Ответы (2 шт):
кажется этот вопрос вы уже задавали или не вы :)
если используется c++, то почему бы не воспользоваться функцией сортировки std::sort?
а в качестве алгоритма сортировки (a, b) выбрать следующий:
если
aчётное, аbнечётное - тоfalseесли
aнечётное, аbчётное - тоtrueесли
aиbимеют одинаковую чётность, то сравнитьa < b
алгоритм задать в функции std::sort через лямбда-функцию
[](const int a, const int b) {
// алгоритм
}
Вроде бы работает нормально, кому нужно, то пользуйтесь
#include <cmath>
#include <iostream>
using namespace std;
int func(int x,int y,int z,int k);
int coef(int &a1,int &b,int &c, int &d);
int main(int argc, char *argv[]){
QCoreApplication a(argc, argv);
int key = 1;
while (key == 1){
cout << "\n Developer: shisui\n";
int x,y,z,k;
func(x,y,z,k);
cout << "\nEnter 1 for repeat, else 0";
cin >> key;
}
return a.exec();
}
int func(int x,int y,int z,int k){
int a1,b,c,d;
coef(a1,b,c,d);
x=a1%2;
y=b%2;
z=c%2;
k=d%2;
if (x==0){
if (y==0){
if (z==0){
if (k==0){
if (a1<b) swap (a1,b);
if (b<c) swap (b,c);
if (c<d) swap (c,d);
cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
}
else {
if (a1<b) swap (a1,b);
if (b<c) swap (b,c);
cout << d << ' ' << a1 << ' ' << b << ' ' << c << endl;
}
}
else if (k==0){
if (a1<b) swap (a1,b);
if (b<d) swap (b,d);
cout << c << ' ' << a1 << ' ' << b << ' ' << d << endl;
}
else {
if (a1<b) swap (a1,b);
if (c>d) swap (c,d);
cout << c << ' ' << d << ' ' << a1 << ' ' << b << endl;
}
}
else if (z==0){
if (k==0){
if (a1<c) swap (a1,c);
if (c<d) swap (c,d);
cout << b << ' ' << a1 << ' ' << c << ' ' << d << endl;
}
else {
if (a1<c) swap (a1,c);
if (b>d) swap (b,d);
cout << b << ' ' << d << ' ' << a1 << ' ' << c << endl;
}
}
else if (k==0){
if (a1<d) swap (a1,d);
if (b>c) swap (b,c);
cout << b << ' ' << c << ' ' << a1 << ' ' << d << endl;
}
else {
if (b>c) swap (b,c);
if (c>d) swap (c,d);
cout << b << ' ' << c << ' ' << d << ' ' << a1 << endl;
}
}
else if (y==0){
if (z==0){
if (k==0){
if (b<c) swap (b,c);
if (c<d) swap (c,d);
cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
}
else {
if (a1>d) swap (a1,d);
if (b<c) swap (b,c);
cout << a1 << ' ' << d << ' ' << b << ' ' << c << endl;
}
}
else if (k==0){
if (a1>c) swap (a1,c);
if (b>d) swap (b,d);
cout << a1 << ' ' << c << ' ' << b << ' ' << d << endl;
}
else {
if (a1>c) swap (a1,c);
if (c>d) swap (c,d);
cout << a1 << ' ' << c << ' ' << d << ' ' << b << endl;
}
}
else if (z==0){
if (k==0){
if(c<d) swap (c,d);
if (a1>b) swap (a1,b);
cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
}
else {
if (a1>b) swap (a1,b);
if (b>d) swap (b,d);
cout << a1 << ' ' << b << ' ' << d << ' ' << c << endl;
}
}
else if (k==0){
if (a1>b) swap (a1,b);
if (b>c) swap (b,c);
cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
}
else {
if (a1>b) swap (a1,b);
if (b>c) swap (b,c);
if (c>d) swap (c,d);
cout << a1 << ' ' << b << ' ' << c << ' ' << d << endl;
}
}
int coef(int &a1,int &b,int &c, int &d){
cout << "\n Enter a, b, c, d number: \n";
cin >> a1 >> b >> c >> d;
}