天下茶屋と深井の運賃が正確に出ない。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
えっぴ~

天下茶屋と深井の運賃が正確に出ない。

#1

投稿記事 by えっぴ~ » 1年前

1自分は今何がしたくて→セレクトボックスで駅名を選択し、距離と運賃を表示したいです。
2どう取り組んで(作ったプログラムはどれで→1会社だけなら、セレクトボックスで選択して距離と運賃を表示できました。会社は泉北高速なのですが、光明池~和泉中央間の運賃を通常の挙動とは別に計算させております。たとえば、中百舌鳥~和泉中央間なら14.3kmなのですが、15kmまでの運賃310円ではなくて、別に運賃を設定して330円と表示できるようにさせています。
3どのようなエラーやトラブルで困っていて→堺東~深井間の運賃計算には対応できていますが、天下茶屋~深井間ができないです。
4自分は何が解らないのか、知りたいのか→論理演算子||は、使える個数に限界がありますか。
else if((f.tokuten.value<8)&&(!((f.q1.value == "泉ケ丘"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "泉ケ丘")||
(f.q1.value == "天下茶屋"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "天下茶屋")||
(f.q1.value == "堺東"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "堺東"))))という記述をしているのですが、天下茶屋がうまくいきません。もし、()の使い方や||の使い方が間違っていたら申し訳ありません。
5今のCの知識はどの程度なのか→初心者で、元々以下のサイトを改造して作っています。
http://www2.kuma.u-tokai.ac.jp/~kfuji/h ... index.html
<script type="text/javascript">
function kotae()
{
ten=0
if((f.q1.value == "中百舌鳥"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "中百舌鳥"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 3.7}
else if((f.q1.value == "中百舌鳥"&&f.q2.value == "泉ケ丘")||(f.q1.value == "泉ケ丘"&&f.q2.value == "中百舌鳥"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 7.8}
else if((f.q1.value == "中百舌鳥"&&f.q2.value == "栂・美木多")||(f.q1.value == "栂・美木多"&&f.q2.value == "中百舌鳥"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 10.2}
else if((f.q1.value == "中百舌鳥"&&f.q2.value == "光明池")||(f.q1.value == "光明池"&&f.q2.value == "中百舌鳥"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 12.1}
else if((f.q1.value == "中百舌鳥"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "中百舌鳥"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 14.3}
else if((f.q1.value == "深井"&&f.q2.value == "泉ケ丘")||(f.q1.value == "泉ケ丘"&&f.q2.value == "深井"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 4.1}
else if((f.q1.value == "深井"&&f.q2.value == "栂・美木多")||(f.q1.value == "栂・美木多"&&f.q2.value == "深井"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 6.5}
else if((f.q1.value == "深井"&&f.q2.value == "光明池")||(f.q1.value == "光明池"&&f.q2.value == "深井"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 8.4}
else if((f.q1.value == "深井"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "深井"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 10.6}
else if((f.q1.value == "泉ケ丘"&&f.q2.value == "栂・美木多")||(f.q1.value == "栂・美木多"&&f.q2.value == "泉ケ丘"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 2.4}
else if((f.q1.value == "泉ケ丘"&&f.q2.value == "光明池")||(f.q1.value == "光明池"&&f.q2.value == "泉ケ丘"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 4.3}
else if((f.q1.value == "泉ケ丘"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "泉ケ丘"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 6.5}
else if((f.q1.value == "栂・美木多"&&f.q2.value == "光明池")||(f.q1.value == "光明池"&&f.q2.value == "栂・美木多"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 1.9}
else if((f.q1.value == "栂・美木多"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "栂・美木多"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 4.1}
else if((f.q1.value == "光明池"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "光明池"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 2.2}
else if((f.q1.value == "天下茶屋"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "天下茶屋"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 13.9}
else if((f.q1.value == "堺東"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "堺東"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 6.8}
else f.q1.style.backgroundColor="red"
f.tokuten.value=ten

//ここから
if(f.tokuten.value<2){f.rank.value='普通券\n170(90)\n回数券\n1,700(900)\n定期(通勤)\n1か月_6,540(3,270)\n3か月_18,640(9,320)\n6か月_35,320(17,660)\n定期(通学)\n1か月_3,030(1,520)\n3か月_8,640(4,320)\n6か月_16,370(8,190)'}
else if((f.tokuten.value<4)&&(!((f.q1.value == "光明池"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "光明池"))))
{f.rank.value='普通券\n190(100)\n回数券\n1,900(1,000)\n定期(通勤)\n1か月_7,360(3,680)\n3か月_20,980(10,490)\n6か月_39,750(19,880)\n定期(通学)\n1か月_3,400(1,700)\n3か月_9,690(4,850)\n6か月_18,360(9,180)'}
<!--特例-->
else if((f.tokuten.value<4)&&((f.q1.value == "光明池"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "光明池")))
{f.rank.value='普通券\n210(110)\n回数券\n2,100(1,100)\n定期(通勤)\n1か月_8,200(4,100)\n3か月_23,370(11,690)\n6か月_44,280(22,140)\n定期(通学)\n1か月_3,790(1,900)\n3か月_10,810(5,410)\n6か月_20,470(10,240)'}
else if((f.tokuten.value<6)&&(!((f.q1.value == "栂・美木多"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "栂・美木多"))))
{f.rank.value='普通券\n210(110)\n回数券\n2,100(1,100)\n定期(通勤)\n1か月_8,180(4,090)\n3か月_23,320(11,660)\n6か月_44,180(22,090)\n定期(通学)\n1か月_3,780(1,890)\n3か月_10,780(5,390)\n6か月_20,420(10,210)'}
<!--特例-->
else if((f.tokuten.value<6)&&((f.q1.value == "栂・美木多"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "栂・美木多")))
{f.rank.value='普通券\n230(120)\n回数券\n2,300(1,200)\n定期(通勤)\n1か月_9,020(4,510)\n3か月_25,710(12,860)\n6か月_48,710(24,360)\n定期(通学)\n1か月_4,170(2,090)\n3か月_11,890(5,950)\n6か月_22,520(11,260)'}
else if((f.tokuten.value<8)&&(!((f.q1.value == "泉ケ丘"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "泉ケ丘")||
(f.q1.value == "天下茶屋"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "天下茶屋")||
(f.q1.value == "堺東"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "堺東"))))
{f.rank.value='普通券\n230(120)\n回数券\n2,300(1,200)\n定期(通勤)\n1か月_8,990(4,500)\n3か月_25,630(12,820)\n6か月_48,550(24,280)\n定期(通学)\n1か月_4,160(2,080)\n3か月_11,860(5,930)\n6か月_22,470(11,240)'}
<!--特例-->
else if((f.tokuten.value<8)&&((f.q1.value == "泉ケ丘"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "泉ケ丘")))
{f.rank.value='普通券\n250(130)\n回数券\n2,500(1,300)\n定期(通勤)\n1か月_9,830(4,920)\n3か月_28,020(14,010)\n6か月_53,090(26,550)\n定期(通学)\n1か月_4,550(2,280)\n3か月_12,970(6,490)\n6か月_24,570(12,290)'}
else if((f.tokuten.value<8)&&((f.q1.value == "堺東"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "堺東")))
{f.rank.value='普通券\n300(160)\n回数券\nnul(nul)\n定期(通勤)\n1か月_13,930(nul)\n3か月_39,710(nul)\n6か月_75,230(nul)\n定期(通学)\n1か月_6,090(nul)\n3か月_17,360(nul)\n6か月_32,890(nul)'}
else if(f.tokuten.value<10)
{f.rank.value='普通券\n250(130)\n回数券\n2,500(1,300)\n定期(通勤)\n1か月_9,810(4,910)\n3か月_27,960(13,980)\n6か月_52,980(26,490)\n定期(通学)\n1か月_4,530(2,270)\n3か月_12,920(6,480)\n6か月_24,470(12,240)'}
else if((f.tokuten.value<12)&&(!((f.q1.value == "深井"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "深井"))))
{f.rank.value='普通券\n270(140)\n回数券\n2,700(1,400)\n定期(通勤)\n1か月_10,620(5,310)\n3か月_30,270(15,140)\n6か月_57,350(28,680)\n定期(通学)\n1か月_4,910(2,460)\n3か月_14,000(7,000)\n6か月_26,520(13,280)'}
<!--特例-->
else if((f.tokuten.value<12)&&((f.q1.value == "深井"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "深井")))
{f.rank.value='普通券\n290(150)\n回数券\n2,900(1,500)\n定期(通勤)\n1か月_11,460(5,730)\n3か月_32,670(16,340)\n6か月_61,890(30,950)\n定期(通学)\n1か月_5,300(2,650)\n3か月_15,110(7,560)\n6か月_28,620(14,310)'}
else if(f.tokuten.value<14)
{f.rank.value='普通券\n290(150)\n回数券\n2,900(1,500)\n定期(通勤)\n1か月_11,450(5,730)\n3か月_32,640(16,320)\n6か月_61,830(30,920)\n定期(通学)\n1か月_5,290(2,650)\n3か月_15,080(7,540)\n6か月_28,570(14,290)'}
<!--特例南海-->
else if((f.tokuten.value<14)&&((f.q1.value == "天下茶屋"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "天下茶屋")))
{f.rank.value='普通券\nA(150)\n回数券\n2,900(1,500)\n定期(通勤)\n1か月_11,450(5,730)\n3か月_32,640(16,320)\n6か月_61,830(30,920)\n定期(通学)\n1か月_5,290(2,650)\n3か月_15,080(7,540)\n6か月_28,570(14,290)'}
else if((f.tokuten.value<15)&&(!((f.q1.value == "中百舌鳥"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "中百舌鳥"))))
{f.rank.value='普通券\n310(160)\n回数券\n3,100(1,600)\n定期(通勤)\n1か月_12,260(6,130)\n3か月_34,950(17,480)\n6か月_66,210(33,110)\n定期(通学)\n1か月_5,660(2,830)\n3か月_16,140(8,070)\n6か月_30,570(15,290)'}
<!--特例-->
else if((f.tokuten.value<15)&&((f.q1.value == "中百舌鳥"&&f.q2.value == "和泉中央")||(f.q1.value == "和泉中央"&&f.q2.value == "中百舌鳥")))
{f.rank.value='普通券\n330(170)\n回数券\n3,300(1,700)\n定期(通勤)\n1か月_13,100(6,550)\n3か月_37,340(18,670)\n6か月_70,740(35,370)\n定期(通学)\n1か月_6,050(3,030)\n3か月_17,250(8,630)\n6か月_32,670(16,340)'}

//ここまで
}
</script>
<style>
textarea.hoge { width: 150px; height:200px;}
</style>
<body>
<form name="f">
出発駅は
<select name="q1">
<option>選択肢</option>
<option>中百舌鳥</option>
<option>深井</option>
<option>泉ケ丘</option>
<option>栂・美木多</option>
<option>光明池</option>
<option>和泉中央</option>
<option>天下茶屋</option>
<option>堺東</option>
<option>名古屋市</option>
<option>松山市</option>
<option>金沢市</option>
<option>高松市</option>
</select>
です。
<p>
到着駅は
<select name="q2">
<option>選択肢</option>
<option>中百舌鳥</option>
<option>深井</option>
<option>泉ケ丘</option>
<option>栂・美木多</option>
<option>光明池</option>
<option>和泉中央</option>
<option>天下茶屋</option>
<option>堺東</option>
<option>名古屋市</option>
<option>松山市</option>
<option>金沢市</option>
<option>高松市</option>
</select>
です。<p>
<input type="button" name="b1" value="運賃検索" onclick="kotae()"> <p>
<input name=tokuten size="6">km
<!--HTMLここから-->
<!--ランク-->
<textarea name=rank class="hoge"></textarea>
<!--HTMLここまで-->
<!--問題-->

box
記事: 2002
登録日時: 13年前

Re: 天下茶屋と深井の運賃が正確に出ない。

#2

投稿記事 by box » 1年前

すごいコードですね。まあそれはさておき
堺東~深井間の運賃計算には対応できていますが、天下茶屋~深井間ができないです。
とのことですが、

コード:

f.q1.value == "中百舌鳥"
これ、本当に真になることがあるでしょうか。
構造体のメンバーvalueの定義がどうなっているか知りませんが、
仮に文字列同士の内容比較をしたければ、標準ライブラリーのstrcmpを使って
if strcmp(f.q1.value, "中百舌鳥") == 0
とかしないとまずくないでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 天下茶屋と深井の運賃が正確に出ない。

#3

投稿記事 by みけCAT » 1年前

ソースコードを提示する際は、BBCodeが有効な(無効にしない)状態で、
BBCodeのcodeタグの開始タグと終了タグの組(開始タグが先)で囲んでいただけると、
見やすくてありがたいです。
えっぴ~ さんが書きました:
1年前
天下茶屋~深井間ができないです。
まず、この部分

コード:

ten=0
と、この部分

コード:

else if((f.q1.value == "天下茶屋"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "天下茶屋"))
{f.q1.style.backgroundColor="aqua ";ten = ten + 13.9}
と、この部分

コード:

f.tokuten.value=ten
より、f.q1.valueが"天下茶屋"、f.q2.valueが"深井"の時、f.tokuten.valueは13.9になります。

次に、この部分

コード:

else if(f.tokuten.value<14)
{f.rank.value='普通券\n290(150)\n回数券\n2,900(1,500)\n定期(通勤)\n1か月_11,450(5,730)\n3か月_32,640(16,320)\n6か月_61,830(30,920)\n定期(通学)\n1か月_5,290(2,650)\n3か月_15,080(7,540)\n6か月_28,570(14,290)'}
<!--特例南海-->
else if((f.tokuten.value<14)&&((f.q1.value == "天下茶屋"&&f.q2.value == "深井")||(f.q1.value == "深井"&&f.q2.value == "天下茶屋")))
{f.rank.value='普通券\nA(150)\n回数券\n2,900(1,500)\n定期(通勤)\n1か月_11,450(5,730)\n3か月_32,640(16,320)\n6か月_61,830(30,920)\n定期(通学)\n1か月_5,290(2,650)\n3か月_15,080(7,540)\n6か月_28,570(14,290)'}
を考えます。
f.tokuten.value は13.9 なので、f.tokuten.value<14は真になります。
よって、この部分の最初のif文の中身が実行され、次のif文は意味がなくなります。
えっぴ~ さんが書きました:
1年前
4自分は何が解らないのか、知りたいのか→論理演算子||は、使える個数に限界がありますか。
きちんと規格を確認してはいないですが、
少なくともコンピュータの記憶装置の容量による限界はありそうな気がします。
box さんが書きました:
1年前
仮に文字列同士の内容比較をしたければ、標準ライブラリーのstrcmpを使って
if strcmp(f.q1.value, "中百舌鳥") == 0
とかしないとまずくないでしょうか。
何の「標準」でしょうか?
現在のJavaScriptの標準ライブラリーには、strcmpは無いと思います。
少なくともFirefox 103.0では、ReferenceErrorになってしまい、使えないようです。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 13年前

Re: 天下茶屋と深井の運賃が正確に出ない。

#4

投稿記事 by box » 1年前

お~JavaScriptやったか。
C言語の掲示板なので頭からCの話と思い込んどったわ。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
あたっしゅ
記事: 663
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 天下茶屋と深井の運賃が正確に出ない。

#5

投稿記事 by あたっしゅ » 1年前

東上☆海美☆「
#1> 5今のCの知識はどの程度なのか→初心者で、元々以下のサイトを改造して作っています。
#1> →http://www2.kuma.u-tokai.ac.jp/~kfuji/h ... index.html

『Cの知識はどの程度なのか』と書いてあるし、早合点するのも、しょうがないみみ。


本題
1.出発駅と到着駅が同じ駅の処理がされてないみみ。
2.if 文の羅列か。定義を並べてく Prolog みたいだな。そこは、二次元配列を使うところだろ。

https://www.tohoho-web.com/js/array.htm
配列(Array)- JavaScript(ja)

出発駅と到着駅が同じ駅の場合は 0 入れておいて、0 が出たら『出発駅と到着駅が同じ駅です』と表示するとか。
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

YuO
記事: 947
登録日時: 13年前
住所: 東京都世田谷区

Re: 天下茶屋と深井の運賃が正確に出ない。

#6

投稿記事 by YuO » 1年前

JavaScriptとかコンピューターの知識ではなく、鉄道の運賃計算に関する知識の問題のようです。

天下茶屋~深井間は、
  • 南海電気鉄道南海本線 天下茶屋(営業キロ3.0km)~岸里玉出(営業キロ3.7/3.9km) 0.7/0.9km
  • 南海電気鉄道高野線 岸里玉出(営業キロ4.6km)~中百舌鳥(営業キロ14.1km) 9.5km
  • 泉北高速鉄道泉北高速鉄道線 中百舌鳥(営業キロ0.0km)~深井(営業キロ3.7km) 3.7km
の2社3路線を乗り継いでいます。
オフトピック
Wikipediaを参照したが、南海本線と高野線の両項目間で難波~岸里玉出間の営業キロが異なったため両方を記載した
この場合、普通旅客運賃は、
  • 南海電気鉄道 : 10.2/10.4km => 11km : 260円
  • 泉北高速鉄道:3.7km => 4km : 190円
  • 乗り継ぎ割引:100円
  • 合算額:260 + 190 - 100 = 350円
という計算を行います。

今回のコードでは、単純に全区間の営業キロ13.9kmについて、泉北高速鉄道の運賃表に当てはめているため290円という間違った結果が表示されています。


なお、
  • 両社を跨いだ回数乗車券が発券されるのかどうか
  • 両社を跨いだ定期乗車券が発券されるのかどうか
  • 回数乗車券・定期乗車券が発券される場合に、乗り継ぎ割引がどのように設定されるのか
に関しては、規則上の文面がみつからず、わかりませんでした。

ref)

えっぴ~

Re: 天下茶屋と深井の運賃が正確に出ない。

#7

投稿記事 by えっぴ~ » 1年前

いろいろ情報ありがとうございます。

返信

“C言語何でも質問掲示板” へ戻る