新しく発言する  EXIT  インデックスへ
センター試験

  センター試験 山中和義 2008/01/21 10:52:40 
  問題文のアルゴリズムを素直に書くと 白石 和夫 2008/01/21 11:20:55 
  │└余りを求めるのに 白石 和夫 2008/01/21 11:30:29 
  │ ├あえて試験だから、このようにコード化する... 山中和義 2008/01/21 11:54:42 
  │ │└みごとなスパゲッティ・プログラムです。 白石 和夫 2008/01/21 17:59:57  (修正1回)
  │ │ └過去問題をいくつか見てみると、パターンが... 山中和義 2008/01/22 20:52:21 
  │ └ユークリッドのアルゴリズムは除算を用いな... 白石 和夫 2008/01/21 11:54:53  (修正1回)
  全文を、書かせる出題方法は、とれないもの... SECOND 2008/01/21 15:17:01 
  │└!整理すると、こんなに短いものです。 SECOND 2008/01/21 21:09:19  (修正4回)
  素朴な疑問 小塚貞典 2008/01/21 22:02:59 
   └問題点と背景について私見 小塚貞典 2008/01/23 10:20:03 

  センター試験 山中和義 2008/01/21 10:52:40   ツリーへ

センター試験  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/21 10:52:40
最近の掲示板のテーマでした。
文法は、N88ではなくFULL BASICなんですね。

解答のプログラム


10 !センター試験 数学U・数学B 2008.1.20
20 !ユークリッドの互除法による自然数x,yの最大公約数(GCD)、最小公倍数(LCM)を求める
30 !関係式 LCM*GCD=x*y

100 INPUT PROMPT "x=": X
110 INPUT PROMPT "y=": Y
120 IF X<Y THEN
130 LET Z=X !※作業変数Zを介して、x,yの交換 swap x,y
140 LET X=Y !※
150 LET Y=Z !※
160 END IF
LET T=X*Y
170 IF Y=0 THEN
180 PRINT X !GCD
PRINT T/X !LCM
190 GOTO 270
200 END IF
210 LET R=X !※余りRを求める R=X-INT(X/Y)*Y=MOD(X,Y)
220 LET R=R-Y !※割り算は引き算の繰り返し
230 IF R>=Y THEN GOTO 220 !※
240 LET X=Y !互除法より
250 LET Y=R
260 GOTO 170
270 END

  問題文のアルゴリズムを素直に書くと 白石 和夫 2008/01/21 11:20:55   ツリーへ

Re: センター試験  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/21 11:20:55
問題文のアルゴリズムを素直に書くと
100 INPUT PROMPT "x=": X
110 INPUT PROMPT "y=": Y
120 IF X<Y THEN
130 LET Z=X
140 LET X=Y
150 LET Y=Z
160 END IF
170 DO UNTIL Y=0
210 LET R=X
215 DO
220 LET R=R-Y
230 LOOP WHILE R>=Y
240 LET X=Y
250 LET Y=R
260 LOOP
265 PRINT X !元の180行
270 END
になると思います。

  │└余りを求めるのに 白石 和夫 2008/01/21 11:30:29   ツリーへ

Re: 問題文のアルゴリズムを素直に書くと  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/21 11:30:29
余りを求めるのに
210 LET R=X
220 LET R=R-Y
230 IF R>=Y THEN GOTO 220
すなわち
210 LET R=X
215 DO
220 LET R=R-Y
230 LOOP WHILE R>=Y
の形の繰り返しによっているので,120〜160行の前処理でX≧Yにしておかないと具合が悪いというアルゴリズムです。
余りを求めるのを
220 LET R=X
215 DO WHILE R>=Y
220 LET R=R-Y
230 LOOP
あるいは,
220 LET R=X
215 IF R<Y THEN 240
220 LET R=R-Y
230 GOTO 215
に変えれば,120〜160行は不要です。


  │ ├あえて試験だから、このようにコード化する... 山中和義 2008/01/21 11:54:42   ツリーへ

Re: 余りを求めるのに  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/21 11:54:42
あえて試験だから、このようにコード化するのでしょうか。

170〜260、220〜230の繰り返しなどのように、「判断(IF)」を「繰り返し」に使った流れ図は、
構造化の命令にコード化しづらいです。
センター試験の出題範囲にDO WHILE/DO UNTILなどはないのですかね。


●出題の元になる流れ図(たぶん?)

過去掲示板のプログラム

 流れ図を描く
 http://freebbs.around.ne.jp/article/b/basic/103/dkoxkw/dkoxkw.html#dkoxkw

を使って(プログラムの終りにあるDATA文の差し替える)流れ図を描くことができます。


10 DATA 1,"3","開始","第6問"
DATA 8,"3","X","x="
DATA 8,"3","Y","y="
DATA 5,"0<","3≧","X:Y",""
DATA 13,"3","│",""
DATA 3,"3","X*Y→T",""
DATA 2,"","1",""

DATA 0,"","",""
DATA 0,"","",""
DATA 0,"","",""
DATA 3,"3","X→Z",""
DATA 3,"3","Y→X",""
DATA 3,"2","Z→Y",""
DATA 0,"","",""

DATA 2,"3","1","170"
DATA 5,"3=","0≠","Y:0",""
DATA 9,"3","X","GCD"
DATA 9,"3","T/X","LCM"
DATA 1,"","終了",""
DATA 0,"","",""
DATA 0,"","",""

DATA 0,"","",""
DATA 13,"0","─",""
DATA 13,"0","┌",""
DATA 13,"1","└",""
DATA 0,"","",""
DATA 0,"","",""
DATA 0,"","",""

