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

更新:2009年6月9日


  1. vector2を参考にして、 巾多項式の構造体のために、 コピー関数を導入して使ってみてください。 特に、3項の多項式を保持しているyに 4項の多項式を保持しているxをコピーできることを 確認して下さい。 また、自己代入(x=x;)できるようにしてください。

polynomial.h
#include<stdio.h>
struct Polynomial{
	int Size;
	double* Element;
};

struct Polynomial Polynomial(int n);
void free_Polynomial(struct Polynomial *p);
void print_Polynomial(struct Polynomial *p);
void copy_Polynomial(struct Polynomial *result, struct Polynomial *arg);
polynomial.c
#include<stdio.h>
#include<stdlib.h>
#include"polynomial.h"

struct Polynomial Polynomial(int n){
	struct Polynomial x;
	x.Size=n;
	x.Element=malloc(n*sizeof(double));
	if(x.Element == NULL){
		printf("Polynomial:Out of Memory!\n");
		exit(1);
	}
	else{
		return x;
	}
}

void print_Polynomial(struct Polynomial *p){
	int i;
	for(i=0;i<p->Size;i++){
		printf("(%.3e)t^%d+", p->Element[i], i);
	}
	printf("\n");
	return;
}

void copy_Polynomial(struct Polynomial *result, struct Polynomial *arg){
	int i;
	if(result!=arg){
		result->Size=arg->Size;
		if(result->Element!=NULL){
			free(result->Element);
		}
		result->Element=malloc(result->Size*sizeof(double));
		if(result->Element==NULL){
			printf("copy_Polynomial:Out of Memory\n");
			exit(1);
		}
		for(i=0;i<result->Size;i++){
			result->Element[i]=arg->Element[i];
		}
	}
	return;
}

void free_Polynomial(struct Polynomial *p){
	free(p->Element);
	return;
}
main_polynomial.c
#include<stdio.h>
#include"polynomial.h"

int main(void){
	int i;
	struct Polynomial x=Polynomial(5), y=Polynomial(3);
	for(i=0;i<x.Size;i++){
		x.Element[i]=(double)(i+1);
	}
	printf("x="); print_Polynomial(&x);
	copy_Polynomial(&y, &x);
	printf("y="); print_Polynomial(&y);
	copy_Polynomial(&x, &x);
	printf("x="); print_Polynomial(&x);

	free_Polynomial(&x);
	free_Polynomial(&y);

	return 0;
}

na1/