2012년 01월 21일
2월 말까지 할것들.
2.MFC에 이분법과 뉴턴랩슨법을 사용해보기.
3.링크드리스트 복습.
근데 일단 집이 비스타라서 그런지 2010이 깔리질 않는다.
# by | 2012/01/21 23:36 | 잡담 | 트랙백 | 덧글(0)
# by | 2012/01/21 23:36 | 잡담 | 트랙백 | 덧글(0)
# by | 2012/01/19 18:25 | 잡담 | 트랙백 | 덧글(1)
#include <stdio.h>
int main()
{
int m,n,i,j,d=0,count=0;
char arr[5]={1};
printf("원하시는 숫자를 입력하세요 : ");
scanf("%d",&n);//5를 입력했을시
for(i=1;i<=n;i++)// 기본적으로 5번을 연산해줘야 한다. 5!
{
for(j=0;j<n;j++)//배열 arr[0]~arr[4]까지 입력시킨다.
{
arr[j]=(arr[j]*i)+d;//arr[0]=1 즉, 처음만 1이고, 나머지는 0이 입력 될 것이다. d는 나눈 값이다. 처음엔 0이다.
d=arr[j]/10; // arr[0]에 저장된 값을 10으로 나눈 값을 d에 저장한다.
arr[j]=arr[j]%10; // 최종적으로 10의 모듈러 연산을 다시금 arr[0]에 넣는다. 4 이상부터 실행된다.
printf("j의 값=%d arr[j]의 값=%d\n",j, arr[j]);
}
printf("첫번째 for문 종료 지점 \n\n");
//printf("첫번째 for문 종료 지점의 j의 값= %d m의 값=%d \n\n",j,m);
}
for(m=j;m>=0;m--)
{
printf("%d",arr[m]);
}
printf("\n");
}
///////////////주석 몇군데가 틀린 것이 있다.
근데 솔직히 말해서 아직까지 위의 소스코드 파악이 안된다.
arr[j]=(arr[j]*i)+d;//arr[0]=1 즉, 처음만 1이고, 나머지는 0이 입력 될 것이다. d는 나눈 값이다. 처음엔 0이다.
d=arr[j]/10; // arr[0]에 저장된 값을 10으로 나눈 값을 d에 저장한다.
arr[j]=arr[j]%10; // 최종적으로 10의 모듈러 연산을 다시금 arr[0]에 넣는다. 4 이상부터 실행된다.
printf("j의 값=%d arr[j]의 값=%d\n",j, arr[j]);
특이 이부분인데...(이부분 주석 틀림)
일단은 손 가는데로 인터넷에 있는거 보면서 막 짜긴 했는데...솔직히 수학적으로 좀 이해가 안간다.
나중에 다시 손볼 예정.
50! 만들고 소수점 이하 만들 생각이ㅏㄷ.
# by | 2012/01/18 17:09 | 백업소스 | 트랙백 | 덧글(0)
# by | 2012/01/17 10:34 | 트랙백 | 덧글(0)
# by | 2012/01/16 20:48 | 백업소스 | 트랙백 | 덧글(0)
#include <stdio.h>
int main(void)
{
char ch;
int i;
printf("문자를 입력하세요:");
scanf("%d",&ch);
//printf("입력한 문자의 아스키 코드는 %#x이다 \n\n",ch,(int)ch);
printf("문자 %d의 아스키 코드의 내부 이진수는 다음과 같다.\n",ch);
for(i=7;i>=0;i--)
{
printf("해당 숫자의 이진수는 %2d", ( ch & (1 << i))?1:0);
}
printf("입니다\n");
}
/-
비트마스킹이다.
마스킹이랑 특정 비트를 선택적으로 이용하는 방법이다.(개인적인 생각)
즉, 위의 경우엔
cf가 6이라고 할 경우,
6의 이진수 0 0 0 0 0 1 1 0
& 1 0 0 0 0 0 0 0 (1 << 7 의 값이다. 1을 왼쪽으로 7번 시프트)
--------------
0 0 0 0 0 0 0 0
이런 계산식이 나온다.
&연산의 특정상 두가지 모두 1일때에만 1(true)이 되므로
위의 경우엔 false이므로 0이 출력되고 이러한 행위를 8번 반복한다.(8비트 기준. 32비트 기준일땐 31)
이렇게 내려가다가 특정 비트가 제대로 걸릴경우엔, (즉 1<<2의 경우)
6의 이진수 0 0 0 0 0 1 1 0
& 0 0 0 0 0 1 0 0 (1 << 7 의 값이다. 1을 왼쪽으로 2번 시프트)
--------------
0 0 0 0 0 1 0 0
이러한 경우엔 true가 되어 1이 리턴된다.
이런식으로 특정 비트를 찾아 내는 행위를 마스킹이라고 한다.
위와 같은 1<<(n-1)은 특정 비트를 찾아내는거고 여러가지 다른 방법들이 많이 있다.
처음엔 수치해석 위주로 틈틈히 복습이나 할려고 했는데 막상 수치해석 부분은 수학적인 부분에서 막히는 바람에
복습삼아 간단하게 몇개 많들려고 했던 것들이 위주가 되어가는 느낌이다.
*-
# by | 2012/01/16 18:34 | 백업소스 | 트랙백 | 덧글(0)
#include <stdio.h>
void prime(void);
void main(void)
{
prime();
}
void prime(void)
{
int i,n=0;
int sum=0,check=0;
printf("구하고자 하는 소수를 입력하세요 \n");
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{
if(n%i!=0)
{
sum=n%i;
}
else
{
check++;
}
}
if(sum>=1 && check==0 || n==1 || n==2 || n==3)
{
printf("입력하신 %d는 소수입니다\n",n);
}
else
{
printf("입력하신 %d는 소수가 아닙니다 \n",n);
}
}
/-
ex) 5를 입력했을 경우엔
5%2=1
5%3=2
5%4=1
과 같은 형식으로 어떻게든 나머지는 1 이상이 나온다.(자기 자신과 1을 제외하면 나머지 0이 절대로 안나옴)
즉 나머지를 저장하는 변수 sum은 어떻게든 1이상이 나올 수 밖에 없다는 것.
그러나; for문에 찍어보면 알수 있듯이 반복 계산을 하다보면 나머지가 0이 나오는 경우도 있다.
즉, 위의 계산식의 모듈러 연산 n%i!=0에 모든 경우의 수가 들어가진 않는다는 것이다.
가끔가다가 몇개씩 0으로 나누어 떨어지기도 한다. 그리고 나누어 떨어질때를 카운팅 한다.
즉, 위의 check가 0으로 카운팅 된다면 그것은 한번도 0으로 나누어 떨어지지 않았다는 사실이다.
그러므로 소수를 만족하는 조건은 두가지.
n%i의 나머지가 0이 아닐 경우에 sum은 항상 1과 같거나 커야 하며, 이와 동시에
n%i의 나머지가 0일 경우에 check는 0이어야 한다.
소스 찾아보면 금방 나오는 소수 찾기이지만 막상 맨땅에 헤딩으로 해보면 나름대로의 발상의 전환이 필요하다.
*-
# by | 2012/01/15 17:17 | 백업소스 | 트랙백 | 덧글(0)
#include <stdio.h>
void fact(int);
void main()
{
int n;
printf("****원하는 팩토리얼 수를 입력하세요****\n");
scanf("%d",&n);
printf("입력하신 결과는 %d 입니다\n",n);
fact(n);
}
//팩토리얼의 함수
void fact(int n)
{
int i;
int fact_sum=1;
if(n==0)
{
printf("n!이 0일 경우는 1로 가정함\n");
}
for(i=1;i<n+1;i++)
{
fact_sum*=i;
printf("%d회차의 값 : %d \n",i,fact_sum);
}
}
/- 팩토리얼의 값을 저장하는 변수는 fact_sum 이다. 그리고 차례대로 바뀌는 값은 i.
즉 덧셈처럼 i를 곱하면 비교적 손쉬운 팩토리얼이 가능하다.여기서 맹점은 초기화를 시킬때 0으로 시키면 안된다는것.
0으로 하면 곱셈이므로 0이 나온다.*-
# by | 2012/01/15 17:17 | 백업소스 | 트랙백 | 덧글(0)
#include <stdio.h>
#include <stdlib.h>
void array(int i,int z);
void main()
{
int n;
int m;
printf("원하는 열의 숫자를 입력하세요:\n");
scanf("%d",&n);
printf("원하는 행의 숫자를 입력하세요:\n");
scanf("%d",&m);
array(n,m);
}
void array(int i, int z)
{
int** a= (int**)malloc(sizeof(int)*i);
int j;
int k;
if(a==NULL)
{
printf("메모리 할당 실패\n");
}
else
{
for(j=0;j<i;j++)
{
a[j]=(int*)malloc(sizeof(int)*z);
for(k=0;k<z;k++)
{
a[j][k]=0;
}
}
}
for(j=0;j<i;j++)
{
for(k=0;k<z;k++)
{
printf("%d\t",a[j][k]);
}
printf("\n");
}
}
///////////////
백퍼 본인의 백업용이므로 귀찮게 주석따윈 달지않슴.
# by | 2012/01/14 16:17 | 백업소스 | 트랙백 | 덧글(0)
# by | 2012/01/14 00:16 | 트랙백 | 덧글(0)
◀ 이전 페이지 다음 페이지 ▶