掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板1

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧

No.7687

最大 、 最小
投稿者---れんたろー(2007/07/19 13:23:00)


最大値とその次に大きい数、最小値とその次に小さい数を表示するプログラムを作ったのですが、二番めに小さい数の表示がうまくいきません。

#include<stdio.h>
main(){
  int s,d,m1,m2,m3,m4;

  for(s=0;printf("New Datum ? "),scanf("%d",&d)!=EOF;){
    if(s==0){m1=d;m2=d;m3=d;m4=d;s=1;}

    else if(m1==m2)
      if(m1>d)m2=d;
      else m1=d;

    else if(m3==m4)
      if(m3>d)m4=d;
      else m3=d;

    else if(d>m1){m2=m1;m1=d;}
    else if( (m1>d) && (d>m2) )m2=d;
    else if( (m3>d) && (d>m4) )m4=d;
    else if(m4>d){m3=m4;m4=d;}
  }
  printf("\n");
  printf("m1 > %d\n",m1);
  printf("m2 > %d\n",m2);
  printf("m3 > %d\n",m3);
  printf("m4 > %d\n",m4);

}



ここからどうしていいのかわかりません。
もしよろしければ御指導お願いします。。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:最大 、 最小 7689 επιστημη 2007/07/19 15:54:30
<子記事> Re:最大 、 最小 7691 かずま 2007/07/19 20:18:01


No.7689

Re:最大 、 最小
投稿者---επιστημη(2007/07/19 15:54:30)
http://blogs.wankuma.com/episteme/


要するに m1, m2, m3, m4 を小さい順なり大きい順に並び替えるだけですよね?

#define change(X,Y) if ( X < Y ) { int t = X; X = Y; Y = t; }

int main() {
 ...
 change(m1,m2);
 change(m1,m3);
 change(m1,m4);
 change(m2,m3);
 change(m2,m4);
 change(m3,m4);
 ...
}

これでよくないですか?



この投稿にコメントする

削除パスワード

No.7691

Re:最大 、 最小
投稿者---かずま(2007/07/19 20:18:01)


(m1, m2) と (m3, m4) は独立だから、全部を else if でつなぐのは
おかしいと思います。
#include <stdio.h>

int main(void)
{
    int s, d, m1, m2, m3, m4;

    for (s = 0; printf("New Datum ? "), scanf("%d", &d) == 1;) {
        if (s == 0) { m1 = d; m2 = d; m3 = d; m4 = d; s = 1; }
        else {
            if (m1 == m2)
                if (m1 > d) m2 = d;
                else m1 = d;
            if (m3 == m4)
                if (m3 > d) m4 = d;
                else m3 = d;
            if (d > m1) { m2 = m1; m1 = d; }
            else if ((m1 > d) && (d > m2)) m2 = d;
            if ((m3 > d) && (d > m4)) m4 = d;
            else if (m4 > d) { m3 = m4; m4 = d; }
        }
    }
    printf("\n" "m1 > %d\n" "m2 > %d\n" "m3 > %d\n" "m4 > %d\n",
            m1, m2, m3, m4);
    return 0;
}



この投稿にコメントする

削除パスワード

No.7694

Re:最大 、 最小
投稿者---れんたろー(2007/07/20 01:10:42)


あ、そういえば…。

助かりました、ありがとうございます^^




この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    記事検索    ログ    タグ一覧





掲示板提供:(有)リアル・インテグリティ