無題
Posted: 2009年9月12日(土) 17:20
あともう一つあるのでこちらも…
【問題3】
以下のCプログラムを良く読み,下記の問に対する解答を電子メールで提出せよ.
/*
???といった機能を持つプログラム
*/
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int c;
int lastchar;
int status;
lastchar = '\n';
status = OUT;
while ( ( c=getchar() ) != EOF ) {
if ( lastchar == '\n' ) {
if ( c == '#' )
status = IN;
else
status = OUT;
}
if ( status == IN )
putchar(c);
lastchar = c;
}
}
(1) 上記プログラムは,どのような機能を持ったプログラムか?簡潔に説明せよ.
(ヒント: 上記プログラムをコンパイル・リンクした後,リダイレクションの機能を使ってソースプログラム自身を読み込ませてみて,結果を見てみよ.
その際,上記ソースプログラムの左端に寄っている行はその通りになっているようにしておくこと.)
(2) なぜ上記プログラムは,(1)の解答のような動作をするのか?それがわかるように,プログラムの構造を説明せよ.
(「他人に解説する」ことを思い描いて,全体的な流れ,各行の説明等をなるべくわかりやすく記述せよ.)
* report2の例と,実行例.
実行プログラムの名前を a.out 以外にしたいときは,下の例のように gcc コマンドの -o オプションを利用できる.
report2の例
#!/bin/sh
cd ~/programs
# プログラムの表示
echo
echo "==============================="
echo "= report2_0.c の表示 ="
echo "==============================="
cat report2_0.c
# コンパイル・リンク
gcc -o report2_0 report2_0.c
# プログラムの実行
echo
echo "==============================="
echo "= プログラムの実行 ="
echo "= report2_0 ="
echo "==============================="
./report2_0
report2の実行例
(太字がコマンド,
斜体が出力)
eduws1% cd
eduws1% scripts/report2
===============================
= report2_0.c の表示 =
===============================
#include <stdio.h>
main()
{
~~~ 略 ~~~
}
===============================
= プログラムの実行 =
= report2_0 =
===============================
Xa Xc Xb 誤差 Ya Yc Yb
0.0000000 0.5000000 1.0000000 0.5000000 -0.5000000 -0.3750000 0.5000000
0.5000000 0.7500000 1.0000000 0.2500000 -0.3750000 -0.0781250 0.5000000
0.7500000 0.8750000 1.0000000 0.1250000 -0.0781250 0.1699219 0.5000000
~~~ 略 ~~~
eduws1%
お暇な方いらしたらぜひ助けていただけると泣いて喜びます;
【問題3】
以下のCプログラムを良く読み,下記の問に対する解答を電子メールで提出せよ.
/*
???といった機能を持つプログラム
*/
#include <stdio.h>
#define IN 1
#define OUT 0
main()
{
int c;
int lastchar;
int status;
lastchar = '\n';
status = OUT;
while ( ( c=getchar() ) != EOF ) {
if ( lastchar == '\n' ) {
if ( c == '#' )
status = IN;
else
status = OUT;
}
if ( status == IN )
putchar(c);
lastchar = c;
}
}
(1) 上記プログラムは,どのような機能を持ったプログラムか?簡潔に説明せよ.
(ヒント: 上記プログラムをコンパイル・リンクした後,リダイレクションの機能を使ってソースプログラム自身を読み込ませてみて,結果を見てみよ.
その際,上記ソースプログラムの左端に寄っている行はその通りになっているようにしておくこと.)
(2) なぜ上記プログラムは,(1)の解答のような動作をするのか?それがわかるように,プログラムの構造を説明せよ.
(「他人に解説する」ことを思い描いて,全体的な流れ,各行の説明等をなるべくわかりやすく記述せよ.)
* report2の例と,実行例.
実行プログラムの名前を a.out 以外にしたいときは,下の例のように gcc コマンドの -o オプションを利用できる.
report2の例
#!/bin/sh
cd ~/programs
# プログラムの表示
echo
echo "==============================="
echo "= report2_0.c の表示 ="
echo "==============================="
cat report2_0.c
# コンパイル・リンク
gcc -o report2_0 report2_0.c
# プログラムの実行
echo
echo "==============================="
echo "= プログラムの実行 ="
echo "= report2_0 ="
echo "==============================="
./report2_0
report2の実行例
(太字がコマンド,
斜体が出力)
eduws1% cd
eduws1% scripts/report2
===============================
= report2_0.c の表示 =
===============================
#include <stdio.h>
main()
{
~~~ 略 ~~~
}
===============================
= プログラムの実行 =
= report2_0 =
===============================
Xa Xc Xb 誤差 Ya Yc Yb
0.0000000 0.5000000 1.0000000 0.5000000 -0.5000000 -0.3750000 0.5000000
0.5000000 0.7500000 1.0000000 0.2500000 -0.3750000 -0.0781250 0.5000000
0.7500000 0.8750000 1.0000000 0.1250000 -0.0781250 0.1699219 0.5000000
~~~ 略 ~~~
eduws1%
お暇な方いらしたらぜひ助けていただけると泣いて喜びます;