42でできた友人
42Tokyoに入ってすぐに、プログラミングに非常に秀でた友人ができた。
その彼に学習のコツを尋ねたところ、とにかく「解きながら学ぶC言語(柴田望洋、他:著)」を、ヒントを見ずに全て解けるようにしろとのことだった。
この本の内容を端的に言うと、「ページに示された出力画面を再現するようにプログラムを作る」というものだ。
つまり、書いてある内容を覚えるというより、謎解きをする感じだ。
例えば、「整数値15と37の和を計算して、その値である52を表示するプログラムを書け」いう問題があったとする。
最初はprintfを使って書いてみて上手く動いたなら、次にいくつかの自作関数に分けてみる、といった具合に自力での「推敲」をしていく。
この、いじくり回すプロセスがとても大事なのだ。
以下に1例を示す。
// 48:57 = 0:9, 65:90 = A:Z, 97:122 = a:z
#include <libc.h>
int calc_add(int num1, int num2)
{
int ans;
ans = num1 + num2;
return (ans);
}
void num_to_char(int ans)
{
int sho;
int keta;
int num;
int cpnum;
double warukazu;
char word[32];
int i;
keta = 0;
num = ans;
sho = num;
cpnum = num;
warukazu = 0.1;
i = 0;
while (cpnum > 0)
{
cpnum = cpnum / 10;
i++;
keta++;
warukazu = warukazu * 10;
//printf("keta = %d\nwarukazu = %f\n", keta, warukazu);
}
cpnum = num;
i = 0;
while (keta > 0)
{
word[i] = cpnum / warukazu + '0';
write(1, &word[i], 1);
cpnum = cpnum - warukazu * (word[i] - '0');
warukazu = warukazu / 10;
keta--;
i++;
}
return ;
}
int main(void)
{
int a;
int b;
int ans;
a = 15;
b = 37;
ans = (calc_add(a, b));
num_to_char(ans);
return (0);
}
こうしてみると、ただの足し算だと思っていたものが、かなりどんどん深掘りできることに気が付く。
その深淵の入り口が見える。
この記事が気に入ったらサポートをしてみませんか?