投稿

N88-BASICで角度の和

イメージ
2022/6/29(水) N88-BASICで角度の和   角度の和の問題を色々な方法で解いてみる   正方形3個を並べた図中の角度のα+βは何度か       解法1(図で解く)   図のように直角二等辺三角形を書く 直角二等辺三角形の底辺の両角は同じなので45°ずつ と分かるので、α+β = 45°となる   解法2(三角関数で解く)   tanα = 1/3、tanβ = 1/2 tan(α+β) = (tanα + tanβ) / (1-tanαtanβ) = (1/3 + 1/2) / {1 - (1/3)(1/2)} = (1/3 + 1/2) / (1 - 1/6) = (2+3) / (6-1) tan(α+β) = 1 よって、α+β = Tan -1 (1) = 45°   tanの加法定理は https://ulprojectmail.blogspot.com/2021/09/1.html 三角関数 (1回目) を参照して下さい     解法3(複素平面で解く)   複素平面上の原点と点(x+yi)を結ぶ線分と 実軸とのなす角はθ=Tan -1 (y/x)となる αを(1+3i)、βを(1+2i)で表すと、 α+βは(1+3i)(1+2i)で表せる (1+3i)(1+2i) = 1 + (2+3)i - 6 = 5+5i よって、α+β = Tan -1 (5/5) = 45°   複素平面上の座標の積は回転を表す 簡単な例、45°+ 45° (1+i)は実軸とのなす角が45° (1+i)(1+i) = 1+2i-1 = 2i Tan -1 (2/0) = 90°(x座標が0なので)   https://ulprojectmail.blogspot.com/2021/10/n88-basicn-1.html N88-BASICでn乗の解 (1回目) ド・モアブルの定理 (cosα + isinα) n  = cos nα + isin nα でも 複素平面上の座標の積が回転を表す事が分かります   解法4(PCで計算する)   α = Tan -1 (1/3) β = Tan -1 (1/2) の和を表示させると 45°になりました   PCで実数を扱う場合、誤差が生じるので 約45°つまり、四捨五入や切り捨てで45° になった可能性を捨てきれ

N88-BASICで日数

イメージ
2022/6/27(月) N88-BASICで日数   入力した日付間の日数を表示します   例、2022/6/26(日)~2022/6/27(月)は 2 日と表示しています (ユリウス日を使用して求めています)   VL,NL,XL-BASICでは DATE$とTIME$の値の変更は システム時刻に影響せず CLEARやRUNで現在のシステム時刻に リセットされますので 現在時刻を書き換えるプログラムに変更しても 問題ありません   計算式など詳しくは https://ulprojectmail.blogspot.com/2021/09/n88-basicjd-1.html N88-BASICでユリウス日(JD) (1回目) を見てください   ユリウス日(JD)とは 紀元前4713(-4712)年1月1日(月)12:00(世界時) = 0日 とする通算日数(時間は小数で表し0.5は12時間) 紀元前4713年1月1日0:00 = -0.5日 紀元前2年 = -1年 紀元前1年 = 0年 西暦  1年 = 1年 とします   VL,NL,XL-BASICとblg~.zip(days001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでn乗の展開 (2回目)

イメージ
2022/6/24(金) N88-BASICでn乗の展開 (2回目)   (a + b + c) n  = (a + b + c)(a + b + c)… 右辺のn個の(a + b + c)から aをp個、bをq個、cをr個選んだ項は a p b q c r  (p + q + r = n)となり n個のaからp個のaを選び 残りn-p個からq個のbを選ぶ組合せ になっているので a p b q c r  の係数は n C p n-p C q  となり   nCp = nPp/p! = n!/{(n-p)!p!}と p + q + r = n ⇒ n - p - q = r より n C p n-p C q  = [n!/{(n-p)!p!}][(n-p)!/{(n-p-q)!q!}] = n!/(p!q!r!) となり、これは aがp個、bがq個、cがr個の順列(並べ方の数) になります   (a + b + c) n   = ΣΣ{n!/(p!q!r!)}a p b q c r  (r = n - q - r) (q = 0~n-p内)(p = 0~n 外)   プログラムでは a,bの順で降べきになるように (a + b + c) n   = ΣΣ{n!/(p!q!r!)}a p b q c r  (r = n - q - r) (q = n-p~0内)(p = n~0 外) を使用しています (a 3 b 2 はa3b2と表示しています)   関連ブログの紹介   https://ulprojectmail.blogspot.com/2021/07/vl-basic32.html VL-BASICで3乗の展開の図 (2回目)   https://ulprojectmail.blogspot.com/2021/11/n88-basicpc.html N88-BASICで順列組合せ   VL,NL,XL-BASICとblg~.zip(exp002.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASICでn乗の展開 (1回目)

