• ベストアンサー

10進ベーシックで質問です。

 超初心者です。サイコロのプログラムを勉強しています。以下のプログラムを書いたところREMはここに書けないと表示され実行できませんでした。実用書通り書いたのですが、、、。実行させるにはどうすればいいか教えて下さい。 REM***サイコロの実験 DIM B(6) RANDOMIZE FOR I=1 TO 600  LET D=INT(RND*6)+1  LET B(D)=B(D)+1 NEXT I FOR J=1 TO 6  PRINT J;B(J) NEXT J END

  • mika5
  • お礼率73% (14/19)

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.5

#4>どうすれば一番さんのプログラムを実行できるでしょうか #1さんのプログラムは、Visual Basicでのプログラムですので、十進BASICでそのままでは動かせません。 なるたけ、元のままで、十進BASICで動作するように書き直してみました。 Dim B(6) Randomize For i = 1 To 600 Let d = Int(Rnd * 6) + 1 Let B(d) = B(d) + 1 Next i For j = 1 To 6 LET X$ = X$ & "[" & STR$(j) & ":" & STR$(B(j)) & "]" Next j PRINT X$ END

mika5
質問者

お礼

ご返信ありがとうございます。動作しました。しかも 1~6のサイコロの数まで詳しくかいてくださりわかりやすい乱数のプログラムを書いてくださり非常に助かりました。とても感謝しています。どうもありがとうございました。

その他の回答 (4)

noname#10813
noname#10813
回答No.4

プログラムを拝見すると、10年前くらいの実用書を読まれてませんでしょうか? とりあえず、#1さんのように入力して、a()というのを実行できるようにしてみてください。

mika5
質問者

補足

ご返信ありがとうございます。  「パソコンで遊ぶ簡単プログラミング」木村良夫さんの 本(講談社)です。2003年に第一版です。一番さんのプログラミングを実行させたいのですがうまくいきませんでた。どうすれば一番さんのプログラムを実行できるでしょうか。。。折角書いてくださったのにもったいなくて お時間あるときお知恵をかして下さい。

  • kachimi
  • ベストアンサー率40% (12/30)
回答No.3

