新しく発言する  EXIT  インデックスへ
課題なんですが・・・

  課題なんですが・・・ kazu 2008/01/06 12:17:27 
  最大公約数を求める外部関数定義を利用しま... 白石 和夫 2008/01/06 14:43:49  (修正3回)
  単に既約分数の形で結果を求めたいだけなら... 白石 和夫 2008/01/06 14:57:40  (修正1回)
   └ありがとうございます。できました!ちなみ... kazu 2008/01/06 16:05:59 
    └OPTIONARITHMETICRATIONALは,数値を有理数... 白石 和夫 2008/01/06 16:13:58 
     └毎回すみません。ありがとうございます。 kazu 2008/01/07 12:19:07 
      └正式な流れ図の書き方はよく分からないので... 白石 和夫 2008/01/07 14:29:43  (修正2回)
       ├!流れ図(フローチャート) 山中和義 2008/01/07 16:53:17 
       │└「繰り返し」の流れ図 山中和義 2008/01/08 11:32:06  (修正1回)
       └functionGCD(a,b)について。 SECOND 2008/01/07 21:42:29 

  課題なんですが・・・ kazu 2008/01/06 12:17:27   ツリーへ

課題なんですが・・・  返事を書く  ノートメニュー
kazu <unwhswlnry> 2008/01/06 12:17:27
2つの分数の足し算をするプログラムで最小公倍数の通分をするにはどうしたらいいのですか?

10 INPUT PROMPT "分子1":A1
20 INPUT PROMPT "分母1":B1
30 INPUT PROMPT "分子2":A2
40 INPUT PROMPT "分母2":B2
このあとからわかりません。お願いします。

  最大公約数を求める外部関数定義を利用しま... 白石 和夫 2008/01/06 14:43:49  (修正3回)  ツリーへ

Re: 課題なんですが・・・  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/06 14:43:49 ** この記事は3回修正されてます
最大公約数を求める外部関数定義を利用します。
プログラムの1行目に
10 DECLARE EXTERNAL FUNCTION GCD
を書いて,
END行以下に
1000 EXTERNAL FUNCTION GCD(a,b)
1010 LET r=MOD(a,b)
1020 IF r=0 THEN LET GCD=b ELSE LET GCD=GCD(b,r)
1030 END FUNCTION
を書くと,主プログラム(DECLARE EXTERNAL FUNCTION GCD を書いた行とEND行の間)で2数の最大公約数を求める関数GCDを組み込み関数と同じように使うことができます。
GCDを利用すれば,通分して加算したときの分子と分母を式で書けます。結果を約分したければ,再度,GCDを使えばいいでしょう。
なお,GCDの使用例は,「(仮称)十進BASICによるJIS Full BASIC入門」の第4章(例49)にあります。
http://hp.vector.co.jp/authors/VA008683/tutorial/section4.htm

  単に既約分数の形で結果を求めたいだけなら... 白石 和夫 2008/01/06 14:57:40  (修正1回)  ツリーへ

Re: 課題なんですが・・・  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/06 14:57:40 ** この記事は1回修正されてます
単に既約分数の形で結果を求めたいだけなら,
5 OPTION ARITHMETIC RATIONAL
10 INPUT PROMPT "分子1":A1
20 INPUT PROMPT "分母1":B1
30 INPUT PROMPT "分子2":A2
40 INPUT PROMPT "分母2":B2
50 PRINT a1/b1 + a2/b2
60 END
でできます。
ただし,OPTION ARITHMETIC RATIONALはJIS規格外の命令です。

   └ありがとうございます。できました!ちなみ... kazu 2008/01/06 16:05:59   ツリーへ

Re: 単に既約分数の形で結果を求めたいだけなら...  返事を書く  ノートメニュー
kazu <unwhswlnry> 2008/01/06 16:05:59
ありがとうございます。できました!ちなみにOPTION ARITHMETIC RATIONALというのはどういう意味なんですか?

    └OPTIONARITHMETICRATIONALは,数値を有理数... 白石 和夫 2008/01/06 16:13:58   ツリーへ

Re: ありがとうございます。できました!ちなみ...  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/06 16:13:58
OPTION ARITHMETIC RATIONAL は,数値を有理数(rational numbers)として扱うことを指示する命令です。

     └毎回すみません。ありがとうございます。 kazu 2008/01/07 12:19:07   ツリーへ

Re: OPTIONARITHMETICRATIONALは,数値を有理数...  返事を書く  ノートメニュー
kazu <unwhswlnry> 2008/01/07 12:19:07
毎回すみません。ありがとうございます。
あと〜
流れ図はこんな感じでしょうか?
    始め
     ↓
 A1B1A2B2を入力 
     ↓
  a1/b1+a2/b2
 ↓
    終わり
  

      └正式な流れ図の書き方はよく分からないので... 白石 和夫 2008/01/07 14:29:43  (修正2回)  ツリーへ