イメージ
2022/6/22(水) N88-BASICでn乗の展開 (1回目)   二項定理 (a + b) n  = Σ n C i a n-i b i  (i = 0~n) を使って 2項式のn乗の展開式を表示します (a 3 b 2 はa3b2と表示しています)   関連ブログの紹介   https://ulprojectmail.blogspot.com/2021/07/vl-basic3-1.html VL-BASICで3乗の展開の図 (1回目)   https://ulprojectmail.blogspot.com/2021/11/n88-basicpc.html N88-BASICで順列組合せ   https://ulprojectmail.blogspot.com/2021/11/n88-basicbnp-1.html N88-BASICで二項分布 (1回目) (蛇足で~6回目まであります)   VL,NL,XL-BASICとblg~.zip(exp001.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

VL-BASICでピポッ (3回目)

イメージ
2022/6/20(月) VL-BASICでピポッ (3回目)   PC-9801のピポッを再現(PCM)   2000Hz , 100ms 1000Hz , 100ms の正弦波(Sine wave) でPC-9801の起動音 ピポッ に似た音が鳴ります   今回は、サンプリングレート8000Hz, 16bit, monoの 波形をsin関数で作成して PCM音源としてとして再生しています   VL-BASICは &H80000~&HFFFFF フリーエリア &H80000~    BASIC言語エリア なので、一応 &HA0000~    PCM波形 としています   VL-BASIC、とblg~.zip(pipo003v.bas)は このブログ(以下のリンク)から ダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

VL-BASICでピポッ (2回目)

イメージ
2022/6/17(金) VL-BASICでピポッ (2回目)   VL-BASICでPC-9801のピポッを再現(MIDI) PC-9801、PC-8801のN88-BASICや PC-9801のN88-BASIC互換?の NL-BASIC、VL-BASICのMML (Music macro language)で   PLAY "t144l16@20q8v15o6bo5b" または   MPU PLAY "t144l16@1104q8v15o6bo5b" とすると、ピポッとなります (1104 = 128*8+80 = バンク8/音色80)   これを~.mid(SMF:Standard MIDI File) に変換します   VL-BASICを起動し NEW MPU MPU TRON ("pipo") MPU PLAY "t144l16@1104q8v15o6bo5b" MPU TROFF と1行ずつ入力(1行毎にEnterキー)するか pipo002 v.bas(下記リンク)をダウンロードして 実行すると (MPU PLAYの代わりに上記PLAYでも可ですが          0 ,C0,06 … デフォルトの音色 が必ず挿入されます)   pipo.txtが作られます          0 ,F0,41,10,42,12,40,00,7F,00,41,F7          0 ,B0,00,08          0 ,C0,50          0 ,90,5F,7F        104 ,80,5F,7F          0 ,90,53,7F        104 ,80,53,7F Wait(ms:ミリ秒)とMIDI送信データです   pipo.txtをVL-BASIC付属のtron2txt.exe (MIDI→SMFツールでmidフォルダ内に有ります) に重ねると pipo_txt.txtが作られます 4D, 54, 68, 64 ; "Mthd" 00, 00, 00, 06 ; 次の実データ6個で固定 00, 00         ; Format0-2 00, 01         ; トラック数 01, e0         ; 時間

VL-BASICでピポッ (1回目)

イメージ
2022/6/15(水) VL-BASICでピポッ (1回目)   MSGS(Windows標準ソフトウエアMIDI音源)の 正弦波(音色番号080 バンク[008/000] Sine wave)で ピポッを再現しました   MSGSのBank selectについては次のサイトが参考に なりましたので勝手にリンクを貼っておきます MSGSで遊ぼう! (x68uec.org)   このサイトによりますと システムエクスクルーシヴの GS Reset(F0 41 10 42 12 40 00 7F 00 41 F7)hexを 送信しておかないとバンクが切り替わらないそうです (hexは16進数の意味です)   VL-BASICでは A$ = CHR$(&HF0)+CHR$(&H41)+CHR$(&H10)+CHR$(&H42)+CHR$(&H12)+CHR$(&H40) A$ = A$        +CHR$(&H00)+CHR$(&H7F)+CHR$(&H00)+CHR$(&H41)+CHR$(&HF7) MPU MIDI(A$) で送信できます &HF0は16進数のF0と言う意味で CHR$(キャラクターコード&H00~&HFF)で文字に変換して 文字列A$を送信します   バンク切り替えは bank select MSB = 008 (B0 00 08)hex bank select LSB = 000 (B0 20 00)hex です(LSBは常に0の様です)   VL-BASICでは MPU MIDI(&H0800B0) MPU MIDI(&H0020B0)   B0 00 08 は上位と下位バイトを逆にした&H0800B0を指定 します なぜならIntel系CPUでは&H0800B0と言う数値は メモリー内ではB0,00,08の順で格納されるからです   MPU MIDI(CHR$(&HB0)+CHR$(&H00)+CHR$(8)) MPU MIDI(CHR$(&HB0)+CHR$(&H20)+CHR$(0)) (&Hを付けなければ10進数になります) や MPU PLAY