A. 已知函數值c語言中用三次樣條插值求某個點值程序
void SPL(int n, double *x, double *y, int ni, double *xi, double *yi); 是你所要。
已知 n 個點 x,y; x 必須已按順序排好。要插值 ni 點,橫坐標 xi[], 輸出 yi[]。
程序里用double 型,保證計算精度。
SPL調用現成的程序。
現成的程序很多。端點處理方法不同,結果會有不同。想同matlab比較,你需 嘗試 調用 spline()函數 時,令 end1 為 1, 設 slope1 的值,令 end2 為 1 設 slope2 的值。
#include
#include
int spline (int n, int end1, int end2,
double slope1, double slope2,
double x[], double y[],
double b[], double c[], double d[],
int *iflag)
{
int nm1, ib, i, ascend;
double t;
nm1 = n - 1;
*iflag = 0;
if (n < 2)
{ /* no possible interpolation */
*iflag = 1;
goto LeaveSpline;
}
ascend = 1;
for (i = 1; i < n; ++i) if (x[i] <= x[i-1]) ascend = 0;
if (!ascend)
{
*iflag = 2;
goto LeaveSpline;
}
if (n >= 3)
{
d[0] = x[1] - x[0];
c[1] = (y[1] - y[0]) / d[0];
for (i = 1; i < nm1; ++i)
{
d[i] = x[i+1] - x[i];
b[i] = 2.0 * (d[i-1] + d[i]);
c[i+1] = (y[i+1] - y[i]) / d[i];
c[i] = c[i+1] - c[i];
}
/* ---- Default End conditions */
b[0] = -d[0];
b[nm1] = -d[n-2];
c[0] = 0.0;
c[nm1] = 0.0;
if (n != 3)
{
c[0] = c[2] / (x[3] - x[1]) - c[1] / (x[2] - x[0]);
c[nm1] = c[n-2] / (x[nm1] - x[n-3]) - c[n-3] / (x[n-2] - x[n-4]);
c[0] = c[0] * d[0] * d[0] / (x[3] - x[0]);
c[nm1] = -c[nm1] * d[n-2] * d[n-2] / (x[nm1] - x[n-4]);
}
/* Alternative end conditions -- known slopes */
if (end1 == 1)
{
b[0] = 2.0 * (x[1] - x[0]);
c[0] = (y[1] - y[0]) / (x[1] - x[0]) - slope1;
}
if (end2 == 1)
{
b[nm1] = 2.0 * (x[nm1] - x[n-2]);
c[nm1] = slope2 - (y[nm1] - y[n-2]) / (x[nm1] - x[n-2]);
}
/* Forward elimination */
for (i = 1; i < n; ++i)
{
t = d[i-1] / b[i-1];
b[i] = b[i] - t * d[i-1];
c[i] = c[i] - t * c[i-1];
}
/* Back substitution */
c[nm1] = c[nm1] / b[nm1];
for (ib = 0; ib < nm1; ++ib)
{
i = n - ib - 2;
c[i] = (c[i] - d[i] * c[i+1]) / b[i];
}
b[nm1] = (y[nm1] - y[n-2]) / d[n-2] + d[n-2] * (c[n-2] + 2.0 * c[nm1]);
for (i = 0; i < nm1; ++i)
{
b[i] = (y[i+1] - y[i]) / d[i] - d[i] * (c[i+1] + 2.0 * c[i]);
d[i] = (c[i+1] - c[i]) / d[i];
c[i] = 3.0 * c[i];
}
c[nm1] = 3.0 * c[nm1];
d[nm1] = d[n-2];
}
else
{
b[0] = (y[1] - y[0]) / (x[1] - x[0]);
c[0] = 0.0;
d[0] = 0.0;
b[1] = b[0];
c[1] = 0.0;
d[1] = 0.0;
}
LeaveSpline:
return 0;
}
double seval (int n, double u,
double x[], double y[],
double b[], double c[], double d[],
int *last)
{
int i, j, k;
double w;
i = *last;
if (i >= n-1) i = 0;
if (i < 0) i = 0;
if ((x[i] > u) || (x[i+1] < u))
{
i = 0;
j = n;
do
{
k = (i + j) / 2;
if (u < x[k]) j = k;
if (u >= x[k]) i = k;
}
while (j > i+1);
}
*last = i;
w = u - x[i];
w = y[i] + w * (b[i] + w * (c[i] + w * d[i]));
return (w);
}
void SPL(int n, double *x, double *y, int ni, double *xi, double *yi)
{
double *b, *c, *d;
int iflag,last,i;
b = (double *) malloc(sizeof(double) * n);
c = (double *)malloc(sizeof(double) * n);
d = (double *)malloc(sizeof(double) * n);
if (!d) { printf("no enough memory for b,c,d\n");}
else {
spline (n,0,0,0,0,x,y,b,c,d,&iflag);
if (iflag==0) printf("I got coef b,c,d now\n"); else printf("x not in order or other error\n");
for (i=0;i<ni;i++) yi[i] = seval(ni,xi[i],x,y,b,c,d,&last);
free(b);free(c);free(d);
};
}
main(){
double x[6]={0.,1.,2.,3.,4.,5};
double y[6]={0.,0.5,2.0,1.6,0.5,0.0};
double u[8]={0.5,1,1.5,2,2.5,3,3.5,4};
double s[8];
int i;
SPL(6, x,y, 8, u, s);
for (i=0;i<8;i++) printf("%lf %lf \n",u[i],s[i]);
return 0;
}
B. 三次樣條插值用c語言具體怎麼做
void SPL(int n, double *x, double *y, int ni, double *xi, double *yi); 是你所要。
已知 n 個點 x,y; x 必須已按順序排好。要插值 ni 點,橫坐標 xi[], 輸出 yi[]。
程序里用double 型,保證計算精度。
SPL調用現成的程序。
現成的程序很多。端點處理方法不同,結果會有不同。想同matlab比較,你需 嘗試 調用 spline()函數 時,令 end1 為 1, 設 slope1 的值,令 end2 為 1 設 slope2 的值。
C. c語言中插值排序法怎麼打程序
(1)「冒泡法」
冒泡法大家都較熟悉。其原理為從a[0]開始,依次將其和後面的元素比較,若a[0]>a[i],則交換它們,一直比較到a[n]。同理對a[1],a[2],...a[n-1]處理,即完成排序。下面列出其代碼:
void bubble(int *a,int n) /*定義兩個參數:數組首地址與數組大小*/
{
int i,j,temp;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++) /*注意循環的上下限*/
if(a[i]>a[j]) {
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
冒泡法原理簡單,但其缺點是交換次數多,效率低。
下面介紹一種源自冒泡法但更有效率的方法「選擇法」。
(2)「選擇法」
選擇法循環過程與冒泡法一致,它還定義了記號k=i,然後依次把a[k]同後面元素比較,若a[k]>a[j],則使k=j.最後看看k=i是否還成立,不成立則交換a[k],a[i],這樣就比冒泡法省下許多無用的交換,提高了效率。
void choise(int *a,int n)
{
int i,j,k,temp;
for(i=0;i<n-1;i++) {
k=i; /*給記號賦值*/
for(j=i+1;j<n;j++)
if(a[k]>a[j]) k=j; /*是k總是指向最小元素*/
if(i!=k) { /*當k!=i是才交換,否則a[i]即為最小*/
temp=a[i];
a[i]=a[k];
a[k]=temp;
}
}
}
選擇法比冒泡法效率更高,但說到高效率,非「快速法」莫屬,現在就讓我們來了解它。
(3)「快速法」
快速法定義了三個參數,(數組首地址*a,要排序數組起始元素下標i,要排序數組結束元素下標j). 它首先選一個數組元素(一般為a[(i+j)/2],即中間元素)作為參照,把比它小的元素放到它的左邊,比它大的放在右邊。然後運用遞歸,在將它左,右兩個子數組排序,最後完成整個數組的排序。下面分析其代碼:
void quick(int *a,int i,int j)
{
int m,n,temp;
int k;
m=i;
n=j;
k=a[(i+j)/2]; /*選取的參照*/
do {
while(a[m]<k&&m<j) m++; /* 從左到右找比k大的元素*/
while(a[n]>k&&n>i) n--; /* 從右到左找比k小的元素*/
if(m<=n) { /*若找到且滿足條件,則交換*/
temp=a[m];
a[m]=a[n];
a[n]=temp;
m++;
n--;
}
}while(m<=n);
if(m<j) quick(a,m,j); /*運用遞歸*/
if(n>i) quick(a,i,n);
}
(4)「插入法」
插入法是一種比較直觀的排序方法。它首先把數組頭兩個元素排好序,再依次把後面的元素插入適當的位置。把數組元素插完也就完成了排序。
void insert(int *a,int n)
{
int i,j,temp;
for(i=1;i<n;i++) {
temp=a[i]; /*temp為要插入的元素*/
j=i-1;
while(j>=0&&temp<a[j]) { /*從a[i-1]開始找比a[i]小的數,同時把數組元素向後移*/
a[j+1]=a[j];
j--;
}
a[j+1]=temp; /*插入*/
}
}
(5)「shell法」
shell法是一個叫 shell 的美國人與1969年發明的。它首先把相距k(k>=1)的那幾個元素排好序,再縮小k值(一般取其一半),再排序,直到k=1時完成排序。下面讓我們來分析其代碼:
void shell(int *a,int n)
{
int i,j,k,x;
k=n/2; /*間距值*/
while(k>=1) {
for(i=k;i<n;i++) {
x=a[i];
j=i-k;
while(j>=0&&x<a[j]) {
a[j+k]=a[j];
j-=k;
}
a[j+k]=x;
}
k/=2; /*縮小間距值*/
}
}
上面我們已經對幾種排序法作了介紹,現在讓我們寫個主函數檢驗一下。
#include<stdio.h>
/*別偷懶,下面的"..."代表函數體,自己加上去哦!*/
void bubble(int *a,int n)
{
...
}
void choise(int *a,int n)
{
...
}
void quick(int *a,int i,int j)
{
...
}
void insert(int *a,int n)
{
...
}
void shell(int *a,int n)
{
...
}
/*為了列印方便,我們寫一個print吧。*/[code]
void print(int *a,int n)
{
int i;
for(i=0;i<n;i++)
printf("%5d",a[i]);
printf("\n");
}
main()
{ /*為了公平,我們給每個函數定義一個相同數組*/
int a1[]={13,0,5,8,1,7,21,50,9,2};
int a2[]={13,0,5,8,1,7,21,50,9,2};
int a3[]={13,0,5,8,1,7,21,50,9,2};
int a4[]={13,0,5,8,1,7,21,50,9,2};
int a5[]={13,0,5,8,1,7,21,50,9,2};
printf("the original list:");
print(a1,10);
printf("according to bubble:");
bubble(a1,10);
print(a1,10);
printf("according to choise:");
choise(a2,10);
print(a2,10);
printf("according to quick:");
quick(a3,0,9);
print(a3,10);
printf("according to insert:");
insert(a4,10);
print(a4,10);
printf("according to shell:");
shell(a5,10);
print(a5,10);
}
D. 求用c語言編寫牛頓插值法
牛頓插值法:
#include<stdio.h>
#include<alloc.h>
float Language(float *x,float *y,float xx,int n)
{
int i,j;
float *a,yy=0.0;
a=(float *)malloc(n*sizeof(float));
for(i=0;i<=n-1;i++)
{
a[i]=y[i];
for(j=0;j<=n-1;j++)
if(j!=i)a[i]*=(xx-x[j])/(x[i]-x[j]);
yy+=a[i];
}
free(a);
return yy;
}
void main()
{
float x[4]={0.56160,0.5628,0.56401,0.56521};
float y[4]={0.82741,0.82659,0.82577,0.82495};
float xx=0.5635,yy;
float Language(float *,float *,float,int);
yy=Language(x,y,xx,4);
printf("x=%f,y=%f\n",xx,yy);
getchar();
}
2.牛頓插值法#include<stdio.h>
#include<math.h>
#define N 4
void Difference(float *x,float *y,int n)
{
float *f;
int k,i;
f=(float *)malloc(n*sizeof(float));
for(k=1;k<=n;k++)
{
f[0]=y[k];
for(i=0;i<k;i++)
f[i+1]=(f[i]-y[i])/(x[k]-x[i]);
y[k]=f[k];
}
return;
}
main()
{
int i;
float varx=0.895,b;
float x[N+1]={0.4,0.55,0.65,0.8,0.9};
float y[N+1]={0.41075,0.57815,0.69675,0.88811,1.02652};
Difference(x,(float *)y,N);
b=y[N];
for(i=N-1;i>=0;i--)b=b*(varx-x[i])+y[i];
printf("Nn(%f)=%f",varx,b);
getchar();
}
留下個郵箱,我發給你:牛頓插值法的程序設計與應用
E. 求c語言寫的雙三次插值函數
void
SPL(int
n,
double
*x,
double
*y,
int
ni,
double
*xi,
double
*yi);
是你所要。
已知
n
個點
x,y;
x
必須已按順序排好。要插值
ni
點,橫坐標
xi[],
輸出
yi[]。
程序里用double
型,保證計算精度。
SPL調用現成的程序。
現成的程序很多。端點處理方法不同,結果會有不同。想同matlab比較,你需
嘗試
調用
spline()函數
時,令
end1
為
1,
設
slope1
的值,令
end2
為
1
設
slope2
的值。
#include
<stdio.h>
#include
<math.h>
int
spline
(int
n,
int
end1,
int
end2,
double
slope1,
double
slope2,
double
x[],
double
y[],
double
b[],
double
c[],
double
d[],
int
*iflag)
{
int
nm1,
ib,
i,
ascend;
double
t;
nm1
=
n
-
1;
*iflag
=
0;
if
(n
<
2)
{
/*
no
possible
interpolation
*/
*iflag
=
1;
goto
LeaveSpline;
}
ascend
=
1;
for
(i
=
1;
i
<
n;
++i)
if
(x[i]
<=
x[i-1])
ascend
=
0;
if
(!ascend)
{
*iflag
=
2;
goto
LeaveSpline;
}
if
(n
>=
3)
{
d[0]
=
x[1]
-
x[0];
c[1]
=
(y[1]
-
y[0])
/
d[0];
for
(i
=
1;
i
<
nm1;
++i)
{
d[i]
=
x[i+1]
-
x[i];
b[i]
=
2.0
*
(d[i-1]
+
d[i]);
c[i+1]
=
(y[i+1]
-
y[i])
/
d[i];
c[i]
=
c[i+1]
-
c[i];
}
/*
----
Default
End
conditions
*/
b[0]
=
-d[0];
b[nm1]
=
-d[n-2];
c[0]
=
0.0;
c[nm1]
=
0.0;
if
(n
!=
3)
{
c[0]
=
c[2]
/
(x[3]
-
x[1])
-
c[1]
/
(x[2]
-
x[0]);
c[nm1]
=
c[n-2]
/
(x[nm1]
-
x[n-3])
-
c[n-3]
/
(x[n-2]
-
x[n-4]);
c[0]
=
c[0]
*
d[0]
*
d[0]
/
(x[3]
-
x[0]);
c[nm1]
=
-c[nm1]
*
d[n-2]
*
d[n-2]
/
(x[nm1]
-
x[n-4]);
}
/*
Alternative
end
conditions
--
known
slopes
*/
if
(end1
==
1)
{
b[0]
=
2.0
*
(x[1]
-
x[0]);
c[0]
=
(y[1]
-
y[0])
/
(x[1]
-
x[0])
-
slope1;
}
if
(end2
==
1)
{
b[nm1]
=
2.0
*
(x[nm1]
-
x[n-2]);
c[nm1]
=
slope2
-
(y[nm1]
-
y[n-2])
/
(x[nm1]
-
x[n-2]);
}
/*
Forward
elimination
*/
for
(i
=
1;
i
<
n;
++i)
{
t
=
d[i-1]
/
b[i-1];
b[i]
=
b[i]
-
t
*
d[i-1];
c[i]
=
c[i]
-
t
*
c[i-1];
}
/*
Back
substitution
*/
c[nm1]
=
c[nm1]
/
b[nm1];
for
(ib
=
0;
ib
<
nm1;
++ib)
{
i
=
n
-
ib
-
2;
c[i]
=
(c[i]
-
d[i]
*
c[i+1])
/
b[i];
}
b[nm1]
=
(y[nm1]
-
y[n-2])
/
d[n-2]
+
d[n-2]
*
(c[n-2]
+
2.0
*
c[nm1]);
for
(i
=
0;
i
<
nm1;
++i)
{
b[i]
=
(y[i+1]
-
y[i])
/
d[i]
-
d[i]
*
(c[i+1]
+
2.0
*
c[i]);
d[i]
=
(c[i+1]
-
c[i])
/
d[i];
c[i]
=
3.0
*
c[i];
}
c[nm1]
=
3.0
*
c[nm1];
d[nm1]
=
d[n-2];
}
else
{
b[0]
=
(y[1]
-
y[0])
/
(x[1]
-
x[0]);
c[0]
=
0.0;
d[0]
=
0.0;
b[1]
=
b[0];
c[1]
=
0.0;
d[1]
=
0.0;
}
LeaveSpline:
return
0;
}
double
seval
(int
n,
double
u,
double
x[],
double
y[],
double
b[],
double
c[],
double
d[],
int
*last)
{
int
i,
j,
k;
double
w;
i
=
*last;
if
(i
>=
n-1)
i
=
0;
if
(i
<
0)
i
=
0;
if
((x[i]
>
u)
||
(x[i+1]
<
u))
{
i
=
0;
j
=
n;
do
{
k
=
(i
+
j)
/
2;
if
(u
<
x[k])
j
=
k;
if
(u
>=
x[k])
i
=
k;
}
while
(j
>
i+1);
}
*last
=
i;
w
=
u
-
x[i];
w
=
y[i]
+
w
*
(b[i]
+
w
*
(c[i]
+
w
*
d[i]));
return
(w);
}
void
SPL(int
n,
double
*x,
double
*y,
int
ni,
double
*xi,
double
*yi)
{
double
*b,
*c,
*d;
int
iflag,last,i;
b
=
(double
*)
malloc(sizeof(double)
*
n);
c
=
(double
*)malloc(sizeof(double)
*
n);
d
=
(double
*)malloc(sizeof(double)
*
n);
if
(!d)
{
printf("no
enough
memory
for
b,c,d\n");}
else
{
spline
(n,0,0,0,0,x,y,b,c,d,&iflag);
if
(iflag==0)
printf("I
got
coef
b,c,d
now\n");
else
printf("x
not
in
order
or
other
error\n");
for
(i=0;i<ni;i++)
yi[i]
=
seval(ni,xi[i],x,y,b,c,d,&last);
free(b);free(c);free(d);
};
}
main(){
double
x[6]={0.,1.,2.,3.,4.,5};
double
y[6]={0.,0.5,2.0,1.6,0.5,0.0};
double
u[8]={0.5,1,1.5,2,2.5,3,3.5,4};
double
s[8];
int
i;
SPL(6,
x,y,
8,
u,
s);
for
(i=0;i<8;i++)
printf("%lf
%lf
\n",u[i],s[i]);
return
0;
}
F. 用C語言編寫一個線性插值程序
#include<stdio.h>
doubleLerp(doublex0,doubley0,doublex1,doubley1,doublex)
{
doubledy=y1-y0;
if(dy==0){
printf("除0錯誤! ");
return0;
}
returnx*(x1-x0)/dy;
}
intmain()
{
doublex0,x1,y1,y0,x,y;
printf("Inptux0y0x1y1x:");
scanf("%lf%lf%lf%lf%lf",&x0,&y0,&x1,&y1,&x);
y=Lerp(x0,y0,x1,y1,x);
printf("y=%lf ",y);
return0;
}
G. 高分懸賞 求三維數據點C語言插值計算程序
問題補充,因字數限制,挪到這
1.拉格朗日插值簡介:
對給定的n個插值節點x1,x2,…,xn,及其對應的函數值y1=f(x1), y2=f(x2),…, yn=f(xn);使用拉格朗日插值公式,計算在x點處的對應的函數值f(x);
2.一維拉格朗日插值c語言程序:
Int lagrange(x0, y0, n, x, y)
Float xo[], yo[], x;
Int n;
Float *y
{
Int i, j;
Float p;
*y=0;
If (n>1)
{
For(i=0;i<n;i++)
{
P=1;
For(j=1;j<n;j++)
{
If(i!=J)
P=p*(x-x0[j]/x0[i]-x0[j]);
}
*y=*y+p*y0[i];
Return(0);
}
Else
Return(-1);
}
3.例題。已知函數如下表所示,求x=0.472處的函數值:
X 0.46 0.47 0.48 0.49
Y 0.484655 0.4903745 0.502750 0.511668
計算這個問題的c語言程序如下:
#minclude stdio
#includeM<nath.h>
Main()
{
Float x0[4]={ 0.46, 0.47,0.48,0.49};
Float y0[4]={ 0.484655 ,0.4903745 ,0.502750 ,0.511668};
Float x, y;
Int n, rtn;
N=4;
X=0.472;
Rth=lagrange(x0,y0,n,x,&y);
If(rtn=0)
{
Prinf(「Y(0.472)=:%f\n」,y);
}
Else
{
Prinf(「n must be larger than 1.\n」);
}
}
計算結果:Y(0.472)=:0.495553
4.問題補充
我的問題與上面的例子類似,計算三維空間一點(x,y,z)對應的函數值(Vx,Vy,Vz).不同的是自變數(point_coordinate.txt)為三維空間散亂點(不是正方體的頂點),因變數(point_data.txt)為矢量(向量 )。插值演算法比較多,常數法,拉格朗日插值,埃特金插值,三階樣條插值等。最簡單的就是常數法,查找離目標點(x,y,z)距離最近的已知自變數(Xi,Yi,Zi),把該點的函數值賦給目標點做函數值,求高手幫忙寫寫。
H. C語言的拉格朗日插值法
double 型,輸入格式要用 %lf, 不能用 %f。
(double 型,輸出格式 可以用 %f 的。 千萬不要混淆,以為輸入也允許。)
改正後再看有無別的問題。另外注意運算中分母不能為0。
I. 用C語言實現拉格朗日插值、牛頓插值、等距結點插值演算法
#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
typedef struct data
{
float x;
float y;
}Data;//變數x和函數值y的結構
Data d[20];//最多二十組數據
float f(int s,int t)//牛頓插值法,用以返回插商
{
if(t==s+1)
return (d[t].y-d[s].y)/(d[t].x-d[s].x);
else
return (f(s+1,t)-f(s,t-1))/(d[t].x-d[s].x);
}
float Newton(float x,int count)
{
int n;
while(1)
{
cout<<"請輸入n值(即n次插值):";//獲得插值次數
cin>>n;
if(n<=count-1)// 插值次數不得大於count-1次
break;
else
system("cls");
}
//初始化t,y,yt。
float t=1.0;
float y=d[0].y;
float yt=0.0;
//計算y值
for(int j=1;j<=n;j++)
{
t=(x-d[j-1].x)*t;
yt=f(0,j)*t;
//cout<<f(0,j)<<endl;
y=y+yt;
}
return y;
}
float lagrange(float x,int count)
{
float y=0.0;
for(int k=0;k<count;k++)//這兒默認為count-1次插值
{
float p=1.0;//初始化p
for(int j=0;j<count;j++)
{//計算p的值
if(k==j)continue;//判斷是否為同一個數
p=p*(x-d[j].x)/(d[k].x-d[j].x);
}
y=y+p*d[k].y;//求和
}
return y;//返回y的值
}
void main()
{
float x,y;
int count;
while(1)
{
cout<<"請輸入x[i],y[i]的組數,不得超過20組:";//要求用戶輸入數據組數
cin>>count;
if(count<=20)
break;//檢查輸入的是否合法
system("cls");
}
//獲得各組數據
for(int i=0;i<count;i++)
{
cout<<"請輸入第"<<i+1<<"組x的值:";
cin>>d[i].x;
cout<<"請輸入第"<<i+1<<"組y的值:";
cin>>d[i].y;
system("cls");
}
cout<<"請輸入x的值:";//獲得變數x的值
cin>>x;
while(1)
{
int choice=3;
cout<<"請您選擇使用哪種插值法計算:"<<endl;
cout<<" (0):退出"<<endl;
cout<<" (1):Lagrange"<<endl;
cout<<" (2):Newton"<<endl;
cout<<"輸入你的選擇:";
cin>>choice;//取得用戶的選擇項
if(choice==2)
{
cout<<"你選擇了牛頓插值計算方法,其結果為:";
y=Newton(x,count);break;//調用相應的處理函數
}
if(choice==1)
{
cout<<"你選擇了拉格朗日插值計算方法,其結果為:";
y=lagrange(x,count);break;//調用相應的處理函數
}
if(choice==0)
break;
system("cls");
cout<<"輸入錯誤!!!!"<<endl;
}
cout<<x<<" , "<<y<<endl;//輸出最終結果
}