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

質問編集履歴

1

補足

2021/06/17 08:34

投稿

cat_is_freedom
cat_is_freedom

スコア6

title CHANGED
@@ -1,1 +1,1 @@
1
- 構造体 ソート 比較
1
+ 2つの構造体配列を比較しソート
body CHANGED
@@ -15,12 +15,12 @@
15
15
  typedef struct person09{
16
16
  char name[NAME_MAX];
17
17
  signed int profit;
18
- }person09;
18
+ }person09_t;
19
19
 
20
20
  typedef struct person10{
21
21
  char name[NAME_MAX];
22
22
  signed int profit;
23
- }person10;
23
+ }person10_t;
24
24
 
25
25
  void sort(int no, char *result[]){
26
26
  int i;
@@ -45,53 +45,27 @@
45
45
  int no;
46
46
  int flag[5] = {0};
47
47
  char *result_array[8];
48
+ //char profit_array[8] = {0};
48
49
  char *area;
49
50
  int profit_d[8] = {0};
50
51
 
52
+ //構造体配列
53
+ person09_t ary_09[6] = {{"アトウ",270},{"カスガ",325},{"タケモト",412},{"タナカ",333},{"ヤマシタ",277},{"ヨシオカ",192}};
54
+ person10_t ary_10[5] = {{"カスガ",357},{"スズキ",210},{"タケモト",445},{"ヤマシタ",233},{"ヨシダ",145}};
51
55
 
52
- //構造体宣言
53
- person09 data09[6];
54
- person10 data10[5];
55
56
 
56
57
 
57
- //構造体初期化
58
- data09[0].profit = 270;
59
- data09[1].profit = 325;
60
- data09[2].profit = 412;
61
- data09[3].profit = 333;
62
- data09[4].profit = 277;
63
- data09[5].profit = 192;
64
-
65
- strcpy(data09[0].name, "アトウ");
66
- strcpy(data09[1].name, "カスガ");
67
- strcpy(data09[2].name, "タケモト");
68
- strcpy(data09[3].name, "タナカ");
69
- strcpy(data09[4].name, "ヤマシタ");
70
- strcpy(data09[5].name, "ヨシオカ");
71
-
72
- data10[0].profit = 357;
73
- data10[1].profit = 210;
74
- data10[2].profit = 445;
75
- data10[3].profit = 233;
76
- data10[4].profit = 145;
77
-
78
- strcpy(data10[0].name, "カスガ");
79
- strcpy(data10[1].name, "スズキ");
80
- strcpy(data10[2].name, "タケモト");
81
- strcpy(data10[3].name, "ヤマシタ");
82
- strcpy(data10[4].name, "ヨシダ");
83
-
84
58
  //元の数字を表示
85
59
  for( i=0 ; i < 6; i++){
86
- printf("%s ",data09[i].name);
60
+ printf("%s ",ary_09[i].name);
87
- printf("%d\n",data09[i].profit);
61
+ printf("%d\n",ary_09[i].profit);
88
62
  }
89
63
 
90
64
 
91
65
  printf("\n");
92
66
  for( i=0 ; i < 5; i++){
93
- printf("%s ",data10[i].name);
67
+ printf("%s ",ary_10[i].name);
94
- printf("%d\n",data10[i].profit);
68
+ printf("%d\n",ary_10[i].profit);
95
69
  }
96
70
 
97
71
  printf("\n");
@@ -106,12 +80,12 @@
106
80
  for( j = 0; j < 5; j++){
107
81
 
108
82
  //売上比較
109
- if(strcmp( data09[i].name, data10[j].name) == 0 ){
83
+ if(strcmp( ary_09[i].name, ary_10[j].name) == 0 ){
110
- printf("%s ",data09[i].name);
84
+ printf("%s ",ary_09[i].name);
111
- profit_d[i] = (data10[j].profit) - (data09[i].profit);
85
+ profit_d[i] = (ary_10[j].profit) - (ary_09[i].profit);
112
86
  printf("%d\n",profit_d[i] );
113
87
  flag[j] = CHECKED;
114
- result_array[r] = data09[i].name;
88
+ result_array[r] = ary_09[i].name;
115
89
  r++;
116
90
  break;
117
91
  }else{
@@ -120,8 +94,8 @@
120
94
 
121
95
  //退社判定
122
96
  if( cnt == RETIRE ){
123
- printf("%s 退社\n",data09[i].name);
97
+ printf("%s 退社\n",ary_09[i].name);
124
- result_array[r] = data09[i].name;
98
+ result_array[r] = ary_09[i].name;
125
99
  r++;
126
100
  break;
127
101
  }
@@ -131,13 +105,12 @@
131
105
  //入社判定
132
106
  for( j = 0; j < 5; j++){
133
107
  if( flag[j] != CHECKED ){
134
- printf("%s 入社\n",data10[j].name);
108
+ printf("%s 入社\n",ary_10[j].name);
135
- result_array[r] = data10[j].name;
109
+ result_array[r] = ary_10[j].name;
136
110
  r++;
137
111
  }
138
112
  }
139
113
 
140
-
141
114
  //並び替え処理
142
115
  printf("\n");
143
116
  puts("---------------------------------------------");
@@ -151,10 +124,13 @@
151
124
  free(area);
152
125
  return 0;
153
126
  }
127
+
128
+
129
+
130
+
154
131
  ```
155
132
 
156
133
  昨年と今年の売り上げを比較し、昨年いない人は「入社」、今年いない人は「退社」というプログラムを書いています。
157
134
 
158
- 名前を50音順に並び替え、売り上げ、入社、退社も同様に並び替えたいですが、良い方法が思いつきません
135
+ 2つの構造体配列を比較し名前を50音順に並び替え、売り上げ、入社、退社 を名前と紐づけたいです。
159
-
160
136
  何か良い方法があったら教えて頂きたいです。