C言語 並び替え

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
崖っぷち

C言語 並び替え

#1

投稿記事 by 崖っぷち » 6年前

5つの数値を入力(繰り返し入力)し、小さい順に表示しなさい。入力したすべての値が0の場合に処理を中止します。
とゆう問題ができません><
どなたかご協力お願いします。

初級者
記事: 200
登録日時: 9年前

Re: C言語 並び替え

#2

投稿記事 by 初級者 » 6年前

できません、というのは、
コードが全く書けないと
いうことでしょうか。

それとも、書きかけの
コードはある、ということでしょうか。

崖っぷち

Re: C言語 並び替え

#3

投稿記事 by 崖っぷち » 6年前

返信ありがとうございます><
以下のプログラムを一応書いたのですが繰り返しになりません><
#include <stdio.h>


int main(void){
int i, j, n[5], min, temp;

for(i=0; i<5; i++){
printf("%2d番目の数値?", i+1);
while(scanf("%d",&n)==n)
}
for(i=0; i<5; i++){
min = i;
for(j = i + 1; j < 5; j++){
if(n[min] > n[j]) min = j;
}
temp = n[min];
n[min] = n;
n = temp;
}

printf("並べ替え後は\n");
for(j=0; j<5; j++){
printf("%2d番目\t%d\n", j+1, n[j]);
}


return 0;
}

初級者
記事: 200
登録日時: 9年前

Re: C言語 並び替え

#4

投稿記事 by 初級者 » 6年前

データ入力時の
while文で何をしようと
しているかが
よくわかりません。

for文でもって、
繰り返しの目的は
達成できているの
ではないでしょうか。
最後に編集したユーザー 初級者 on 2014年2月01日(土) 12:21 [ 編集 1 回目 ]

崖っぷち

Re: C言語 並び替え

#5

投稿記事 by 崖っぷち » 6年前

すみません;;
ミスです。
書き直しました。
#include <stdio.h>


int main(void){
int i, j, n[5], min, temp;

for(i=0; i<5; i++){
printf("%2d番目の数値?", i+1);
scanf("%d",&n);
}
for(i=0; i<5; i++){
min = i;
for(j = i + 1; j < 5; j++){
if(n[min] > n[j]) min = j;
}
temp = n[min];
n[min] = n;
n = temp;
}

printf("並べ替え後は\n");
for(j=0; j<5; j++){
printf("%2d番目\t%d\n", j+1, n[j]);
}


return 0;
}

崖っぷち

Re: C言語 並び替え

#6

投稿記事 by 崖っぷち » 6年前

めんどくさいやり方なら一応できたんですけど・・・これをさらにコンパクトにしたくて・・・
#include<stdio.h>

void sori(int &x,int &y)
{ int temp;
if(x>y) {
temp=x; x=y;
y=temp;
}
return;
}
int main(void)
{ int a,b,c,d,e;
while(scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e)==5) {
if(a==0&&b==0&&c==0&&d==0&&e==0) break;
sori(a,b);
sori(a,c);
sori(a,d);
sori(a,e);
sori(b,c);
sori(b,d);
sori(b,e);
sori(c,d);
sori(c,e);
sori(d,e);
printf("小さい順に→%d,%d,%d,%d,%d",a,b,c,d,e);
}
return(0);
}

初級者
記事: 200
登録日時: 9年前

Re: C言語 並び替え

#7

投稿記事 by 初級者 » 6年前

12時21分のコードの方が
マシな気がします。ちゃんと動くのならば。

最後のコードは、ダメダメです。
そもそも、ビルドできますか?
データが5個なら、sort()の呼び出しが15行
10個なら55行。20個なら210行。
そんなにズラ〜っと書くのは
ナンセンスです。
12時21分の方がマシと書いたのは、
少なくともループで制御している分だけ
マシ、という意味です。

初級者
記事: 200
登録日時: 9年前

Re: C言語 並び替え

#8

投稿記事 by 初級者 » 6年前

12時21分のコードに
5個のデータが全部0ならば、プログラムを終了する
というロジックを加えることはむずかしいですか?

アバター
みけCAT
記事: 6285
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: C言語 並び替え

#9

投稿記事 by みけCAT » 6年前

コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6285
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: C言語 並び替え

#10

投稿記事 by みけCAT » 6年前

崖っぷち さんが書きました:めんどくさいやり方なら一応できたんですけど・・・これをさらにコンパクトにしたくて・・・
#include<stdio.h>

void sori(int &x,int &y)
{ int temp;
if(x>y) {
temp=x; x=y;
y=temp;
}
return;
}
int main(void)
{ int a,b,c,d,e;
while(scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e)==5) {
if(a==0&&b==0&&c==0&&d==0&&e==0) break;
sori(a,b);
sori(a,c);
sori(a,d);
sori(a,e);
sori(b,c);
sori(b,d);
sori(b,e);
sori(c,d);
sori(c,e);
sori(d,e);
printf("小さい順に→%d,%d,%d,%d,%d",a,b,c,d,e);
}
return(0);
}
これはC言語ではなくC++ですね。タイトルに合っていません。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6285
登録日時: 9年前
住所: 千葉県
連絡を取る:

Re: C言語 並び替え

#11

投稿記事 by みけCAT » 6年前

ヒントを与えておきます。
[search=google]qsort[/search]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

崖っぷち

Re: C言語 並び替え

#12

投稿記事 by 崖っぷち » 6年前

沢山のご指摘ありがとうございます。
C言語初めてまだ3ヶ月とゆう初心者とも呼べないノミみたいなレベルなのでこんな質問したことをお許し下さい。

閉鎖

“C言語何でも質問掲示板” へ戻る