新しく質問する

正の正数値を読み込み、0が入力されたらそれらの整数を小さい順に表示するプログラム

役に立った:0件
  • 質問者:newcolleger
  • 投稿日時:2005/06/26 15:11
  • 困り度:困ってます
  • 友達に紹介
  • ブログに書く
  • 教えて!gooお気に入り

ヒントは「まず数字を読み込んだらすでに記憶している最後の要素から先頭に向かって大小の比較を行なう。
読み込んだ数字の方が小さかったら既に記憶されている配列の要素を一つ後ろにずらし(ここがよくわかりません)配列の一つ前の要素と比較を行なう。(何と比較するのかわかりません)
読み込んだ数字の方が大きかったら、終了処理をし、次の数字を読み込む。」

です。
何から手をつけていいのかわからないんで、他のヒントとか頂けたらうれしいです。
よろしくおねがいします。

この質問への回答は締め切られました。
このQ&Aは役に立ちましたか?(役に立った:0件)
  • 参考になった:0件
  • 回答者:xcrOSgS2wY
  • 回答日時:2005/06/27 11:03

「小さい順」を省略して「正の正数値を読み込み、0が入力されたらそれらの整数を*入力された*順に表示するプログラム」なら作成できるのでしょうか。

ひとまず並べ替えは省略して、入力・蓄積・出力だけのプログラムを作成して、ここで添削してもらってはいかがでしょう。

このレベルから作成できないようであれば、ヒントどころか答えを要求しているも同然ですよ。

通報する

この回答へのお礼

#include<stdio.h>
int main(void);
int main(void)
{
int a[10];
int i,j,k;
for(i=0;i<10;i++)
for(j=0;j<10;j++)
a[i]=0;

for(i=0;i<10;i++){
printf("正整数を入力してください。\n");
scanf("%d",&a[i]);
}

for(i=0;i<10;i++){
for(j=i+1;j<10;j++){
if(a[i]>a[j]){
k=a[i];
a[i]=a[j];
a[j]=k;


}
}
}

printf("入力された整数は小さい順に");
for(i=0;i<10;i++){
printf("%d ",a[i]);
}
printf("\n");
return(0);
}

回答してくださった方々どうもありがとうございます。
0が入力されたら終了するプログラムをどこに挿入すればいいのかわかりません。
よろしくおねがいします。

  • 参考になった:0件
  • 回答者:rinkun
  • 回答日時:2005/06/26 20:13

ヒントは「挿入ソート」ですね。

通報する

この回答へのお礼

ありがとうございました。

  • 参考になった:0件

No.2ベストアンサー20pt

配列がint a[100] だとします。

a[0] = 1
a[1] = 3
a[2] = 5

今、上のように値が入っていて、2が入力されたとしたら

a[0] = 1
a[1] = 2
a[2] = 3
a[3] = 5

結果的に、値の3と5を移動させて空いた場所に2を入れる事になりますよね?
この移動させる事をヒントでは「ずらす」と呼んでいます。
値の1はずらしていませんが、これは入力された2と比較してより小さかったから、それ以上ずらす必要がなかったのです。

最初のヒントは、ずらすときは配列の最後の要素からずらしていかないとうまくいかないよと教えてくれています。

通報する

この回答へのお礼

0を入力して終了させる方法わかりました。
ありがとうございました。

  • 参考になった:0件

No.1ベストアンサー10pt

  • 回答者:onakyuu
  • 回答日時:2005/06/26 15:34

以下のようなことをするプログラムを書けばよいでしょう。
例として
6,3,2,5,0
という入力なら
まず6が入力されて

となります。次に3なので
6,3
となりますが、3<6なので3を前にもって行きます
3,6
となります。さらに2が入力されて
3,6,2
ですが、2<6なので
3,2,6
さらに2<3なので
2,3,6
となります。次に5が入力されて
2,3,6,5
ですが、5<6なので
2,3,5,6
となり5>3なのでこのままです。
最後に0が入力されると終了するわけです。

通報する

  
このQ&Aは役に立ちましたか?(役に立った:0件)

このページのトップへ

Facebook公式ページ

公式Twitter