列挙体およびバブルソートに関する質問
Posted: 2020年10月16日(金) 17:11
曜日、時間を列挙体を使ってランダムに表示、その後曜日は日→月→・・・→土の順に、時間は0→12にバブルソートするプログラムを書きたいです。
試しに下のように書いてみたところ、列挙体までは上手く表示できるのですが、バブルソートでつまずきます。
[cord]
int main(void)
{
struct WEEK week[7];
int i, j, tmp, changeday, a = sizeof(week[7].day) / sizeof(week[0].day);
int n,m,temp, changetime, b = sizeof(week[12].time) / sizeof(week[0].time);
srand((unsigned int)time(NULL));
for (i = 0; i < 7; i++){
week.day = rand() % 7;
week.time = rand() % 12;
switch (week.day) {
case SUN:
printf("SUN");
break;
case MON:
printf("MON");
break;
case TUE:
printf("TUE");
break;
case WED:
printf("WED");
break;
case THU:
printf("THU");
break;
case FRI:
printf("FRI");
break;
case SAT:
printf("SAT");
break;
}
printf("%2d ", week.time);
}
printf("\n\n");
printf("曜日を、日月火水木金土の順に並べ替えます。\n");
//バブルソート
for (i = 0; i < a - 1; i++)
{
changeday = 0;
for (j = a-1; j > i; j--)
{
if (week[j - 1].day > week[j].day)
{
// 入れ替える
tmp = week[j - 1].day;
week[j - 1].day = week[j].day;
week[j].day = tmp;
changeday = 1;
}
}
if (changeday == 0) break;
printf("\n");
}
printf("入れ替えました。\n");
for (i = 0; i < a; i++)
printf("%d ", week.day);
printf("\n");
printf("\n次に時間を入れ替えます。\n");
for (j = b - 1; j > i; j--) {
if(week[j - 1].time > week[j].time) {
//入れ替え
temp = week[j].time;
week[j].time = week[j - 1].time;
week[j - 1].time = temp;
}
printf("\n");
}
printf("入れ替えました。\n");
for (i = 0; i < b; i++)
printf("%d\n", week.time);
return 0;
}
[/cord]
実行すると、
曜日を入れ替えました。
3
といったように、数字1つのみが表示されます。
上記のソースの変数名などは試しで書いているので、適当です、ごめんなさい。
何が違うのかがいまいちよくわかっていないので、どこが違って、どう直せば良いのか知りたいです。
プログラム初心者でつい最近始めたばかりなので、丁寧に教えていただけると非常にありがたいです。
よろしくお願いします。
試しに下のように書いてみたところ、列挙体までは上手く表示できるのですが、バブルソートでつまずきます。
[cord]
int main(void)
{
struct WEEK week[7];
int i, j, tmp, changeday, a = sizeof(week[7].day) / sizeof(week[0].day);
int n,m,temp, changetime, b = sizeof(week[12].time) / sizeof(week[0].time);
srand((unsigned int)time(NULL));
for (i = 0; i < 7; i++){
week.day = rand() % 7;
week.time = rand() % 12;
switch (week.day) {
case SUN:
printf("SUN");
break;
case MON:
printf("MON");
break;
case TUE:
printf("TUE");
break;
case WED:
printf("WED");
break;
case THU:
printf("THU");
break;
case FRI:
printf("FRI");
break;
case SAT:
printf("SAT");
break;
}
printf("%2d ", week.time);
}
printf("\n\n");
printf("曜日を、日月火水木金土の順に並べ替えます。\n");
//バブルソート
for (i = 0; i < a - 1; i++)
{
changeday = 0;
for (j = a-1; j > i; j--)
{
if (week[j - 1].day > week[j].day)
{
// 入れ替える
tmp = week[j - 1].day;
week[j - 1].day = week[j].day;
week[j].day = tmp;
changeday = 1;
}
}
if (changeday == 0) break;
printf("\n");
}
printf("入れ替えました。\n");
for (i = 0; i < a; i++)
printf("%d ", week.day);
printf("\n");
printf("\n次に時間を入れ替えます。\n");
for (j = b - 1; j > i; j--) {
if(week[j - 1].time > week[j].time) {
//入れ替え
temp = week[j].time;
week[j].time = week[j - 1].time;
week[j - 1].time = temp;
}
printf("\n");
}
printf("入れ替えました。\n");
for (i = 0; i < b; i++)
printf("%d\n", week.time);
return 0;
}
[/cord]
実行すると、
曜日を入れ替えました。
3
といったように、数字1つのみが表示されます。
上記のソースの変数名などは試しで書いているので、適当です、ごめんなさい。
何が違うのかがいまいちよくわかっていないので、どこが違って、どう直せば良いのか知りたいです。
プログラム初心者でつい最近始めたばかりなので、丁寧に教えていただけると非常にありがたいです。
よろしくお願いします。