
「Geo3x3 - シンプルなWGS84向けジオコーディング」
110言語目の実装、C--
C--は、C言語のつまづきやすいポインタの扱いをシンプルにわかりやすくした徳山高専のプログラミング教育で使われているプログラミング言語。徳山高専発の教育用マイコンボード「TeC7」用のソフトウェアの開発も可能です。
「tctsigemura/C--: Programing Language C--」
徳山高専の情報電子工学科1年の授業では、はんだづけして組み立てたTeC7で、プログラミング実習!
言語仕様「プログラミング言語 C-- Ver. 4.0.0」を元に、Macにインストールして、C--の開発環境を整え、実装!使える基本型は、1bitのboolean、8bitのchar、16bitのintと、浮動小数がないため、まずは整数版を実装から始めました。(参考、浮動小数を使わないGeo3x3変換、IchigoJam BASICからWirthへの移植)
public char[] geo3x3_encode(int[] lat, int[] lng, int level) { int n = 9; char[] code = cMalloc(level + 1); lat[1] = lat[1] + 9; norm(lat, n); if (lng[0] >= 0) { code[0] = 'E'; } else { code[0] = 'W'; int[] n180 = create(180, n); add(lng, n180, lng, n); free(n180); } int[] temp = create(0, n); int[] unit = create(180, n); for (int i = 1; i < level; i = i + 1) { xdiv(unit, 3, n); int y = divx(lat, unit, n); int x = divx(lng, unit, n); code[i] = chr('0' + (x + y * 3 + 1)); a2b(unit, temp, n); xmul(temp, x, n); sub(lng, temp, lng, n); a2b(unit, temp, n); xmul(temp, y, n); sub(lat, temp, lat, n); } code[level] = '\0'; free(temp); free(unit); return code; }
緯度経度からGeo3x3文字列を計算するC--の関数「geo3x3_encode」です。多桁演算の関数なども含め教育用プログラミング言語Wirth版を「geo3x3.hmm」として移植しました。
コンソールにて、setupの手順に従いインストールし、動かした様子。
教育用マイコンボードTeC7上でも動くはず!
links
- 高専3つ山口県、徳山高専&宇部
高専訪問、楽しく深いプログラミングカリキュラムとは!? 文字列対応 IchigoJam IoT.IN
- 浮動小数を使わないGeo3x3変換、IchigoJam BASICからWirthへの移植