新しく発言する EXIT インデックスへ
教えて

  教えて 美奈 2005/01/15 00:23:26 
  エクセルの標準のファイル形式を十進BASICで... 青木太一 2005/01/15 03:51:16 
   └どうもありがとうございます。csvでよみ... 美奈 2005/01/15 11:36:02 
    └どういうコードを書いたのかわからないとア... 青木太一 2005/01/15 14:55:04 
     ├こんなところが参考になるのでは?2005/01/15 15:09:15 
     │└BASICが初めてで、よく分かりません。... 美奈 2005/01/15 23:12:20 
     └今はここまでです。 美奈 2005/01/15 22:48:20 
      └a(i,1)〜a(i,17)まであるようですが、どの列... 青木太一 2005/01/15 23:13:37 
       └もう少しお願いします。最大得点の方も教え... 美奈 2005/01/15 23:56:22 
        └美奈さんが何がわかって何がわからないのか... 青木太一 2005/01/16 02:27:14 
         └LEThighest=0 美奈 2005/01/16 07:31:34 
          └アルゴリズムとしては正解だと思います。実... 青木太一 2005/01/16 08:33:45 
           └OPEN#11:NAME"a:\data.csv" 美奈 2005/01/16 23:46:21 
            └うーん、「変な数」が出ると言われても... 青木太一 2005/01/17 03:44:03 

  教えて 美奈 2005/01/15 00:23:26  ツリーへ

教えて 返事を書く
美奈 2005/01/15 00:23:26
エクセルのシートにテストの結果が200人分あり、それをBASICに読み込み、その全体の平均、最高点を求めるのに、どのようにプログラムを組んだらいいのか教えていただきませんか??お願いします

  エクセルの標準のファイル形式を十進BASICで... 青木太一 2005/01/15 03:51:16  ツリーへ

Re: 教えて 返事を書く
青木太一 2005/01/15 03:51:16
エクセルの標準のファイル形式を十進BASICで読み込むことは基本的にはできません。
エクセルで保存するときcsvというテキストデータで保存すれば、処理できます。

具体的にどう処理すればいいかですが、美奈さんがどの程度十進BASICが使えるのかわからないのでなんとも答えようがありません。
for文やファイル入出力はできるのでしょうか?

もしわからないのなら、データがどのような配置になっているのか知る必要があるので、csvのサンプルを示してください。(もちろんプライバシー保護のためにテスト受験者の名前は仮名に変えて)

そもそもどういう目的でエクセルのシートを十進BASICで処理したいのかわからないので、妥当な答えになってないかもしれませんが、そんなところです。
(平均、最高点を求めるだけならエクセルの機能を使ったほうが何倍も簡単ですから...)

   └どうもありがとうございます。csvでよみ... 美奈 2005/01/15 11:36:02  ツリーへ

Re: エクセルの標準のファイル形式を十進BASICで... 返事を書く
美奈 2005/01/15 11:36:02
どうもありがとうございます。csvでよみこめましたが、全体の中の最高得点と全体の平均点をだすプログラムがうまくつれないで悩んでます。学校の課題なんです〜全然わからないので、教えてください!

    └どういうコードを書いたのかわからないとア... 青木太一 2005/01/15 14:55:04  ツリーへ

Re: どうもありがとうございます。csvでよみ... 返事を書く
青木太一 2005/01/15 14:55:04
どういうコードを書いたのかわからないとアドバイスできないので、
コードを張り付けて見せていただきたいです。

でも以下適当に書き散らしてみます。

・読み込めたということは、ファイル入力は理解できたのかな?

最高点を求めるアルゴリズムは

1.暫定最高点を保存する変数tmp_highestに最初のひとの点数を代入
2.次の人の点数がtmp_highestより高いならtmp_highestにその点数を代入し直す。
3. 2.を最後のひとまで繰り返す。

という基本方針になると思いますが、そういうことはわかっていて十進BASICで書くことができないのでしょうか?
それともこのようなアルゴリズムを考え出すのがまだ不慣れで悩んでいらっしゃるのでしょうか?

     ├こんなところが参考になるのでは?2005/01/15 15:09:15  ツリーへ

Re: どういうコードを書いたのかわからないとア... 返事を書く
2005/01/15 15:09:15
こんなところが参考になるのでは?
http://www.wakayama-u.ac.jp/~matsuda/class/C1/text/C1-5/

     │└BASICが初めてで、よく分かりません。... 美奈 2005/01/15 23:12:20  ツリーへ

