質問するログイン新規登録

質問編集履歴

1

ソースコードを見やすくしました

2020/06/01 12:40

投稿

rft3
rft3

スコア7

title CHANGED
File without changes
body CHANGED
@@ -1,7 +1,7 @@
1
1
  main関数の中で第二コマンドライン引数を指定し、0を入力したときは昇順、1を入力したときは降順でファイル内の数字を並べたいです。
2
2
  しかしどのようなコードを書けば指定できるのかが分かりません。ご教授お願いいたします。
3
3
 
4
-
4
+ ```ここに言語を入力
5
5
  #include <stdio.h>
6
6
  #include <stdlib.h>
7
7
  #include "sort_array.h"
@@ -26,23 +26,39 @@
26
26
  fclose(fp);
27
27
  }
28
28
 
29
- int add(int a, int b){ return a+b; }
30
- int sub(int a, int b){ return a-b; }
31
-
32
29
  int main(int argc, char* argv[]){
33
30
  int N = atoi(argv[1]);
34
-
35
- int a = atoi(argv[1]), b = atoi(argv[2]);
31
+ // ここに第2コマンドライン引数で,0:昇順と1:降順を指定したい
36
- int (*funcp[2])(int, int);
37
- funcp[0] = add; funcp[1] = sub;
38
- for(int i = 0; i < 2; i++) printf("%d¥n", funcp[i](a, b));
39
-
40
32
 
33
+ // ここに関数ポインタの配列を定義したい
34
+
41
35
  int *scores = (int *) malloc(N*sizeof(int));
42
36
  read_data(argv[3], scores, N);
43
37
 
44
-
45
- insert_sort(scores, N, asc);
38
+ // ここにinsert_sort関数の第3引数に比較関数へのポインタを指定したい
46
39
 
47
40
  write_result(argv[4], scores, N);
48
- }
41
+ }
42
+
43
+
44
+ ```sort_array.hの中身
45
+ ```ここに言語を入力
46
+ int asc(void *p, void *q){ return *(int *)p - *(int *)q; }
47
+ int desc(void *p, void *q){ return *(int *)q - *(int *)p; }
48
+
49
+ void insert_sort(int *arr, int n, int (*cmp)(void*, void*)){
50
+ int i, j, temp;
51
+ for(i = 1; i < n; i++){
52
+ temp = arr[i];
53
+ for(j = i; j > 0; j--){
54
+ if(cmp(&arr[j-1], &temp) > 0) arr[j] = arr[j-1];
55
+ else break;
56
+ }
57
+ arr[j] = temp;
58
+ }
59
+ }
60
+ ```
61
+
62
+
63
+ ```
64
+ ```