小数が与えられた時に,それを値が最も近い分数で表現することを考える。例えば,小数として, 3.141592 が与えられた時,分母・分子に用いる数字を 3 桁以内に限定するとすると,それにも っとも値が近い分数は,355/113 となる。ただし,ここでは,与えられる小数は,0 以上 10 未 満であるものとする。また,出力する分数は,既約分数に限るものとする。具体的には,a.b1b2b3.........bk という形式の小数(ここで,a, b1, b2, b3,..., bk は,それぞれ 1 桁の正の整 数)が与えられた時に,これに最も近い分数 y/x を見つける。ただし,kが50以下, x と y が 6 桁以下となる場合にも対応できるプログラムであること。
処理(1): 整数 x と整数 y を引数として受け取り,小数 y/x を配列として返す関数
処理(2): 2 つの小数 f1 と f2 を配列として受け取り,その差の絶対値(型は,小数) を配列として返す関数
処理(3): 2 つの小数 f1 と f2 を配列として受け取り,f1 の方が大きい時,1 を返し, そうでない時,0 を返す関数。
処理(4): 配列としての 1 つの小数ともう一つの配列を受け取り,小数をもう一つの配 列に代入する関数。
質問
少数を入力して分数を求めるところまではできたんですが、int型配列に格納するのができないので、教えていただきたいです。
#include <stdio.h>
#include <math.h>
double shori1(int x,int y);
double shori2(double x,double y);
int shori3(double x,double y);
double shori4(double x,double y);
int main(void)
{
int x,y,c,d,count=0;
int rememx1,rememy1,rememx2,rememy2;
double a,b,z;
double hantei1=999.0,hantei2=999.0;
double nyuryoku;
scanf("%lf",&nyuryoku);
if(nyuryoku>0) {
for(x=1;x<=999;x++) {
for(y=1;y<=999;y++) {
a = shori1(x,y);
b = shori2(a,nyuryoku);
c = shori3(hantei1,b);
if(c==1) {
hantei1 = shori4(b,hantei1);
rememx1 = x;
rememy1 = y;
} else if(c==0) {
break;
}
}
d = shori3(hantei2,hantei1);
if(d==1) {
hantei2 = shori4(hantei1,hantei2);
rememx2 = rememx1;
rememy2 = rememy1;
} else if(d==0) {
}
hantei1=999.0;
}
}
z = (double)rememy2/(double)rememx2;
printf("%lfに最も近い分数は %d/%d \nそのときの近似値は %lf \n",nyuryoku,rememy2,rememx2,z);
return 0;
}
double shori1(int x,int y)
{
double a;
a = (double)y/(double)x;
return a;
}
double shori2(double x,double y)
{
double b;
if(x>y) {
b = x - y;
} else if(x<y) {
b = y - x;
}
return b;
}
int shori3(double x,double y)
{
int c;
if(x>y) {
c = 1;
} else {
c = 0;
}
return c;
}
double shori4(double x,double y)
{
y = x;
return y;
}