Re: こんなところが参考になるのでは? 返事を書く
美奈 2005/01/15 23:12:20
BASICが初めてで、よく分かりません。平均も最高点もどう出せばいいのかも、掲示してあったHPの例題も使い方がわかりません
失礼な事を言ってすいません。教えてください。ピンチなんです

     └今はここまでです。 美奈 2005/01/15 22:48:20  ツリーへ

Re: どういうコードを書いたのかわからないとア... 返事を書く
美奈 2005/01/15 22:48:20
今はここまでです。
OPEN #11: NAME "a:data.csv"
DIM a(200,17)
FOR i=1 TO 200
INPUT #11: a(i,1), a(i,2), a(i,3), a(i,4), a(i,5), a(i,6), a(i,7), a(i,8), a(i,9), a(i,10), a(i,11), a(i,12), a(i,13) ,a(i,14), a(i,15), a(i,16), a(i,17)
NEXT i
MAT PRINT a
END
でcsvから読みこみました。そこから最高点と全体の平均がうてません。すいません、よろしくお願いします。tmp_hightestをどう使うか教えてください。

      └a(i,1)〜a(i,17)まであるようですが、どの列... 青木太一 2005/01/15 23:13:37  ツリーへ

Re: 今はここまでです。 返事を書く
青木太一 2005/01/15 23:13:37
a(i,1)〜a(i,17)まであるようですが、どの列が点数なのでしょう?
まあいいや、とりあえず一列目が点数だとします。

参考用に合計を表示する方法を書きます。

sum=0
for i=1 to 200
sum=sum+a(i,1)
next i
print "a(i,1)の合計=";sum

いじわるかもしれませんが、学校の課題なら平均や最高点の出し方は自分で考えてください。
合計のやりかたは書いたので、平均は簡単ですね。
最高点を求めるときは、合計では足し上げを行っているところに比較と暫定最高値の更新(代入)が入ります。
どうしてもわからなければ、どうわからないのか書いてください。

ところで、上のプログラムで本当にデータを読み込めるのでしょうか? 最初の行の「a:」のあとに「\」が必要で
OPEN #11: NAME "a:\data.csv"
だと思うのですが。

       └もう少しお願いします。最大得点の方も教え... 美奈 2005/01/15 23:56:22  ツリーへ

Re: a(i,1)〜a(i,17)まであるようですが、どの列... 返事を書く
美奈 2005/01/15 23:56:22
もう少しお願いします。最大得点の方も教えてください。
お願いします

        └美奈さんが何がわかって何がわからないのか... 青木太一 2005/01/16 02:27:14  ツリーへ

Re: もう少しお願いします。最大得点の方も教え... 返事を書く
青木太一 2005/01/16 02:27:14
美奈さんが何がわかって何がわからないのか書いていただかないことには、適切なアドバイスはできません。
ただ「お願いします」と書くだけではなく、ご自分がどこまで理解しているのかを書いてください。
というわけで、以下のアドバイスも適切かどうかわかりませんが...

点数がa(i)に入っているとしてこのプログラムは理解できますか?

LET highest=a(1)

if highest<a( 2 ) then LET highest=a( 2 )
!highestには、この時点でa(1)〜a( 2 )までのうちの最高点が入っている

if highest<a( 3 ) then LET highest=a( 3 )
!highestには、この時点でa(1)〜a( 3 )までのうちの最高点が入っている

if highest<a( 4 ) then LET highest=a( 4 )
!highestには、この時点でa(1)〜a( 4 )までのうちの最高点が入っている

print highest
END

このプログラムのようにどんどん200まで書けば、最高点が求まります。
ただ、いちいち200個も書くのは面倒だし無駄なので、普通はfor文を使って繰り返し処理の中で実現します。

         └LEThighest=0 美奈 2005/01/16 07:31:34  ツリーへ

Re: 美奈さんが何がわかって何がわからないのか... 返事を書く
美奈 2005/01/16 07:31:34
LET highest=0
FOR i=1 TO 200
if highest<a( i) then LET highest=a( i)
NEXT i
PRINT
END
でいいんですか?

          └アルゴリズムとしては正解だと思います。実... 青木太一 2005/01/16 08:33:45  ツリーへ

Re: LEThighest=0 返事を書く
青木太一 2005/01/16 08:33:45
アルゴリズムとしては正解だと思います。実際にエクセルのデータの最高点を出すかどうか検査してみてはいかがでしょう。

なお、ENDの前がPRINTでは、何も出力されないので、PRINT highestとして最高点を出力するように変更してはどうでしょう。

