template <typename T>

void BubbleSort2(T arr[], const int size)

{

bool Sorted = true;

for (int i=size; i>0 && Sorted; i--)

{

Sorted = false;

for (int j=0; j<i; j++)

{

if (arr[j] < arr[j-1]) {

T t=arr[j];
arr[j]=arr[j-1];
arr[j-1]=t;

Sorted = true;

}

}

}

}


약간의 트릭을 더해서 만든 정렬이다.

정렬을 한뒤에는 true를 만들어서 그 j에 대해서는 더이성 정렬을 안한다.

정렬이 거의 된 배열에서는 일반 버블보다 월등히 빠른 속도를 보이며,

임의 배열에서는 많은 속도의 향상이 있고

역순배열에서도 약간 속도 향상이 있었다.


'생활 > 알고리즘(?)' 카테고리의 다른 글

버블정렬  (0) 2009.11.15
버블정렬 생활/알고리즘(?) 2009. 11. 15. 01:15
template <class T>
void BubbleSort(T arr[], const int size)
{
for(int i=0; i<size-1; i++)
{
for(int j=0; j<size-1; j++)
{
if(arr[j]>arr[j+1])
{
T t=arr[j];
arr[j]=arr[j+1];
arr[j+1]=t;
}
}
}
}
흠,,,, 뭔가 깨져서 옮겨진것 같지만,,,
소개하자면,, 완전 노가다 알고리즘이다.
처음부터 끝까지 인접한 2개씩 비교하면서 서로 정렬하는거다,,,
조금 개선된 알고리즘도 있으니 좀있다 올리겠다.

'생활 > 알고리즘(?)' 카테고리의 다른 글

버블정렬2  (0) 2009.11.15
AdvencedType(AType)라이브러리 작성중,,

일단 AInterger랑 ACharactor, AString만 만들고 있다.
AInterger만 만들고 있는데 현제 구현부분은

operator +-*/=;
friend operator <<, >> 정도,,,
뭐, 점차 만들어지겠지,,,

근데 istream 에서 int만 골라받는 방법없나?
없으면 만들어야되는데,,,,

'생활 > 프로그래밍' 카테고리의 다른 글

define 을 이용해서 getter, setter만들기  (0) 2012.03.10
각종 별찍기 문제 (위키펌)  (0) 2009.11.30
간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26

저번에는 클래스에 대해서 대략 개요만 짚고 넘어갔어,,
이번에는 실제 클래스의 용례를 알려줄께

#include <iostream>

using namespace std;

class Calculator
{
private:
       double result;                           //결과를 저장할 변수
public:
       Calculator();                             //생성자
       Calculator(double a);                //오버로딩된 생성자
       double addnum(double a);        //덧셈
       double subnum(double a);        //뺄셈
       double mulnum(double a);        //곱셈
       double divnum(double a);          //나눗셈
       double modnum(double a);        //나머지
       double getresult();                     //결과
};

int main()
{
        Calculator c(3.14);
        cout << c.getresult() << endl;

        cout << c.addnum(2.8) << endl;
        cout << c.getresult() << endl;

        cout << c.subnum(1.8) << endl;
        cout << c.getresult() << endl;

        cout << c.mulnum(2.3) << endl;
        cout << c.getresult() << endl;

        cout << c.divnum(2.8) << endl;
        cout << c.getresult() << endl;

        cout << c.modnum(3) << endl;
        cout << c.getresult() << endl;
        
        return 0;
}

Calculator::Calculator()                             //생성자
{
           result=0;
}
Calculator::Calculator(double a)                //오버로딩된 생성자
{
           result=a;
}
Calculator::double addnum(double a)        //덧셈
{
           result+=a;
           return result;
}
Calculator::double subnum(double a)        //뺄셈
{
           result-=a;
           return result;
}
Calculator::double mulnum(double a)        //곱셈
{
           result*=a;
           return result;
}
Calculator::double divnum(double a)          //나눗셈
{
           result/=a;
           return result;
}
Calculator::double modnum(double a)        //나머지
{
           result%=a;
           return result;
}
Calculator::double getresult()                     //결과
{
           return result;
}

