a23_useSelfMade #6
2023.02.21 Tue #1
- 今日はちょっと忙しいので、ここに書けるほどの成果はなさそうです。
- 昨日からずっと考えているのは、HL-9の改造で、(1)変数一覧とか出したいなあ、(2)型の一覧も出したいなあ、(3)メモリ上にあってまだ開放していないオブジェクトの一覧も出したいなあ、の3点です。・・・まあまずは(1)からかなあ。これは簡単なので。
2023.02.22 Wed #1
- 最近は、easy-Cの有用性は理解されている気がするんだけど、このプロジェクトの主張であるところの「自分で作って自分で使う」はあまり理解されていない気がします・・・。
2023.02.22 Wed #2
- 「たしざんかあど」からランダムに10問を出題して計算練習。
n = 0;
for (i = 1; i <= 10; i++) {
for (;;) {
j = aRnd(9) + 1;
k = aRnd(9) + 1;
if (j + k >= 11) break; // 繰り上がりの練習なので、11以上になるもののみ出題.
}
printf("[%02d] %d+%d=", i, j, k);
m = aInput("");
if (m == j + k) { n++; prs "O\n\n"; } else { prs "X\n\n"; }
}
printf("score=%d/100\n", n * 10);
HL9>run tashi.c
[01] 7+9=16
O
[02] 9+5=14
O
[03] 7+6=15
X
[04] 8+9=17
O
[05] 6+9=
- 小学1年生の宿題をこれでやらせたら、大人側の支援がすごく楽になりました!!
- ちなみに繰り下がりのある引き算版も作りました(似たようなものなので書きませんが)。
2023.02.23 Thr #1
- なんかいろいろアイデアが出てきました。
- [1]コンソールを複数出してマルチタスクみたいなことがしたい。
- [2] a[0-99]=0; みたいな書き方ができるようにしたい。
- [3] {i,j,k} = aRnd(9) + 1; みたいな書き方ができるようになりたい。
2023.02.23 Thr #2
- 昨日のtashi.cですが、小学1年生にやらせていると、たまに連続して同じ問題が出ます。小学1年生がそのたびにプログラムを「ばかだなあ」っていうのでちょっとくやしいです。
- だから改造します。・・・できました、これなら同じ問題は出ません。
int a[100];
for (i = 0; i < 100; i++) { a[i] = 0; }
for (j = 1; j <= 9; j++) {
for (k = 1; k <= 9; k++) {
if (j + k >= 11) { a[j * 10 + k] = 1; } // 繰り上がりの練習なので、11以上になるもののみ出題.
}
}
n = 0;
for (i = 1; i <= 10; i++) {
m = aArgMaxRndInt(a, 0, 100);
j = m / 10; k = m % 10;
a[m] = 0;
printf("[%02d] %d+%d=", i, j, k);
m = aInput("");
if (m == j + k) { n++; prs "O\n\n"; } else { prs "X\n\n"; }
}
printf("score=%d/100\n", n * 10);
2023.02.24 Fri #1
- 「キャラクターを右に動かす」「もしもキャラクターの移動先が岩だったら」みたいに、変数は明示しないけど裏ではキャラクターの座標やどこに何を表示しているかの情報を持っておく方式を、ここではひとまず「隠れ変数方式」と呼ぶことにします。明示的な変数じゃないものを変数の代わりにうまく使っている感じで。
- この隠れ変数方式を極めれば、easy-Cの「変数を使わなくてもできること」はかなり増やせそうです。
- この話をしたら、それはScratchがやっていることに近いのではないかと指摘されました。私もそう思います。Scratchって変数を使わなくてもまあまあ遊べる気がするのですが、それはまさに隠れ変数方式を極めているかなと思うのです。
2023.02.26 Sun #1
2023.02.27 Mon #1
2023.02.28 Tue #1
- なんか自前のスタートアップルーチンを使うと、ダウンロード時にマルウェア判定を受けてしまう・・・。もちろん何も悪いことはしてないのに・・・。じゃあ、gccの標準のスタートアップルーチンで我慢するか・・・。
2023.02.28 Tue #2
2023.03.01 Wed #1
- a23_ec001を更新して、最新版をダウンロードできるようにしました。
- ああしまった、あせって invader.c と blocks.c を入れ忘れたー。・・・まあいいかー。
2023.03.02 Thr #1
- かなり雑な実装にしていますが、とにかく簡易ループ演算子が動くようになりました!
HL9>pr 1:<=5
12345
HL9>pr 1:<5
1234
HL9>s=0;s=s+1:<=100;pr s ← sには1~100の和が入る.
5050
HL9>int a[100]
HL9>pr a[9]
0
HL9>a[0:<100]=1 ← これで全部1になる.
HL9>pr a[9]
1
HL9>a[0] = 0; a[1] = 1; a[(i = 0:<10) + 2] = a[i] + a[i + 1]; printf("%d ", a[1:<10])
1 1 2 3 5 8 13 21 34
HL9>
- あとはこれをいろいろと使ってみて、便利かどうかをじっくり考えます。便利だったら徐々に実装をまともにします。
2023.03.03 Fri #1
- 簡易ループ演算子。かなりfor文の書き方に近いロング形式。
HL9>(i = 0:<=10) { pris i; }
0 1 2 3 4 5 6 7 8 9 10
HL9>int a[100] = { 0, 1 }; (i = 0:<18) { a[i + 2] = a[i] + a[i + 1]; } pris a[0:<20]
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
// 長さ比較.
HL9>(i = 0:<=10) { pris i; } // 簡易ループ演算子の前後にはスペースを入れない(いれても実行できるけど読みにくくなる).
HL9>for (i = 0; i <= 10; i++) { pris i; }
// 13文字節約できている.
- 標準的なC言語のスタイルだと、for文は繰り返し範囲を次の行に段下げして書くけれど、たとえば数学で、k^2のシグマとかを書くときに、シグマとk^2の間に改行を入れたりはしないです。どうしてC言語では改行するほうが自然に見えるのかというと、たぶんforの行が長すぎるんです。その点、簡易ループ演算子のロング形式は、必要最小限の内容になっていて、数学のシグマに近い感じなので、改行しないで書いていいと思います。
2023.03.04 Sat #1
- gcc実行モードでも簡易ループ演算子を実装しようとして、うーん、根本的にいろいろ直したくなってきました・・・。
こめんと欄