Re: 毎回すみません。ありがとうございます。  返事を書く  ノートメニュー
白石 和夫 <ynwythjfwu> 2008/01/07 14:29:43 ** この記事は2回修正されてます
正式な流れ図の書き方はよく分からないので,どなたか別の方にお願いします。
ところで,「課題」の出題者の意図は,有理数演算を使わないプログラムの作成なのではないかと思いますが。
だとしたら,規格外の命令は使わないほうがいいと思います。

       ├!流れ図(フローチャート) 山中和義 2008/01/07 16:53:17   ツリーへ

Re: 正式な流れ図の書き方はよく分からないので...  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/07 16:53:17
!流れ図(フローチャート)

!2つの分数の足し算(最小公倍数で通分)

! A1   A2   A3
! ── + ── = ──
! B1   B2   B3

!A1,B1,A2,B2は、すべて正の整数とする。


( はじめ )
  ↓
   /│
 /  │
│A1,B1│ 分数1の入力
└─ ─┘
  ↓
   /│
 /  │
│A2,B2│ 分数2の入力
└─ ─┘
  ↓
┌──────────┐
│A1×B2+A2×B1 → A3│ 分数3の計算
│B1×B2 → B3    │
└──────────┘
  ↓
┌────────┐
│GCD(B1,B2) → g │ 両分母の最大公約数の計算 ※1
└────────┘
  ↓
  ──┐
/ A3÷g│ 分数3の表示
\ B3÷g│ ※LCM(a,b)=a*b/GCD(a,b)
  ──┘
  ↓
( おわり )



※1
約分して(既約分数で)、結果を表示したい場合
 ┌────────┐
 │GCD(A3,B3) → g │ 分子と分母との最大公約数の計算
 └────────┘
とする。





1000 EXTERNAL FUNCTION GCD(a,b)
1010 LET r=MOD(a,b)
1020 IF r=0 THEN LET GCD=b ELSE LET GCD=GCD(b,r)
1030 END FUNCTION


!関数 GCD(a,b)

( はじめ )
  ↓
┌───────┐
│MOD(a,b) → r │ a÷bの余りの計算
└───────┘
  ↓
 /\ ≠ ┌────────┐
 r:0 ─→||GCD(b,r) → GCD || 再帰呼び出し
 \/   └────────┘
  ↓=      │
┌────┐    │
│b → GCD│    │
└────┘    │
  ↓←──────┘
  ↓
( おわり )

       │└「繰り返し」の流れ図 山中和義 2008/01/08 11:32:06  (修正1回)  ツリーへ

Re: !流れ図(フローチャート)  返事を書く  ノートメニュー
山中和義 <drdlxujciw> 2008/01/08 11:32:06 ** この記事は1回修正されてます
「繰り返し」の流れ図


FUNCTION GCD(a,b) !最大公約数
DO WHILE MOD(a,b)<>0
LET t=b
LET b=MOD(a,b)
LET a=t
LOOP
LET GCD=b
END FUNCTION


 ( はじめ )
   ↓
 /───────\
│aをbで割った余り=0│
└─────────┘
   ↓
┌───────┐
│b → t    │ b → a、aをbで割った余り → b
│MOD(a,b) → b │
│t → a    │
└───────┘
   ↓
┌─────────┐
│         │
 \───────/
   ↓
┌────┐
│b → GCD│ bを最大公約数とする
└────┘
   ↓
 ( おわり )




●種類

前判定
 DO WHILE〜LOOP
(DO UNTIL〜LOOP)
 FOR〜NEXT ※繰り返し回数が確定の場合

後判定
 DO〜LOOP WHILE
(DO〜LOOP UNTIL)

       └functionGCD(a,b)について。 SECOND 2008/01/07 21:42:29   ツリーへ

Re: 正式な流れ図の書き方はよく分からないので...  返事を書く  ノートメニュー
SECOND <jjqdmekgpt> 2008/01/07 21:42:29
function GCD(a,b) について。

a,b なる数は、それぞれ、隠れているGCD(Greatest Common Divisor)の
整数倍 同士と考える・・

a=GCD*m
b=GCD*n

m=3,n=5 の場合。

---+---+---|       a1= GCD*3
---+---+---+---+---|   b1= GCD*5 …r1= GCD*3 =MOD( GCD*3, GCD*5)

---+---+---+---+---| b1→ a2= GCD*5
---+---+---|     r1→ b2= GCD*3 …r2= GCD*2 =MOD( GCD*5, GCD*3)

---+---+---| b2→ a3= GCD*3
---+---|   r2→ b3= GCD*2 …r3=GCD*1 =MOD( GCD*3, GCD*2)

---+---| b3→ a4= GCD*2
---|   r3→ b4= GCD*1 …r4=0 =MOD( GCD*2, GCD*1)


GCD、1つに、必ず追い詰められて、剰余がなくなる。


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