投稿

N88-BASICでn進数 (2回目)

イメージ
2022/2/14(月) N88-BASICでn進数 (2回目)   n進数を10進数に変換します   n進数の数値をa≧0とします (負の数は-が付くだけなので 正の数のみ説明します)   [a]をaの整数部分Fract(a)を小数部分とする aの整数部分をx 0 、小数部分をy 0 とし   x = [a], y = Fract(a)と置く   a 1  = 2桁目 a 0  = 1桁目(右から数えて) a -1  = 小数第1位目 の数値とすると   10進数bは b = Σ(a i n i ) (i=-?~?) となります   例 1101.1101(2)→(10) 整数部分は2の(桁数-1)乗倍 小数部分は2の-(小数の位)乗倍 nの乗数を1減らすと1/n倍になる 2の乗数を1減らすと1/2倍になる 2 2  = 4 2 1  = 2 2 0  = 1 2 -1  = 1/2 = 0.5 2 -2  = 1/4 = 0.25   1101.1101(2) = 1 ・ 2 3 + 1・ 2 2 + 0・ 2 1 +  1・ 2 0 +  1 ・ 2 -1 + 1・ 2 -2 + 0・ 2 -3 + 1・ 2 -4   = 1 ・8   + 1・4   + 0・2   +  1・1   +  1 ・ 0.5 + 1・0.25 + 0・125 + 1・0.0625 = 8 + 4 + 1 + 0,5 + 0.25 + 0.0625 = 13.8125   1101.1101(2)→13.8125(10)   1桁を1文字で表すため11進数以上では 10~35をA~Z(26文字)に置換えて入力して下さい よって2≦n≦36となりますが エラーチェックは行っていません   また、小数の精度は倍精度実数型に依存 します(10進数で16桁程です)   NL-BASICとblg~.zip(nary002.bas)は このブログ(以下のリンク)からダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい

N88-BASICでn進数 (1回目)

イメージ
2022/2/11(金) N88-BASICでn進数 (1回目)   10進数をn進数に変換します   10進数の数値をa≧0とします (負の数は-が付くだけなので 正の数のみ説明します)   [a]をaの整数部分Fract(a)を小数部分とする aの整数部分をx 0 、小数部分をy 0 とし   x 0  = [a], y 0  = Fract(a)と置く   x i+1  ← [x i  / n] (商) b 1+1  ← x i  - n[x i  / n] (余り) i = 0, 1, … (x i+1 >0の間繰返す)   y i+1  ← Fract(y i  ・ n) c 1+1  ← [y i  ・ n] i = 0, 1, … (y i+1 >0の間繰返す)   結果n進数は … b 2  b 1  . c 1  c 2  … つまり b i が右から数えてi桁目c i が小数第i位目となる   例 13.8125(10)→(2)   整数部分は 5を2で割った余りを並べる 2より小さくなれば割らなくても それが余りです   2 )13 2 ) 6  … 1  ← 1桁目(最下位) 2 ) 3  … 0  ← 2桁目   1   … 1  ← 3桁目    ↑    4桁目(最上位) 1101です   小数部分は 13.8125の小数部分を2倍し整数部分を並べ 小数部分は繰り返す   小数部分0.8125 ・2 = 1.625 小数第1位は1 小数部分 0.625 ・2 = 1.25  小数第2位は1 小数部分 0.25  ・2 = 0.5   小数第3位は0 小数部分 0.5   ・2 = 1     小数第4位は1 小数部分0で終了   13.8125(10)→1101.1101(2)   1桁を1文字で表すため11進数以上では 10~35をA~Z(26文字)で表す事にすると 2≦n≦36となりますが エラーチェックは行っていません   また、小数の桁数は倍精度実数型に依存 します(10進数で16桁程です)     NL-BASICとblg~.zip(nary001.bas)は このブログ(以下のリンク)からダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで

N88-BASIC(88)でレイトレーシング

イメージ
2022/2/10(木)   N88-BASIC(88)でレイトレーシング   PC-8801でレイトレーシングしました   https://ulprojectmail.blogspot.com/2021/06/n88-basic-1.html N88-BASICでレイトレーシング (1回目) ~(8回目) の ray008.bas(PC-9801用640×400×8色)を PC-8801用(640×200×8色)に変更しました   XL-BASIC(Alt+6で高速化)で動きます   1390 A = 4 の4を2や1にすると、解像度が上がります 動画はA = 4、静止画はA = 1で実行した結果です   XL-BASICとblg~.zip(ray301x.bas)は 以下のリンクからダウンロードできます https://ulprojectmail.blogspot.com Readme.txtを読んで遊んで下さい  

N88-BASIC、Cで初心者向けプログラミング (4回目)

イメージ
2022/2/6(日) N88-BASIC、Cで初心者向けプログラミング (4回目)   配列と文字列   BASICの配列 DIM A(10)で A(0)~A(10)の変数が作られます I = 5ならA(I)はA(5)になります DIMを省略してA(0)などを使用すると DIM A(10)とした時と同じになります DIM B(2, 1)は B(0, 0) B(1, 0) B(2, 0) B(0, 1) B(1, 1) B(2, 1) が作られます   BASICの文字列 "で囲まれた文字の列を文字列といい、 最後に$を付ければ文字変数になります A $ = "abc" B$ = A$ + "efg" PRINT B$ でabcdefと表示されます 文字列の長さは0~255文字までです   C言語の配列 int a[10];で a[0]~a[9]の変数が作られます i = 5ならa[i]はa[5]になります int b[3][2]は b[0][0] b[0][1] b[1][0] b[1][1] b[2][0] b[2][1] が作られます   C言語の文字列 char b;でbは文字変数になります b = 'a';文字は'で囲みます char a[10];で9文字の文字列に なります char d[] = "abc"; は、宣言時のみ代入可能で、 a = "abc"などはエラーになります char d[4]; d[0] = 'a'; d[1] = 'b'; d[2] = 'c'; d[3] = '\0'; と同じです  '\0'は文字コード0で、文字列の 最後を意味します 255より多い文字数も可能です   何月かを入力し英語を表示する 月以外の数値の入力で終了する   BASICでは、 100 DIM M$(11) 110 M$(0) = "January": M$( 1) = "February": M$( 2) = "March" 120 M$(3) = "April"  : M$(

