반응형

전체 647

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

배열과 문자열의관계 C언어

C언어는 문자를 배열로 다룬다. 문자열은 말그대로 문자들의 나열이다. 이곳에서 주로 다룰 내용은 기초적인 내용보다는, 공부를 해나가면서 상식적(자연스럽게)으로 이해하기 힘든내용을 요약정리해두겠다. 배열의 기본 문법은 안다는 전제하에 설명을 하겠다. 배열로 문자열를 다루는 법 일반적인 설명보다는, 예를 들어설명하겠다. char a='a'; // 문자를 다루는 '따옴표다 문제없이 a변수에 a가 입력된다. char a="a"; // 에러가난다 a를 "로묶어놨기때문에 문자열로 인식한다. 이상태에서에러가 안나게 고치려면? char*a="a"// 문자열로 인식하고 에러가 안 난다. 그럼 왜 포인터로 선언하면 에러가 안나는걸까. C에서는 String형이 없다. 위와같이 char 형이다. 그래서 C에서는 문자열 인식 ..

C언어 [Factorial]팩토리얼 알고리즘

팩토리얼을 C언어로 표현해보자. 0!=1이다. 이문제는 수학적 정의이다. 우리가 어떤수의 0제곱수는 1이라고 정의하는 것과 동일한 이치이다. 여기선 자세히 설명하지 않겠다. 우리가 지금 중요하게 다루는건수학적 정의보다는 어떤 식을 프로그램상으로 표현하는 방법에 대해서 공부하는 것이다. 힌트를 보려면 아래를 펼치면 된다. 먼저 원칙을 정하자 1.포맷을 맞추자 어떤 식을 표현하기위해선 여러변수들의 복합적인 작용이 있기때문에 틀을 정하지않고 생각하려면 한계에 다다른다. 그러므로 위 실행결과를 보고 그에 맞는 포맷(큰 틀)을 만들자 #include int main(void) { printf("%d! = %d", n, 결과); } 2. 위 실행결과에 맞는 틀을 갖춰졌다. 이젠 하나식 분석해보자. - 먼저 결과값을..

저의 블로그에 오신걸 환영합니다.

컴퓨터 전공자와 전공자가 아닌 모든 분들이 친숙하게 컴퓨터에 대한 이야기를 할 수 있는 공간이 되었으면 합니다. 말투가 자주 바뀝니다. 쓰다보면 한가지로 통일하기가 힘드네요. 질문은 제가 아는 것들만 답변드리겠습니다. 애매하거나 잘 모르는 것들을 답변드리지는 않겠습니다. 그럼 2012년의 마지막 을 멋지게 마무리 하시길 바랍니다.

공지사항 2012.12.06

컴퓨터이야기 (해석기관)

러브레이스가 최초의 컴퓨터 프로그램을 만들어내다. 에이다 바이런(1815~1852)은 영국의 시인 바이런 경의 딸이었다. 어머니의 지도하에 에이다는 어렸을 때부터 수학과 과학 교육을 받았으며 어른이 되어 러브레이스 백작과 결혼했다. 1835년에 에이다는 찰스 배비지를 만나게 되었으며 그로부터 '분석기관'의 개념에 대한 이야기를 들었다. 1842년에 배비지는 이탈리아의 토리노 대학에서 초청을 받아 세미나를 하게 되었다. 이탈리아의 공학자 페데리코 루이기 메나브레아가 배비지의 강의에 대한 요약문을 프랑스의 과학 학술지에 실으면서 배비지의 연구에 대한 관심이 확산되었다. 배비지는 러브레이스에게 메나브레아의 글을 번역해달라고 부탁했는데, 그녀가 글에 추가한 주석들은 원글보다 더 방대해졌으며 그 내용이 다시 출판..

컴퓨터구조 2012.12.06

C언어 nCr 조합 알고리즘

위공식은 조합의 일반식을 점화식으로 나타낸 공식이다. 이 공식을 점화식으로 바꾼 것 뿐이다. 점화식이나 조합에대해서 잘 모른다면 그냥 맨처음 공식을 알고리즘으로 표현 하길 바란다. 우리는 간단히 조합을 나열하는 알고리즘을 만들 것이다. 결과 간단한 듯 보이지만, 몇가지 생각해볼 부분이있다. 우리는 그런 부분에 초점을 마추며 실력을 쌓아가자. 관련글 2012/12/06 - [프로그래밍/알고리즘] - C언어 알고리즘[Factorial]팩토리얼

반응형