1: 2009-01-12 (月) 11:22:12 [5] | |||
---|---|---|---|
Line 1: | Line 1: | ||
+ | * ぐいぐい01に関するメモ-24 | ||
+ | -(by [[K]], 2009.01.12) | ||
+ | -メモのうち重要な部分をそのうちまとめてまともなページを作る | ||
+ | *** (37) GOで「ぐいぐい01」アプリを作る(2) | ||
+ | -[[GUIGUI01/memo19]]の続きです。仕様変更ももうそんなにはないと思うので、書いても問題はないかなと。 | ||
+ | ---- | ||
+ | -最初のお題は0から9までの数字の表示です。ex0007.cです。 | ||
+ | #include <guigui01.h> | ||
+ | void G01Main() | ||
+ | { | ||
+ | int i; | ||
+ | for (i = 0; i <= 9; i++) { | ||
+ | g01_putc('0' + i); | ||
+ | g01_putc(' '); | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | -これだけです。これをmakeすれば72バイトになります。実行すると以下のような表示が得られます。 | ||
+ | 0 1 2 3 4 5 6 7 8 9 | ||
+ | ---- | ||
+ | -さてそれではもう少し桁を増やします。でもsprintfは使いたくないので、setdecを作りました。ex0008.cです。 | ||
+ | #include <guigui01.h> | ||
+ | |||
+ | void setdec(char *s, int i, int n) | ||
+ | { | ||
+ | int j; | ||
+ | for (j = n - 1; j >= 0; j--) { | ||
+ | s[j] = '0' + (i % 10); | ||
+ | i /= 10; | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | void G01Main() | ||
+ | { | ||
+ | int i; | ||
+ | char s[5]; | ||
+ | for (i = 0; i <= 999; i++) { | ||
+ | setdec(s, i, 3); | ||
+ | s[3] = ' '; | ||
+ | s[4] = 0; /* 終端に0を入れる */ | ||
+ | g01_putstr0(s); | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | -これをmakeすれば146バイトになります。これを実行すると、以下のように表示されます。 | ||
+ | 000 001 002 003 004 005 006 007 008 009 010 011 012 013 014 015 016 017 018 019 | ||
+ | 020 021 022 023 024 025 026 027 028 029 030 031 032 033 034 035 036 037 038 039 | ||
+ | (中略) | ||
+ | 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 | ||
+ | 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 | ||
+ | ---- | ||
+ | -もしかしたら最初のほうで、0が000になっていたり、1が001になっているのが気にいらないかもしれませんね。じゃあそれを直しましょう。ex0009.cです。 | ||
+ | #include <guigui01.h> | ||
+ | |||
+ | void setdec(char *s, int i, int n) | ||
+ | { | ||
+ | int j; | ||
+ | for (j = n - 1; j >= 0; j--) { | ||
+ | s[j] = '0' + (i % 10); | ||
+ | i /= 10; | ||
+ | } | ||
+ | for (j = 0; j < n - 1; j++) { | ||
+ | if (s[j] != '0') | ||
+ | break; | ||
+ | s[j] = ' '; | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | void G01Main() | ||
+ | { | ||
+ | int i; | ||
+ | char s[5]; | ||
+ | for (i = 0; i <= 999; i++) { | ||
+ | setdec(s, i, 3); | ||
+ | s[3] = ' '; | ||
+ | s[4] = 0; /* 終端に0を入れる */ | ||
+ | g01_putstr0(s); | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | -これをmakeすれば177バイトになります。これを実行すると、以下のように表示されます。 | ||
+ | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | ||
+ | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | ||
+ | (中略) | ||
+ | 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 | ||
+ | 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 | ||
+ | ---- | ||
+ | -ex0009は桁がそろっていてきれいだと僕は思うのですが、もしかしたら余計なスペースを表示しないほうがお好みかもしれませんね。じゃあそれも直せるようにしてみます。ex0010.cです。 | ||
+ | #include <guigui01.h> | ||
+ | |||
+ | void setdec(char *s, int i, int n) | ||
+ | { | ||
+ | int j; | ||
+ | for (j = n - 1; j >= 0; j--) { | ||
+ | s[j] = '0' + (i % 10); | ||
+ | i /= 10; | ||
+ | } | ||
+ | for (j = 0; j < n - 1; j++) { | ||
+ | if (s[j] != '0') | ||
+ | break; | ||
+ | s[j] = ' '; | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | |||
+ | char *skip_space(char *s) | ||
+ | { | ||
+ | while (*s == ' ') { /* while (A) は for (; A;) と同じ意味 */ | ||
+ | s++; | ||
+ | } | ||
+ | return s; | ||
+ | } | ||
+ | |||
+ | void G01Main() | ||
+ | { | ||
+ | int i; | ||
+ | char s[5]; | ||
+ | for (i = 0; i <= 999; i++) { | ||
+ | setdec(s, i, 3); | ||
+ | s[3] = ' '; | ||
+ | s[4] = 0; /* 終端に0を入れる */ | ||
+ | g01_putstr0(skip_space(s)); | ||
+ | } | ||
+ | return; | ||
+ | } | ||
+ | -これをmakeすれば?バイトになります。これを実行すると、以下のように表示されます。 | ||
+ | * こめんと欄 | ||
+ | |||
+ | #comment |
(This host) = http://osask.net