/* 여러개의 실험 데이터를 가장 잘 만족시키는 Y=a*x^b 구하는 코드 */


#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define e 2.718281

#define nd 20

double x[nd],y[nd],sumx,sumy,sumxy,sumx2;

int n;


void bang(double *a0, double *a1)

{

        int i;

        sumxy = 0;

        sumx = 0;

        sumx2 = 0;

        sumy = 0;

        for(i=1;i<=n;i++){

                sumxy=x[i]*y[i]+sumxy;

                sumx=x[i]+sumx;

                sumy=y[i]+sumy;

                sumx2=x[i]*x[i]+sumx2;

        }


        *a1=((n*sumxy)-(sumx*sumy))/((n*sumx2)-(sumx*sumx));

        *a0=(sumy/n)-(*a1*sumx)/n;

        printf("a1값:%lf\t a0값:%lf\n",*a1,*a0);


}//end of bang


int main()

{

        int i;

        double a0=0,a1=0,a=0,f=0,x1=0,x2=0;

        printf("데이터의 수:");         scanf("%d",&n);

        printf("X(i) 입력:");

        for(i=1;i<=n;i++)

                scanf("%lf", &x[i]);

        printf("Y(i) 입력:");

        for(i=1;i<=n;i++)

                scanf("%lf", &y[i]);

        for(i=1;i<=n;i++) {

                x[i]=log(x[i]+1);

                y[i]=log(y[i]);

        }

        for(i=1;i<=n;i++)

                printf("바뀐 x[%d]:%lf\t y[%d]:%lf\n",i,x[i],i,y[i]);

        bang(&a0,&a1);

        printf("구하려는 x 값을 입력:");        scanf("%lf",&x1);

        a=pow(e,a0);

        f=a/pow((x1+1),-a1);

        printf("x가 %lf일때 구하려는 y값:%lf\n",x1,f);

        printf("구하려는 x2값을 입력:");        scanf("%lf",&x2);

        f=a/pow((x2+1),-a1);

        printf("x가 %lf일때 구하려는 y값:%lf\n",x2,f);


}//end of main

'언어 > Coding' 카테고리의 다른 글

Jacobi  (0) 2015.12.21
GaussN  (0) 2015.12.21
Thomas(Tridia)  (0) 2015.12.21
LUCrout (LU분해,해 구하기, 역행렬 구하기)  (0) 2015.12.21
Newton Raphson Method  (0) 2015.12.21
Posted by 知彼知己百戰不殆
,

Thomas(Tridia)

언어/Coding 2015. 12. 21. 00:58

#include <stdio.h>

#include <stdlib.h>

#define nd 20

int n;

double l[nd],d[nd],r[nd],x[nd],b[nd];

void Tridia()

{


        int i;

        double factor;

        for(i=2;i<=n; ++i)

        {

                factor=l[i]/d[i-1];

                d[i]=d[i]-factor*r[i-1];

                b[i]=b[i]-factor*b[i-1];

        }

        x[n]=b[n]/d[n];

        for(i=n-1;i>=1;i=i-1)

        {

                x[i]=(b[i]-r[i]*x[i+1])/d[i];

        }

}

int main() {

        int i;

        printf("방정식 수n:");

        scanf("%d",&n);

        printf("계수행렬l(i) d(i) r(i)를 입력하시오\n");

        printf("l(i) i=1,...,n:");

        for(i=1;i<=n;i++) scanf("%lf",&l[i]);

        printf("d(i) i=1,...,n:");

        for(i=1;i<=n;i++) scanf("%lf",&d[i]);

        printf("r(i) i=1,...,n:");

        for(i=1;i<=n;i++) scanf("%lf",&r[i]);

        printf("상수행렬 b(i)를 입력하시오\n");

        printf("b(i) i=1,...,n:");

for(i=1;i<=n;i++) scanf("%lf",&b[i]);

        Tridia();

                printf("해는 다음과 같다. \n");

        for(i=1;i<=n;i++)

        {

                printf("x(%d)=%f",i,x[i]);

                printf("\n");

        }

}




