HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1009
なかやまにんに君数字の大小比較(続き)9解決


なかやまにんに君

リンク

2012/10/9(Tue) 17:44:59|NO.49887

とりあえず、プログラムをこのような形で作ってみました。
randomize
足す1 = rnd(9)+1
足される1 = rnd(9)+1
正解1 = 足す1+足される1

足す2 = rnd(9)+1
足される2 = rnd(9)+1
正解2 = 足す2+足される2

引く1 = rnd(9)+1
引かれる1 = rnd(9)+1
正解3 = 引く1-引かれる1

引く2 = rnd(9)+1
引かれる2 = rnd(9)+1
正解4 = 引く2-引かれる2

掛ける1 = rnd(9)+1
掛けられる1 = rnd(9)+1
正解5 = 掛ける1*掛けられる1

掛ける2 = rnd(9)+1
掛けられる2 = rnd(9)+1
正解6 = 掛ける2*掛けられる2

割る1 = rnd(19)+1
割られる1 = rnd(9)+1
正解7 = 割る1/割られる1

割る2 = rnd(50)+10
割られる2 = rnd(9)+1
正解8 = 割る2/割られる2

足す3 = rnd(99)+1
足される3 = rnd(9)+1
正解9 = 足す3+足される3

引く3 = rnd(99)+1
引かれる3 = rnd(9)+1
正解10 = 引く3-引かれる3

足す4 = rnd(99)+1
足される4 = rnd(9)+1
正解11 = 足す4+足される4

引く4 = rnd(99)+1
引かれる4 = rnd(9)+1
正解12 = 引く4-引かれる4

足す5 = rnd(99)+1
足される5 = rnd(9)+1
正解13 = 足す5+足される5

引く5 = rnd(99)+1
引かれる5 = rnd(9)+1
正解14 = 引く5-引かれる5

掛ける3 = rnd(99)+1
掛けられる3 = rnd(9)+1
正解15 = 掛ける3*掛けられる3

割る3 = rnd(99)+1
割られる3 = rnd(9)+1
正解16 = 割る3/割られる3

掛ける4 = rnd(99)+1
掛けられる4 = rnd(9)+1
正解17 = 掛ける4*掛けられる4

割る4 = rnd(99)+1
割られる4 = rnd(9)+1
正解18 = 割る4/割られる4

掛ける5 = rnd(99)+1
掛けられる5 = rnd(9)+1
正解19 = 掛ける5*掛けられる5

割る5 = rnd(99)+1
割られる5 = rnd(9)+1
正解20 = 割る5/割られる5

screen 0,300,100
v1=""+足される1+"+"+足す1+"", ""+引く1+"-"+引かれる1+"", ""+掛ける1+"*"+掛けられる1+"", ""+割る1+"/"+割られる1+"", ""+足す3+"+"+足される3+"", ""+足す4+"+"+足される4+"", ""+足す5+"+"+足される5+"", ""+掛ける3+"*"+掛けられる3+"", ""+掛ける4+"*"+掛けられる4+"", ""+掛ける5+"*"+掛けられる5+""//左の式
v2=""+足される2+"+"+足す2+"", ""+引く2+"-"+引かれる2+"", ""+掛ける2+"*"+掛けられる2+"", ""+割る2+"/"+割られる2+"", ""+引く3+"-"+引かれる3+"", ""+引く4+"-"+引かれる4+"", ""+引く5+"-"+引かれる5+"", ""+割る3+"/"+割られる3+"", ""+割る4+"/"+割られる4+"", ""+割る5+"/"+割られる5+"" //右の式
cnt1=length(v1) //左の式が何問あるかを調べる
cnt2=length(v2) //右の式が何問あるかを調べる
if cnt1!cnt2:mes "式の数が合いません":stop //式の数が合わないとき
count=0 //問題番号
font "MS UI GOTHIC",30,1 //フォント
time=0//経過時間
good=0//正解数
bad=0//不正解数
*main
redraw 0
color 255,255,255:boxf:color
pos 20,5:mes v1.count //左の式を描画
pos 170,5:mes v2.count //右の式を描画
stick key,5
if key=1{//左のキー
if v1>=v2:pos 10,50:mes "正解!" :good+
if v2>v1:pos 10,50:mes "不正解!":bad+
count+:redraw 1:wait 100
}
if key=4{//右のキー
if v1>=v2:pos 10,50:mes "不正解!":bad+
if v2>v1:pos 10,50:mes "正解!" :good+
count+:redraw 1:wait 100
}
if count=cnt1{
color 255,255,255:boxf:color
pos 5,5:mes "全問終了\n正解数:"+good+"\n不正解数:"+bad
stop
}
redraw 1
time+
title "経過時間:"+(time/60)
await 5
goto *main

