Practice 8: %S コマンドの実装(整列)¶
最後はソートです.まず解説を読んでみてください.
解答例(前半・後半)を用意しました.解答例を見るのは,慎重に.
練習8-1 配列データの交換¶
ソートにおいて,配列中の2つのデータを交換する必要がある.例えば,2つのint型のポインタを引数に取り,両ポインタが指す2要素を入れ替える関数swap()は,以下のように記述できる.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h>
void swap(int *a, int *b)
{ // S0
int tmp;
tmp = *a; // S1
*a = *b; // S2
*b = tmp; // S3
}
int main()
{
int data[] = {1, 2};
printf("Before: data[0] = %d, data[1] = %d\n", data[0], data[1]);
swap(&data[0], &data[1]);
printf("After: data[0] = %d, data[1] = %d\n", data[0], data[1]);
}
|
実行結果:
Before: data[0] = 1, data[1] = 2
After: data[0] = 2, data[1] = 1
このswap()関数を,以下のように書くと期待通りの動作をしない.それはなぜか?図解して説明せよ.(参考:関数とポインタ)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <stdio.h>
void swap(int a, int b)
{ // F0
int tmp;
tmp = a; // F1
a = b; // F2
b = tmp; // F3
}
int main()
{
int data[] = {1, 2};
printf("Before: data[0] = %d, data[1] = %d\n", data[0], data[1]);
swap(data[0], data[1]);
printf("After: data[0] = %d, data[1] = %d\n", data[0], data[1]);
}
|
実行結果:
Before: data[0] = 1, data[1] = 2
After: data[0] = 1, data[1] = 2
練習8-2 簡単なソートの実装¶
数値型や文字列型のデータに対して,簡単なソートを実行するプログラムを作り,ソートの基本処理を理解せよ.
練習8-3 %Sコマンドの実装¶
これまで仮実装していたcmd_sort()を完成させよ.
練習8-4 %S のテスト¶
ソート結果が正しいことを確認するためのテストを実施したい.自分の作成したコマンドがsample.csvを正しくソートできているか確認する方法を示して,結果を確認せよ.