ページ 1 / 1
流れ図について
Posted: 2007年4月14日(土) 16:04
by 太郎
プログラムの流れ図について
訳あって、独学で勉強してるのですが、下記の問題の流れ図を作成してみました
問:黒い塊A,B,Cがあります、天秤ではかって、一番重いものを表示しなさい
私なりに書いてみたのですが、間違えがあればご指摘お願いいたします
http://monamu.s14.xrea.com/cgi/img-box/ ... 151836.gif
画像ですが宜しくお願いします
Re:流れ図について
Posted: 2007年4月14日(土) 16:36
by 組木紙織
これ分岐の部分でどちらに進めばよいか書いていないです。
yesやnoを分岐の部分で書いて下さい。
とりあえず
気づいたところを上げておきます。
A>Bの部分で右に動いたあと、A>Cを比較して、そこから左に線が出ています。
それだけではCがもっとも重たいことにはなりません。
BとCの比較としてあげないと。
Re:流れ図について
Posted: 2007年4月14日(土) 16:55
by 太郎
組木紙織さん、返信有難うございます
修正してみましたが、このような感じでいいでしょうか?
http://monamu.s14.xrea.com/cgi/img-box/ ... 165424.gif
ご指摘の程宜しくお願いします
Re:流れ図について
Posted: 2007年4月14日(土) 17:07
by 雷
Yesがあったら、NOが無いとだめではないでしょうか?
NOが抜けているところと、書かれていないところがありますよ^^;
がんばです^^
Re:流れ図について
Posted: 2007年4月14日(土) 17:18
by 太郎
Re:流れ図について
Posted: 2007年4月14日(土) 17:42
by Justy
A>Cが noだった場合、どっち行くのかわかりづらいです。
ところで同じ重さだった場合、どうするのですか?
Re:流れ図について
Posted: 2007年4月14日(土) 17:59
by 組木紙織
一番目に付くのが、一番始めの分岐のyes noが違います。
他はいくつか修正する必要がありますが、説明するのが難しいです。
自分の中で整理できてないのではないでしょうか?
とりあえずは
一番抽象的な部分で言うと
最大を求めるだけなので現時点で分かっている最大のものと分からないものを比べればよい。
3つのうちで最大のものを求めるためには、2回判定すれば十分です。
の二つのことを考えてみると
[start]
↓ y y
[A>B]→→→→→[A>C]→→→→[1]
↓n ↓n
↓ ↓
↓ n ↓
[B>C]→→ [2]
↓y ↓
↓ ↓
[4] [3]
こんな感じになります。
[(数字)]を埋めたら答えになります。
これが完成できたら、後は同値をどういう風にあつかうかですね。
もともとA,B,Cが別の重さだと分かっていれば考える必要はないのですがね。
Re:流れ図について
Posted: 2007年4月14日(土) 18:37
by 太郎
1番、2番、3番、4番という風に順位を表示するのではなく
Aが一番重いとき、Bが一番重いとき、Cが1番重いとき
っというのを表示する流れ図です、書き方がおかしかった事を深くお詫び申し上げます
Re:流れ図について
Posted: 2007年4月14日(土) 18:43
by 組木紙織
ちょっと意図が伝わってないようです。
[(数字)]は答えではありません。
順位でもありません。
ただ分からないのもとして与えているだけです。
答えをそのまま与えるのもどうかと思うので。
ここの内容を埋めてあげれば、最終的な答えがでます。
(例)
1:Aが一番重い
2:Bが一番重い
3:Cが一番重い
4:Aが一番重い
Re:流れ図について
Posted: 2007年4月14日(土) 19:15
by 太郎
Re:流れ図について
Posted: 2007年4月14日(土) 19:40
by 組木紙織
一箇所だけちがいます。右から2番目のBが一番大きいというところが違います。
そこを修正すれば流れ図はほぼ完成です。
後は等しい場合を考えるだけですが、流れ図だけを勉強中なのですか?
プログラム言語を使えるのなら一度は書いて確認してみたらいいと思います。
Re:流れ図について
Posted: 2007年4月14日(土) 21:02
by 太郎
右から2っ目のところは"Cが一番"で宜しいでしょうか
一つ質問があるのですが、Aが一番、Bが一番ときて、なぜCが一番という項目が二つ必要なのでしょうか
どうもそこが理解に苦しみまして
Re:流れ図について
Posted: 2007年4月14日(土) 21:47
by 組木紙織
>右から2っ目のところは"Cが一番"で宜しいでしょうか
はいそうです。
>一つ質問があるのですが、Aが一番、Bが一番ときて、なぜCが一番という項目が二つ必要なのでしょうか
少し難しくなるのですが、
ここでの分岐はMAXを選ぶことではなく、MAXでないのを選ぶという意味になります。
一つ目でAとBがどっちがMAXでないというのが分かるので、
二つ目の分岐では一つ目の分岐で残ったほうと、Cとの判断になるので、最終的にCがMAXというのが二つ
でることになります。
判断の仕方を変えることによってAがMAXというのが二つ必要にしたり、
BがMAXというのを二つ必要にすることが出来ます。
Re:流れ図について
Posted: 2007年4月14日(土) 22:01
by 管理人
組木紙織様もおっしゃっていますが、
>後は等しい場合を考えるだけですが、流れ図だけを勉強中なのですか?
>プログラム言語を使えるのなら一度は書いて確認してみたらいいと思います。
流れ図だけを勉強されてらっしゃるのでしょうか?
最初のうちは、頭だけで考えるのが難しいでしょうから一度プログラムを書いてみて、そのプログラム通りフローチャートを書いたらどうでしょうか?
字下げしてかけば対応も一目瞭然ですし、パッとわかるかと。
頭だけで考えるのはそういう経験を積んでから身に付けてみてはどうでしょう?
Re:流れ図について
Posted: 2007年4月14日(土) 23:11
by 太郎
組木紙織さん、管理人さん、返信有難うございます
おっしゃる通り、流れ図もまだまだ勉強が必要ですが、プログラムについても勉強して行きたいと思います
思ったのですが、流れ図書くのに私のような想像力がない人間は厳しいように思えますが、どう思いますか?
Re:流れ図について
Posted: 2007年4月15日(日) 01:05
by 管理人
>私のような想像力がない人間は
いや、そういうわけではないと思います、誰だって経験なしにスラスラなんて出来ません、
ましてやプログラムをほとんど書いた事無いような人がすらすら理論ばかり述べられてもすごいです。
よく掲示板などで質問する時は自分をへりくだって、そのような表現をなさる方がいらっしゃいますけど、
経験がなければ出来なくて当然だと思いますよ。
フローチャートにしても、プログラムにしても。
勉強も経験も無しにスラスラプログラム書けたんじゃプログラマーが泣きます^^;
そういうことで、とにかく最初、基本的なプログラムを色々書いてみてください。
そしてそのプログラムをフローチャートに書き出し、フローチャートとプログラムの対応を確認していきましょう。
フローチャートは元々UMLなど設計する前に理論を書き記す為に記述するものですので、プログラムからフローチャートにしたんじゃ逆ですけど、最初はそれでもいいのでは(プログラムの内容を書きしるす為にフローチャートを使うこともあるんで、もちろん上記以外の利用方法も色々ありますよ)
今現在簡単なプログラムはかけますか?
上の例でいけば、3つの整数を比較して最大値を求めるプログラムでしたらかけますか?
Re:流れ図について
Posted: 2007年4月15日(日) 01:55
by 管理人
↑クリックで画像拡大
例えば上でおっしゃっている流れをプログラムに書くとこうなります。
#include <stdio.h>
int main( void ){
int a,b,c;
a=3,b=1,c=2;
if(a>b){
if(c>a)
printf("cが最大値");
else
printf("aが最大値");
}
else{
if(c>b)
printf("cが最大値");
else
printf("bが最大値");
}
return 0;
}
フローチャートもこのプログラムの物を書いておきました。
これを見比べて両方理解出来ますか?
Re:流れ図について
Posted: 2007年4月15日(日) 11:15
by 太郎
プログラムについては、流れ図以上に初心者です
#inclede <stdio.h>で始めるぐらいしかまだ理解してません
プログラムを見てみますと、管理人さんや組木紙織さんの指摘どおり
初心者ながらもプログラムを見てみると多少わかりやすく理解できました
何かの本でフローチャートから勉強しその後にプログラムを学びなさい
っというのをきっかけでこのように勉強してますが、やはり逆のパターンの方がベストみたいに
感じられました
Re:流れ図について
Posted: 2007年4月15日(日) 12:25
by 組木紙織
>何かの本でフローチャートから勉強しその後にプログラムを学びなさい
というのはプログラミングをするためには。
1:プログラムにさせる処理手順を考える(アルゴリズムを考える)
2:プログラム言語を使ってプログラムをする
といった二つのことを考えないといけないからで、プログラムをするためにはアルゴリズムを
先に考える必要があるからだと思います。
ただし、これはプログラムというものを良く知っている、天才に近い人ではないと出来ないと思います。
私も含めた通常の人は、いくら頑張ってアルゴリズムを考えても、見落としがある場合が多いです。
見落としがあるアルゴリズムでは、いくら頑張ってプログラムを書いたとしても、
正しく目的の処理が出来ないです。
また言語によってプログラムをするときの考え方が違うので、その言語に応じた考え方でアルゴリズムなど
(ここの部分は正確ではないのですが)
を考えたほうがよいです。
分かりにくければ英語と日本語について考えてみてください。
水を英語で言うとwater
湯を英語で言うとwater(hot water)
だったりするように、同じような内容でも表現する方法が違うことがあります。
(英語に詳しければ無生物主語や完了形を例に挙げたほうが分かりやすいのですが)
プログラム言語も同じで、javaのプログラムをちょこっと書き換えてcに移すことはまず出来ないです。
というのはjavaとcでは言語を作った人の考え方がまったく違うからです。
もちろんプログラム言語なので同じ考え方が通用する場合も多いですが違う部分も多いです。
私が、プログラムを作るときにはまずどの言語でプログラムを作るのか?ということを意識します。
続いてどのような処理をしたいのかを箇条書きに書いていきます。
その次に箇条書きした内容を自分でプログラムとして書けるのか?を考え、より詳しく処理を考えて行きます。
考えた部分で不安なところがあれば、実際に簡単なプログラムを書いて正しく動くかを確認します。
繰り返して間違えがあったら修正して、完成できそうだと思ったら、
完成版のプログラムを大枠から書いていき、完成させます。
といったような過程を踏みます。
その間に流れ図を書くことはほとんどないです。簡単にcに近い形で書くことのほうが多いです。
最近ではjavaやc++で書くことが多いのでUMLのクラス図に近いものもつかいますが、
これらは自分の頭で考えたことを見直すために使うのであって、それだけで
全て完成させるつもりでは使ってないです。
文章が長くなりましたが、プログラミングを勉強するつもりなら、言語を覚え、その覚える過程で
より効率的にするアルゴリズムや、汎用的なアルゴリズムを学んでいったらよいと思います。
Re:流れ図について
Posted: 2007年4月15日(日) 12:38
by 太郎
組木紙織さん、いろいろご教授して下さって有難うございます
C言語もすらすらと書けるような人間にいち早くなるためにも、頑張りたいと思います
Re:流れ図について
Posted: 2007年4月15日(日) 12:39
by 太郎
おっと、解決マークを付けてませんでした
無駄レス失礼しましたm(_ _)m
Re:流れ図について
Posted: 2007年4月15日(日) 12:54
by 管理人
>何かの本でフローチャートから勉強しその後にプログラムを学びなさい
プログラムはデータ構造とアルゴリズムで出来ています。
データ構造は解ると思います。
アルゴリズムとは、どのように処理が行われるかその手順や処理順序のことです。
その順序がフローチャートを使うと良くはあく出来るためそのように書かれていたのでしょう。
最初の考えるのは「概念図」です。
しかし太郎さんが考えてらっしゃるのは設計段階の図です。もう具体的名変数名なども決まっている状態ですね。
ですから難しく感じたのでしょう。
ソフトウェアのフローチャートを描くとき、突然設計図をかいたりしません。
「どのように処理をするか?」という流れだけを把握するための概念図を先に書きます。
特にプログラムを知らないのに実装段階の設計図を描けといわれても無理なのは当然ですよ。
ですから自分の能力が低いからというわけじゃないです、当然のことですから気を落とさずに頑張ってくださいね。
入門レベルの参考になる資料はいっくらでもネットにころがっているんで、困った時は是非ネットで☆