• ベストアンサー

ロジック・・・ プログラミング

ポケットコンピュータでプログラミングをしている とある者です。 次の問題を言語、Basicを用いて作ってください。 ※ 私は、それを利用するとか宿題だぁ!とか そういったものではありません。 専門知識のある方のプログラムの作り方をみて勉強をさせていただきたいのです。 なるべく簡単な文でお願いいたします。 ┏━┓ ┃1┃ ┗━┛ 5人に英語のテストを行い、次のような結果が得られました Aくん= 20 Bくん= 40 Cくん= 30 Dくん= 80 Eくん= 50 (1)それぞれの点数を(READ,DATAを使い)読んでから、5人の平均を求め、さらに平均点に最も近い点数を見つけ、平均点にもっともちかい点数を表示するプログラム (2) ↑(1)のやつを、READで読むのではなく、INPUTに書き換えるのならば、その書き換えた部分のプログラム ┏━┓ ┃2┃ ┗━┛ (1)X,Yの値を入力して Z=X*(かける)Y+Y を計算し、Zの値を表示し、プラスの時は、”プラス”、マイナスの時は”マイナス”、ゼロの時は”ゼロ”と表示するプログラム。 その表示と同時に、その計算結果を表示させる。 (2) ↑(1)のプログラムを改良して、最後まで計算をしたら、 ”Please any key!”と点滅表示させて、何かキーを押したら、最初の行に戻るプログラムにする。 どうか、面倒さまですが、おしえてください。 また、こんな初心者にも(でなくても)わかるようなHPがありましたら、教えてくださいね。 ご回答お待ちしています。

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

  • ベストアンサー
  • eatern27
  • ベストアンサー率55% (635/1135)
回答No.1

行番号は省略します 1-(1) OPTION BASE 0 DIM A(4) READ A(0),A(1),A(2),A(3),A(4)…* FOR N=0 TO 4 LET T=T+A(N) NEXT N LET T=T/5 LET S=ABS(A(0)-T) FOR N=1 TO 4 IF S>ABS(A(N)-T) THEN LET S=ABS(A(N)-T) LET M=N END IF NEXT N PRINT A(M) DATA 20,40,30,80,50 END 1-(2) *の部分を FOR I=0 TO 4 INPUT A(I) NEXT I としDATAを消します。 2-(1) INPUT X,Y LET Z=X*Y+Y LET ZZ=SGN(Z) SELECT CASE ZZ CASE 1 PRINT :"プラス"; CASE 0 PRINT :"ゼロ"; CASE -1 PRINT :"マイナス"; END SELECT PRINT:ZZ END 2-(2)はまた後で、

その他の回答 (2)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.3

こんにちわ。 ひさびさにBasic のプログラムを書きました。 Basic も機種によって文法が異なる場合がありますので、お使いの環境で そのまま動くかどうかは分かりません。 1-1 平均点と平均に一番近い点数を出力 (Read~Data 版) 100 rem 110 dim score(5) as integer 120 rem 5人の平均を求める 130 sum=0 140 for i = 1 to 5 150  read score(i):sum = sum + score(i) 160 next i 170 avg = sum / 5 180 rem 平均に一番近い点数を求める 190 diff = abs(avg - score(1)):sc = score(1) 200 for i = 2 to 5 210  if abs(avg - score(i)) < diff then 220   diff = abs(avg - score(i)):sc = score(i) 230  end if 240 next i 250 print "Average= ";avg 260 print "Score= ";sc 300 data 20, 40, 30, 80, 50 1-2 平均点と平均に一番近い点数を出力 (Input 版) 100 rem 110 dim score(5) as integer 120 rem 5人の平均を求める 130 sum=0 140 for i = 1 to 5 150  print chr$(asc("A") + i - 1); "君の点数 "; 160  input score(i):sum = sum + score(i) 170 next i 180 avg = sum / 5 190 rem 平均に一番近い点数を求める 200 diff = abs(avg - score(1)):sc = score(1) 210 for i = 2 to 5 220  if abs(avg - score(i)) < diff then 230   diff = abs(avg - score(i)):sc = score(i) 240  end if 250 next i 260 print "Average= ";avg 270 print "Score= ";sc 2-1 X*Y+Y の計算 100 rem 110 print "X = "; 120 input x 130 print "Y = "; 140 input y 150 z = x*y+y 160 print "Z = "; z 170 if z > 0 then 180  print "プラス" 190 elseif z < 0 then 200  print "マイナス" 210 else 220  print "ゼロ" 230 end if 2-1 X*Y+Y の計算 (キー入力待ち) 100 rem 110 print "X = "; 120 input x 130 print "Y = "; 140 input y 150 z = x*y+y 160 print "Z = "; z 170 if z > 0 then 180  print "プラス" 190 elseif z < 0 then 200  print "マイナス" 210 else 220  print "ゼロ" 230 end if 240 a$="" 250 print "Preaa any key!!" 260 a$=inkey$:if a$="" then goto 260 270 goto 110 ※ 点滅表示のさせ方が分からなかったので、単に表示にしてあります。

  • eatern27
  • ベストアンサー率55% (635/1135)
回答No.2

#1のものです。 2-(2) これは2-(1)を基本に考えます。 DO INPUT X,Y LET Z=X*Y+Y | |(1)を見て埋めて下さい。 | END SELECT PRINT ZZ PRINT "Please any key!”←"Press any key!”では? CHARACTER INPUT CLEAR:s$ LOOP #1で"PRINT"の後の":"を消して下さい。

関連するQ&A