三つの整数値を読み込んでA>B>Cのように昇順にソートするフローチャート図の書き方を教えてください。
※JAVAでプログラムは実装できましたが、フローチャート図の書き方がわかりません。
import java.io.*; class test { public static void main(String [] args) throws Exception { System.out.println("三つの整数値を入力してください。"); int a,b,c; String line; int large,medium,small; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.print("数値 a= :"); line = reader.readLine(); a=Integer.parseInt(line); System.out.print("数値 b= :"); line = reader.readLine(); b=Integer.parseInt(line); System.out.print("数値 c= :"); line = reader.readLine(); c=Integer.parseInt(line); if(a >= b){ if(a >= c){large =a; if(b >= c){medium =b; small =c;} else{medium =c; small =b;} }else{large =c; medium =a; small =b;} }else{if(b >= c){large=b;if(a >= c){medium =a; small =c;} else{medium =c; small =a;} }else{large =c; medium =b; small =a;} } System.out.print(large + ">" + medium + ">" + small); } }
正直、どうにでも書けてしまうので、まずは質問者さんがどう書くかです。また恐らく、回答者がそれを書いても、見る人によって評価が異なります。
ご回答ありがとうございます。
なるほどちょっと自分なりに図を作ってまとめてみます。
書き方(粒度)によっては
「開始」端子→箱1:「キーボードから数値を入力」→箱2:「1番大きい値を抽出し、変数Aへセット」→箱3:「2番目に大きい値を抽出し、変数Bへセット」→箱4:「残りの数(一番小さい数)を変数Cへセット」→「終了」端子 で終わっちゃいますね。(特に分岐無し) どこまで細かく書くか、です。
追記を読んでのコメントですが、書き方の前に、処理が抜けていて、フローチャート上のプログラムが未完成のようです。お書きになったフローチャートは、「変数A、B、Cの3つの領域にキーボードから整数値を入力して、一番大きな数を変数Aに真ん中の値を変数Bに1番小さな値を変数Cに格納する」の仕様を満たしていません。最終的には一番大きな数を変数Aに収めていなくてはならないのではないでしょうか。少なくともA<BかつA<Cでは、Aが最初から1番小さい数だったとき、Aの値を"出力"しているだけです。(一番大きい数としてAに収められていません) 細かく言えば、「出力する」と言う要件はそもそも存在しません。
質問者自身はそのフローチャート見て初見で理解出来ますか?書き方が分からないという問題ではないです。
それと3分岐4分岐は無くても書けます。ifのネストで考えてみてください。
まぁ、意図が全て含まれてて他者に通じるようになってしまうと、それ即ちフローチャートは完成してしまって、回答の必要も無くなってしまうのですけれども。コードレベルで言えば、ABC3つの変数しか使わない場合は箱の数も変わってくると思います。フローチャートではなく、質問者さんがお使いのプログラミング言語では完成しているのでしょうか。もしそうであれば、あとはフローチャートへの表現力だけの問題になると思います。
この例、私なら配列にすべての入力を入れた後にソートします。そういう問題じゃないでしょうが、数字の数が変わる可能性があるのであればループを使わなければならなくなるので、チャートも変わってきます。(現実には、変わる可能性を考慮してプログラムするので配列を使用してループあるいはライブラリ関数を使います)
フローチャートの種類はいくつかありますが、おそらく情報処理技術者試験対策だと思うので、それに対応したものを使わなければいけません。参考書を見て使えるパーツを確認してください。種類によっては switch による多重分岐が使えるものもあります。
ただしこの問題は繰り返し比較して最大のものを選ばなければならないので、多重分岐はどちらにしろ使えません。多重分岐の例にはならないので、別の例に差し替えるのが良いと思います。
何分素人で質問の仕方もわかっていなくて申し訳ございません。
おっしゃる通り情報処理技術者試験対策なのですが、、、
書いてある条件としては最初にABCに数値を入力それを比較して、一番大きい値をA、真ん中の値をB、小さい値をC、ということで、入れ替えと分岐のアルゴリズムだそうですが、、、さっぱりです。。
では多重分岐は関係ありません。アルゴリズムで引っかかっているなら、フローチャートもとりあえず今は関係ありません。
三つの中から一番大きなものを選ぶには、まず二つを取り出して比較し、大きい方を残ったものと比較し、大きかった方を選んでください。
二番目に大きいものは、残った二つを比較して大きかった方です。
残りが一番小さなものになります。
このように細かな手続きを最初から最後まで日本語で表してみてください。それを最後にフローチャートに変換すればできあがりです。
この質問を放置して新しく同じ質問をしたようですが、これだけ書いて何もできない人は受験しても無意味です。これは問題としては簡単な方です。時間と労力の無駄なのであきらめてください。
> JAVAでプログラムは実装できましたが、
新しい質問に書いてあったトンチンカンな文章を読む限りできたとは思えません。
図でお願いします。
javaのコードと未完成のフローチャート併記した方が指摘してもらえると思いますよ
Zuishin様は経験者でできるからよいかもしれませんが、私はお金もなく独学で学習期間1カ月も経たない初心者です!わからないから質問しています。それ以外のやり取りは私にとっては無益ですので以降スルーします。
6日の回答のお礼は申し上げます。
まぁ初心者でわからないから質問したい、というのは良いんですが、この質問って要は「自分にできないからやってくれ(手本を見せろ)」という「丸投げ」に見えるので、厳しい事を言われたくなければ貴方がどれぐらいフローチャートについて学び、どこまでできていて、どこがわからない、という説明ぐらいはまずやるべきじゃないですかね?
みんなあなたの知り合いじゃないので、事情までわかりませんし、どの程度努力した上でここに質問しているのかなんて知らないので。
とりあえずガイドラインはちゃんと一読したほうが良いです。
https://teratail.com/help/question-tips
https://teratail.com/help/avoid-asking
ご指摘ありがとうございます。
ルールを細かく確認せず利用しておりました。
大変申し訳ございません。
次回は考えて質問させていただきます。
前のコメントでも書いたifのネストは普通にやってるようだけど、フローチャート上だとネストしたifの書き方が分からないって事?
if(a >= b){
if(a >= c){large =a; if(b >= c){medium =b; small =c;}
ここまでの処理は書けていると思うのですが、この後の書き方でわからなくなります。
もう少しフローチャートについて学んでみます。
「思う」ではなく動かしてみれば良いのでは。
試験対策とは言え、手元に全く実行環境なしで机上だけというのは無謀です。
プログラムは書いた通りにしか動きません。
ABC のはずが large や small になってるし、仕えるフローチャートの部品確認しろと言ってるのにしないし、頑なに答えだけ求めるし。
同じ問題は出ないので、いくら正解を教えてもらって暗記しても無駄なんですけどね。
「この問題だけ」できればいいのなら、過去問と正解と解説の載った参考書を買えばよろしい。
多重分岐がわからないならこれをどうぞ。
https://www.google.com/search?q=%E3%83%95%E3%83%AD%E3%83%BC%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88+%E5%88%86%E5%B2%90
何も難しくないでしょう。素人が一日で十分理解できる難易度だと思います。
回答2件
あなたの回答
tips
プレビュー