확실한건지는 나도 모름..--

Posted by YoungMoon
:

오토마타

프로그래밍/C/C++ 2007. 4. 9. 16:56 |

#include
#include
#include
enum STATE{IS_START, IS_INTEGER, IS_OCTAL, IS_HEXA, IS_POINT, IS_POWER, IS_QUIT};
bool plus = true;
bool powerPlus = true;

int main()
{
int NowState = 0;
int CharLen = 0;
int index = 0;
double result = 0;
int length = 0;
int temp = 0;
int square = 0;
char data[10];

printf("Input Data: ",data);
scanf("%s", data);
CharLen = strlen(data);

if(data[0] == '-')
{
plus = false;
index = 1;
}

while(index != CharLen)
{
switch(NowState)
{
case IS_START:
if(data[index] >= (int)'1' && data[index] <= (int)'9')
NowState = IS_INTEGER;
else if(data[index] == (int)'0')
NowState = IS_OCTAL;
else NowState = IS_QUIT;
break;
case IS_INTEGER:
if(data[index] >= (int)'0' && data[index] <= (int)'9')
NowState = IS_INTEGER;
else if(data[index] == (int)'0')
NowState = IS_OCTAL;
else if(data[index] == (int)'.')
NowState = IS_POINT;
else if(data[index] == (int)'E' || data[index] == (int)'e')
NowState = IS_POWER;
else NowState = IS_QUIT;
break;
case IS_OCTAL:
if(data[index] >= (int)'0' && data[index] <= (int)'9')
NowState = IS_OCTAL;
else if(data[index] == (int)'x')
NowState = IS_HEXA;
else if(data[index] == (int)'.')
NowState = IS_POINT;
else NowState = IS_QUIT;
break;
case IS_HEXA:
if(data[index] >= (int)'0' && data[index] <= (int)'9')
NowState = IS_HEXA;
else if((data[index] >= (int)'A' && data[index] <= (int)'F')
||(data[index] >= (int)'a' && data[index] <= (int)'f'))
NowState = IS_HEXA;
else if(data[index] == (int)'.')
NowState = IS_POINT;
else NowState = IS_QUIT;
break;
case IS_POINT:
if(data[index] >= (int)'0' && data[index] <= (int)'9')
NowState = IS_POINT;
else if(data[index] == (int)'E' || data[index] == (int)'e')
NowState = IS_POWER;
else NowState = IS_QUIT;
case IS_POWER:
if(data[index] == (int)'-')
{
powerPlus = false;
break;
}
else if(data[index] >= (int)'0' && data[index] <= (int)'9')
{
NowState = IS_POWER;
}
else NowState = IS_QUIT;

break;
}//End of Switch
index++;
}//End of While

printf("nNowState: ");
if(plus == false)
printf("-");
switch(NowState)
{
case IS_START:
printf("Start");
break;
case IS_INTEGER:
result = atoi(data);
printf("integer");
break;
case IS_OCTAL:
if(plus==true)
length = CharLen-1;
else length = CharLen-2;
index = CharLen;
square = 1;
while(index>CharLen-length)
{
temp = ((int)data[index-1]-48);
result += temp*square;
square = square*8;
index--;
}
printf("octal");
break;
case IS_HEXA:
if(plus==true)
length = CharLen-2;
else length = CharLen-3;
index = CharLen;
square = 1;
while(index>CharLen-length)
{
if(data[index-1] >= (int)'A' && data[index-1] >= (int)'F')
temp = (int)data[index-1]-54;
else if(data[index-1] >= (int)'a' && data[index-1] >= (int)'f')
temp = (int)data[index-1]-86;
else temp = (int)data[index-1]-48;
result += temp*square;
square = square*16;
index--;
}
printf("hexa");
break;
case IS_POWER:
printf("power");
break;
case IS_QUIT:
printf("quit");
}

printf("nDataResult: %0.3lf", result);

return 0;
}

Posted by YoungMoon
:

숫자표현

프로그래밍/C/C++ 2007. 4. 4. 17:47 |

8 진 정수 - 숫자 앞에 0

10 진 정수

16 진 정수 - 숫자 앞에 0x 또는 0X

7e2 - 7 x 10^2

05E-2 - 0.5 x 10^-2

Posted by YoungMoon
:

직접 뚜드려서 변환도 가능(단, 10진수 → 문자 only)

=> ALT 를 누른상태에서 10진수(키패드 only)를 입력한뒤 ALT를 떼면 문자로 바뀌게된다.

Posted by YoungMoon
:

잼있었당 ㅎㅎ

Posted by YoungMoon
:

12월 5일

프로그래밍/C/C++ 2006. 12. 5. 10:15 |