VBだとすれば、全角でREMと記述しても半角変換されます。REMというのはコメントで使用しますのでシングルクォーテーション(')にしても駄目なら、#1さんの言われるように削除してみてください。 安易に綴りが違っているとか些細な原因のような気がします。ちなみに通常LETも無くても構いません。

mika5
質問者

お礼

ご返信ありがとうございます。シングルクォーテンションというのをやってみましたが「識別名がありません」と 表示されました。そこで一番さんと貴殿がいうREM自体 削除して2番さんのいう予約語を半角にしたところ実行できました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

予約語等は半角英数で入力しないといけないようです。 REM***サイコロの実験 DIM B(6) RANDOMIZE FOR I=1 TO 600 LET D=INT(RND*6)+1 LET B(D)=B(D)+1 NEXT I FOR J=1 TO 6 PRINT J;B(J) NEXT J END の様に入力し直して下さい。

mika5
質問者

お礼

ご返信ありがとうございます。 コピーペーストして実行したところうまくいきました。 予約語は半角でないといけないのですね。なるほど勉強になりました。

回答No.1

どんなBasicなのかわからないのでなんとも言えませんが、REMが書けないというエラーであれば、REMから始まる一行を消してしまえばいいと思います。 ちなみにVBのカテでしたので、VBで書いて見るとこんな感じです(プログラムはかなり手抜きで書いています。。。) Sub a() Dim B(6) Dim i As Integer Dim j As Integer Dim d As Integer Dim X As String Randomize For i = 1 To 600 Let d = Int(Rnd * 6) + 1 Let B(d) = B(d) + 1 Next i For j = 1 To 6 X = X & "[" & j & ":" & B(j) & "]" Next j MsgBox X End End Sub

mika5
質問者

補足

 ご返信ありがとうございます。 10進ベーシックでコピーペストして実行させてみたところ「ここには書けません。識別名が必要です。」と表示されました。せっかく詳しく書いてくださったので実行させたいです。それとも言語自体が違うのでしょうか。。。 よくわからなくて質問するのも失礼ですがお時間あるとき また教えて下さい。

関連するQ&A

  • 【至急】文字を点滅させる方法は?

    質問します。 下記のプログラムにおいて、 13 PRINT "只今、計算中です。少々お待ち下さい。" 14 PRINT "計算終了後、下記に結果を表示します。" の部分だけを点滅させたいのですが、色が変わる変化しかしません。COLOR 2と書けば点滅するはずですよね? 1 CLS 2 REM 乱数を用いてサイコロ(6面体ダイス)を再現。12000回振って各自がほぼ2000回ずつ出るようなサイコロを目指す。 10 INPUT "乱数系列の値をいくつに設定しますか" ;X 13 PRINT "只今、計算中です。少々お待ち下さい。" 14 PRINT "計算終了後、下記に結果を表示します。" 20 RANDOMIZE X 30 DIM DICE(6) 40 FOR T=1 TO X 50 LET N=1+INT(6*RND) 60 FOR I=1 TO 6 70 IF N=I THEN LET DICE(I)=DICE(I)+1 80 NEXT I 90 NEXT T 100 PRINT 110 FOR J=1 TO 6 120 PRINT J;"の目は"; DICE(J);"回出ました。" 130 NEXT J 140 END よろしくお願いします。

  • VBAの乱数について質問

    乱数 x (0<x<1)を0.1刻みで発生させたいんですが うまくいきません。 プログラム例 Sub 一様乱数() Dim bin#(10) n = 1000 For m = 1 To 10 bin#(m) = 0 Next m For J = 1 To n x = Rnd(1) ix = Int(10 * Rnd(1)) bin#(ix) = bin#(ix) + 1 Next J Cells(4, 1) = " I" Cells(4, 2) = "Bin#(I)度数分布" For I = 0 To 10 Cells(I + 5, 1).Value = I Cells(I + 5, 2).Value = bin#(I) Next I End Sub ここで、9行目ix = Int(10 * Rnd(1))で0.1刻みになり 15行目のFor I = 0 To 10を0 to 1に変えればできると思ったんですが できませんでした。 どこが問題なのかヒントでもいいので教えてください。

  • 効率のよい方法ないでしょうか?(VB.NET 2002)

    a,b,c,d,e (100) という配列があり、それぞれ、 1~100までの数字をばらばらに入れたいのです。 ↓のプログラムを変数の分書かなくてはいけないのでしょうか? (Control変数は使えないようですし・・・) For for_i = 1 To 200 x = Int(Rnd() * 100) + 1 y = Int(Rnd() * 100) + 1 st = a(y) a(y) = a(x) a(x) = st next For for_i = 1 To 200 x = Int(Rnd() * 100) + 1 y = Int(Rnd() * 100) + 1 st = b(y) b(y) = b(x) b(x) = st next 以下省略!!

  • VBAにおける、たし算の自動作問プログラムについて

    二列目に、二桁の整数の足し算を出題することができるたし算の作問プログラムを以下のように作ったのですが、続いて三列目に、足し算の解答をして、それの正誤を確かめるプログラムを作りたいのですがどのようにすればよいでしょうか? ↓作問のプログラム Sub test() Columns("B:F").Clear n = InputBox("問題数は?") ReDim ans(n) For i = 1 To n Randomize x = Int(Rnd * 100) Randomize y = Int(Rnd * 100) ans(i) = x + y Cells(i, 2) = "(" & i & ") " & x & " + " & y & " = " Next i End Sub 以下のような感じで採点のプログラムを作りたいのですが、上のプログラムの変数ans(i)を参照する場合、下のプログラムのans(i)はどのように定義すればよいのでしょうか? Sub saiten() For i = 1 To n If Cells(i, 3) = ans(i) Then Cells(i, 4) = "○" Else: Cells(i, 4) = "×" Next i End Sub

  • BASICでモンテカルロ法

    モンテカルロ法で円周率の推定値を計算することを最近習ったのですが、定積分でもそれが可能なのを知り、どうやってプログラムを組めばいいのか分からず、困っています。 例えば、定積分∫[0→1]x^2dx=1/3~0.333([0→1]というのは、積分範囲です。)をモンテカルロ法で計算すると、どういうプログラムを組めばいいのでしょうか? わかる範囲で書いてみたのですが…積分の範囲をどうやってプログラミングすればいいのか、いまいち分かりませんでした。 教えていただけると、助かります。よろしくお願いします。 RANDOMIZE INPUT n SET WINDOW -0.1,1.1, -0.1,1.1 DRAW GRID SET POINT STYLE 1 LET sumin=0 FOR i=0 TO n LET x=RND LET y=RND SET POINT STYLE 2 IF y<x*x THEN SET POINT COLOR 4 LET sumin=sumin+1 END IF ! PRINT USING "(%.####, %.####)": x,y PLOT POINTS: x,y NEXT i PRINT 1*1*sumin/n END

  • 重複しない乱数整数を発生させる。

    重複しない乱数整数を発生させるため、次のような構文を作りましたが、うまくいきません。 アドバイスをお願いします。 Sub RRR() Dim A, B, C, D, E As Integer A = 1 B = 10 For D = A To B Randomize E = Int((B - A + 1) * Rnd + A) Cells(D, 1) = E Next D End Sub

  • うまくできない??NO1

    ピクチャーを1~25までクローンで貼り付けています (P1に変えました) したいのは5*5のますがあります クリックするとたてと横がひっくり返る(色が変わる)ようなプログラムを作りたいのです。 がうまくできないのです。なにが間違っているのでしょうか? Private Sub Form_Load() Randomize For i = 1 To 25 co = Int(Rnd * 2) + 1 If co = 1 Then P1(i).BackColor = vbRed Else P1(i).BackColor = vbBlue End If Next i End Sub 続く・・・

  • EXCEL VBA 配列変数の値すべてを返すには

    EXCELは2002ですが、97でも動くと嬉しいです。 《質問》 1~10をランダムに並べるためのプログラムを書きました。 これはこれで動くのですが、一行(3行目)だではなく 4行目にも、5行目にも同じことをしたい場合、 バブルソートの部分をサブルーチン(関数)にしたいのですが X_v() = GetSortArray(n_s,n_v)()とはできません。.cloneもだめですよね。 かといって、要素毎に引くとその度にRndが効いて、1~10が並びません。 どのようにやるのが、スマートなのでしょうか?よろしくお願いします。 《以下プログラム》 Sub Bu_Click() Dim i As Integer Dim j As Integer Const n_e = 10 Const n_s = 1 Dim X_r(n_e) As Long Dim X_v(n_e) As Long Dim temp1 As Long Dim temp2 As Integer Randomize For i = n_s To n_e X_r(i) = Int(Rnd * 10 ^ 9) X_v(i) = i Next i For i = n_s To n_e - 1 For j = n_s To n_e - 1 If X_r(j + 1) < X_r(j) Then temp1 = X_r(j + 1) X_r(j + 1) = X_r(j) X_r(j) = temp1 temp2 = X_v(j + 1) X_v(j + 1) = X_v(j) X_v(j) = temp2 End If Next j Next i For i = 0 To n_e - 1 Cells(3, 3 + i).Value = X_v(i + 1) Next i End Sub Public Function GetSortArray(s As Integer, e As Integer) As Long() Dim r() As Long Dim v() As Long Dim temp1 As Long Dim temp2 As Integer ReDim r(e) ReDim v(e) Randomize For i = s To e r(i) = Int(Rnd * 10 ^ 9) v(i) = i Next i For i = s To e - 1 For j = s To e - 1 If r(j + 1) < r(j) Then temp1 = r(j + 1) r(j + 1) = r(j) r(j) = temp1 temp2 = v(j + 1) v(j + 1) = v(j) v(j) = temp2 End If Next j Next i GetSortArray = v() End Function ありゃ?Tabのスペース消えますね。

  • モンテカルロ法

    モンテカルロ法で円周率の推定値を計算することを最近習ったのですが、定積分でもそれが可能なのを知り、どうやってプログラムを組めばいいのか分からず、困っています。 例えば、定積分∫[0→1]x^2dx=1/3~0.333([0→1]というのは、積分範囲です。)をモンテカルロ法で計算すると、どういうプログラムを組めばいいのでしょうか? わかる範囲で書いてみたのですが…積分の範囲をどうやってプログラミングすればいいのか、いまいち分かりませんでした。 教えていただけると、助かります。よろしくお願いします。 RANDOMIZE INPUT n SET WINDOW -0.1, 1.1, -0.1,1.1 DRAW grid SET POINT STYLE 1 LET sumin=0 FOR i=0 TO n LET x=RND LET r=x*x SET POINT COLOR 2 ! PRINT USING "(%.####, %.####)": x,y; PLOT POINTS: x,y; NEXT i PRINT sumin;n PRINT sumin/n END

  • 重複しない乱数発生

    初めて投稿させて頂きます。 サイコロを振って、一度出た目はもう出ないような ゲームをプログラミングしています。 Dim i As Integer Dim j As Integer Dim t As Integer Dim r(6) As Integer 'コンピュータ Dim b As Integer 'プレイヤー Private Sub Command1_Click() b = Val(Text2.Text) Randomize r(6) = Int(Rnd * 6 + 1) '1~6までの乱数発生 Text1.Text = r(6) For i = 1 To n r(i) = i 'r(i)~r(n)に1~nの値を格納 Next i For i = n To 2 Step -1 j = Int((i - 1) * Rnd() + 1) '1~i-1の範囲の乱数 t = r(i): r(i) = r(j): r(j) = t 'r(i)とr(j)の交換 Next i For i = 1 To n Text1.Text = r(i) Next i If r(i) < j Then Label2.Caption = "あなたの勝ちです" Else Label2.Caption = "あなたの負けです" End If 幾つか考えてこれで落ち着いたのですが、これでは まだ重複してしまいます。 どこが問題なのかご指摘頂けるようお願いします。 一度出た目は出ないようにするので、全部で6回試行 することになります。またその6回分の結果を表示したいのですが、 Text3.Text = r(1) Text4.Text = r(2) Text5.Text = r(3) Text6.Text = r(4) Text7.Text = r(5) Text8.Text = r(6) としてしまうと全てに0が表示され、結果が表示されません。 これについても回答をお願いします。 まだ初心者ですが、よろしくお願いします。