下記のようなプログラムを、いきなり結果を出すのではなくて
ソートさせたい数字を入力できるようにさせたいのですが…。
できれば、ソート中の途中経過も表示できればいいかなと思います。
よろしくお願いします。
#include <stdio.h>
#define ARRAY_SIZE (8) /* 配列の要素数 */
int main(void)
{
int array[ARRAY_SIZE] = { 7, 14, 33, 10, 2, 19, 37, 20 };
int i, j, h, work;
/* 交換処理の間隔を決めるループ */
for(h=1; h<ARRAY_SIZE; h=h*3+1)
;
for( ;h>0; h/=3) /* hは交換処理の間隔を表す */
{
for(i=h; i<ARRAY_SIZE; ++i) /* iは今回の交換処理で対象となる最後尾の添字 */
{
j = i; /* jは交換対象となる要素の若い方の添字 */
while(j >= h && array[j-h] > array[j])
{
/* 大小関係が逆なら交換処理 */
work = array[j];
array[j] = array[j-h];
array[j-h] = work;
/* 交換処理の間隔分だけ添字を後退させる */
j -= h;
}
}
}
/* 結果表示 */
for(i=0; i<ARRAY_SIZE; ++i)
{
printf( "%2d ", array[i] );
}
printf( "\n" );
return 0;
}
No.1ベストアンサー
- 回答日時:
変数名のつけ方や、コメント文のつけ方、
Webでの表示なのでインデントはしょうがないとしても記述の作法などなど
突っ込みだしたらきりが無いですが、
修正、調整、追加などすべき部分を挙げていきたいと思います。
なお指摘事項は、質問文に記載されているコーディングの
「#include <stdio.h>」を1行目として数え始め、
最後付近の「return 0;」が38行目となっている状態のままでの
行数で数え、追加する場面ではその追加開始位置の行数で答えていきます。
[入力できるようにする件]
10行目:「入力処理」の追加・・・のみ・・・でしょうか。
入力する要素数が、現在の8個固定なら
単純にscanfなりをfor文で回せばよいでしょう。
その際の変数まで考慮するなら9行目にも追加が入りますね。
入力される内容が数字であるか否かとか、
数字であっても桁数はどこまでかなど
入力時の「御約束事」次第で追加されるコーディング量は
かなり変動します。
要素数を可変にするところまで対応するとなると
3行目、7行目、(10)、11、16、32、34行目あたりまで
修正が必要となってくることでしょう。
[途中経過表示の件]
31行目から始まるfor文句を、
表示させたいタイミング(「交換毎」とか「交換間隔毎」とか)に合わせて
16行目のfor文や19行目のwhile文の上なり下なりに移植すれば良いでしょう。
単純に移植すると、いわゆる「拒絶反応」を起こすのが明らかですが、
それが分かるかどうかも期待通りの動きをさせるための課題になるでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# C言語初心者 ポインタについて、お助けください、、 2 2023/03/15 23:50
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 1 2022/10/27 14:21
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- その他(プログラミング・Web制作) listへのappendが出来ない件 1 2022/12/06 21:44
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- JavaScript java keyを配列で表記したい 10 2022/12/01 17:53
- Visual Basic(VBA) 型が一致しませんとエラー 6 2023/07/06 20:14
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
数字以外が入力されたらエラー...
-
*をユーザーが入力した数字の数...
-
Eclipseコンソール表示を、リセ...
-
Userformの入力順序をタブオー...
-
scanfが2回使えない・・・?;
-
C++のcinの動作
-
C言語でつるかめ算をするにはど...
-
MinGWのC言語でCTRL+Zで処理が...
-
cout関数を使っているのですが...
-
プログラミング初心者です。 Py...
-
意味のよく分らないソース
-
getc 等の違い
-
C言語について
-
2進数の1の数を数える問題
-
C言語で入門の本を読んだあとは...
-
double型が正常に認識されてい...
-
scanfの入力をgets関数で読み捨...
-
漢字のソートについて
-
C言語 入力した値から0までの数...
-
WindowsでEOF
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
*をユーザーが入力した数字の数...
-
正負を反転させて出力するプロ...
-
数字以外が入力されたらエラー...
-
プログラミング初心者です。 Py...
-
double型が正常に認識されてい...
-
java初心者です。入力されたの...
-
Eclipseコンソール表示を、リセ...
-
scanfが2回使えない・・・?;
-
C言語scanf_sで何故か2回入力に...
-
if文の条件にscanf関数を使うと…?
-
プログラミングの問題です 「金...
-
Linuxで入力待ちなしkeyread関...
-
ワードで文字を入力する時の変...
-
cout関数を使っているのですが...
-
batプログラム上で文字列を入力...
-
Userformの入力順序をタブオー...
-
scanf が無視されます
-
C言語 逆ピラミッドの作り方
-
gets_sがうまく動かない
-
Excel VBAで、Application.Inpu...
おすすめ情報