#include <stdio.h>
#define N 20
char f_order(void);
int input(int n, int *data);
void output(int n, int *data);
void mysort1(int n, int *data);
void mysort2(int n, int *data);
int main(void) {
char order[2];
int n;
int data[N];
order[0] = f_order();
if (order[0] == 'E')
return 0;
n = input(N, data);
if (order[0] == 'A') {
mysort1(n, data);
}
if (order[0] == 'D') {
mysort2(n, data);
}
output(n, data);
}
char f_order(void) {
char order[2];
printf("整数データ(20件)を並び替えます。\nA,D,Eいずれかを入力してください。\n昇順:A 降順:D 処理終了:E\n");
for (;;) {
scanf("%s", order);
if ((order[0] == 'A' || order[0] == 'D' || order[0] == 'E')
&& order[1] == '\0') {
return order[0];
} else {
printf("エラー、再入力\n");
}
}
}
int input(int n, int *data) {
int i, *p, d, x;
p = data;
printf("-999〜999のデータを入力してください。\n");
for (i = 0; i < n; i++) {
printf("%d件目>", i + 1);
x = scanf("%d", &d);
if (x == EOF)
return i;
if (d < -999 || d > 999) {
printf("-999〜999で");
i--;
} else {
*(p + i) = d;
}
}
return i;
}
void mysort1(int n, int *data) {
int i, j, tmp, *p;
p = data;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (*(p + i) > *(p + j)) {
tmp = *(p + i);
*(p + i) = *(p + j);
*(p + j) = tmp;
}
}
}
}
void mysort2(int n, int *data) {
int i, j, tmp, *p;
p = data;
for (i = 0; i < n - 1; i++) {
for (j = i + 1; j < n; j++) {
if (*(p + i) < *(p + j)) {
tmp = *(p + i);
*(p + i) = *(p + j);
*(p + j) = tmp;
}
}
}
}
void output(int n, int *data) {
int l, i;
for (;;) {
printf("1行に出力するデータの個数(5〜10)を入力してください。>");
scanf("%d", &l);
printf("%d個で1行", l);
if (l > 10 || l < 5) {
printf("エラー\n");
} else {
break;
}
}
for (i = 0; i < n; i++) {
printf("%4d ", *(data + i));
if ((i + 1) % l == 0) {
printf("\n");
}
}
printf("\n");
}