これで実行すると矢印キーを押したところでエラーが発生してしまいます。
しかし、どのあたりがどう間違っているかがわかりません。
親切な方、間違い指摘及び修正の方よろしくお願いいます。



この記事に返信する


skyblue

リンク

2012/10/9(Tue) 18:58:05|NO.49889

文字を変数に入れての変数同士の比較は標準ではサポートされていなかったはずです。
さらにいえば変数名などに日本語を使用するのはサポート外です。



暇人

リンク

2012/10/9(Tue) 19:41:36|NO.49890

>さらにいえば変数名などに日本語を使用するのはサポート外です。

プログラミング・マニュアルには
「変数は、アルファベットまたは日本語で始まる59文字(半角)以下の文字列で 識別されます」
とある

>足す1 = rnd(9)+1
>足される1 = rnd(9)+1
>正解1 = 足す1+足される1

>if v1>=v2:pos 10,50:mes "正解!" :good+

比較するのはv1に入れた式の文字列じゃなく正解1に入ってる値になるんじゃ?

正解1(0)=足す1+足される1 ,引く1-引かれる1 正解2(0)=足す2+足される2 ,引く2-引かれる2 if 正解1(count) >= 正解2(count)
こんな感じ



なかやまにんに君

リンク

2012/10/11(Thu) 20:19:30|NO.49916

暇人さんへ
if key=1{//左のキー
if 正解1(count) >= 正解2(count):pos 10,50:mes "正解!" :good+
if 正解2(count) > 正解1(count):pos 10,50:mes "不正解!":bad+
count+:redraw 1:wait 100
}
if key=4{//右のキー
if 正解1(count) > 正解2(count):pos 10,50:mes "不正解!":bad+
if 正解2(count) >= 正解1(count):pos 10,50:mes "正解!" :good+
count+:redraw 1:wait 100
}
と書けばエラーが出ないのですが、
if key=1{//左のキー
if 正解1(count) >= 正解2(count):pos 10,50:mes "正解!" :good+
if 正解2(count) > 正解1(count):pos 10,50:mes "不正解!":bad+
if 正解3(count) >= 正解4(count):pos 10,50:mes "正解!" :good+
if 正解4(count) > 正解3(count):pos 10,50:mes "不正解!":bad+
count+:redraw 1:wait 100
}
if key=4{//右のキー
if 正解1(count) > 正解2(count):pos 10,50:mes "不正解!":bad+
if 正解2(count) >= 正解1(count):pos 10,50:mes "正解!" :good+
if 正解3(count) > 正解4(count):pos 10,50:mes "不正解!":bad+
if 正解4(count) >= 正解3(count):pos 10,50:mes "正解!" :good+
count+:redraw 1:wait 100
}
と書くと2問目(正解3と正解4の比較)で矢印キーを押すとエラーが出てしまいます。
どのように書き直せばよいのでしょうか?



KA

リンク

2012/10/11(Thu) 20:53:35|NO.49920

言いたい事が有るのですが、自制心で押さえます。



暇人

リンク

2012/10/11(Thu) 20:54:54|NO.49921

確保されてない配列要素を参照するからエラーが出るんだろう

なぜ

>正解1(0)=足す1+足される1 ,引く1-引かれる1
>正解2(0)=足す2+足される2 ,引く2-引かれる2

これを無視する・・・

>v1=""+足される1+"+"+足す1+"", ""+引く1+"-"+引かれる1+""
これと同じ要領で配列正解1に数値として計算結果を入れるって事なんだが・・・
二問目の正解が正解1(1)に入る
countに1が入ってれば正解1(count)で正解1(1)と同じ結果
だから正解3とかは必要ない

こっちは解決にして新しい方でやった良かった気がするが・・・



なかやまにんに君

リンク

2012/10/12(Fri) 18:13:00|NO.49947

>暇人さん
回答はうれしいのですが、何せ初心者なので回答の意味がよくわかっていません。
具体的にここをこう書き換えろみたいなことを書いてくれるとうれしいです。
何度も質問してすみません(泣)



KA

リンク

2012/10/12(Fri) 18:46:30|NO.49950

心頭滅却したのでアドバイスします。

初心者なら
1:まず各行で何をやっているのか、コメントを付けてください。
(ここは、A>Bだからこうするなど、詳細ですね。)

2:そして全体的な流れの説明を付けて下さい。
(この部分はこういう処理をしているなど。)

「概要」を書いても、どういう考えでそうしているのかは、あなたにしか
分かりません。他人にきちんと伝わる質問にしましょう。

以上です。



暇人

リンク

2012/10/12(Fri) 19:06:23|NO.49951

具体的に書いてるんだけど・・・

