新千葉 ガーベージ・コレクション

FPGA マガジンやインターフェースで書けなかったこと等をちょぼちょぼ書いてます。@ryos36

新人をバイナリアンに育てる ~ その5 ~

ここまで新人:高橋君たんたんと本を読んでます。もちろん手も動かしてますが。FORTRAN は経験ありでも C は初めてです。配列で四苦八苦しています。バイナリアンの道はまだはじまったばかりです。

しかし、社長の私は期待しすぎて、ついに4週目の木曜日に決断します。この試練を乗り越えられるのか?

社長の指示 6/30(Thu) 22:01

関数を改良するために
寄り道をします。

int main(int argc, char *argv[])

1) 引数の数を返すプログラムを書く。
例えば
a.out a b c
とすれば、
引数の数は 3ですと表示する。(漢字は使わないほうがよいので次のようになる)
Argument Count:3
と表示する。

[めやす] argc, argv を理解する。特に argc

2) 引数を表示するプログラムを書く。
例えば
a.out a b c
とすれば、

1:a
2:b
3:c

と表示する。
a.out aaa bb cccc
なら
1:aaa
2:bb
3:cccc


[めやす] argc, argv を理解する。特に argv

3) 文字と文字列の理解
再度、"C実践プログラミング"の文字列の部分を読んで、実際に試して理解を深め
る。
特に、今までの
unsigned char data[72][34] あるいは char data[1000];
との違いを”考える”

4) 数字と文字と理解
実行時の第1引数を分解し、文字(文字列ではない)として、さらに数字として表示
する。
例えば
a.out abcdef
とあれば
0:a:<数字>
1:b:<数字>
2:c:<数字>
3:d:<数字>
4:e:<数字>
5:f:<数字><数字> には実際の数字が入る。大文字のA なら 16進数で 0x41 になるはず。

5) 数字の表現と文字の理解
例えば
char c;
とあったときに
c = 48;
c = 0x30;
c = '0';
c = 060;
の違いを理解して、それぞれ表示するプログラムを作る。

6) 実行時の第1引数を与えられたらそれを fopen して fclose するプログラム。
a.out in.bin
としたら、in.bin を fopen して、fclose するプログラム
fopen と fclose 以外は何もしないことに注意。つまりほとんど何もしないプログラ
ム。


6-1) さらに動作の様子を表示するプログラム

fopen 字には fope:in.bin
fclose 時には fclose:in.bin と表示する。

動作の表示をするだけで、それ以外、何も変わらないことに注意。
難しく考えすぎないこと

7) 実行時に第1,2引数を与えられたらそれを fopen して fclose するプログラム
a.out in.bin out.bin

fopen:in.bin
fclose:in.bin
fopen:out.bin
fclose:out.bin


と表示しながら fopen/fclose するプログラム。
fopen と fclose 以外は何もしないことに注意。つまりほとんど何もしないプログラ
ム。

8) 実行時に第1,2引数を与えられたら
第1引数を 72x34 のグレースケールのデータ(いままでの out.bin)
第2引数を gimp でよめる RGB の raw データに”変換”するプログラム。

cp コマンドに似ている動きをする
例えば
a.out in.bin out-rgb.bin
としたら out-rgb.bin を作るプログラム。できたデータ out-rgb.bin は
in.bin を元にした RGB の raw データとなる。

9) 8) の逆をするプログラム。
第1引数を gimp でよめる RGB の raw データ
第2引数を 72x34 のグレースケールのデータ(いままでの out.bin)
に”変換”するプログラム。

10) 実行時に第1,2引数を与えられたら
第1引数を 72x34 のグレースケールのデータ(いままでの out.bin)
これに四角を書きくわえ(rect 関数で書き加える)
第2引数を 72x34 のグレースケールのデータ(いままでの out.bin)
に”出力”するプログラム。

11) シェルプログラムを使い上記コマンドを組み合わせて実行して
与えられた第1引数を gimp でよめる RGB の raw データ

これに四角を書きくわえ

第2引数を gimp でよめる RGB の raw データに”書き加え出力”するプログラ
ム。

シェルプログラムを使うところに注意。
すべてのプログラム名がa.out だと大変混乱する。工夫が必要。

12) ところどころで、改善点をあげる。

コメント

ついに社長の私、決断。バイナリアンへの道を具体的に指示。C 初心者の高橋君に argc, argv のプログラムを指示します。ポインタの理解もままならないのにこれを乗り越えられるのでしょうか?

新人:高橋君 日報 7/1(Fri) 18:43

作業報告します

今日行ったこと
 ー"Unix/linuxコマンドの使い方"を322ページ中172-181まで読み進める
 ー"やさしいC++"を81-97まで読み進める

 ー引数の数を返すプログラムの作成
 ー引数を表示するプログラムの作成
 ー第一引数を分解し、文字として、数字として表示するプログラムの作成

今後のtodo
 ー"Unix/linuxコマンドの使い方"を読み進める
 ー"やさしいC++"を読み進める
 ー"新C言語入門"を読む
 
 ー実行時に第1引数を与えたらそれをfopen,fcloseするプログラムの作成
 ー実行時に第1引数、第2引数を与えることでグレイスケールデータを操作するプログラムの作成

コメント

どうしたか覚えてないけど、argc, argv を教えたのかもしれない。し、独学せよ!!と突き放したのかもしれない。とにかく、引数の数を返すプログラムは出来た。
この時点で彼は、文字列と文字とアスキーコードと数字が混乱したままプログラムを書いている。
逆にいうと、数学はこの手の文字のコード化の理解に役に立たなかった。
そして、ポインタの理解をするために「新C言語入門」を来週から読むように指示する。
来週は fopen/fclose の理解。

がんばれ、新人:高橋君。