以下の課題を C, C++, Java, Smalltalk のどれかの言語を使って作りなさい。 なお、Smalltalk は標準入出力がないので、適宜入出力の仕様を付加しなさい。
注意: どちらも Windows の API は使用しないで作って下さい。
レポート締切日: 2004年11月24日
標準入力からテキストファイルを読み込み、 行を短い順に出力しなさい。 但し、行は最大 80 文字とし、 80 文字以上の行は先頭 80 文字だけの行として取扱い 出力し、空行は出力しないで下さい。 また、同じ長さの行は入力した順番に出しなさい。 レポートでは、実行例として、作成したソースプログラムをプログラムに入力 した出力と、 http://www.bbn.com/index.html のホームページのソースを入力した結果を先頭 5 行、最後の 5 行を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存 しなければなりません。 勝手な上限を設けてはいけません。
Windows XP Power Mac G5 Unix SVR4
Unix SVR4 Windows XP Power Mac G5
C++ で行の取得をするには std::istream のメンバ関数である getline メソッ ドを使います。 これは getline(文字配列のポインタ, 文字数, 区切り文字)で呼びます。 ここで、区切り文字が来る前に文字数-1 文字だけ読み込んでしまった時、 std::ios:failbit が ON になってしまいます。 この場合 clear() メソッドでこのビットを OFF にする必要があります。 但し、この clear() メソッドは std::ios:eofbit も OFF にしてしまうので、 注意して使う必要があります。
以下は標準入力から各行を高々 80 文字だけ読み込み出力するプログラムです。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
main(){
char buffer[81];
while(!cin.eof()){
cin.getline(buffer,sizeof(buffer));
cout << buffer << endl;
while((!cin.eof())&&cin.fail()){
cin.clear();
cin.ignore(80,'\n');
}
}
}
レポート締切日: 2005年1月12日(水)
標準入力から C 言語などのプログラムテキストファイルを読み込み、使用し ている関数名を頻度順に並べなさい。これは宣言文と実際の式のどちらも含み ます。 なお、同じ頻度の関数は辞書順に並べなさい。 レポートでは、実行例として、作成したソースプログラムをプログラムに入力 した出力を示しなさい。
なお、取り扱える行数は実行時のコンピュータのメモリーのサイズのみに依存 しなければなりません。 勝手な上限を設けてはいけません。 但し、関数名の長さは高々 255 文字と仮定して良い。
int combination(int n, int m){ if(m==0){return 1;} else if(n==m){return 1;} return combination(n-1,m-1)+combination(n-1,m); } main(){ int n=5,m=2; printf("%dC%d = %d\n",n,m,combination(n,m)); }
combination: 4 main: 1 printf: 1