a23_usm008
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
* a23_useSelfMade #8
-(by [[K]], 2023.04.14)
--親ページ: [[a23_useSelfMade]]
** 2023.04.14 Fri #1 [casm] [easy-C]
-HL-9のcasm出力が少しマシになりました。
DosPrompt>hl9
HL9>casm 1
HL9>pr 0:<10
LdImm32(R01, 0);
CmpJmpGrtEquImm32(R01, 10, 2);
Label(3);
ApiPrIntReg32(R01);
Label(4);
AddShtImm32(R01, 1);
CmpJmpLesThnImm32(R01, 10, 3);
Label(2);
End();
HL9>
-これをt0004.cにコピペして実行すると・・・
DosPrompt>gcc -m32 -O3 -DAArch_X86 -DAGraph_Win -Iacl1/ ...
DosPrompt>t0004
0123456789
DosPrompt>
-こんなふうにばっちり実行できました。
** 2023.04.17 Mon #1 [casm]
-casmはOSECPU-VMと同じく、整数レジスタはデータレジスタと...
-ということで、レジスタをデータとポインタに分けるのはもは...
-データに必要なbit幅と、アドレスを表すのに必要なbit幅は必...
-OSECPU-VMが汎用レジスタ方式を採用しなかったのは、まず第...
-また私がもしFPGAなどでCPUを作る機会があったら、たぶんデ...
-一方で、問題があります。C言語で書かれたプログラムのうち...
-しかし私の考えでは、ポインタはその指しているメモリに読み...
-こういうことに配慮すると、「ポインタの下位2bitは0に固定...
-ということで、私はポインタレジスタの中身はすべてのポイン...
** 2023.04.18 Tue #1 [casm] [easy-C]
-これができるようになりました。
HL9>casm 1
HL9>AWin *w = aOpenWin(256, 256, "gradation"); c=0; [y=0...
LdPtrImm(P02, "gradation");
LdImm32(R00, 256)
LdImm32(R01, 256)
ApiOpenWinReg32(P03, R01, R00, P02);
CpyPtr(P04, P03);
LdImm32(R02, 0);
LdImm32(R03, 0);
CmpJmpGrtEquImm32(R03, 256, 2);
Label(3);
LdImm32(R04, 0);
CmpJmpGrtEquImm32(R04, 256, 4);
Label(5);
ApiSetPix32(P04, R04, R03, R02);
AddLngImm32(R02, R02, 256);
Label(6);
AddShtImm32(R04, 1);
CmpJmpLesThnImm32(R04, 256, 5);
Label(4);
Label(7);
AddShtImm32(R03, 1);
CmpJmpLesThnImm32(R03, 256, 3);
Label(2);
End();
** 2023.04.18 Tue #2 [casm]
-このcasmとOSECPU-VMの技術を組み合わせたら、また超小さい...
-ちょっとOSECPU-VM rev2 のフロントエンドコードのメモを引...
|RIGHT:0|nop||
|RIGHT:1|LB|連番用|
|RIGHT:4-1|LB i|連番以外も可|
|RIGHT:2|LIMM/CP src,reg|{0,1,2,3,4,rep0,-1}|
|RIGHT:3|JMP lb||
|RIGHT:4-3|PLIMM lb,preg||
|RIGHT:4-4|CND reg|条件実行プリフィクス|
|RIGHT:5|API||
|RIGHT:4-5|API||
|RIGHT:6|loop v1,reg||
|RIGHT:4-6|loop v0,v1,reg||
|RIGHT:7|endloop||
|RIGHT:8|LMEM ?||
|RIGHT:9|SMEM ?||
|RIGHT:10|OR2||
|RIGHT:11|XOR2||
|RIGHT:12|AND2||
|RIGHT:13|SBX2||
|RIGHT:14|ADD2||
|RIGHT:15|SUB2||
|RIGHT:16|MUL2||
|RIGHT:17|SBR2||
|RIGHT:18|SHL2||
|RIGHT:19|SAR2||
|RIGHT:1a|DIV2||
|RIGHT:1b|MOD2||
|RIGHT:1e|PCP||
|RIGHT:20|CMP||
|RIGHT:21|CMP||
|RIGHT:22|CMP||
|RIGHT:23|CMP||
|RIGHT:24|CMP||
|RIGHT:25|CMP||
|RIGHT:26|DIV3||
|RIGHT:27|MOD3||
|RIGHT:28|OR3||
|RIGHT:29|XOR3||
|RIGHT:2a|AND3||
|RIGHT:2b|SBX3||
|RIGHT:2c|SHL2||
|RIGHT:2d|SAR2||
|RIGHT:2e|||
-4bit変換表
{ R1, 16, 1, 2, 8, 4, R0 }, // OR
{ -1, R1, 1, 2, 3, 4, R0 }, // XOR
{ R1, 15, 1, 7, 3, 5, R0 }, // AND
{ 64, 16, 1, 2, 8, 4, 32 }, // SBX
{ -1, R1, 1, 2, 3, 4, R0 }, // ADD
{ R1, R0, 1, 2, 3, 4, 5 }, // SUB
{ 10, R0, R1, 7, 3, 6, 5 }, // MUL
{ -1, 0, 1, 2, 3, 4, R0 }, // SBR
{ R1, R0, 1, 2, 3, 4, 5 }, // SHL
{ R1, R0, 1, 2, 3, 4, 5 }, // SAR
{ 10, R0, R1, 7, 3, 6, 5 }, // DIV
{ 10, R0, R1, 7, 3, 6, 5 }, // MOD
-8bit変換表
|80~96|0~16|
|97~9f|20, 18, 40, 80, 100, ff, 7f, 3f, 1f|
|a0~ae|R00~R0e|
|af|R3f|
|b0~b7|rep0~rep7|
|b8~bf|-8~-1|
-12bit変換表
|c00~cee|0~ee|
|cef~cf7|200, f0, 400, 800, 1000, 2000, 4000, 8000, 10000|
|cf8~cff|ffff, 7fff, 3fff, 1fff, fff, 7ff, 3ff, 1ff|
|d00~d3f|R00~R3f|
|d40~d4f|reserved|
|d50~d56|reserved|
|d57|reserved|
|d58~d5f|reserved|
|d60~d6f|(この項10進数)128K,256K,512K,...,4G|
|d90~dff|-70~-1|
-これを踏まえて、 2023.04.07 Fri #1 の t0002.c をOSECPU-V...
LdImm32(R00, 256); // 2 9b 0
ApiWindowReg32(P04, R00, R00); // 5 ?? 5 5 4
for (R02 = 0; R02 < R00; R02++) { // 6 5 2
for (R01 = 0; R01 < R00; R01++) { // 6 a0 1
ApiSetPix(P04, R01, R02, R03); // 5 ?? 5 5 a1 a2 a3
AddSht32(R03, R00); // 94 3 a0
} // 以降は自動補完
}
ApiWaitForExit32();
End();
// 29 b0 5? ?5 54 65 26 a0 15 ?? 55 a1 a2 a3 94 3a : 16...
-うーん、小さい!
** 2023.04.18 Tue #3 [easy-C]
-小学2年生に、以下のような課題を与えてみました。
-シート1
(1) → NO1:
(2) → NO2:
(3) → NO3:
Kをかく(すきまあり) → PRIS K;
Kを1ふやす → K=K+1;
(1)へもどる → GO NO1;
-シート2
(1) K=1;
(2) Kをかく(すきまあり)
(3) Kを1ふやす
(4) (2)へもどる
-小学生に与えたミッション:
--[1]シート2は日本語で書かれています。シート1をみながら、...
--[2]それができたら、3 6 9 12 15 18 21...になるように改造...
-40分間ほど頑張らせたら、[1]と[2]がちゃんとできました。
-もちろん最初は入力ミスなどがあって失敗しましたが、ちゃん...
-やったね!
-Q&A
--[Q-1]なぜ変数名としてKを選んだの?最初はIじゃないの?
---[A-1]私もそう思ったのですが、Iは1と見間違いやすいので...
--[Q-2]もっと説明して教えるべきだったのでは?
---[A-2]それだとつまらないかなと思って、シート1にヒントと...
** 2023.04.19 Wed #1 [easy-C]
-算数の問題を easy-C で解いてみるよシリーズ#1。
--こういう例を見せたら小学生でも、「プログラミングって役...
-[1]2から10000までの素数を表示してみよう!
HL9>char a[10000]; a[0:<10000] = 0; [i = 2:<10000] { if ...
//上記を複数行で書いたもの.
char a[10000]; a[0:<10000] = 0;
[i = 2:<10000] {
if (a[i] == 0) {
pris i;
for (j = i; j < 10000; j += i) { a[j] = 1; }
}
}
-[2]整数kを素因数分解してみよう!
HL9>k = 12345; for (i = k; i > 1;) { for (j = 2; i % j ...
//上記を複数行で書いたもの.
k = 12345;
for (i = k; i > 1;) {
for (j = 2; i % j != 0; j++) {}
pris j; i /= j;
}
-[3]整数mと整数nの公約数を求めよう!
HL9>m = 123; n = 456; [i = 1:<=m] { if (m % i == 0 && n ...
//上記を複数行で書いたもの.
m = 123; n = 456;
[i = 1:<=m] {
if (m % i == 0 && n % i == 0) { pris i; }
}
-[4]整数mと整数nの最小公倍数を求めよう!
HL9>m = 123; n = 456; for (i = m;; i++) { if (i % m == 0...
//上記を複数行で書いたもの.
m = 123; n = 456;
for (i = m;; i++) {
if (i % m == 0 && i % n == 0) break;
}
pris i;
-[5]円周率を求めよう!
HL9>n=0;[100000000]{i=aRnd(10000);j=aRnd(10000);if(i*i+j...
//上記を複数行で書いたもの.
n=0;
[100000000] {
i = aRnd(10000); j = aRnd(10000);
if (i*i+j*j <= 10000*10000) {n++;}
}
pr n*4;
-[6]ルート3を求めよう!
HL9>for(i=0;i*i<300000000;i++){}pr i
//上記を複数行で書いたもの.
for (i = 0; i * i < 300000000; i++) {}
pr i;
** 2023.04.19 Wed #2 [easy-C]
-小学2年生に、以下のような課題を与えてみました#2。
-シート3
NO1: PRIS 1;
NO2: PRIS 2;
NO3: GO NO5;
NO4: PRIS 4;
NO5: PRIS 5;
--さてこれを実行したらどんな結果になるでしょうか?
-シート1に追記
もしKが5より大きければ(8)へ。 → IF (K > 5) GO NO8;
-シート4
(1) K=1;
(2) Kをかく(すきまあり)
(3) Kを1ふやす
(4) もしKが100より小さければ(2)へもどる
-小学生に与えたミッション:
--[1]シート3には知っている命令しかありません。これの実行...
--[2]シート4を実行するとどうなると思いますか?実行結果を...
--[3](難しい)プログラミングでは掛け算の記号は * です。...
** 2023.04.20 Thu #1 [easy-C]
-最大公約数gcdを簡単に求めるには、こんな感じでやればよさ...
int aGcd(int a, int b)
{
while (a > 0 && b > 0) {
if (a > b) { a %= b; } else { b %= a; }
}
if (a == 0) return b;
return a;
}
-分数計算を支援したら、小学生は喜ぶかなあ。
-・・・しかし気軽に計算させる方法がない?・・・分子と分母...
** 2023.04.23 Sun #1 [easy-C]
-ちょっとデバッグとかで苦労したけど(通分をミスりました・...
-有理数を表す型として ARat を作りました。
HL9>!ARat_print(ARat_sub(ARat_new(5,8), ARat_new(1,8)));...
1/2
HL9>!ARat_print(ARat_add(ARat_new(7,12), ARat_new(1,12)))
2/3
HL9>!ARat_print(ARat_add(ARat_new(19,9), ARat_new(8,9)))
3/1
HL9>!ARat_print(ARat_add(ARat_new(2,15), ARat_new(4,5)))
14/15
HL9>!ARat_print(ARat_add(ARat_new(3,10), ARat_new(2,15)))
13/30
HL9>
-まあ有理数で計算したくなることなんてめったにないのですが...
** 2023.04.23 Sun #2 [easy-C]
-小学2年生に、以下のような課題を与えてみました#3。
「10 9 8 7 6 5 4 3 2 1 0」と表示してね!
-これは IF(K>=0)GO NO2; が書ければいいだけなのですが、こ...
-もちろん -1 を使ってもいいのなら、 IF(K>-1)GO NO2; でも...
-まずは「10 9 8 7 6 5 4 3 2 1」という課題にして、次に>=を...
-これが一番自然かなあ。
** 2023.04.24 Mon #1 [easy-C]
-有理数計算で、 ARat_new(5,8) を 5:/8 と書けたら便利だろ...
改造前>!ARat_print(ARat_sub(ARat_new(5,8), ARat_new(1,8)...
改造後>!ARat_print(ARat_sub(5:/8, 1:/8));
-これができるなら演算子もオーバーライドできて、 ARat_prin...
** 2023.04.25 Tue #1 [easy-C]
-昨日、有理数計算で、 5:/8 と書けるようにする改造はすぐに...
-原因を突き止めてみると、両方を混ぜ書きしたときに増加する...
** 2023.04.25 Tue #2 [easy-C]
-円周率を計算する方法として、 1/1-1/3+1/5-1/7+1/9-1/11+.....
HL9>!double d=0;for(i=1;i<20;i+=4){j=i+2;d+=4.0/i-4.0/j;...
3.041840
まあこんな感じになります。
-でもこれくらいなら有理数でも計算できます。有理数計算なら...
HL9>!ARat r=0:/1;for(i=1;i<20;i+=4){j=i+2;r=ARat_add(r, ...
44257352:/14549535
-まあこんな計算をして何が楽しいのかっていわれると答えに苦...
-有理数計算はRubyやPythonにもあるのですが、わざわざそれら...
** 2023.04.26 Wed #1 [easy-C]
-ARat_addなどと書くのが面倒になってきたので、:+:という演...
HL9>!prr((2:/6 :+: 0:/1))
1:/3
HL9>!prr((5:/8 :-: 1:/8))
1:/2
HL9>!prr((7:/12 :+: 1:/12))
2:/3
HL9>!prr((19:/9 :+: 8:/9))
3:/1
HL9>!prr((2:/15 :+: 4:/5))
14:/15
HL9>!prr((3:/10 :+: 2:/15))
13:/30
HL9>!prr(((1:/3 :+: 1:/3) :+: 1:/3))
1:/1
HL9>!ARat r=0:/1;for(i=1;i<20;i+=4){j=i+2;r=(r :+: (4:/i...
44257352:/14549535
HL9>
-書きやすくなっていないかもしれませんが、まあちょっとだけ...
** 2023.04.27 Thu #1 [easy-C]
-今までは :< や :/ の前後は必ず1トークンにしなければいけ...
-でもそんなことのために変数を作らなければいけないなんて苦...
HL9>!ARat r=0:/1;for(i=1;i<20;i+=4){r=(r :+: (4:/i :-: 4...
44257352:/14549535
-前から直したいと思っていたので、直せてうれしいです!
** 2023.04.29 Sat #1 [easy-C]
-今日の大反省。
-easy-Cには pr i; という命令があります。printf("%d", i);...
-pr 12; pr 34; pr 56; と書くと「123456」と表示されます。
-一方で、これだと数がくっついて読みにくいので、間にprsp()...
-そして、実際に小学生に教えてみると、こちらの利用頻度がと...
-pris 12; pris 34; pris 56; と書くと「12 34 56」と表示...
-でもこれはいい方法ではありませんでした。・・・pr命令の方...
-そうすると、スペースを入れたくない場合に対応できないよ?...
-prisとprとでは、文字数的には2文字違うだけですが、小学生...
-prspみたいな命令も作るべきではありませんでした。「そうい...
-私の反省ポイントは、printfを使わずともあれこれできるよう...
* こめんと欄
-掲示板をご利用ください。→[[a23_bbs]]
終了行:
* a23_useSelfMade #8
-(by [[K]], 2023.04.14)
--親ページ: [[a23_useSelfMade]]
** 2023.04.14 Fri #1 [casm] [easy-C]
-HL-9のcasm出力が少しマシになりました。
DosPrompt>hl9
HL9>casm 1
HL9>pr 0:<10
LdImm32(R01, 0);
CmpJmpGrtEquImm32(R01, 10, 2);
Label(3);
ApiPrIntReg32(R01);
Label(4);
AddShtImm32(R01, 1);
CmpJmpLesThnImm32(R01, 10, 3);
Label(2);
End();
HL9>
-これをt0004.cにコピペして実行すると・・・
DosPrompt>gcc -m32 -O3 -DAArch_X86 -DAGraph_Win -Iacl1/ ...
DosPrompt>t0004
0123456789
DosPrompt>
-こんなふうにばっちり実行できました。
** 2023.04.17 Mon #1 [casm]
-casmはOSECPU-VMと同じく、整数レジスタはデータレジスタと...
-ということで、レジスタをデータとポインタに分けるのはもは...
-データに必要なbit幅と、アドレスを表すのに必要なbit幅は必...
-OSECPU-VMが汎用レジスタ方式を採用しなかったのは、まず第...
-また私がもしFPGAなどでCPUを作る機会があったら、たぶんデ...
-一方で、問題があります。C言語で書かれたプログラムのうち...
-しかし私の考えでは、ポインタはその指しているメモリに読み...
-こういうことに配慮すると、「ポインタの下位2bitは0に固定...
-ということで、私はポインタレジスタの中身はすべてのポイン...
** 2023.04.18 Tue #1 [casm] [easy-C]
-これができるようになりました。
HL9>casm 1
HL9>AWin *w = aOpenWin(256, 256, "gradation"); c=0; [y=0...
LdPtrImm(P02, "gradation");
LdImm32(R00, 256)
LdImm32(R01, 256)
ApiOpenWinReg32(P03, R01, R00, P02);
CpyPtr(P04, P03);
LdImm32(R02, 0);
LdImm32(R03, 0);
CmpJmpGrtEquImm32(R03, 256, 2);
Label(3);
LdImm32(R04, 0);
CmpJmpGrtEquImm32(R04, 256, 4);
Label(5);
ApiSetPix32(P04, R04, R03, R02);
AddLngImm32(R02, R02, 256);
Label(6);
AddShtImm32(R04, 1);
CmpJmpLesThnImm32(R04, 256, 5);
Label(4);
Label(7);
AddShtImm32(R03, 1);
CmpJmpLesThnImm32(R03, 256, 3);
Label(2);
End();
** 2023.04.18 Tue #2 [casm]
-このcasmとOSECPU-VMの技術を組み合わせたら、また超小さい...
-ちょっとOSECPU-VM rev2 のフロントエンドコードのメモを引...
|RIGHT:0|nop||
|RIGHT:1|LB|連番用|
|RIGHT:4-1|LB i|連番以外も可|
|RIGHT:2|LIMM/CP src,reg|{0,1,2,3,4,rep0,-1}|
|RIGHT:3|JMP lb||
|RIGHT:4-3|PLIMM lb,preg||
|RIGHT:4-4|CND reg|条件実行プリフィクス|
|RIGHT:5|API||
|RIGHT:4-5|API||
|RIGHT:6|loop v1,reg||
|RIGHT:4-6|loop v0,v1,reg||
|RIGHT:7|endloop||
|RIGHT:8|LMEM ?||
|RIGHT:9|SMEM ?||
|RIGHT:10|OR2||
|RIGHT:11|XOR2||
|RIGHT:12|AND2||
|RIGHT:13|SBX2||
|RIGHT:14|ADD2||
|RIGHT:15|SUB2||
|RIGHT:16|MUL2||
|RIGHT:17|SBR2||
|RIGHT:18|SHL2||
|RIGHT:19|SAR2||
|RIGHT:1a|DIV2||
|RIGHT:1b|MOD2||
|RIGHT:1e|PCP||
|RIGHT:20|CMP||
|RIGHT:21|CMP||
|RIGHT:22|CMP||
|RIGHT:23|CMP||
|RIGHT:24|CMP||
|RIGHT:25|CMP||
|RIGHT:26|DIV3||
|RIGHT:27|MOD3||
|RIGHT:28|OR3||
|RIGHT:29|XOR3||
|RIGHT:2a|AND3||
|RIGHT:2b|SBX3||
|RIGHT:2c|SHL2||
|RIGHT:2d|SAR2||
|RIGHT:2e|||
-4bit変換表
{ R1, 16, 1, 2, 8, 4, R0 }, // OR
{ -1, R1, 1, 2, 3, 4, R0 }, // XOR
{ R1, 15, 1, 7, 3, 5, R0 }, // AND
{ 64, 16, 1, 2, 8, 4, 32 }, // SBX
{ -1, R1, 1, 2, 3, 4, R0 }, // ADD
{ R1, R0, 1, 2, 3, 4, 5 }, // SUB
{ 10, R0, R1, 7, 3, 6, 5 }, // MUL
{ -1, 0, 1, 2, 3, 4, R0 }, // SBR
{ R1, R0, 1, 2, 3, 4, 5 }, // SHL
{ R1, R0, 1, 2, 3, 4, 5 }, // SAR
{ 10, R0, R1, 7, 3, 6, 5 }, // DIV
{ 10, R0, R1, 7, 3, 6, 5 }, // MOD
-8bit変換表
|80~96|0~16|
|97~9f|20, 18, 40, 80, 100, ff, 7f, 3f, 1f|
|a0~ae|R00~R0e|
|af|R3f|
|b0~b7|rep0~rep7|
|b8~bf|-8~-1|
-12bit変換表
|c00~cee|0~ee|
|cef~cf7|200, f0, 400, 800, 1000, 2000, 4000, 8000, 10000|
|cf8~cff|ffff, 7fff, 3fff, 1fff, fff, 7ff, 3ff, 1ff|
|d00~d3f|R00~R3f|
|d40~d4f|reserved|
|d50~d56|reserved|
|d57|reserved|
|d58~d5f|reserved|
|d60~d6f|(この項10進数)128K,256K,512K,...,4G|
|d90~dff|-70~-1|
-これを踏まえて、 2023.04.07 Fri #1 の t0002.c をOSECPU-V...
LdImm32(R00, 256); // 2 9b 0
ApiWindowReg32(P04, R00, R00); // 5 ?? 5 5 4
for (R02 = 0; R02 < R00; R02++) { // 6 5 2
for (R01 = 0; R01 < R00; R01++) { // 6 a0 1
ApiSetPix(P04, R01, R02, R03); // 5 ?? 5 5 a1 a2 a3
AddSht32(R03, R00); // 94 3 a0
} // 以降は自動補完
}
ApiWaitForExit32();
End();
// 29 b0 5? ?5 54 65 26 a0 15 ?? 55 a1 a2 a3 94 3a : 16...
-うーん、小さい!
** 2023.04.18 Tue #3 [easy-C]
-小学2年生に、以下のような課題を与えてみました。
-シート1
(1) → NO1:
(2) → NO2:
(3) → NO3:
Kをかく(すきまあり) → PRIS K;
Kを1ふやす → K=K+1;
(1)へもどる → GO NO1;
-シート2
(1) K=1;
(2) Kをかく(すきまあり)
(3) Kを1ふやす
(4) (2)へもどる
-小学生に与えたミッション:
--[1]シート2は日本語で書かれています。シート1をみながら、...
--[2]それができたら、3 6 9 12 15 18 21...になるように改造...
-40分間ほど頑張らせたら、[1]と[2]がちゃんとできました。
-もちろん最初は入力ミスなどがあって失敗しましたが、ちゃん...
-やったね!
-Q&A
--[Q-1]なぜ変数名としてKを選んだの?最初はIじゃないの?
---[A-1]私もそう思ったのですが、Iは1と見間違いやすいので...
--[Q-2]もっと説明して教えるべきだったのでは?
---[A-2]それだとつまらないかなと思って、シート1にヒントと...
** 2023.04.19 Wed #1 [easy-C]
-算数の問題を easy-C で解いてみるよシリーズ#1。
--こういう例を見せたら小学生でも、「プログラミングって役...
-[1]2から10000までの素数を表示してみよう!
HL9>char a[10000]; a[0:<10000] = 0; [i = 2:<10000] { if ...
//上記を複数行で書いたもの.
char a[10000]; a[0:<10000] = 0;
[i = 2:<10000] {
if (a[i] == 0) {
pris i;
for (j = i; j < 10000; j += i) { a[j] = 1; }
}
}
-[2]整数kを素因数分解してみよう!
HL9>k = 12345; for (i = k; i > 1;) { for (j = 2; i % j ...
//上記を複数行で書いたもの.
k = 12345;
for (i = k; i > 1;) {
for (j = 2; i % j != 0; j++) {}
pris j; i /= j;
}
-[3]整数mと整数nの公約数を求めよう!
HL9>m = 123; n = 456; [i = 1:<=m] { if (m % i == 0 && n ...
//上記を複数行で書いたもの.
m = 123; n = 456;
[i = 1:<=m] {
if (m % i == 0 && n % i == 0) { pris i; }
}
-[4]整数mと整数nの最小公倍数を求めよう!
HL9>m = 123; n = 456; for (i = m;; i++) { if (i % m == 0...
//上記を複数行で書いたもの.
m = 123; n = 456;
for (i = m;; i++) {
if (i % m == 0 && i % n == 0) break;
}
pris i;
-[5]円周率を求めよう!
HL9>n=0;[100000000]{i=aRnd(10000);j=aRnd(10000);if(i*i+j...
//上記を複数行で書いたもの.
n=0;
[100000000] {
i = aRnd(10000); j = aRnd(10000);
if (i*i+j*j <= 10000*10000) {n++;}
}
pr n*4;
-[6]ルート3を求めよう!
HL9>for(i=0;i*i<300000000;i++){}pr i
//上記を複数行で書いたもの.
for (i = 0; i * i < 300000000; i++) {}
pr i;
** 2023.04.19 Wed #2 [easy-C]
-小学2年生に、以下のような課題を与えてみました#2。
-シート3
NO1: PRIS 1;
NO2: PRIS 2;
NO3: GO NO5;
NO4: PRIS 4;
NO5: PRIS 5;
--さてこれを実行したらどんな結果になるでしょうか?
-シート1に追記
もしKが5より大きければ(8)へ。 → IF (K > 5) GO NO8;
-シート4
(1) K=1;
(2) Kをかく(すきまあり)
(3) Kを1ふやす
(4) もしKが100より小さければ(2)へもどる
-小学生に与えたミッション:
--[1]シート3には知っている命令しかありません。これの実行...
--[2]シート4を実行するとどうなると思いますか?実行結果を...
--[3](難しい)プログラミングでは掛け算の記号は * です。...
** 2023.04.20 Thu #1 [easy-C]
-最大公約数gcdを簡単に求めるには、こんな感じでやればよさ...
int aGcd(int a, int b)
{
while (a > 0 && b > 0) {
if (a > b) { a %= b; } else { b %= a; }
}
if (a == 0) return b;
return a;
}
-分数計算を支援したら、小学生は喜ぶかなあ。
-・・・しかし気軽に計算させる方法がない?・・・分子と分母...
** 2023.04.23 Sun #1 [easy-C]
-ちょっとデバッグとかで苦労したけど(通分をミスりました・...
-有理数を表す型として ARat を作りました。
HL9>!ARat_print(ARat_sub(ARat_new(5,8), ARat_new(1,8)));...
1/2
HL9>!ARat_print(ARat_add(ARat_new(7,12), ARat_new(1,12)))
2/3
HL9>!ARat_print(ARat_add(ARat_new(19,9), ARat_new(8,9)))
3/1
HL9>!ARat_print(ARat_add(ARat_new(2,15), ARat_new(4,5)))
14/15
HL9>!ARat_print(ARat_add(ARat_new(3,10), ARat_new(2,15)))
13/30
HL9>
-まあ有理数で計算したくなることなんてめったにないのですが...
** 2023.04.23 Sun #2 [easy-C]
-小学2年生に、以下のような課題を与えてみました#3。
「10 9 8 7 6 5 4 3 2 1 0」と表示してね!
-これは IF(K>=0)GO NO2; が書ければいいだけなのですが、こ...
-もちろん -1 を使ってもいいのなら、 IF(K>-1)GO NO2; でも...
-まずは「10 9 8 7 6 5 4 3 2 1」という課題にして、次に>=を...
-これが一番自然かなあ。
** 2023.04.24 Mon #1 [easy-C]
-有理数計算で、 ARat_new(5,8) を 5:/8 と書けたら便利だろ...
改造前>!ARat_print(ARat_sub(ARat_new(5,8), ARat_new(1,8)...
改造後>!ARat_print(ARat_sub(5:/8, 1:/8));
-これができるなら演算子もオーバーライドできて、 ARat_prin...
** 2023.04.25 Tue #1 [easy-C]
-昨日、有理数計算で、 5:/8 と書けるようにする改造はすぐに...
-原因を突き止めてみると、両方を混ぜ書きしたときに増加する...
** 2023.04.25 Tue #2 [easy-C]
-円周率を計算する方法として、 1/1-1/3+1/5-1/7+1/9-1/11+.....
HL9>!double d=0;for(i=1;i<20;i+=4){j=i+2;d+=4.0/i-4.0/j;...
3.041840
まあこんな感じになります。
-でもこれくらいなら有理数でも計算できます。有理数計算なら...
HL9>!ARat r=0:/1;for(i=1;i<20;i+=4){j=i+2;r=ARat_add(r, ...
44257352:/14549535
-まあこんな計算をして何が楽しいのかっていわれると答えに苦...
-有理数計算はRubyやPythonにもあるのですが、わざわざそれら...
** 2023.04.26 Wed #1 [easy-C]
-ARat_addなどと書くのが面倒になってきたので、:+:という演...
HL9>!prr((2:/6 :+: 0:/1))
1:/3
HL9>!prr((5:/8 :-: 1:/8))
1:/2
HL9>!prr((7:/12 :+: 1:/12))
2:/3
HL9>!prr((19:/9 :+: 8:/9))
3:/1
HL9>!prr((2:/15 :+: 4:/5))
14:/15
HL9>!prr((3:/10 :+: 2:/15))
13:/30
HL9>!prr(((1:/3 :+: 1:/3) :+: 1:/3))
1:/1
HL9>!ARat r=0:/1;for(i=1;i<20;i+=4){j=i+2;r=(r :+: (4:/i...
44257352:/14549535
HL9>
-書きやすくなっていないかもしれませんが、まあちょっとだけ...
** 2023.04.27 Thu #1 [easy-C]
-今までは :< や :/ の前後は必ず1トークンにしなければいけ...
-でもそんなことのために変数を作らなければいけないなんて苦...
HL9>!ARat r=0:/1;for(i=1;i<20;i+=4){r=(r :+: (4:/i :-: 4...
44257352:/14549535
-前から直したいと思っていたので、直せてうれしいです!
** 2023.04.29 Sat #1 [easy-C]
-今日の大反省。
-easy-Cには pr i; という命令があります。printf("%d", i);...
-pr 12; pr 34; pr 56; と書くと「123456」と表示されます。
-一方で、これだと数がくっついて読みにくいので、間にprsp()...
-そして、実際に小学生に教えてみると、こちらの利用頻度がと...
-pris 12; pris 34; pris 56; と書くと「12 34 56」と表示...
-でもこれはいい方法ではありませんでした。・・・pr命令の方...
-そうすると、スペースを入れたくない場合に対応できないよ?...
-prisとprとでは、文字数的には2文字違うだけですが、小学生...
-prspみたいな命令も作るべきではありませんでした。「そうい...
-私の反省ポイントは、printfを使わずともあれこれできるよう...
* こめんと欄
-掲示板をご利用ください。→[[a23_bbs]]
ページ名: