あっれぇ?

なぜか前回間に合わなかったはずの61,62,63の課題が受理されてる...why?(д
でもN A Z E K A、61がn...why?(д
62と63を合わせて作ったので62,63がokなら61もokだと思うのだが...why?(д


と言うわけで次回はシェルの創り方のお話があるらしい。fork & exec?


今回の課題!!
スタックとキューの課題!!

課題81

逆ポーランド法の電卓をつくる。

for( /* すべての引数 */ ) {
	switch( /* 引数の一文字目 */ ) {
		case '0':
		.
		.
		.
		case '9':
			push( atoi( /* 引数 */ ) );
			break;
		case '+':
			push( pop() + pop() );
			break;
		case '-':
			t = pop();
			push( pop() - t );
			break;
	}
}

最後にstack[0]の値を出力
% a.out 10 5 + 6 -

乗算/除算はいらんらしいです。
あと「正しい入力」に対して正しい出力をすればいい、つまりエラー処理はしなくていいそうです。(理由:面倒くさいから

おまけ
linuxにはbcちゅーコマンドがあって、逆ポーランド法計算ができます、
ちなみに筆者お気に入りのツールの一つ。
よく課題に使う(w
例えばプログラムの出力が数字の羅列だったりしたときに、逆ポーランドだとそのまま後ろに+++++++...と続けるだけで和が出せたりと便利。

課題82

% ./a.out arg1 arg2 ...
の時、引数から木構造を作り、木構造

traverse( struct node *p ) {
	if( p->left != NULL ) {
		traverse( p->left );
	}
	printf( "%s\n", p->word );
	if( p->right != NULL ) {
		traverse( p->right );
	}
}

とした時と同じ順番で出力するプログラムを作る。
ただし、再起呼び出しを用いてはならない

課題83

% ./a.out arg1 arg1
の時引数をquicksortアルゴリズムでソートするプログラムを再起呼び出しを用いずに作る


~~~~
逆ポーランド法かなついなぁ...。
確かCでまともなプログラム書いたのが逆ポーランド法計算機だったなぁ...。
わざわざCUIでUI書いて...
なぜか右下に(C)とか書いてた記憶がある...。


とりあえず課題82はFILO(スタック/LIFO)、課題83はFIFO(キュー/LILO...とはあまり言わんか)で作ればいいのかな。