|
1: 2009-01-12 (月) 11:22:12 |
| + | * ぐいぐい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 |