DATA 0,"","",""
DATA 3,"3","X→R","210"
DATA 3,"3","R-Y→R","220"
DATA 5,"2>=","3<","R:Y","230"
DATA 3,"3","Y→X",""
DATA 3,"3","R→Y",""
DATA 2,"","1",""

  │ │└みごとなスパゲッティ・プログラムです。 白石 和夫 2008/01/21 17:59:57  (修正1回)  ツリーへ

Re: あえて試験だから、このようにコード化する...  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/21 17:59:57 ** この記事は1回修正されてます
みごとなスパゲッティ・プログラムです。
コンピュータ嫌いを増やすことにならなければいいのですが。(教員,生徒ともに)

  │ │ └過去問題をいくつか見てみると、パターンが... 山中和義 2008/01/22 20:52:21   ツリーへ

Re: みごとなスパゲッティ・プログラムです。  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/22 20:52:21
過去問題をいくつか見てみると、パターンが見えてきます。

●DO〜LOOP WHILEのパターン ※平成17年度


  データ入力

nnn
  ループ内の処理

  IF 繰り返し条件 THEN GOTO nnn

  PRINT 結果
  END



●DO UNTIL〜LOOPのパターン ※平成18年度


  データ入力

nnn IF 終了条件 THEN
   PRINT 結果
   GOTO eee !文末へ
  END IF

  ループ内の処理

  GOTO nnn !次の回へ
eee END



繰り返し(DO〜LOOP)のコーディングルールが決まっているようです。
今回は、この組み合せになっています。

他のDO〜LOOPは、以下のようになると予想されます。

●DO WHILE〜LOOPのパターン


  データ入力

nnn IF 繰り返し条件 THEN

   ループ内の処理

   GOTO nnn !次の回へ
  END IF
  PRINT 結果
  END



●DO〜LOOP UNTILのパターン


  データ入力

nnn
  ループ内の処理

  IF 終了条件 THEN
   PRINT 結果
   GOTO eee !文末へ
  END IF
  GOTO nnn !次の回へ
eee END



●DO〜LOOPのパターン(判定なし)


  データ入力

nnn
  ループ内の処理前半

  IF 終了条件 THEN
   PRINT 結果
   GOTO eee !文末へ
  END IF

  ループ内の処理後半

  GOTO nnn !次の回へ
eee END

  │ └ユークリッドのアルゴリズムは除算を用いな... 白石 和夫 2008/01/21 11:54:53  (修正1回)  ツリーへ

Re: 余りを求めるのに  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/21 11:54:53 ** この記事は1回修正されてます
ユークリッドのアルゴリズムは除算を用いないで減算だけで書かれていたといわれています。BASICで書くと,
100 INPUT a,b
110 DO UNTIL b=0
120 DO WHILE a>=b
130 LET a=a-b
140 LOOP
150 ! a,bの交換
160 LET r=a
170 LET a=b
180 LET b=r
190 LOOP
200 PRINT a
210 END
みたいに,
引ける間は引くことを繰り返し,引けなくなったら2数を入れ替えて,減算の結果が0になるまで繰り帰すというのが,本来のユークリッドの算法であったといわれています。それをネタに使った出題と思われます。

  全文を、書かせる出題方法は、とれないもの... SECOND 2008/01/21 15:17:01   ツリーへ

Re: センター試験  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/21 15:17:01
全文を、書かせる出題方法は、とれないものでしょうか。

枠の中に、入る物を探す問題では、目がチカチカして、
わたしなどは、試験アレルギーなので、間違える事、必致です。
短くても、できるアルゴリズムを探す、好奇心など
吹き飛ぶ感じが、します。
こんな方法で、何かが育つのでしょうか?

  │└!整理すると、こんなに短いものです。 SECOND 2008/01/21 21:09:19  (修正4回)  ツリーへ

Re: 全文を、書かせる出題方法は、とれないもの...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/21 21:09:19 ** この記事は4回修正されてます
!整理すると、こんなに短いものです。
!欄外にこんな答案を書いた生徒は、どうなりますか・・

!---- x,y のGCD ----
INPUT PROMPT "x=": X
INPUT PROMPT "y=": Y
LET T=X*Y

DO WHILE Y<>0
DO WHILE X=>Y
LET X=X-Y
LOOP
swap X,Y
LOOP
PRINT X, T/X ! GCD, LCM

!END


! 入力に、Y<>0 の条件があれば、以下でも。

!---- x,y のGCD ----
INPUT PROMPT "x=": X
INPUT PROMPT "y=": Y
LET T=X*Y
GOTO 230

220 LET X=X-Y
230 IF X=>Y THEN 220
swap X,Y
IF Y=0 THEN PRINT X,T/X ELSE GOTO 220 ! GCD, LCM

END


!入力、X=0 Y=0 では、模範解答でも、問題がありそうです。

  素朴な疑問 小塚貞典 2008/01/21 22:02:59   ツリーへ

Re: センター試験  返事を書く  ノートメニュー
小塚貞典 <lpgxypjsxi> 2008/01/21 22:02:59
素朴な疑問
なぜ文法が変わる必要があったか?

   └問題点と背景について私見 小塚貞典 2008/01/23 10:20:03   ツリーへ

Re: 素朴な疑問  返事を書く  ノートメニュー
小塚貞典 <lpgxypjsxi> 2008/01/23 10:20:03
問題点と背景について私見
1.ウィンドウズの普及でウィンドウズで計算機の基礎をする必要がある。
2.数学というカテゴリーでの出題であること。
3.ms社の経済的シェアーを意識しなければならないこと。
4.学習の成果であること、など、試験の結果が人生の評価ではないから
5.学校、職場、家庭という生活の中の課程であること。
6.あと何でしょう、ビートルズとか?


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