'언어 > Coding' 카테고리의 다른 글

Jacobi  (0) 2015.12.21
GaussN  (0) 2015.12.21
Least(최소 제곱법)  (0) 2015.12.21
LUCrout (LU분해,해 구하기, 역행렬 구하기)  (0) 2015.12.21
Newton Raphson Method  (0) 2015.12.21
Posted by 知彼知己百戰不殆
,

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define nd 20

double A[nd][nd],b[nd],L[nd][nd],U[nd][nd],b2[nd],x[nd],E[nd],xR[nd];

int n;

void LuCrout();

void LuCrout_Sol();

void Reverse();


void LUCrout() {

        int i,j,k;

        double sum;

        for(i=1;i<=n;i++)

                L[i][1]=A[i][1];

        for(j=1;j<=n;j++)

                U[1][j]=A[1][j]/L[1][1];

        for(j=2;j<=n;j++) {

                for(i=j;i<=n;i++) {

                        sum=0;

                        for(k=1;k<=j-1;k++) sum=sum+L[i][k]*U[k][j];

                        L[i][j]=A[i][j]-sum;

                }

                U[j][j]=1;

                for(i=j+1;i<=n;i++) {

                        sum=0.0;

                        for(k=1;k<=j-1;k++) sum=sum+L[j][k]*U[k][i];

                        U[j][i]=(A[j][i]-sum)/L[j][j];

                }

        }

}//end of LuCrout


void LuCrout_Sol() {

        int i,j;

        double sum;

        printf("해를 입력해주세요:");

        for(i=1;i<=n;i++)

                scanf("%lf",&b[i]);

        for(i=1;i<=n;i++){

                sum=0;

                for(j=1;j<=i-1;j++)

                        sum=sum+L[i][j]*b2[j];

                b2[i]=(b[i]-sum)/L[i][i];

                printf("b^[%d]:%lf\n",i,b2[i]);

        }

        for(i=1;i<=n;i++)

                x[i]=b2[i];

        printf("\n");

        for(i=n-1;i>=1;i--){

                sum=0;

                for(j=i+1;j<=n;j++){

                        sum=sum+U[i][j]*x[j];

                        //printf("sum:%lf\n",sum);

                }

                x[i]=b2[i]-sum;

                printf("x[%d]:%lf\t sum:%lf\n",i,x[i],sum);

        }


}//end of LuCrout_Sol


void Reverse() {

        int i,j,a;

        double sum;

for(a=0;a<n;a++){

        printf("역행렬을 구합니다. 단위 행렬을 입력해주세요:");

        for(i=1;i<=n;i++){

                printf("E[%d]:",i);

                scanf("%lf", &E[i]);

        }


        for(i=1;i<=n;i++){

                sum=0;

                for(j=1;j<=i-1;j++)

                        sum=sum+L[i][j]*b2[j];

                b2[i]=(E[i]-sum)/L[i][i];

                printf("b^[%d]:%lf\n",i,b2[i]);

        }

        printf("\n");


        for(i=n;i>=1;i--){

                sum=0;

                for(j=i+1;j<=n;j++)

                        sum=sum+U[i][j]*x[j];

                x[i]=b2[i]-sum;

        }

        for(i=1;i<=n;i++)

                printf("x[%d]:%lf\n",i,x[i]);

}

}// end of Reverse


int main() {

        int i,j;

        double sum;

        printf("\n 방정식의 수 n= ");

        scanf("%d",&n);

        printf("게수행렬A(i,j)을 입려가시오\n");

        for(i=1;i<=n; i=i+1) {

                for(j=1;j<=n;j=j+1){

                        printf("A(%d,%d) j=1....n=",i,j);

                        scanf("%lf", &A[i][j]);

                }

        }

        LUCrout();

        printf("\n [L] \n");

        for(i=1; i<=n; i++) {

                for(j=1;j<=n;j++)

                        printf("%f\t",L[i][j]);

                printf("\n");

        }

        printf("\n [U] \n");

        for(i=1;i<=n;i++) {

                for(j=1;j<=n;j++)

                        printf("%f\t",U[i][j]);

                printf("\n");

        }


        LuCrout_Sol();

        //Reverse();


}//end of main


'언어 > Coding' 카테고리의 다른 글

Jacobi  (0) 2015.12.21
GaussN  (0) 2015.12.21
Least(최소 제곱법)  (0) 2015.12.21
Thomas(Tridia)  (0) 2015.12.21
Newton Raphson Method  (0) 2015.12.21
Posted by 知彼知己百戰不殆
,

Newton Raphson Method

언어/Coding 2015. 12. 21. 00:54

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define e 2.7182818284590452354

#define th 0.0001


double f(double num1) {

        double num2;

        num2=pow(num1,3)-num1-1.344;

        return num2;

} //definition of f(x)


double f2(double num1) {

        double num2;

        num2=3*pow(num1,2)-1;

        return num2;

} //differential of f(x)


int main() {

        double x0,x1,n1,n2;

        int i;

        printf("Input first number:");

        scanf("%lf",&x0);

for(i=0;i<=999;i++){

                x1=x0-f(x0)/f2(x0);

                printf("\nx1 value is %lf\n",x1);

                n1=f(x0);

                printf("f(x0) value is %lf\n",n1);

                n2=f2(x0);

                x0=x1;

                //printf("f2(x0) value is %lf\n",n2);

                if (fabs(n1) <= th){

                        printf("\n%lf is root\n",x0);

                        printf("x:%lf \t f(x):%lf\n",x0,n1);

                        break;

                }

                else if ((fabs(n2) <= th) && (i=999)){

                        printf("no root value\n");

                        printf("x:%lf \t f(x):%lf\n",x0,n1);

                }

        }

        printf("첫 x일 때 나오는 f(x)는 근이 아님\n x1에 해당하는 f(x)는 f(x2)임

\n x2에 해당하는 f(x)는 f(x3)~~~ 이런 식으로 됨\n");

} //end of main

'언어 > Coding' 카테고리의 다른 글

Jacobi  (0) 2015.12.21
GaussN  (0) 2015.12.21
Least(최소 제곱법)  (0) 2015.12.21
Thomas(Tridia)  (0) 2015.12.21
LUCrout (LU분해,해 구하기, 역행렬 구하기)  (0) 2015.12.21
Posted by 知彼知己百戰不殆
,

출력 버퍼의 비워짐 : 출력버퍼에 저장된 데이터가 버퍼를 떠나서 목적지로 이동됨

출력 버퍼가 비워지는 시기는 버퍼가 꽉 찼을 때 비워지는 버퍼도 있고, 하나의 문장이 완전히 입력되었을 때마다 비워지는 버퍼도 있다.

fflush(stdout);  // 표준 출력버퍼를 비우라는 명령

1
2
3
#include <stdio.h>
 
int fflush(FILE * stream);
cs

 

입력 버퍼의 비워짐 : 데이터의 소멸을 의미

가끔 입력 버퍼에 남아있는 불필요한 데이터의 소멸을 위해서 입력버퍼를 비워야 하는 경우가 종종 있다.

Posted by 知彼知己百戰不殆
,

scanf 함수는 공백이 포함된 형태의 문자열을 입력 받는데 제한이 있다. 그러나 puts, fputs는 제한이 없다

 

문자열 출력 함수 : puts, fputs

puts : 출력의 대상이 stdout으로 고정, 이 함수가 호출되면 문자열 출력 후 자동으로 개행(\n)이 이루어짐

fputs : 두 번째 인자를 통해서 출력의 대상을 결정 가능, 문자열 출력 후 자동으로 개행이 이루어지지 않음

1
2
3
4
#include <stdio.h>
 
int puts(const char * s);
int fputs(const char * s, FILE * stream);
cs

→ 성공 시 음수가 아닌 값을, 실패 시 EOF 반환

 

문자열 입력 함수 : gets, fgets

gets : stdin으로 부터 문자열을 입력 받음

fgets : 문자열을 입력 받을 곳을 설정 가능하며, size도 설정할 수 있다, 이 함수는 \n을 만날 때까지 문자열을 읽어 들이는데, \n을 제외시키거나 버리지 않고 문자열의 일부로 받아들인다. (우리가 입력 한 엔터 키의 정보까지도 문자열의 일부로 저장됨)

1
2
3
4
#include <stdio.h>
 
char * gets(char * s);
char * fgets(char * s, int n, FILE * stream);
cs

ex)

1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
   char str[7];
   gets(str);
}
cs

 

1
2
3
4
5
6
7
#include <stdio.h>
 
int main ()
{
   char str[7];
   fgets(str, sizeof(str), stdin);
}
cs

↑ 여기서 str배열 사이즈인 7값이 설정 돼 있지만 "123456789"의 문자열을 받게 될 경우 str배열에는 "123456"만 값이 저장된다. 이유는 문자열의 끝에 자동으로 널 문자가 추가되므로.

 

 

 

 

 

Posted by 知彼知己百戰不殆
,

문자 출력 함수 : putchar, fputc

putchar : 인자로 전달된 문자 정보를 stdout으로 표현되는 표준 출력 스트림으로 전송하는 함수

fputc : stdout(표준출력-모니터) 뿐만이 아니라 파일을 대상으로도 데이터를 전송 할 수 있다.

          (FILE * stream에 stdout을 전달하면 putchar와 동일한 함수)

 

1
2
3
4
#include <stdio.h>
 
int putchar(int c);
int fputc(int c, FILE * stream);

cs

→ 함수 호출 시 쓰여진 문자 정보 반환, 실패시 EOF 반환(End Of File)

EOF : 파일의 끝을 표현하기 위해서 정의해 놓은 상수

fgetc함수와 getchar함수는 언제 EOF 반환?

- 함수 호출의 실패

- 윈도우 : Ctrl + Z , 리눅스 : Ctrl + D  입력되는 경우

 

문자 입력 함수 : getchar, fgetc

getchar :  stdin(표준입력-키보드)으로 표현되는 표준 입력 스트림으로부터 하나의 문자를 입력 받아서 반환하는 함수, 하나의 문자를 입력 받음

문자가 아닌 공백을 포함하는 문장을 입력해도 되는데, 문장이 입력되면 문장을 구성하는 문자의 수만큼 getchar 함수가 호출되면서 모든 문자를 읽어 들인다.

fgetc : 하나의 문자 입력 받음, getchar와 다른 점은 문자를 입력 받을 스트림을 지정할 수 있다.

1
2
3
4
#include <stdio.h>
 
int getchar(void);
int fgetc(FILE * stream);
cs

 

 

Posted by 知彼知己百戰不殆
,

명령어

언어/Assembly 2015. 12. 16. 20:12

clc 명령어 : Carry 플래그를 0으로 해제

stc 명령어 : Carry 플래그 1로 셋팅

Posted by 知彼知己百戰不殆
,

0dh,0ah

언어/Assembly 2015. 12. 16. 16:41

0dh,0ah

.data

menu  BYTE "1. x AND y",0dh,0ah
   BYTE "2. x OR y",0dh,0ah
   BYTE "3. NOT x",0dh,0ah
   BYTE "4. x XOR y",0dh,0ah
   BYTE "5. Exit Program",0

문장 띄어쓰기 할 때 사용

Posted by 知彼知己百戰不殆
,

setpgrp() 함수

OS/Linux 2015. 12. 14. 12:03

setpgrp()

자신의 프로세스 그룹을 자신의 프로세스 아이디로 바꿔줍니다.

int main(int argc, char *argv[])

{

    int newpgid;

    newpgid = setpgrp();

     work();

     return 0;

}

'OS > Linux' 카테고리의 다른 글

CentOS 5.1 gcc 설치법  (0) 2016.06.16
리눅스 파일 찾기 - find  (0) 2016.05.09
execve() 함수  (0) 2015.12.13
open함수 사용법  (0) 2015.12.13
atoi() 사용법  (0) 2015.12.13
Posted by 知彼知己百戰不殆
,