福野泰介の一日一創 - create every day

小学4年生で習う大きな数の足し算。IchigoJamが普通の変数が扱える数は4桁ちょっと(プラスマイナス約3万、16bit整数)で足りない時はプログラムで補いましょう。 次々入力する大きな数を、どんどん加算していくプログラムをつくってみます。


IchigoJamで、0が27コ並ぶ、10の28乗、の桁まで足し算できます!

こちらが大きな数の足し算のメイン。

200 'SUM 205 C=0 210 FOR I=L TO 0 STEP -1 220 A=SCR(I,Y-2)-Z 222 B=SCR(I,Y-1)-Z 230 IF A<0 AND B<0 AND C=0 I=0:GOTO 270 240 IF A<0 A=0 250 IF B<0 B=0 255 A=A+B+C 256 C=0:IF A>=10 C=1:A=A-10 260 LC I,Y:?CHR$(A+Z) 270 NEXT

下の桁から、同じ桁同士の数AとBを足して、10を超えたらCに1をいれておき、次の桁に足す。 小学校で習った筆算の手順そのままです。このような問題解決の手順をアルゴリズムといい、アルゴリズムをコーディング(プログラミング言語で表現)したものがプログラムです。※Z=ASC("0")

プログラミング=アルゴリズムの考案+プログラミング言語による表現

体験こそ最大の学び。 疑問に思ったこと、興味持ったことをどんどん自分の手で作ってみるのが、アルゴリズム思考力(=問題解決力)アップの近道!

1 'BIGSUM 100 CLS:Y=1:L=29:Z=ASC("0") 105 LC L,Y-1:?"0" 110 'INPUT 112 X=L 120 K=INKEY():IF K=0 CONT 130 IF K=10 GOSUB 300:GOTO 200 131 IF K<>8 GOTO 135 132 IF X<L FOR I=L TO X STEP-1:LCI,Y:?CHR$(SCR(I-1,Y)):NEXT:X=X+1 133 GOTO 120 135 FOR I=X-1 TO L:LC I,Y:?CHR$(SCR(I+1,Y)):NEXT 140 LC L,Y:?CHR$(K) 150 X=X-1:GOTO 120 200 'SUM 205 C=0 210 FOR I=L TO 0 STEP -1 220 A=SCR(I,Y-2)-Z 222 B=SCR(I,Y-1)-Z 230 IF A<0 AND B<0 AND C=0 I=0:GOTO 270 240 IF A<0 A=0 250 IF B<0 B=0 255 A=A+B+C 256 C=0:IF A>=10 C=1:A=A-10 260 LC I,Y:?CHR$(A+Z) 270 NEXT 280 GOSUB 300:GOTO 110 300 'NEXT LINE 310 IF Y<20 Y=Y+1 ELSE SCROLL UP 320 RETURN

こちらが電卓のように1の位が揃うように数が入力できるプログラムも含んだ全文です。引き算、小数対応、掛け算、割り算など、いろいろ改造してみてください。

20数年前、MSX BASICから、背伸びして手を出し始めたZ80マシン語。こちらお気に入りの教科書「Z80マシン語秘伝の書(日高徹 著)」。

8bit CPUのZ80を使って、大きな数を扱うためのアルゴリズムを、Z80マシン語のコーディングと合わせて、軽快な楽しいフィクションQ&Aで学べました。

復活後、第7号になる今季のベーマガ(電子工作マガジン 2016年11月号内)もIchigoJamを使ったユニークなアルゴリズム満載! どうやってできているのか?どうしたら作れるのか?疑問に応えるプログラムが解説付きで読めます。

IchigoJamプチコン3号のBASIC作品に加え、次回からは IchigoLatte用JavaScriptを使った作品の投稿もOKに! 憧れのベーマガに挑戦してみませんか?

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY 福野泰介 - Taisuke Fukuno / @taisukef / アイコン画像 / プロフィール画像