Programming/C,C++2009.08.04 21:41

random값을 가져오는 함수는 stdlib.h 안에 있는 rand() 함수이다.

0부터 RAND_MAX 까지의 값중에 하나를 return 한다고 한다.

이 함수만으로 프로그램을 만들게 되면 항상 같은 random값이 나오게 된다.

random 값이 저장되어있는 곳에서 하나씩 차례대로 가져오는 함수가 rand() 함수이다.

srand() 함수는 seed라는 값으로 random값이 저장되어있는 곳의 시작위치를 지정할수 있다.

srand() 함수를 사용해도 seed값이 항상 같으면 같은 random값이 나오게 된다.

srand((unsigned int)time(NULL));

이렇게 사용하므로써 실행되는 시간에 따라 seed값을 바꿔주면 항상 다른 random 값이 나오게 된다.

srand() 를 사용하려면... stdlib.h 와 time.h 가 필요하다.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main(){
	srand((unsigned) time(NULL));
	printf("%d\n",rand());
}


여러번 실행해보면 실행할때 마다 다른 값이 나오는 것을 알수 있다.

검색을 하다보면 srand 대신 randomize() 를 사용하라는 말이 있다.

이것은 다음과 같다.

#define randomize() srand((unsigned) time(NULL));

그런데 VS2005, VS2008 을 사용할때 해보니 없다고 나온다. 그래서 결국 srand를 사용하였다....;

다음은 쓸려고 만들어 놓은 간단한 랜덤 함수;;

/*
 * 초기 랜덤값 위치 설정
 */
void randomize(){
	srand((unsigned int)time(NULL));
}
/*
 * 랜덤값 가져오기
 *
 * @param	int	최소값
 * @param	int	최대값
 * @return	int	랜덤값
 */
int random(int min, int max){
	return (rand() % (max - min + 1)) + min;
}

신고
Posted by 초프(초보 프로그래머)
Programming/JAVA2009.03.18 20:47

 이건 자바에만 해당되는 개념이 아니다. 거의 모든 객체지향 언어에서 사용되는 개념일 것이다.

오버로딩(overloading) - 메소드 이름이 같고 매개변수의 수나 타입이 틀린것이다.
     int sum(int a, int b);
     int sum(float a, float b);

     이런것이다. 컴파일시 매개변수의 갯수와 데이터타입에 따라서 함수명을 바꿔준다고 한다. 자바에만 해당되지는 않을 것이다.

오버라이딩(overriding) - 상속에서 부모클래스의 메소드를 하위메소드에서 재정의 하는것이다.

class Father
{
     void sayName()
     {
          System.out.print("My name is brown");
     }
}
class Son extend father
{
     void sayName()
     {
          System.out.print("My name is mike");
     }
}


상위 클래스인 Father에 있는 sayName() 메소드를 하위 클래스인 Son에서 재정의 하는것입니다.
만약 다음과 같이 실행하게 되면 "My name is mike" 가 출력될것이다.

class test
{
     public void static main(String args[])
     {
          Son son = new Son();
          son.sayName();
     }
}


이와 같이 하위클래스에서 상위클래스의 메소드를 재정의하는 것을 오버라이딩이라고 한다.

신고
Posted by 초프(초보 프로그래머)
Programming/C,C++2009.03.16 21:07

 기본 사용법은  C++ 사용법과 같다. 틀린점이라면 소스파일의 확장자를 cpp가 아닌 c로 하는것이다.
혹시나 해서 확장자를 cpp, c 두가지를 같은 소스로 테스트해보았습니다.

[테스트 소스]
#include<stdio.h>

struct Person{
 int height;
 int weight;
};

int main(){
 Person a;

 return 1;
}


[확장자 cpp의 빌드 결과]


[확장자 c의 빌드 결과]

오류의 원인은 C에서는 구조체를 사용할때 struct Person a; 라는 방법으로 사용해야하며 cpp 는 Person a; 라고 사용한다.

[수정후 확장자 c의 빌드 결과]

결론은 확장자에 따라서 C로 컴파일되고 C++로 컴파일된다는 것이다.
신고
Posted by 초프(초보 프로그래머)