C言語による流水算のプログラムです。
Xcode上で、動作を確認しました。
流水算は、ウィキペディアから引用すれば、算数の文章題、またその解き方の一種です。
https://ja.wikipedia.org/wiki/流水算
静水での船速・川の流速がそれぞれ一定として、流れる川を上下する船速や時間などを求める問題です。
出題内容を大きく分けると、上りの船速がこれらの差、下りの船速がこれらの和になるものとして解きます。
そして公式としては、以下の2パターンがあります。
・上りの速さ=静水時の速さ-流れの速さ
・下りの速さ=静水時の速さ+流れの速さ
そのため本プログラムにおいては、2つの選択肢を用意しました。
まずは船速と川の流速を入力することで、流れる川を上下する船速をそれぞれに計算します。
その上で、さらに船が進む距離の入力から所要時間、あるいは所要時間の入力から船が進む距離を求められます。
ただし入力時の単位については、あらかじめ揃えられているものとします。
結果表示後に、もう一度計算し直す場合は継続し、そうでなければ終了します。
/* C言語による流水算 https://neguse-atama.hatenablog.com */ #include <stdio.h> int main(void){ int nobohaya,kudahaya,funehaya,kawahaya,kyori,bangou,tuzuki,zikan,sentaku; do{ printf("流水算の計算をします。\n"); printf("船の速さと川の流れの速さを入力してください。\n"); printf("船の速さ:"); scanf("%d",&funehaya); printf("川の流れの速さ:"); scanf("%d",&kawahaya); printf("1.船が上る場合の速さ\n2.船が下る場合の速さ\n"); printf("以上から1,2のどちらかを選び、入力してください:"); scanf("%d",&bangou); if(bangou==1){ nobohaya=funehaya-kawahaya; printf("求める船の速さは%dです。\n",nobohaya); }else if(bangou==2){ kudahaya=funehaya+kawahaya; printf("求める船の速さは%dです。\n",kudahaya); }else{ printf("1,2以外の数を入力しないでください。\n"); goto yarinaosikeisan; } printf("所要時間を求めますか。それとも船が進む距離を求めますか。・・・0.所要時間 1.船が進む距離:"); scanf("%d",&sentaku); if(sentaku==0 && bangou==1){ printf("船が進む距離を入力してください:"); scanf("%d",&kyori); zikan=kyori/(funehaya-kawahaya); printf("所要時間は%dです。\n",zikan); }else if(sentaku==0 && bangou==2){ printf("船が進む距離を入力してください。"); scanf("%d",&kyori); zikan=kyori/(funehaya+kawahaya); printf("所要時間は%dです。\n",zikan); }else if(sentaku==1 && bangou==1){ printf("所要時間を入力してください:"); scanf("%d",&zikan); kyori=(funehaya-kawahaya)*zikan; printf("船が進む距離は%dです。\n",kyori); }else if(sentaku==1 && bangou==2){ printf("所要時間を入力してください。"); scanf("%d",&zikan); kyori=(funehaya+kawahaya)*zikan; printf("船が進む距離は%dです。\n",kyori); }else{ printf("0,1以外の数を入力しないでください。\n"); } yarinaosikeisan: printf("計算をやり直しますか。・・・(0)はい (1)いいえ:"); scanf("%d",&tuzuki); }while(tuzuki==0); return (0); }
中学の入試問題や進学塾などで出題される特殊算の中から、流水算について考えてみました。
文章題やグラフとしての出題になりますが、速さだけに着目すると、単純に和と差から求まります。
時間は2つの動くものに対しても、同時に経過します。
これを、時間の同時性と言います。
したがって相対的な距離は、速さの和と差に依存するのです。
なお特殊算の中には、旅人算も同様に、速さどうしの和と差を求められることから、発展として流水旅人算と言う出題もあります。