//================================================================
//12-5
//================================================================
#include
#include
/*
int main(int argc, char *argv[])
{
int i;
//
printf("nThe following arguments were passed to main(): ");
printf("nARGC: %dn", argc);
for(i=1;iprintf("%s", argv[i]);
printf("n");
//

printf("nParameter test: ");
printf(" of argc: %dn", argc);
for(i = 0; i< argc; i++){
printf("%s", argv[i]);
}
printf("n");
return 0;
}
*/
//===============================================================
//cd Microsoft vi*: 알아서 찾아 들어가준다..신기신기~
//test.exe도 argc에 포함이 된다 그래서 초기 카운터는 1
//===============================================================

int main(int argc, char* argv[])
{
int i;
int value;
int sum = 0;
printf("nThe following numerical data of the arguments passed to main(): ");

for(i=1;i{
value = atoi(argv[i]);
sum += value;
printf("%d", value);
}

printf("nThe sum of the numerical data is %dn", sum);

return 0;
}

Posted by YoungMoon
:

11월 27일

프로그래밍/C/C++ 2006. 11. 28. 10:02 |

#include
#include

//===============================================================
//11-5
//===============================================================
/*
int main()
{
FILE* fptr;
char ch;
long int offset, last;

fptr = fopen("test.txt", "r");
if(fptr == NULL)
{
printf("error");
exit(1);
}

fseek(fptr, 0L, SEEK_END);
last = ftell(fptr);
for(offset = 0; offset < last; ++offset)
{
fseek(fptr, offset, SEEK_SET);//앞에서부터 출력
//fseek(fptr, -offset, SEEK_END);//뒤에서 부터 출력
ch = getc(fptr);

switch(ch)
{
case 'n': printf("LF : ");
break;
case EOF : printf("EOF : ");
break;
default: printf("%c :", ch );
}

}
fclose(fptr);

return 0;
}
*/

//===========================================================
//11-6
//===========================================================

int main()
{
FILE* fptr;
char ch;

fptr = fopen("test.txt", "r");
if(fptr == NULL)
{
printf("Error");
exit(1);
}
fseek(fptr, 0L, SEEK_SET);
ch = getc(fptr);
printf("%c", ch);


return 0;
}

//12장=========================

#include
/*
int main()
{
enum color {red, green = 4, yellow};
//4를 넣으면 yellow는 5가 된다
enum color crayon = red;

printf("nThe color is %dn", crayon);
printf("Enter a value: ");
scanf("%d", &crayon);
if(crayon == red)
printf("The crayon is red.n");
else if(crayon == green)
printf("The crayon is green.n");
else if(crayon == yellow)
printf("The crayon is yellow.n");
else
printf("The color is not defined.n");
return 0;
}
*/
//입력에 yellow를 쓰면 red가 나온다...집접 타이핑은 안된다...
int main()
{
int hour, rate;
hour = 50;
rate = (hour>40)?1:2;
printf("The rate is: %d", rate);
return 0;
}

Posted by YoungMoon
:
레포트용 - 아직 많이 부족 - 오늘 내 해결할 것~!~!후훗~!
Posted by YoungMoon
:

여러분이 고생했던것 중 하나가 숫자 입력과는 달리 문자 입력의 경우에는 공백도 하나의 문자로 취급되어진다는 것을 지금은 알고 있을 것입니다.
그래서 대부분 학생이 %s를 사용했고요..
과연 %c를 사용해서 해결할 수 있는 방법은 없을까요...

물론 있겠지요....
몇분은 fflush(stdin)라고 말을 할것입니다.
그럼 다른 방법은요??

아래 소스를 보세요

#include
void main(void)
{
char ch1=0, ch2=0, ch3=0;
printf(" 번째 문자입력 : ");
scanf("%c", &ch1);
printf(" 번째 문자입력 : ");
/******/scanf("%*c%c", &ch2);
printf(" 번째 문자입력 : ");
scanf("%c", &ch3);
printf("n%c, %c, %cn", ch1, ch2, ch3);
}

빨간 색으로 덧칠한 부분을 보시면 %*c 가 있을것입니다.
이것은 버퍼에 마지막으로 입력되었던 엔터를 제거하고 재입력을 받으라는 뜻입니다.
c는 여러분이 수업시간에 모든것을 배우지 못합니다.
그래서 여러분이 찾아서 스스로 해결할 수있는 힘을 길러 주고 싶은 것입니다.

게임을 자신의 힘으로 할 수 있는 그날까지... 화이팅!!!
-김명규-
Posted by YoungMoon
:

11월 21일

프로그래밍/C/C++ 2006. 11. 21. 10:15 |
시험은 오늘 배운거 이후꺼
Posted by YoungMoon
: