구)홈페이지 오탈자 보기
C 언어로 배우는 알고리즘 입문

 

페이지오탈자 내용등록일
235

(35쪽 37쪽)

#include <math.h>
==>
#include <stdlib.h> 

2008-10-031
121

((p 121) 프로그램 소스 전체)

/*
 * ----------------------
 *      최소 제곱법     *
 * ----------------------
 */

#include <stdio.h>

#define N 7             /* 자료수 */
#define M 5             /* 맞춤지수 */

double x[]={-3,-2,-1, 0,1,2,3},
       y[]={ 5,-2,-3,-1,1,4,5},
       a[M+1][M+2],s[2*M+1],t[M+1];

double ipow(double,int);

int main(void)
{
    int i,j,k;
    double p,d,px;

    for (i=0;i<=2*M;i++)
        s[i]=0;
    for (i=0;i<=M;i++)
        t[i]=0;

    for (i=0;i<N;i++){
        for (j=0;j<=2*M;j++)                /* s0 ~ s2m 계산 */
            s[j]=s[j]+ipow(x[i],j);
        for (j=0;j<=M;j++)                  /* t0 ~ tm 계산 */
            t[j]=t[j]+ipow(x[i],j)*y[i];
    }

    for (i=0;i<=M;i++){               /* a[][] 에 s[],t[] 값을 넣는다. */
        for (j=0;j<=M;j++)
            a[i][j]=s[i+j];
        a[i][M+1]=t[i];
    }

    for (k=0;k<=M;k++){             /* 소거 */
        p=a[k][k];
        for (j=k;j<=M+1;j++)
            a[k][j]=a[k][j]/p;
        for (i=0;i<=M;i++){
            if (i!=k){
                d=a[i][k];
                for (j=k;j<=M+1;j++)
                    a[i][j]=a[i][j]-d*a[k][j];
            }
        }
    }

    printf("    x    y
");        /* 보간다항식에 의한 y값 계산 */
    for (px=-3;px<=3;px=px+.5){
        p=0;
        for (k=0;k<=M;k++)
            p=p+a[k][M+1]*ipow(px,k);

        printf("%5.1f%5.1f
",px,p);
    }

return 0;
}
double ipow(double p,int n)        /* p^n을 구하는 함수 */
{
    int k;
    double s=1;
    for (k=1;k<=n;k++)
        s=s*p;
    return s;
}
==>
/*
 * ----------------------
 *      최소 제곱법     *
 * ----------------------
 */

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include "glib.h"

#define N 7             /* 자료수 */
#define M 5             /* 맞춤지수 */

double x[]={-3,-2,-1, 0,1,2,3},
       y[]={ 5,-2,-3,-1,1,4,5},
       a[M+1][M+2],s[2*M+1],t[M+1];

double ipow(double,int);
void graph(void);

int main(void)
{
    int i,j,k;
    double p,d;

    for (i=0;i<=2*M;i++)
        s[i]=0;
    for (i=0;i<=M;i++)
        t[i]=0;

    for (i=0;i<N;i++){
        for (j=0;j<=2*M;j++)               /* s0 ~ s2m 계산 */
            s[j]=s[j]+ipow(x[i],j);
        for (j=0;j<=M;j++)                 /* t0 ~ tm 계산 */
            t[j]=t[j]+ipow(x[i],j)*y[i];
    }

    for (i=0;i<=M;i++){               /* a[][] 에 s[],t[] 값을 넣는다. */
        for (j=0;j<=M;j++)
            a[i][j]=s[i+j];
        a[i][M+1]=t[i];
    }

    for (k=0;k<=M;k++){             /* 소거 */
        p=a[k][k];
        for (j=k;j<=M+1;j++)
            a[k][j]=a[k][j]/p;
        for (i=0;i<=M;i++){
            if (i!=k){
                d=a[i][k];
                for (j=k;j<=M+1;j++)
                    a[i][j]=a[i][j]-d*a[k][j];
            }
        }
    }
    graph();
    for (k=0;k<=M;k++)                    /* 계수 출력 */
        printf("a%d=%f
",k,a[k][M+1]);

return 0;
}
double ipow(double p,int n)
{
    int k;
    double s=1;
    for (k=1;k<=n;k++)
        s=s*p;
    return s;
}
void graph(void)
{
    double px,py,xmax,ymax,xmin,ymin,sx,sy,dx,dy,step;
    int k,l;

    ginit();cls();

    xmax=xmin=x[0];ymax=ymin=y[0];
    for (k=1;k<N;k++){
        if (x[k]<xmin) xmin=x[k];
        if (y[k]<ymin) ymin=y[k];
        if (x[k]>xmax) xmax=x[k];
        if (y[k]>ymax) ymax=y[k];
    }
    sx=1.2*max(fabs(xmin),fabs(xmax));  /* x축 크기 */
    sy=1.2*max(fabs(ymin),fabs(ymax));  /* y축 크기 */
    dx=sx/100;dy=sy/100;                /* +표시 크기 */
    step=(xmax-xmin)/100;               /* 간격 */

    window(-sx,-sy,sx,sy);

    line (-sx,0,sx,0);line(0,-sy,0,sy);     /* 축 */

    for (l=0;l<N;l++){                      /* +표시 */
        line(x[l]-dx,y[l],x[l]+dx,y[l]);
        line(x[l],y[l]-dy,x[l],y[l]+dy);
    }

    for (px=xmin;px<=xmax;px=px+step){      /* 그래프 표시 */
        py=0;
        for (k=0;k<=M;k++)
            py=py+a[k][M+1]*ipow(px,k);
        if (px==xmin)
            setpoint(px,py);
        else
            moveto(px,py);
    }
}

2006-10-251
131

(p 131 거품정렬)

static int a[]=80,41,35,...


printf("%",a[i]);
==>
=> static int a[]={80,41,35...};

=> printf("%d",a[i]);

2006-10-251
137

(p 137 기본삽입법)

}                    ----①
else               |
  break;-------
==>
=>
   }                    ----①
   else               |
     break;          |
}----------------

2006-10-251
140

(p 140 셸 정렬(개선 삽입법))

}
for(i=0;i<N;i++)
printf("%8d",a[i]);   <=
if(i%10==9)
printf("
");
}
return 0;
}
==>
=>
}
for(i=0;i<N;i++)
printf("%8d",a[i]);{
if(i%10==9)
printf("
");
}
return 0;
}

2006-10-251
445

((p 445) 세 번째 단락 rup[i+j]와 lup[i-j+N] 변수 설명)

rup[i+j]    :  좌상방향
lup[i-j+N] : 우상방향
==>
rup[i+j]    : 우상방향
lup[i-j+N] : 좌상방향

2006-10-251