美奈さんが答えを出せたので書きますが、正解はひとつだけではありません。たとえば
if highest<a( i) then LET highest=a( i)
のかわりに
highest=max(highest,a( i)) !highestとa(i)の大きい方をhighestに代入
としてもokです
もちろん結果としては同じことをやっているのですが...

           └OPEN#11:NAME"a:\data.csv" 美奈 2005/01/16 23:46:21  ツリーへ

Re: アルゴリズムとしては正解だと思います。実... 返事を書く
美奈 2005/01/16 23:46:21
OPEN #11: NAME "a:\data.csv"
DIM a(200,17)
FOR i=1 TO 200
INPUT #11: a(i,1), a(i,2), a(i,3), a(i,4), a(i,5), a(i,6), a(i,7), a(i,8), a(i,9), a(i,10), a(i,11), a(i,12), a(i,13) ,a(i,14), a(i,15), a(i,16), a(i,17)
NEXT i
LET sum=0
FOR i=1 TO 200
FOR n = 2 TO 17
PRINT a(i,n);
LET sum = sum + a(i,n)
NEXT n
NEXT i
LET hightest=0
FOR i=1 TO 200
FOR j=2 TO 17
IF hightest<a(i,j) THEN LET hightest=a(i,j)
NEXT j
NEXT i
PRINT hightest
END
200人で1人1人、17回分のテスト結果を足して、その中の最高点を出すプログラムをたててみましたが、なんか実行しても変な数がでます。どこか間違ってますか??

            └うーん、「変な数」が出ると言われても... 青木太一 2005/01/17 03:44:03  ツリーへ

Re: OPEN#11:NAME"a:\data.csv" 返事を書く
青木太一 2005/01/17 03:44:03
うーん、「変な数」が出ると言われても...
前にも書いたとおり、元のcsvファイルを一部でもいいので示していただかないと...

しかし、なんとなく想像がつくので、回答してみます。
以下は私の想像で書いているので、見当違いかもしれません。

おそらくこのcsvファイルは1列目が出席番号で、
学生は16種類のテストを受け、その点が2列目から17列目に入っているのでしょう。
そしてこのプログラムは、各学生の各科目の点数をだーっと一行に書き下し(200×16=3200も!)
>FOR i=1 TO 200
>FOR n = 2 TO 17
>PRINT a(i,n);

その行の最後にその3200個の点から最高点を
>PRINT hightest

私からの改善案はとりあえず2個あります。
行番号がないと説明が読みにくいと思うので、先に改良したプログラムを書いてみました。

100 OPEN #11: NAME "a:\data.csv"
110 DIM a(200,17)
120 FOR i=1 TO 200
130 INPUT #11: a(i,1), a(i,2), a(i,3), a(i,4), a(i,5), a(i,6), a(i,7), a(i,8), a(i,9), a(i,10), a(i,11), a(i,12), a(i,13) ,a(i,14), a(i,15), a(i,16), a(i,17)
140 NEXT i
150 LET sum=0
160 FOR i=1 TO 200
170 FOR n = 2 TO 17
180 PRINT a(i,n);
190 LET sum = sum + a(i,n)
200 NEXT n
210 print
220 NEXT i
230 print sum
240 LET hightest=0
250 FOR i=1 TO 200
260 FOR j=2 TO 17
270 IF hightest<a(i,j) THEN LET hightest=a(i,j)
280 NEXT j
290 NEXT i
300 PRINT hightest
310 END

入力されたデータを改行無しに出力するのは見にくいので
210 print
をつけました。

せっかく3200個の点数の合計を計算しているのに、その結果を表示していないので、表示するようにしました。
230 print sum

あと、プログラム上の問題ではないですが、英語の問題として、hightestではなくhighestではないでしょうか。
これは修正していませんが。

というわけで、アルゴリズムは正しく、表示だけの問題だったのではないでしょうか。

と言って終わってもいいのですが、私の想像はさらに膨らみます。
美奈さんはおそらく各16教科いっしょくたんにまとめた合計や最高点を出したいのではなく、各教科ごとに合計点と平均点を算出したいのではないでしょうか?
だとすると、アルゴリズムがそもそも間違ってます。for文の使い方をよく考えたほうがいいです。

しかし、私の勝手な想像なので詳しく書くのは面倒だしこれくらいにしておきます。
参考になりましたら幸いです。


インデックスへ EXIT
新規発言を反映させるにはブラウザの更新ボタンを押してください。