情報処理5レポート課題(7)の解答例

更新:2009年6月17日


  1. 複素数構造体,有理数構造体をC++用に改訂し, にして下さい.
    complex.h
    struct Complex{
    	double Re, Im;
    };
    
    const struct Complex Complex(const double &re, const double &im);
    void print_Complex(const struct Complex &arg);
    const struct Complex add_Complex(const struct Complex &lhs, const struct Complex &rhs);
    const struct Complex sub_Complex(const struct Complex &lhs, const struct Complex &rhs);
    const struct Complex mul_Complex(const struct Complex &lhs, const struct Complex &rhs);
    const struct Complex div_Complex(const struct Complex &lhs, const struct Complex &rhs);
    
    complex.cxx
    #include<iostream>
    #include<cstdlib>//stdlib.hの代わり
    #include"complex.h"
    
    const struct Complex Complex(const double &re, const double &im){
      struct Complex result;
      result.Re=re;
      result.Im=im;
      return result;
    }
    
    void print_Complex(const struct Complex &arg){
      std::cout << "(" << arg.Re << ")+i(" << arg.Im << ")" << std::endl;
      return;
    }
    
    const struct Complex add_Complex(const struct Complex &lhs, const struct Complex &rhs){
    	struct Complex result;
    	result.Re=lhs.Re+rhs.Re;
    	result.Im=lhs.Im+rhs.Im;
    	return result;
    }
    
    const struct Complex sub_Complex(const struct Complex &lhs, const struct Complex &rhs){
    	struct Complex result;
    	result.Re=lhs.Re-rhs.Re;
    	result.Im=lhs.Im-rhs.Im;
    	return result;
    }
    
    const struct Complex mul_Complex(const struct Complex &lhs, const struct Complex &rhs){
    	struct Complex result;
    	result.Re=lhs.Re*rhs.Re-lhs.Im*rhs.Im;
    	result.Im=lhs.Re*rhs.Im+lhs.Im*rhs.Re;
    	return result;
    }
    
    const struct Complex div_Complex(const struct Complex &lhs, const struct Complex &rhs){
    	struct Complex result;
    	if(rhs.Re==0.0 && rhs.Im==0.0){
    		std::cout << "Division by 0" << std::endl;
    		exit(1);
    	}
    	result.Re=(lhs.Re*rhs.Re+lhs.Im*rhs.Im)/(rhs.Re*rhs.Re+rhs.Im*rhs.Im);
    	result.Im=(lhs.Im*rhs.Re-lhs.Re*rhs.Im)/(rhs.Re*rhs.Re+rhs.Im*rhs.Im);
    	return result;
    }
    
    main_complex.cxx
    #include<iostream>
    #include<cstdlib>//stdlib.hの代わり
    #include"complex.h"
    
    int main(void){
    	struct Complex x=Complex(2.0, 3.1), y=Complex(-1.2, 3.4), z=Complex(5.6, 7.8), u=Complex(-9.1, 2.3), result;
    	std::cout << "x="; print_Complex(x);
    	std::cout << "y="; print_Complex(y);
    	result=add_Complex(x, y);
    	std::cout << "result=x+y="; print_Complex(result);
    	result=sub_Complex(x, y);
    	std::cout << "result=x-y="; print_Complex(result);
    	result=mul_Complex(x, y);
    	std::cout << "result=x*y="; print_Complex(result);
    	result=div_Complex(x, y);
    	std::cout << "result=x/y="; print_Complex(result);
    	result=sub_Complex(add_Complex(x, div_Complex(mul_Complex(y, x), z)), u);
    	     std::cout << "result=x+y*x/z-u="; print_Complex(result);
    	return 0;
    }
    
    fraction.h
    struct Fraction{
    	int Denominator, Numerator;
    };
    
    const struct Fraction Fraction(const int &a, const int &b);
    void print_Fraction(const struct Fraction &arg);
    const struct Fraction add_Fraction(const struct Fraction &lhs, const struct Fraction &rhs);
    const struct Fraction sub_Fraction(const struct Fraction &lhs, const struct Fraction &rhs);
    const struct Fraction mul_Fraction(const struct Fraction &lhs, const struct Fraction &rhs);
    const struct Fraction div_Fraction(const struct Fraction &lhs, const struct Fraction &rhs);
    
    fraction.cxx
    #include<iostream>
    #include"fraction.h"
    
    const struct Fraction Fraction(const int &numerator, const int &denominator){
    	struct Fraction result;
    	result.Denominator=denominator;
    	result.Numerator=numerator;
    	return result;
    }
    
    void print_Fraction(const struct Fraction &arg){
    	std::cout << "(" << arg.Numerator << ")/(" << arg.Denominator << ")";
    	return;
    }
    
    const struct Fraction add_Fraction(const struct Fraction &lhs, const struct Fraction &rhs){
    	struct Fraction result;
    	result.Denominator=lhs.Denominator*rhs.Denominator;
    	result.Numerator=lhs.Denominator*rhs.Numerator+lhs.Numerator*rhs.Denominator;
    	return result;
    }
    
    const struct Fraction sub_Fraction(const struct Fraction &lhs, const struct Fraction &rhs){
    	struct Fraction result;
    	result.Denominator=lhs.Denominator*rhs.Denominator;
    	result.Numerator=rhs.Denominator*lhs.Numerator-rhs.Numerator*lhs.Denominator;
    	return result;
    }
    
    const struct Fraction mul_Fraction(const struct Fraction &lhs, const struct Fraction &rhs){
    	struct Fraction result;
    	result.Denominator=lhs.Denominator*rhs.Denominator;
    	result.Numerator=lhs.Numerator*rhs.Numerator;
    	return result;
    }
    
    const struct Fraction div_Fraction(const struct Fraction &lhs, const struct Fraction &rhs){
    	struct Fraction result;
    	result.Denominator=lhs.Denominator*rhs.Numerator;
    	result.Numerator=lhs.Numerator*rhs.Denominator;
    	return result;
    }
    
    main_fraction.cxx
    #include<iostream>
    #include"fraction.h"
    
    int main(void){
    	struct Fraction x=Fraction(2, 3), y=Fraction(-1, 3), z=Fraction(3, 5),
    		u=Fraction(-2, 7), result;
    	std::cout << "x="; print_Fraction(x); std::cout << std::endl;
    	std::cout << "y="; print_Fraction(y); std::cout << std::endl;
    	result=add_Fraction(x, y);
    	std::cout << "result=x+y="; print_Fraction(result); std::cout << std::endl;
    	result=sub_Fraction(x, y);
    	std::cout << "result=x-y="; print_Fraction(result); std::cout << std::endl;
    	result=mul_Fraction(x, y);
    	std::cout << "result=x*y="; print_Fraction(result); std::cout << std::endl;
    	result=div_Fraction(x, y);
    	std::cout << "result=x/y="; print_Fraction(result); std::cout << std::endl;
    	result=sub_Fraction(add_Fraction(x, div_Fraction(mul_Fraction(y, x), z)), u);
    	std::cout << "result=y*x/z+u="; print_Fraction(result); std::cout << std::endl;
    	return 0;
    }
    

info5/