- ベストアンサー
Tiny Basicのプログラムで。。
次の5人の学生の成績の個人別の平均点と、科目別の平均点をそれぞれ求め、表示するプログラムを作成せよ。Print Using 文を使うと、きれいな表形式の出力が可能です。 学籍番号 英語 数学 情報 平均 1 70 60 80 2 50 60 50 3 70 90 100 4 90 100 50 5 40 70 80 という問題があって。。自分なりにやってみたんですが。。 Dim a(5,5) For i=1 to 5 For j=1 to 5 Read a(i,j) print a(i,j); Next j print Next i Data "学生番号","英語","数学","情報","平均" Data 1,70,60,80,70 Data 2,50,60,50,53 Data 3,70,90,100,87 Data 4,90,100,50,80 Data 5,40,70,80,63 Data "平均",64,76,72,71 End っていうふうにつくってみたんですがうまくいかなくて。。 みなさん、助けてください><
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
課題?独学?・・・とりあえず、指摘とヒント 個人別の平均点、科目別の平均点をあらかじめ計算をし、 DATAに配列していますが、 題意から察すると、 平均を求める数式を作成して、且つPRINTUSING で 見栄えよい表示にする。 ことを求めている。 出力結果が、下記のようになる事をイメージする。このとき、 100点が最大なので、文字スペース3桁使用である事も考慮。 学生番号 英語 数学 情報 平均 ←(1) 1 70 60 80 70 ←(2) 2 50 60 50 53 ←(3) 3 70 90 100 87 ←(4) 4 90 100 50 80 ←(5) 5 40 70 80 63 ←(6) 平均 64 76 72 71 ←(7) まず、データを読み込み、格納。(5人分、3科目で15個分) Dim a(5,3) For i=1 to 5 : For j=1 to 3 Read a(i,j) 次に(1)を実行 Print"学生番号 英語 数学 情報 平均" (2)~(6)で、 学生番号の i の平均を求める式は、 For i=1 to 5 Heikin(i)=Int((a(i,1)+a(i,2)+a(i,3))/3) 'Average関数でも良い。Int関数で整数化 Print i , a(i,1) , a(i,2) , a(i,3) , Heikin(i) ’ ここは、PrintUsing文 を使う。(自分で考える) Next i (7)で、教科平均 3科目分 求める式を作る。 と、意味あるのかわからないが、15個の平均を求める。 For j=1 to 3 Kyouka(j)=Int((a(1,j)+a(2,j)+a(3,j)+a(4,j)+a(5,j))/5) Next j AllHeikin=Int((Kyouka(1)+Kyouka(2)+Kyouka(3))/3) Print文で "平均”, Kyouka(1) , Kyouka(2) , Kyouka(3) , AllHeikin 'ここもPrintUsing文 で書く。 For~to~文:Next 間の 数式も、さらに改良の余地あり。 ここは、自分で考える。
その他の回答 (1)
- nac03056
- ベストアンサー率48% (203/419)
まず、プログラムに関する質問をする場合に、何をやったらどうなった(どう表示された)という情報がないと、答えが絞れなくなります。 で、TinyBASICそのものは知りませんが、ホームページでチラッと見た限り、昔のN-BASICに近いものだと思いますので、その範囲の知識でお答えいたします。 このプログラムの場合、readを2重ループで繰り返していますが、5回を5回で25回のreadがあることになります。ところがdata文は35個ですから不自然です。 つまりは、a()という配列変数は、学籍番号と成績を格納するためのものと想像しますが、DATA文の一番最初に項目名の文字データが並んでいますので、おそらく最初のreadの段階で数字配列変数に"学生番号"という文字を読み込もうとしたエラーが発生することと思います。 で、対処方法としていろいろ考えられますが、簡単なところで、一番最初のdata文を1行ごっそり抜いてしまうことでとりあえずそれっぽい表示ができるでしょう。ただ、問題文が要求しているプログラムとは、かなり離れたものですので、再考が必要です。(平均点を自分で計算してdata文にしている時点でもうプログラムじゃないですよ。) さて、具体的なプログラムとして、初期設定とデータ読み込みに、 Dim a(5,3) For i=1 to 5 For j=1 to 3 Read a(i,j) Next j Next i データ文に関しては Data 70,60,80 Data 50,60,50 Data 70,90,100 Data 90,100,50 Data 40,70,80 となり、これらの間に横の平均と縦の平均を求める計算の処理を入れ、出力の処理を入れたら出来上がりです。(プログラムの作り方次第では Dim a(5,3) よりも配列を大きく取って合計や平均を入れられるようにしたほうが楽かもしれません) プログラムの面白いのはここからですので、後は考えてみてください。