ベーシックで書かれたプログラムをC言語に直して実行しなさい、という問題を出されてしまったのですが、
ベーシックの知識が全くなく、C言語でのプログラミングも苦手なためまったくわかりません。
ベーシックで書かれたプログラムは以下のとおりです。
CLS
RANDOMIZE TIMER
h = 10
DIM a(h)
m = 0: v= 0: n = 1000
PRINT " 0.5 1.5 2.5 3.5 4.5 5.5 6.5 7.5 8.5 9.5"
PRINT " ---------------------------------------"
FOR k = 1 TO n
i = INT(RND(1) * h)
a(i) = a(i) + 1
NEXT k
FOR k = 0 TO h - 1
m = m + (k + .5) * a(k)
a(k) = a(k) / n
NEXT k
m = m / n
FOR k = 0 TO h - 1
PRINT USING "###.##"; a(k);
v = v + (k - .5 - m) ^ 2 * a(k)
NEXT k
PRINT
PRINT "平均"; m: PRINT "分散"; v: PRINT "標準偏差"; SQR(v)
END
ベーシックの知識のある方など、わかる方がいらっしゃれば力を貸していただけないでしょうか。
よろしくお願いします。
ベーシックをC言語に・・・
Re:ベーシックをC言語に・・・
ちなみにCの知識はどの程度ですか?
BASICのプログラムとはいえ、初歩的な物ですし、多少でもCを知っていれば、なんとなく予想できそうな内容ですが…
全く分からないのであれば、問題を出した人に聞くか、入門サイトは入門書などで勉強してください。
そうでないなら、自分でどこまでやっていて、ここが分からないという感じに疑問点を明確にしてください。
BASICのプログラムとはいえ、初歩的な物ですし、多少でもCを知っていれば、なんとなく予想できそうな内容ですが…
全く分からないのであれば、問題を出した人に聞くか、入門サイトは入門書などで勉強してください。
そうでないなら、自分でどこまでやっていて、ここが分からないという感じに疑問点を明確にしてください。
Re:ベーシックをC言語に・・・
バグさんもおっしゃっているように、BASICのプログラムも非常に初歩的なものですね。
FORとかPRINTとかはCでも同様の命令がありますから想像できますよね?
ttp://ja.wikipedia.org/wiki/BASIC
配列の宣言をDIM文で行っています。
乱数の種をTIMERにより時間から取っているのも想像に難くないですね。
CLSは多分画面消去(CLEAR SCREENの略だったかと)
PRINT USINGは書式付出力
RNDは乱数生成
BASIC 命令一覧
とかのキーワードで調べて御覧なさい^^
まずはそれから~
FORとかPRINTとかはCでも同様の命令がありますから想像できますよね?
ttp://ja.wikipedia.org/wiki/BASIC
配列の宣言をDIM文で行っています。
乱数の種をTIMERにより時間から取っているのも想像に難くないですね。
CLSは多分画面消去(CLEAR SCREENの略だったかと)
PRINT USINGは書式付出力
RNDは乱数生成
BASIC 命令一覧
とかのキーワードで調べて御覧なさい^^
まずはそれから~
Re:ベーシックをC言語に・・・
知識は乱数が少しわかる程度です・・・
いろいろと調べてやってみたのですが、
FOR k = 1 TO n
i = INT(RND(1) * h)
a(i) = a(i) + 1
NEXT k
この部分でループをさせる理由が分からないのです・・・
実際実行しても、エラーが出て結果が出てくれません・・・
いろいろと調べてやってみたのですが、
FOR k = 1 TO n
i = INT(RND(1) * h)
a(i) = a(i) + 1
NEXT k
この部分でループをさせる理由が分からないのです・・・
実際実行しても、エラーが出て結果が出てくれません・・・
Re:ベーシックをC言語に・・・
BASICやってるわけじゃないのであくまで「予測」ですが
INT(RND(1)*h)は RND(1)で0.0~1.0の乱数を取得し、h(10)かける事で配列の添え字を決めています。
乱数関数はCではrandでいいのかちょっと自信ないですが
こういうことなんじゃないかと思います。
INT(RND(1)*h)は RND(1)で0.0~1.0の乱数を取得し、h(10)かける事で配列の添え字を決めています。
乱数関数はCではrandでいいのかちょっと自信ないですが
for( int k = 0; k < n; k++ ) { i = rand() % 10; a = a + 1; }
こういうことなんじゃないかと思います。
Re:ベーシックをC言語に・・・
nは1000ですから1000回繰り返している
RND(1)は0~1未満の乱数の発生なのでh倍すなわち10倍すれば
0から10未満の数になる。これをINTすれば0から9までの整数になる。
a(i) = a(i) + 1 は、配列の中身を1つ増やしているので、結局
1000回乱数を発生させ、a(0)~a(9)までの、データにその発生回数を
格納しているってことでしょうか。
この後、この乱数で出たデータの平均や分散を求めてます。
>実際実行しても、エラーが出て結果が出てくれません・・・
これは、BASICで実行したときですか?それともC言語?
いずれにしても、何というエラーですか?
それにしても、これはゼミでの課題ですか?
BASICを授業で教えていないのに、Cに変換しろってのが、疑問です。
RND(1)は0~1未満の乱数の発生なのでh倍すなわち10倍すれば
0から10未満の数になる。これをINTすれば0から9までの整数になる。
a(i) = a(i) + 1 は、配列の中身を1つ増やしているので、結局
1000回乱数を発生させ、a(0)~a(9)までの、データにその発生回数を
格納しているってことでしょうか。
この後、この乱数で出たデータの平均や分散を求めてます。
>実際実行しても、エラーが出て結果が出てくれません・・・
これは、BASICで実行したときですか?それともC言語?
いずれにしても、何というエラーですか?
それにしても、これはゼミでの課題ですか?
BASICを授業で教えていないのに、Cに変換しろってのが、疑問です。
Re:ベーシックをC言語に・・・
理由・・・
それは後の計算をするためにはその素となるデータが必要だと思います。
そのデータを配列aに作成しているのだと思います。
1000回ループということは、1000個のデータ(サンプル)が必要だったんでしょう。
エラーについてはどんなエラーかわからないので答えようがありませんが、
BASICならたいていはsyntax error じゃないですか?
それは後の計算をするためにはその素となるデータが必要だと思います。
そのデータを配列aに作成しているのだと思います。
1000回ループということは、1000個のデータ(サンプル)が必要だったんでしょう。
エラーについてはどんなエラーかわからないので答えようがありませんが、
BASICならたいていはsyntax error じゃないですか?