'내가만든 > 라인들' 카테고리의 다른 글
[AutoString] 헤더 파일과 사용시 주의점 (0) | 2016.11.27 |
---|---|
[피보나치] 피보나치 DP방식 코드 (0) | 2016.10.30 |
메신저 서버 (0) | 2016.07.22 |
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
[AutoString] 헤더 파일과 사용시 주의점 (0) | 2016.11.27 |
---|---|
[피보나치] 피보나치 DP방식 코드 (0) | 2016.10.30 |
메신저 서버 (0) | 2016.07.22 |
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
C++의 가변인자 템플릿을 이용한 문자열 생성 클래스
Write메서드의 인자로 원하는 값을 넣어주면 계속해서 append 된다.
단, char형에 대한 제약이 좀 필요 하다.
Write('a'); 라고 호출했을 경우,
a는 아스키 코드의 97로 인식이 되고 이것을 97이라는 "숫자"로 입력을 할 것인가,
혹은 아스키코드 97이 가리키는 값인 문자 'a'로 입력을 할 것인가 의 선택을 결정 해야 한다.
현재는 unsigned char형 일때에만 "숫자"로 입력을 하고 있는데,
내 생각에 가장 좋은 규약은 문자를 표현하고자 할때에는 전부 "문자열"로 입력을 하는 것이다.
어중간하게 Byte(unsigned char)같은 형을 통해 정수를 전달하는 행위를 없애고,
숫자는 -> 숫자 / 문자는 > 문자열 로 입력하는 약속을 정해서 사용하면 문제가 없을 것 같다.
그리고 이 클래스는 내부에서 재귀호출을 수행하므로 속도는 다소 떨어질 수 있다.
하지만 스트링 포맷을 맞추지 않아도 되기 때문에 대단히 편리하게 사용 될 것이다.
파일 복사툴 (0) | 2017.08.13 |
---|---|
[피보나치] 피보나치 DP방식 코드 (0) | 2016.10.30 |
메신저 서버 (0) | 2016.07.22 |
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
C++ 사용, 스마트 포인터 및 STL Map 컨테이너 사용.
재귀호출을 이용한 피보나치 수열의 n번째 값을 리턴 하는 함수이다.
STL Map 컨테이너를 사용하여 결과 값을 저장하고 중복된 계산을 하지 않는 동적 계획 방식을 사용하여 속도를 줄였다.
// n은 얻고자 하는 인덱스, pDpMapPtr은 Map의 포인터로써 입력 하지 않아도됨
int Fibo( int n, std::shared_ptr<std::map<int, int>> *pDpMapPtr = nullptr )
{
if( 1 >= n )
return 0;
std::shared_ptr<std::map<int, int>> stSharedPtr;
if( nullptr == pDpMapPtr )
{
auto map = new std::map<int, int>();
map->emplace( std::map<int, int>::value_type(2, 1) );
stSharedPtr.reset( map );
pDpMapPtr = &stSharedPtr;
}
else
stSharedPtr = *pDpMapPtr;
auto map = stSharedPtr->find(n);
if( stSharedPtr->end() == map )
{
map = stSharedPtr->emplace( std::move( std::map<int, int>::value_type( n, Fibo( n - 2, &stSharedPtr ) + Fibo( n - 1, &stSharedPtr ) ) ) ).first;
}
return map->second;
}
void main()
{
cout << Fibo(10) << endl;
}
일반 적인 재귀 호출과 비교 했을때, 수십배 빠른성능을 보인다.
N이 커질 수록 갭은 더 커진다.
함수 호출 전에 위의 공유 포인터를 먼저 만들고 사용하면, 위 함수를 여러번 호출하는 경우( ex) Fibo(5); Fibo(4); 이런식으로 반복호출 될 경우 ) 더 빠른 성능을 보여준다.
파일 복사툴 (0) | 2017.08.13 |
---|---|
[AutoString] 헤더 파일과 사용시 주의점 (0) | 2016.11.27 |
메신저 서버 (0) | 2016.07.22 |
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
C#
채팅서버를 생각 하며 만들었지만..
유저가 접속하고, 방을 개설하고 채팅을 할 수 있는 구조라는게 요즘의 메신저와 비슷 하다는 생각을 하며 프로젝트 방향 수정!
C#을 이요하기 때문에 제공 되는 라이브러리가 많고, .Net FramWork의 API들을 사용할 수 있어서 좋다. 하지만, 확실히 알고 써야지 안그러면 찾을 수도 없는 오류가 발생하더라...ㅠ
( ex) 소켓을 안닫은 채로 봇을 무작위로 붙이다보면 소켓 capacity가 넘어서 오류가 나는데 그냥 Memory accsess Violation 이라는 예외 처리가 발생함.. 찾기 어려웠음)
서버 - 클라이언트를 구현 중이고, 이 부분이 완료 되면 REDIS를 이용해 대화 내용들을 전체를 유저(클라이언트)에게 전달 할 수 있도록 구조를 계획 중이다.
#2
리팩토링중...
[AutoString] 헤더 파일과 사용시 주의점 (0) | 2016.11.27 |
---|---|
[피보나치] 피보나치 DP방식 코드 (0) | 2016.10.30 |
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
[로또 번호추출] 로또 번호 (1) | 2016.04.03 |
bool FloatCompare(float a, float b)
{
return fabsf(a - b) < FLT_EPSILON;
}
실수형 타입 변수는 소수점 아래 값에 오차가 있기 때문에, 별도의 대/소/등호 검사 로직을 사용 해야 한다.
개념은 두 실수 값의 차가 FLT_EPSPILON 보다 작으면 같다. 이다.
ex) 1.001 - 1.0009 < 0.002 같은 형태로 사용 된다.
[피보나치] 피보나치 DP방식 코드 (0) | 2016.10.30 |
---|---|
메신저 서버 (0) | 2016.07.22 |
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
[로또 번호추출] 로또 번호 (1) | 2016.04.03 |
[이미지 비교] 실행파일 (0) | 2016.03.27 |
가중치에 따라 랜덤한 값이 나옴
퍼포먼스를 위하여 std::map 컨테이너를 사용 하였고, lower_bound() 를 통해 가중치로 리턴되는 값들을 얻어 올 수 있다.
단점은 가중치의 값이 추가는 되지만, 중간에 삭제는 할 수가 없다.(초기화 후에 다시 할당해서 써야한다.)
메르센 트위스터를 이용하여 랜덤값을 사용하였고, float을 기반으로한 실수형 가중치가 가능하며, 정수형은 특성으로 인해 맨앞의 [0]은 사용하지 않도록 예외 처리 되어 있다.
메신저 서버 (0) | 2016.07.22 |
---|---|
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
[로또 번호추출] 로또 번호 (1) | 2016.04.03 |
[이미지 비교] 실행파일 (0) | 2016.03.27 |
[자바] 이미지 불러오기 (1) | 2016.03.11 |
로또 번호 추출기
C# 으로 제작
로또 추출기는 만들기 쉽다.
하지만, 일반 적인 녀석들과는 다르다. 그 차이점은 바로,
1회부터~ 696회차 까지의 당첨번호를 읽어온 뒤, 각각의 횟수를 가중치로 두어 난수를 발생 시키기 때문에 "여태까지 많이 나왔던 번호의 출현 확률이 좀더 크다."
이걸로 로또 대박에 도전해 봐야겠다.
실행파일 제공합니다:)
※주의 여기서 나온 번호로 구매해서 성공하면 본인것, 실패해도 본인것
+)
모바일로 제작!!!(안드로이드)
위 사진에 보이는 아이콘 클릭! 하면
위와 같은 화면이 나오는데, "대박!" 버튼을 누르면~
쨔잔~! 스레드를 이용해서 0.8~1초마다 Swap되면서 섞이는 듯한 애니메이션 처리함.
이거 구현하느라 좀 애먹었는데, 안드로이드 UI는 오직 "메인 스레드"에서만 UI표시를
변경할 수 있다... 이걸 몰라서 좀많이 헤맸고, 해결법을 찾아서 스레드에서는 UI값만 변경, 메인 스레드가 화면을 refresh 해주도록 해서 해결 했다(ㅠㅠ)
이 앱은 보통 로또 추출기와는 달리, 나눔로또에 올라온 xls 파일을 읽어 들여 여태까지 전체 당첨 되었던 데이터를 받아온다.
이를 기반으로 가장 많이 나왔던 번호 or 가장적게 나왔던 번호에 가중치를 주어 추첨할 수 있게 했다(나름 머신러닝..)
마지막으로 함께 만들어준 사람을 위해 Credit 페이지도 꾸며봤다.
디자이너가 UI를 잡아주니까 훨씬 보기 좋아져서 긍정적인 경험 이었다:)
이 앱으로 부자가 되었으면 좋겠다.
[Float Compare] 실수형 데이터 비교 (0) | 2016.06.30 |
---|---|
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
[이미지 비교] 실행파일 (0) | 2016.03.27 |
[자바] 이미지 불러오기 (1) | 2016.03.11 |
파일분할_파일 (0) | 2016.03.02 |
이미지를 비교 하는 프로그램
비교하고자 하는 이미지 파일 2개를 선택 한 뒤 Exe Cmp클릭
위 그림과 같이 다른 영역은 빨간색으로 표시해준다.
감도를 설정하여 더 ㅂ미세하게, 혹은 조금 여유롭게 비교해준다.
이거 틀린그림 찾기 할때 유용하게 쓰일것이다(하하)
소스코드는 SVN에 커밋! 실행파일만 제공합니다:)
[가중치 랜덤] h파일과 사용 예제 (0) | 2016.06.30 |
---|---|
[로또 번호추출] 로또 번호 (1) | 2016.04.03 |
[자바] 이미지 불러오기 (1) | 2016.03.11 |
파일분할_파일 (0) | 2016.03.02 |
스케쥴링_파일 (0) | 2016.03.02 |
[로또 번호추출] 로또 번호 (1) | 2016.04.03 |
---|---|
[이미지 비교] 실행파일 (0) | 2016.03.27 |
파일분할_파일 (0) | 2016.03.02 |
스케쥴링_파일 (0) | 2016.03.02 |
[로그분할기] 텍스트 용량별 분할기 (0) | 2016.02.28 |