N88-BASIC、Cで初心者向けプログラミング (3回目)

イメージ
2022/2/5(土) N88-BASIC、Cで初心者向けプログラミング (3回目)   制御命令(条件による分岐)   平成の年を入力し平成又は令和を表示する   BASICでは、 10 INPUT "平成"; Y 20 WHILE Y > 0 30   IF Y > 30 THEN PRINT "令和";: Y = Y - 30 ELSE PRINT "平成"; 40   IF Y =  1 THEN PRINT " 元 年" ELSE PRINT Y; "年" 50   PRINT 60   INPUT "平成"; Y 70 WEND   C言語では、 #include <stdio.h> void main(void) {     int y;       printf("平成? ");     scanf("%d", &y);     while (y > 0)     {         if (y > 30) { printf("令和"); y -= 30; } else printf("平成");         if (y == 1)         {             printf(" 元 年\n");         }         else         {             printf(" %d 年\n", y);         }         printf("\n");         printf("平成? ");         scanf("%d", &y);     } }   BASICの説明 IF Y > 30 THEN PRINT "令和";: Y = Y - 30 ELSE PRINT "平成"; IF 条件式 THEN .. ELSE .. は1つの行に 書かなければいけません 条件 式は0が偽、0以外

N88-BASIC、Cで初心者向けプログラミング (2回目)

イメージ
2022/2/2(水) N88-BASIC、Cで初心者向けプログラミング  (2回目)   繰り返し 1から10まで足すといくつ?   ここでは、n(n+1)/2を使わずに 計算させてみましょう (因みに、10(10+1)/2 = 55)   BASICでは、 10 S = 0 20 FOR I=1 TO 10 30   S = S + I 40 NEXT 50 PRINT S   C言語では、 #include <stdio.h> void main(void) {     int i, s;       s = 0;     for (i = 1; i <= 10; i++)     {         s = s + i;     }     printf("%d\n", s); }   BASICの説明 FOR I=1 TO 10 NEXT は簡単に言うとI=1~10まで 1ずつ増やしながら FOR,NEXT間を繰り返した後、 次の命令に行きます    1回目 S = S + IはS =  0 +  1 =  1  2回目 S = S + IはS =  1 +  2 =  3  3回目 S = S + IはS =  3 +  3 =  6  4回目 S = S + IはS =  6 +  4 = 10  5回目 S = S + IはS = 10 +  5 = 15  6回目 S = S + IはS = 15 +  6 = 21  7回目 S = S + IはS = 21 +  7 = 28  8回目 S = S + IはS = 28 +  8 = 36  9回目 S = S + IはS = 36 +  9 = 45 10回目 S = S + IはS = 45 + 10 = 55 で、PRINT Sで55と表示されます   C言語の説明 int i, s;は、整数型変数iとsを作ります   for (i = 1; i <= 10; i++) { } はi = 1を実行後、 i <= 10なら{}内を実行し i++(iを1増す)を実行しi <= 10 が成り立っている間繰り返します i <= 10でないなら}の次に行き、 printf("%d\n", s); でsの内容が表示されま

N88-BASIC、Cで初心者向けプログラミング (1回目)

イメージ
2022/1/31(月) N88-BASIC、Cで初心者向けプログラミング (1回目)   式で、 a = 5 b = 3 c = a + b と書けば c は 8 です   BASICだと、 10 A = 5 20 B = 3 30 C = A + B   となり、C言語だと、 void main(void) {     int a, b, c;       a = 5;     b = 3;     c = a + b; } となります   BASICは、BASICを起動した画面で、1行打つごとに enterキーを押すと記憶してくれます (BASICはenterで反応するようになっています)   LIST(enterを忘れないように、以下省略) でプログラムを見ることができます 小文字は大文字に変換されます RUN でプログラムが走ります ? C で、8が表示されます ?はPRINTと同じです 40 PRINT C を追加すれば8を表示できます SAVE "test" でtest.basに保存できます LOAD "test" で読み込めます     C言語では、1番初めに呼ばれるのが、 関数mainで、{}の中に命令を書きます 3行目のint a, b, c;は変数の宣言で 整数型変数a,b,cを作ります   変数には型があり                    C言語      BASIC 整数型             int    a;  A% 単精度浮動小数点型 float  a;  A! , A 倍精度浮動小数点型 double a;  A# となります ここでは、詳しく説明しませんが 整数型は整数のみ、 単精度は桁が少ない実数(7桁位) 倍精度は桁が多い実数(16桁位) です   命令の最後は;が必要です 上記main関数のvoidは空という 意味で、void mainは戻り値が無い関数、 main(void)は引数がない関数です 引数は数学の関数f(x)のパラメータxに 当たるもので、戻り値はf(x)の値です   このプログラムをtest.cというファイルに 保存してCコンパイラーでコンパイルし、 リンクするとtest.exeが作られ、これを実行 (ダブルクリック)すると、表示していないので 見ることはでき