• ベストアンサー

アルゴリズムのフローチャート(ヒストグラム)

0以上10以下の整数を入力として繰り返し受けつけ、階級の幅が3であるようなヒストグラムを出力する。 終了記号は-1とする。     始     ↓    i←0 ↑→→↓ ↑  X[i]←0 ↑   ↓ ↑←←i≧4  NO ↓     ↓YES     ↓    入力:N     ↓ ↑→→↓YES ↑   ↓ ↑  N=-1 →YES→出力:X→終 ↑   ↓ ↑   ↓NO ↑   ↓ ↑  N←N/3 ↑   ↓ ↑  X[N]←X[N]+1 ↑   ↓ ↑←←↓ 見にくい図で申し訳ありません。 このようなフローチャートがあるのですが、全体の流れの意味がよくわかりません。 特に後半の「N←N/3」以降はどういった意味なのでしょうか? よろしければ解説をお願い致します。

  • tiom
  • お礼率72% (18/25)

質問者が選んだベストアンサー

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

入力Nが0なら,0/3 の結果は0(割切),X[0]に+1する 入力Nが1なら,1/3 の結果は0(切捨),X[0]に+1する 入力Nが2なら,2/3 の結果は0(切捨),X[0]に+1する 入力Nが3なら,3/3 の結果は1(割切),X[1]に+1する 入力Nが4なら,4/3 の結果は1(切捨),X[1]に+1する 入力Nが5なら,5/3 の結果は1(切捨),X[1]に+1する 入力Nが6なら,6/3 の結果は2(割切),X[2]に+1する 入力Nが7なら,7/3 の結果は2(切捨),X[2]に+1する 入力Nが8なら,8/3 の結果は2(切捨),X[2]に+1する 入力Nが9なら,9/3 の結果は3(割切),X[3]に+1する 入力Nが10なら,10/3 の結果は3(切捨),X[3]に+1する ということで,0~10の整数がランダムに繰り返し入力されるたび, その値を0~2,3~5,6~8,9~10という4つの階級(階級の幅は3)にグループ分けして,該当する階級の件数を+1カウントしているわけです。 追伸. 最初に登場するループ中「i←i+1」が書き忘れられています。

tiom
質問者

お礼

回答ありがとうございます。 疑問に思っていた点がすっきり解決できました。 書き忘れのご指摘もありがとうございます。 元のフローチャートを確認してみたところ、確かに書き落としていました。 言われなければ気付かなかったはずなので、本当に助かりました。 ひとつひとつ丁寧な解説をありがとうございました!

その他の回答 (1)

  • auty
  • ベストアンサー率58% (284/486)
回答No.1

・ 0以上10以下の整数を、階級の幅が3でグループ分けすると [0 1 2] [3 4 5] [6 7 8] [9 10]  0    1   2    3     ---> これをグループNoとすると N←N/3 は、入力Nが属するグループNoを求め、それを新たに、Nに設定しています。 X[N]←X[N]+1は、グループNoの頻度に1を加えています。

tiom
質問者

お礼

回答ありがとうございます。 見やすいシンプルな解説でとてもわかりやすかったです。 本当に助かりました。 迅速な回答をありがとうございました!