간단한 계산 클래스를 만들었어,
순식간에 만들어서 오타가 있을지도 모르니 오타지적은 환영^^
일단 지금까지의 강좌를 잘 읽었다면 어렵진 않은 소스라고 생각해.
우선 맨 처음의

class Calculator

부분은 클래스를 생성하겟다는 선언부분
그 밑의
{
}
는 클래스의 몸통이 되는거지.
그다음
private:
라는것이 있는데,
여기서 ; 가 아니라 : 라는거 주의해야되.
이거는 이 밑으로 나오는것은 클래스 내부의 숨겨진(캡슐화된) 사항이니까,
외부의 참조나 호출은 금지된다는 표시야. 이 밑으로 나오는것은 c.뭐시기 로 호출이 불가능해.

그 다음 변수선언 하고,
public:
이 있는데 이거는 private랑은 반대로,
이 밑의 것들은 외부의 접근을 허용한다. 라는 표지야.
이게 없으면 class를 만들어도 소용이 없지뭐,,,
사용할것들이 없으니,,,

그다음 main함수에 들어와서 처음나오는거
Calculator c(3.14);
이거는 Calculator클래스의 object인 c를 생성하면서, 생성자 Calculator(double a)를 호출하라는거. 생성자는 좀있다가 설명할께.

그다음은 이제 만들어놓은 갖가지 메소드를 사용해보고,,,

그밑에 Calculator:: 하고 시작하는것들 있지? 이게 메소드의 몸통을 선언하는거야.
위에서 class선언때는 프로토 타입만 선언해놨잖아? 그럼 몸통을 정의 해야지.
근데 여러클래스를 한 프로그램에서 사용한다면 같은이름의 함수를 여러 클래스에서 쓸수도 있잖아? 그래서 컴파일러가 어떤함수가 어떤 클래스껀지 알수있도록 클래스이름을 써주는거야.
그다음은 함수선언과 똑같은데, 처음에 반환형에 아무것도 안써주고, 이름이 class이름이랑 같은놈이 2개 있지? 이게 생성자야.
생성자는 object가 생성될때 호출되는 함수인데, 여기서는 일반적으로 맴버변수들의 초기화등을 담당하도록 해.
하나는 생성할때 인자가 없이 Calculator a; 식으로 선언할때 호출되는거도 다른 하나는 Calculator a(1.23); 식으로 선언될때 호출되는거야. C++은 같은이름의 함수라도 인자의 종류와 갯수가 다르다면 다른 함수로 인식하기 때문에 써먹을수 있는 방법이지.
오늘은 클래스와 생성자까지 했어. 아직은 포인터에대해 배우지 않았고, 동적인 할당과 정적인 할당, 그에앞서 배열도 안배웠으니,,, 소멸자는 나중으로 넘겨놓을께,, 여기까지 모르는거는
nateon : dcmichael@nate.com
msn : dcmichael@live.co.kr
H.P. : 010-2885-4585
또는 블로그의 댓글
로 연락하면 언제든지 답변해줄테니까 당장 숙제에 관한것말 알려달라고만 하지말고 C++을 제대로 공부해보자!!

'대학생활 > C++' 카테고리의 다른 글

C++숙제,,,  (0) 2009.04.09
4주차 C++숙제가 떳습니다.  (0) 2009.04.01
3주차 C++숙제가 나왔습니다!!  (0) 2009.03.23
내맘대로 강좌 C++편 6 (함수편)  (5) 2009.03.23
내맘대로 강좌 C++편 5  (2) 2009.03.19
http://dcmichael.tistory.com/28  << 여기에서 확인해 주세요

'생활 > 프로그래밍' 카테고리의 다른 글

