ベーシックをC言語に・・・

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

ベーシックをC言語に・・・

#1

投稿記事 by sora » 16年前

ベーシックで書かれたプログラムを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

ベーシックの知識のある方など、わかる方がいらっしゃれば力を貸していただけないでしょうか。
よろしくお願いします。

バグ

Re:ベーシックをC言語に・・・

#2

投稿記事 by バグ » 16年前

ちなみにCの知識はどの程度ですか?
BASICのプログラムとはいえ、初歩的な物ですし、多少でもCを知っていれば、なんとなく予想できそうな内容ですが…
全く分からないのであれば、問題を出した人に聞くか、入門サイトは入門書などで勉強してください。
そうでないなら、自分でどこまでやっていて、ここが分からないという感じに疑問点を明確にしてください。

やそ

Re:ベーシックをC言語に・・・

#3

投稿記事 by やそ » 16年前

バグさんもおっしゃっているように、BASICのプログラムも非常に初歩的なものですね。
FORとかPRINTとかはCでも同様の命令がありますから想像できますよね?

ttp://ja.wikipedia.org/wiki/BASIC

配列の宣言をDIM文で行っています。
乱数の種をTIMERにより時間から取っているのも想像に難くないですね。
CLSは多分画面消去(CLEAR SCREENの略だったかと)

PRINT USINGは書式付出力
RNDは乱数生成

BASIC 命令一覧

とかのキーワードで調べて御覧なさい^^

まずはそれから~

sora

Re:ベーシックをC言語に・・・

#4

投稿記事 by sora » 16年前

知識は乱数が少しわかる程度です・・・

いろいろと調べてやってみたのですが、

FOR k = 1 TO n
i = INT(RND(1) * h)
a(i) = a(i) + 1
NEXT k

この部分でループをさせる理由が分からないのです・・・
実際実行しても、エラーが出て結果が出てくれません・・・

ねこ

Re:ベーシックをC言語に・・・

#5

投稿記事 by ねこ » 16年前

BASICやってるわけじゃないのであくまで「予測」ですが
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;
}


こういうことなんじゃないかと思います。

non

Re:ベーシックをC言語に・・・

#6

投稿記事 by non » 16年前

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に変換しろってのが、疑問です。

やそ

Re:ベーシックをC言語に・・・

#7

投稿記事 by やそ » 16年前

理由・・・

それは後の計算をするためにはその素となるデータが必要だと思います。
そのデータを配列aに作成しているのだと思います。
1000回ループということは、1000個のデータ(サンプル)が必要だったんでしょう。

エラーについてはどんなエラーかわからないので答えようがありませんが、
BASICならたいていはsyntax error じゃないですか?

閉鎖

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