関連するQ&A

  • フローチャートお願いします!!!!!

    問題1 入力された10進数の自然数Xを2進数yに変換し出力するプログラムのフローチャートをサブルーチンを含めてすべてかけ。しかし、整数型の変数aから第iビット目(最初を下位ビットとして第0ビットとせよ)を取り出す整数型関数(メソッド)get_bit(a,i)を作成すること。 これのプログラムの作成ができません。お願いします。returna&(1<<n)を使えば大丈夫と思いますが、なかなかうまくできません。JAVAで簡単にわかりやすくすべて書いてください。 問題2 キーボードから自然数nを入力し、1からNまでの和を求め、出力するプログラムのフローチャートをサブルーチンも含めてかけという問題です。これもJAVAでお願いします。

  • このフローチャートがわかりません><

    あらかじめ値が格納されている配列t(要素数:10個)から、最大値を求めるフローチャートと最小値を求めるフローチャートをそれぞれ作成した。空欄を埋めなさい。 横書きですいません>< 開始-□-□-ループ□-◇-cnt+1→1-ループ-min出力-終了 というフローチャートです。 □◇が空欄で◇は判断記号です。 フローチャートをまっすぐ進むとイエス、曲がるとノーとなります。 解説できる方いましたらよろしくお願いします。

  • アルゴリズム

    教えてください。 フローチャート作成 入力された10進の自然数xを2進数yに変換し出力するプログラムのフローチャートをサブルーチンも含めて全て書け。ただし、整数型の変数aから第iビット目(最初を下位ビットとして第0ビットとせよ)を取り出す整数型関数(メソッド)get_bit( a,i )を作成すること。 プログラム作成 上で設計したプログラムを作成する。 実行結果 上で作成したプログラムの実行し、その実行結果を示す。

  • アルゴリズムの問題です

    以下のフローチャートは、基本選択法でデータを昇順(小→大)にソートしたものなのですが、整数の一次元配列に格納されているデータ(100個)を降順(大→小)にソートするフローチャートを作成するには、どこの部分を変化させればいいのか教えていただけませんか? 手書きなので見にくいですがよろしくお願いします。        開始        l 整数配列A(100)と整数変数I,J,N,P,MIN,TEMPを宣言        l   データの個数N の値を読む        l     ループ1の開始     I = 1,2,3, ・・・,N        l      A(I)の値を読む        l      ループ1の終了        l      ループ2の開始      I = 1,2,3, ・・・,N        l      A(I)の値を出力        l      ループ2の終了        l      ループ3の開始      I = 1,2,3, ・・・,N-1        l      MIN = A(I)        l       P = I        l      ループ4の開始     J = I+1,I+2,I+3, ・・・,N        l        l     yes      A(J) < MIN  ーーーーーー MIN = A(J)         l no               l        l                P = J        l                 l              l←ーーーーーーーーーーー          l                  ループ4の終了        l       TEMP = A(I)        l       A(I) = A(P)        l       A(P) = TEMP        l      ループ3の終了        l      ループ5の開始      I = 1,2,3, ・・・,N        l      A(I)の値を出力        l      ループ5の終了        l        終了

  • アルゴリズム

    教えてください フローチャート作成 キーボードから自然数nを入力し、1からnまでの和を求め、出力するプログラムのフローチャートをサブルーチンも含めて全て書く

  • 情報 フローチャートについて

    フローチャートの記号の意味について質問です。 画像上の、表示という記号は「表示装置に表示するデータ」を表すきごうであり、 画像下のデータという記号は、「データ入力や出力」を表す記号だそうです。 この二つの違いがわかりません。 具体例や、記号の中に何を書けばいいかなどを添えてわかりやすく教えていただきたいです。お願いいたします。

  • フローチャート(多重分岐について)

    フローチャートの多重分岐で分岐先を示す矢印が下にyesになって横にnoになる場合と、その逆になる場合がありますが、何故でしょうか?最後に矢印が合流すればどちらをyes/noにしてもよいのですか? 何方かくわしく説明できる方、ご教示ください。 よろしくお願い致します。

  • プログラムのフローチャートがかけません。

    次のプログラムのフローチャート(流れ図)を書いてください。お願いします。 フローチャートの書き方は以下のwebから見れます。 http://sasuke.main.jp/furo.html #include<stdio.h> #include<math.h> #include<stdlib.h> #define MAX_DATA_NUMBER 400 int check_value(int x, char* error_message); int main(int argc ,char*argv[]){ int M=0 ,i=0,N,U double x[2][MAX_DATA_NUMBER],y_bunshi FILE *in_file; in_file = fopen(argv[1],"r"); M = 0; if(argc != 3){ printf("使い方: ./smooth 入力データファイル名 平滑化数N"); exit(1); } N = check_value(atof(argv[2]),"平滑化数は正の値を入力してください。\n使い方: ./smooth 入力データファイル名 平滑化数N"); if(argc == 3){ if( in_file == NULL){ printf("使い方: ./smooth 入力データファイル名 平滑化数"); exit(1); } } while( EOF != fscanf(in_file, "%lf", &x[0][M]) && M<MAX_DATA_NUMBER){ M++; } fclose(in_file); for(i=0;i<=N-1;i++){ y_bunshi = 0; for(U=0;U<=i+N;U++){ y_bunshi += x[0][U]; } x[1][i] = y_bunshi/(i+N+1); } for(i=N;i<M-N;i++){ y_bunshi = 0; for(U=1;U<=N;U++){ y_bunshi += x[0][i+U]; y_bunshi += x[0][i-U]; } y_bunshi += x[0][1]; x[1][i] = y_bunshi/(2*N+1); } for(i=M-N;i<=M-1;i++){ y_bunshi = 0; for(U=i-N;U<=M-1;U++){ y_bunshi += x[0][U]; } x[1][i] = y_bunshi/(M+N-i); } for(i=0;i<M;i++){ printf("%3d,%8.2f,%8.3f\n",i,x[0][i],x[1][i]); } return 0; int check_value(int x,char* error_message){ if( x <= 0.0){ printf(error_message); exit(1); return x; }

  • C++のフローチャート

    #include <iostream> using namespace std; int main() { int m=48,n=36,t,i; for(i=0;;i++) { cout << "m" << i << " " << m << " n" << i << " " << n << '\n'; if(!(t=m%n)) break; m=n; n=t; } cout << "n" << i << "=" << n << '\n'; return 0; } ユーグリッドの互除法で、最大公約数を求めたプログラムなんですが、本当にお願いします。プログラムは書けたんですが、誰かこれのフローチャートを教えてください…これのフローチャートがかけないんです。しかも、テストに出るらしいです。これを書くのが 始まりと終わり→楕円 処理を行う→四角 判断を行う→ひし形 って感じなんですよね

  • わかる人 フローチャート

    このプログラムをフローチャートに直しなさい void main() { int i, n; int sum = 0; printf("n?\n"); scanf("%d",&n); for (i=0; i<=10; i++) { sum = sum + i; } printf("sum = %d\n",sum); }