本講義では 2 通のレポートで評価します。 レポートは A4 の紙を縦に使い、適宜表紙を付けて提出すること。 またプログラムは C 言語で作成しなさい。
なお、遅れレポートは原則受けとりません。
一行が高々200文字のテキストファイル input.txt に対して、 逆順に表示するプログラムを作成しなさい。 なお、行数の上限は仮定してはならない。 また、ファイルが存在しないとき、あるいはメモリーを確保できない時はそれ ぞれその旨のエラーメッセージを出力し、リターンコード -1, -2で異常終了しなさい。 なお、ファイル中に日本語が含まれる場合は正常に動作しなくてよい。
なお、プログラムの実行例は次のケースについて添付しなさい。
abc def ghi
ihg fed cba
課題を作り直しました。 旧課題でも解答可能です。
次の 4 つの課題を合わせて行い、報告しなさい。
なお、遅れレポートは教員に直接提出してください。 遅れた方が有利にならない範囲内で採点します。
複素数の演算を行うパッケージを作成したい。 そのため、次のような構造体を作成した。
typedef struct {
double real;
double imaginary;
} COMPLEX;
また、それを表示する関数を次のように作成した。
#include <stdio.h>
void printComplex(COMPLEX c){
if(c.imaginary==0){
printf("%f",c.real);
}else if(c.real==0){
printf("%fi",c.imaginary);
}else{
printf("%f%+fi",c.real,c.imaginary);
}
}
与えられた複素数に対して共役複素数を返す関数 COMPLEX conjugate(COMPLEX c)を作成しなさい。 そして、次のテストプログラムと結合し、正常な出力が得られることを確認しなさい。
#include <stdio.h>
#define G (999)
/* 学籍番号の下3桁を記入する。先頭の 0 は省く */
void printComplex(COMPLEX c);
COMPLEX conjugate(COMPLEX c);
int main(void){
COMPLEX c1 = {G,2};
printComplex(c1);
printf("\n");
printComplex(conjugate(c1));
printf("\n");
return 0;
}
999.000000+2.000000i 999.000000-2.000000i
与えられた2つの複素数に対して和を返す関数 COMPLEX add(COMPLEX x, COMPLEX y) を作成しなさい。 そして、次のテストプログラムと結合し、正常な出力が得られることを確認しなさい。
#include <stdio.h>
#define G (999)
/* 学籍番号の下3桁を記入する。先頭の 0 は省く */
void printComplex(COMPLEX c);
COMPLEX conjugate(COMPLEX c);
COMPLEX add(COMPLEX x, COMPLEX y);
int main(void){
COMPLEX c1 = {G,2};
COMPLEX c2 = {1,G};
printComplex(add(c1,c2));
printf("\n");
printComplex(add(c1,conjugate(c1));
printf("\n");
return 0;
}
1000.000000+1001.000000i 1998.000000
与えられた2つの複素数に対して積を返す関数 COMPLEX multiply(COMPLEX x, COMPLEX y) を作成しなさい。 そして、次のテストプログラムと結合し、正常な出力が得られることを確認しなさい。
#include <stdio.h>
#define G (999)
/* 学籍番号の下3桁を記入する。先頭の 0 は省く */
void printComplex(COMPLEX c);
COMPLEX conjugate(COMPLEX c);
COMPLEX multiply(COMPLEX x, COMPLEX y);
int main(void){
COMPLEX c1 = {G,2};
COMPLEX c2 = {1,G};
printComplex(multiply(c1,c2));
printf("\n");
printComplex(multiply(c1,conjugate(c1));
printf("\n");
return 0;
}
-999.000000+998003.000000i 998005.000000
与えられた2つの複素数に対して商を返す関数 COMPLEX divide(COMPLEX x, COMPLEX y) を作成しなさい。 そして、次のテストプログラムと結合し、正常な出力が得られることを確認しなさい。
#include <stdio.h>
#define G (999)
/* 学籍番号の下3桁を記入する。先頭の 0 は省く */
void printComplex(COMPLEX c);
COMPLEX conjugate(COMPLEX c);
COMPLEX multiply(COMPLEX x, COMPLEX y);
int main(void){
COMPLEX c1 = {G,2*G};
COMPLEX c2 = {2*G,4*G};
printComplex(divide(c1,c2));
printf("\n");
printComplex(divide(c1,conjugate(c1));
printf("\n");
return 0;
}
0.500000 -0.600000+0.800000i