터보C(TurboC.h )

from Study/C언어 2007/03/13 18:52 view 28052

출처:http://winapi.com 

커서의 움직임을 보다 효율적으로 하기 위해 TurboC.h을 제작한 것 같다.

이를 사용하면 cmd창내에서의 커서를 간편하게 제어할수 있다.

웬만한 해더파일을 전부 포함시켜 놓았다.
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>

커서의 사이즈와 타입을 위해 선언해 놓았다.
typedef enum { NOCURSOR, SOLIDCURSOR, NORMALCURSOR } CURSOR_TYPE;
void setcursortype(CURSOR_TYPE c);

화면을 command명령어인 cls를 이용하여 초기화 해준다.
void clrscr();

커서의 좌표를 매개변수로 입력하여 원하는곳에 goto해준다.
void gotoxy(int x, int y);

커서의 현재좌표를 구하는 함수이다.
int wherex();
int wherey();

#define delay(n) Sleep(n)       // n/1000초만큼 시간 지연

rand함수만을 호출 할경우 매번 똑같은 난수가 발생 하므로 time함수와 srand함수를 이용하여  난수의 초기값을 매번 다르게 해준다.
#define randomize() srand((unsigned)time(NULL))  // 난수 발생기 초기화
#define random(n) (rand() % (n))     //0~n까지의 난수 발생

3.13(화) float와 __int64

from Study/C언어 2007/03/13 18:21 view 24085
VC++6.0 컴파일러가 지원하는 자료형중에 __int64라는 게 있다. 뭔지 한번 살펴봤더니.

The types __int8, __int16, and __int32 are synonyms for the ANSI types that have the same size, and are useful for writing portable code that behaves identically across multiple platforms. Note that the __int8 data type is synonymous with type char, __int16 is synonymous with type short, and __int32 is synonymous with type int. The __int64 type has no ANSI equivalent.

표준규격은 아니란다. 그럼 왜 만들어놨을까..

int형으로 표현할수 있는  정수는 42억정도까지 있다. 근데 이보다 더 큰 수를 쓰고 싶다면

어쩔수 없이 float형을 사용하여 표현 할 수 있는데 이는 처리속도에 지장을 준다.

CPU는 쓸모 없는 소숫점이하의 수를 연산하게 되는 것이다. 이를 위해 __int64라는 자료형이

생겼다고 하는데 효율성이 얼마나 좋을지는... 이런거 테스트해보는 구문이 있었는데

나중에 생각나면 한번 해봐야 하지 않을까..

예전에 두수를 연산할때 되도록 '/'연산자를 쓰면 몇번의 연산을 더 필요로 하기 때문에

다른 방법으로 하느것이 프로그램의 동작속도를 빠르게 한다고 했었는데 그거와 비슷한 것
 
같다. Shift연산자를 사용하면 된다. >> , << 곱하기 나눗셈 대신에 요고 이용.

3.13(화) bit와 메모리에 관해서..

from Study/C언어 2007/03/13 17:42 view 20699

 키워드와 식별자에 대한 강의는 대충 끝났다. 기존에 알고 있는 것들 이었지만 기초는

언제나 중요한 법이니깐 그리고 내 기억력이 3일(?)이라 왠지 새롭다.

2^10은 1024 즉 1KB라는건 왠지 중요한 척도 이다. 이 숫자만 알고 있다면 32비트던 16비트던
대충 감이 온다는 것이다. 16비트는 2^16이므로 2^10*2^6으로도 표현 가능하고 즉 64KB라는

답이 바로 나오는 것이다. 이 64KB는 메모리를 참조할때 한번에 처리(?)하는 범위가 된것이

다. 아.. 그리고 16비트는 2바이트이므로 int형이나 포인트형 변수는 2바이트를 가지게 된다.

32비트도 마찬가지로 2^32이므로 2^30*2^2, 즉 한번의 클럭에 4GB라는 어마어마한 처리속도

 

가지게 되었다. 하지만 이는 이론적 수치이고 RAM과 CPU간의 전송속도를 맞추기위해

1~2MB
정도의 처리를 한다고 한다.


32비트에서는 포인터형과 int형이 4바이트를 가지게 되고 64비트에서는 int형은 호환성의
 
문제때문에 그대로 유지하고 포인트형은 64비트의 모든 주소값을 표현하기 위해

(그럴리는 없지만-_-..1800경??) 8바이트로 바뀔것이라 한다. 이미 바꿧나??

근데 빠른처리속도와 효율적인 메모리공간관리는 비례할 수 없나..


잘 몰라도 지금의 넉넉한 하드웨어적 환경이라면 메모리공간보다도 처리속도를 더 신경쓰느

게 좋은선택일 것 같다.

 계단식(처리비율??)으로 설계하여 CPU가 한번에 하나의 일을 처리하도록 설계하는 것이

하나의 방법이라는데 아직은 그 의미만 알 뿐이지 구현까지는 떠오르지는 않는다.

더 배우고 하다보면 "아하" 라는 느낌을 받기를 바라며..

3.13(화) scanf 를 보면서..

from Study/C언어 2007/03/13 14:30 view 21691
 듀얼 모니터를 쓰기 위해 LCD모니터 하나를 학원에 가져 왔다. 아침 7시에 와서 그런지
지하철에서도 편히 왔고 거리도 한적한 모습이었다.

 scanf 를 쓸때 %d를 입력받고 %c를 쓰게 되면 버퍼에 남아있던 줄바꿈(?)이 남아 있기 때문에 문제가 되곤 하는데 여러 해결방법이 있는데 무엇이 좋은지는 아직 모르겠다.

1. scanf("%d",..);   scanf(" %c",..);      //서식 문자사이를 한칸띠어서 하는 방법.
2. scanf("%d",..);   scanf("\n%c",..);  //서식 문자앞에 \n를 써서 해결.
3. scanf("%d%*c",..); scanf("%c", ..); //%*c를 써주는 방법.
4. fflush(stdin); //입력버퍼를 비워주고 다시 입력 받는 방법.