randomize 足す1 = rnd(9)+1 足される1 = rnd(9)+1 足す2 = rnd(9)+1 足される2 = rnd(9)+1 引く1 = rnd(9)+1 引かれる1 = rnd(9)+1 引く2 = rnd(9)+1 引かれる2 = rnd(9)+1 掛ける1 = rnd(9)+1 掛けられる1 = rnd(9)+1 掛ける2 = rnd(9)+1 掛けられる2 = rnd(9)+1 割る1 = rnd(19)+1 割られる1 = rnd(9)+1 割る2 = rnd(50)+10 割られる2 = rnd(9)+1 足す3 = rnd(99)+1 足される3 = rnd(9)+1 引く3 = rnd(99)+1 引かれる3 = rnd(9)+1 足す4 = rnd(99)+1 足される4 = rnd(9)+1 引く4 = rnd(99)+1 引かれる4 = rnd(9)+1 足す5 = rnd(99)+1 足される5 = rnd(9)+1 引く5 = rnd(99)+1 引かれる5 = rnd(9)+1 掛ける3 = rnd(99)+1 掛けられる3 = rnd(9)+1 割る3 = rnd(99)+1 割られる3 = rnd(9)+1 掛ける4 = rnd(99)+1 掛けられる4 = rnd(9)+1 割る4 = rnd(99)+1 割られる4 = rnd(9)+1 掛ける5 = rnd(99)+1 掛けられる5 = rnd(9)+1 割る5 = rnd(99)+1 割られる5 = rnd(9)+1 screen 0,300,100 v1=""+足される1+"+"+足す1+"", ""+引く1+"-"+引かれる1+"", ""+掛ける1+"*"+掛けられる1+"", ""+割る1+"/"+割られる1+"", ""+足す3+"+"+足される3+"", ""+足す4+"+"+足される4+"", ""+足す5+"+"+足される5+"", ""+掛ける3+"*"+掛けられる3+"", ""+掛ける4+"*"+掛けられる4+"", ""+掛ける5+"*"+掛けられる5+""//左の式 v2=""+足される2+"+"+足す2+"", ""+引く2+"-"+引かれる2+"", ""+掛ける2+"*"+掛けられる2+"", ""+割る2+"/"+割られる2+"", ""+引く3+"-"+引かれる3+"", ""+引く4+"-"+引かれる4+"", ""+引く5+"-"+引かれる5+"", ""+割る3+"/"+割られる3+"", ""+割る4+"/"+割られる4+"", ""+割る5+"/"+割られる5+"" //右の式 正解1(0)=足す1+足される1 ,引く1-引かれる1 ,掛ける1*掛けられる1 ,割る1/割られる1 ,足す3+足される3 ,足す4+足される4 ,足す5+足される5,掛ける3*掛けられる3,掛ける4*掛けられる4,掛ける5*掛けられる5//左の回答 正解2(0)=足す2+足される2 ,引く2-引かれる2,掛ける2*掛けられる2,割る2/割られる2,引く3-引かれる3,引く4-引かれる4,引く5-引かれる5, 割る3/割られる3,割る4/割られる4,割る5/割られる5 //右の回答 cnt1=length(v1) //左の式が何問あるかを調べる cnt2=length(v2) //右の式が何問あるかを調べる if cnt1!cnt2:mes "式の数が合いません":stop //式の数が合わないとき count=0 //問題番号 font "MS UI GOTHIC",30,1 //フォント time=0//経過時間 good=0//正解数 bad=0//不正解数 *main redraw 0 color 255,255,255:boxf:color pos 20,5:mes v1.count //左の式を描画 pos 170,5:mes v2.count //右の式を描画 stick key,5 if key=1{//左のキー if 正解1(count)>=正解2(count):pos 10,50:mes "正解!" :good+ if 正解2(count)>正解1(count):pos 10,50:mes "不正解!":bad+ count+:redraw 1:wait 100 } if key=4{//右のキー if 正解1(count)>=正解2(count):pos 10,50:mes "不正解!":bad+ if 正解2(count)>正解1(count):pos 10,50:mes "正解!" :good+ count+:redraw 1:wait 100 } if count=cnt1{ color 255,255,255:boxf:color pos 5,5:mes "全問終了\n正解数:"+good+"\n不正解数:"+bad stop } redraw 1 time+ title "経過時間:"+(time/60) await 5 goto *main
これでちゃんと動く
NO.49890、NO.49921で書いた事しかやってないでしょ?



なかやまにんに君

リンク

2012/10/12(Fri) 19:26:14|NO.49955

>暇人さん
実行したらちゃんと動きました!!
丁寧な説明ありがとうございました!!



ONION software Copyright 1997-2021(c) All rights reserved.