반응형

전체 652

C언어 getch

사용자가 입력시까지 대==기한다. 입력문자를 받아 입력문자를 리턴한다. 입력문자를 화면에 출력하지는 않는다. 입력문자가 확장키일경우 0을 리턴한다. 사용예 int ch; // 이경우 int 값으로 해야한다. ch=getch(); // 문자를 getch()로 받아서 ch에 담을때 int자동캐스팅되어 아스키코드값으로 담긴다. if (ch==0xE0||ch==0) { ch = getch(); printf("%d", ch); } 다음은 입력한 문자와 아스키코드값으 리턴해준다. for (i=0;i

const 키워드

const키워드의 기본적인 기능은 상수의 정의이다. 사용법 const int i = 7; // 변수 i가 정수 7로 상수가되었다. int arr[i]; // 배열의 인수로 상수만 와야한다. i에 const 선언을 하지않을경우 error 발생 const는 선언과 동시에 초기화 해준다. 선언만 하는 경우는 참조상수화를 하는경우이다. 예를들어 함수내에서 외부변수를 인수로 갖을때 const를 사용하면 외부변수를 참조하되 변경을 하지않도록하는 안전장치로 const 키워드를 사용한다. **법칙1 const 상수의 주소값을 읽는것은 에러 const값을 읽는다는것은 그 참조대상을 변경할수있는 가능성을 주는 행위이다. 그러므로 봉쇄된다. 다음예를보자 const int i = 7; int *pi; pi=&i; //에러가남..

난수생성 C언어

//설명 : rand() 함수는 난수를 발생시킨다. 보통 random() 이나 randomize()로 사용한다. 다른 방법을 소개하겠다. 위 코드는rand 함수로 0~99까지의 난수를 발생시킨다. srand는 난수를 시드를 받아서 그수에 매핑해서 난수를 발생시킨다. 범위가 일정한 난수를 그때 그때 다르게 발생하려면 시드를 계속 바꾸면서 난수를 생성하면 된다. time은 1970년 1월1일 00시00분00초 를 기준으로 주어진 시간값까지 지난 시간을 리턴해준다. NULL인경우 현재를 나타낸다. 기발하다. **참고 random 함수는 기본라이브러리에 포함되지 않은듯 하다. rand 함수 - #define Rand_MAX 0x7fff 단점 : 실행시킬때마다 난수의 발생 순서가 동일하다. (컴퓨터마다 다른지 어..

C언어 소수 정수의 반올림

C언어의 예를들자 C언어의 자리수관련 알고리즘이 몇가지있다. floor(double a) 함수는 소수자리수를 잘라버린다. 수학의 가우스함수도 소수자리를 자른다. ceil(double a) 함수는 소수자리수를 무조건 올려버린다. 그럼 반올림은 어떻게 계산할까.. 생각해보자. 소수1자리 에서 반올림하려면 어떻게할까. 0.5를 원래의 수에 더한다음 floor 함수를 쓰면 어떻겠는가? 괜찮을 듯 싶다. 그럼 소수 두째짜리에서 반올림 해보자. 기본적으로 서식지정자는 반올림을 해준다. 괜히 머리아프게 하지말자... 그럼 수를 버리고싶다면 어떻게할까... 3.35인데 소수 둘째짜리를버리고 싶다.. 어떻게할까. 10을 곱하고 floor() 함수를 쓴수 다시 10으로 나눈다. 괜찮을듯 싶다. math 함수를 쓴다는게 좀..

C언어 에라스토테네스의 체 알고리즘

그리스의 수학자.천문학자.지리학자. 소수를 발견하는 방법으로서 에라스토테네스의 체(코스키콘)를 고안하고, 해시계로 지구 둘레의 길이를 처음으로 계산한사람. 지리상의 위치를 위도. 경도로 표시한 것은 그가 처음인것으로 알려져있다. -두산백과- 알로리즘을 짜다보면 소수, 약수,최대공약수 등등 익숙하지만 난감한 문제에 봉착할때가 많다. 수학파트에서 살펴본 공약수의판별을 위해 유클리드의 호제법을 알아야하는 것 처럼 말이다. 에라스토테네스의 체는 말그대로 체(고운가루는 통과 시킨다) 고운가루는 소수가아닌수이다. 알고리즘으로 살펴보자. 입력을 받은 수까지의 소수를 출력시켜준다. 배열을 생성하여 첨자찾으려는 수로 인식하고 배열의 값은 1로 초기화한다. 그리고 2의 배수부터 4,6,8,10.... 3의배수 6,9,12..

클래스 객체와 포인터 그리고 다형성 C++

C++에서 객체의 의미와 클래스타입의 포인터가 갖는 의미 그리고 다형성에 대해서 살펴보도록하자. 다음은 상속의 개념을 간략화한 그림이다. (멤버변수,함수) (클래스) ㅁ ----------- ㅁ; 이런 선언시 호출되는 ㅁ도A 클래스의 것이다. 어떻게 된일인가. A객체포인터로 C를 가르키지말고 차라리 A를 가르키는거나 무슨차이가 있는 것인가? 그렇다 차이가없다. ㅁ

프로그래밍/cpp 2013.05.09

최대공약수

유클리드의 호제법을 이용한다. 우선 증명은 생략하자. 이걸 증명하는 건 그다지 효율적이지 않는듯하다. 외우자 무조건 1. 만약 A와 B 두 수가 있다고 가정하자. 2. A와 B 중 작은수로 큰수를 나누어 몫과 나머지를 구한다. 유클리드의 호제법! A=B*Q+R A와 B의 최대공약수는 Q와 R 의 최대공약수와 같다. // 여기서 A 와 B의 최대 공약수를 구하기를 원한다면Q와 R의 최대공약수를 구하자. 위 과정을 계속 반복한다. 원을 시작점을 중심으로 반대방향으로 A와 B의 속도로 두물체가 출발하였다. 계속해서 만날것이다. 그런데 만나는 위치가 시작점이 될 때 두 물체는 몇번을 만났는가? 해법 1.두물체의 최대 공약수를 구한다. 2. A와 B의 합을 최대공약수로 나눈 수가 두 물체가 만난 횟수가된다. 위 ..

수학 2013.05.06
반응형