간단한 DLL다운로더!  (0) 2009.08.07
에러 잡았다!!!  (0) 2009.08.07
sdl로 ttt만드는중!!  (1) 2009.04.26
리버시(오델로) 프로그래밍 도와주세요!!  (0) 2009.03.19
오델로 게임 1.0.0.0버전  (6) 2009.03.19
C++숙제,,, 대학생활/C++ 2009. 4. 9. 17:56

이제 C++패스했다고, 점점 귀찮아 집니다....ㄷㄷ

1. Julian dates. Suppose you would like to know how many days ago Columbus was born. It is tedious to figure this out by hand, because months have different lengths and because you have to worry about leap years. Many people, such as astronomers, who deal with dates a lot have become tired of dealing with the craziness of the calendar and instead represent days in a completely different way: the so-called Julian day number. That value is defined as the number of days that have elapsed since Jan. 1, 4713 B.C. A convenient reference point is that October 9, 1995, is Julian day 2,450,000.

Here is an algorithm to compute the Julian day number: Set jd, jm, jy to the day, month, and year. If the year is negative, add 1 to jy. (There was no year 0. Year 1 B.C. was immediately followed by year A.D. 1) If the month is larger than February, add 1 to jm. Otherwise, add 13 to jm and subtract 1 from jy. Then compute

long jul = floor(365.25 * jy) + floor(30.6001 * jm) + d + 1720995.0

We store the result in a variable of type long; simple integers may not have enough digits to hold the value. If the date was before October 15, 1582, return this value. Otherwise, perform the following correction:

int ja = 0.01 * jy;

jul = jul + 2 - ja + 0.25 * ja;

Now write a function

long julian(int year, int month, int day)

that converts a date into a Julian day number. Use that function in a program that prompts the user for a date in the past, then prints out how many days that is away from today's date.

이게 1번문제 이고

 

2. Write a procedure void sort2(int& a, int& b) that swaps the values of a and b if a is greater than b and otherwise leaves a and b unchanged. For example,

int u = 2;

int v = 3;

int w = 4;

int x = 1;

sort2(u, v);

/* u is still 2, v is still 3 */

sort2(w, x);

/* w is now 1, x is now 4 */
이게 2번인데,,,
1번은 무슨 juliandate라는 만년력을 구하라는 문제 같고,,
2번은 간단히 크기가 작은것을 앞으로 큰것을 뒤로 보내는 문제 같네여,, C++은 BB를 보시면 교수님의 ppt도 있고, wiley에 보시면 교재도 있으니,, 참조변수에 관한것을 좀 보시는것이 도움이 되겠네요,,

오랜지폰 2라는 군요,,

 컴퓨터 캠으로 찍어서 사진은 구려도 실제론 봐줄만 합니다.

엄마핸드폰이 고장나서 새로 사러갔다가 나도 공짜로 하나 바꿨습니다,,

2년 약정이지만, 뭐 그동안 바꿀일이 생기겠습니까?

잘 써야겠습니다,,, 아 그리고 부가서비스를 써야하는데, 이달말에 넣어준다는 군요,,

어차피 가입한다음달 말까지 유지하면 된다고 해서 한달 3일치 요금만 계산하도록

대리점에서 싸게 해줬습니다ㅋㅋ

'잡담' 카테고리의 다른 글

해리포터 6편,,  (0) 2009.02.09
MarineBoy봤다!!!  (0) 2009.02.07
엊그제 금요일,,  (0) 2009.02.01
Microsoft Word 2007을 통한 블로깅 테스트입니다.  (0) 2009.01.31
컴백~~  (0) 2009.01.30
새로운 시작 잡담 2009. 1. 12. 11:33

오늘부터 블로그 시작인가?,,,

꾸준히 쓸수 있음 좋겠네,,,

'잡담' 카테고리의 다른 글

MarineBoy봤다!!!  (0) 2009.02.07
핸드폰 새로 샀습니다!!!  (0) 2009.02.07
엊그제 금요일,,  (0) 2009.02.01
Microsoft Word 2007을 통한 블로깅 테스트입니다.  (0) 2009.01.31
컴백~~  (0) 2009.01.30