3回目課題解答


課題1について

#include <stdio.h>
#include <math.h>
#include "complex.h"

/*複素数を2つの変数の構造体として定義する*/
/*構造体というと分かりにくくなるが,実部変数,虚部変数をセットにして変数にしたようなもの*/
Complex ToComplex(double x, double y) /*複素数のパラメータを与える*/
{
 Complex z; /*Complex型の変数を用意*/

 z.re = x;
 z.im = y;
 return z; /*構造体として返す(実部,虚部をパラメータとして持つ)*/
}

/*Complex型の引数aと引数bを渡す*/
Complex Cadd(Complex a, Complex b) /*複素数の足し算*/
{
 Complex z;

 z.re = a.re + b.re;/*複素数aの実部と複素数bの実部を足す.*/
 z.im = a.im + b.im;
 return z;
}

Complex Csub(Complex a, Complex b) /*複素数の引き算*/
{
 Complex z;

 z.re = a.re - b.re;
 z.im = a.im - b.im;
 return z;
}

Complex Cmul(Complex a, Complex b) /*複素数の掛け算*/
{
 Complex z;

 z.re = (a.re * b.re) - (a.im * b.im);
 z.im = (a.re * b.im) + (b.re * a.im);
 return z;
}

Complex Cdiv(Complex a, Complex b) /*複素数の割り算*/
{
 Complex z;

 z.re = ( (a.re * b.re) + (a.im * b.im) )/( (b.re * b.re) + (b.im * b.im) );
 z.im = ( (b.re * a.im) - (a.re * b.im) )/( (b.re * b.re) + (b.im * b.im) );
 return z;
}

double Cabs(Complex a) /*絶対値*/
{
 double x;
 x = sqrt(a.re * a.re + a.im * a.im);
 return x;
}

double Carg(Complex a) /*偏角*/
{
 double x;
 x = atan(a.im / a.re);
 return x;
}

Complex Conj(Complex a) /*共役複素数*/
{
 a.im = -a.im; /*虚数部だけを呼び出し,符号を入れ替える*/

 return a;
}

課題3について

ヒント
確保すべき領域A*B*C*型
任意の要素の定義((a)*(B)+(b))*(C)+(c)

#include <stdio.h>
#include <stdlib.h>

#define A 4
#define B 2
#define M(a, b, c) m[((a)*(B)+(b))*(C)+(c)]

main(){
 int a, b;
 int *m=(int *)malloc(A*B*C*sizeof(int));
 if(m==NULL){
  puts("メモリ不足!");
  exit(EXIT_FAILURE);
 }

 M(0,0,0)=0x000; M(0,0,1)=0x001; 
 M(0,1,0)=0x010; M(0,1,1)=0x011; 
 M(0,2,0)=0x020; M(0,2,1)=0x021; 

 M(1,0,0)=0x100; M(1,0,1)=0x101; 
 M(1,1,0)=0x110; M(1,1,1)=0x111; 
 M(1,2,0)=0x120; M(1,2,1)=0x121;

  M(2,0,0)=0x200; M(2,0,1)=0x201; 
 M(2,1,0)=0x210; M(2,1,1)=0x211; 
 M(2,2,0)=0x220; M(2,2,1)=0x221; 

  M(3,0,0)=0x300; M(3,0,1)=0x301; 
 M(3,1,0)=0x310; M(3,1,1)=0x311; 
 M(3,2,0)=0x320; M(3,2,1)=0x321; 


 for(a=0; a<A; a++){
  for(b=0; b<B; b++){
   for(c=0; c<C; c++){

   printf("d[%d][%d]=%02X\n", a, b, M(a, b, c));
   printf("\n");
 }

 free(m);
 exit(EXIT_SUCCESS);
}