Game!

전체 글 (93)

  1. 2015.04.16 중위 표기법 / 후위 표기법 이해

    중위 표기법 : 우리가 직관적으로 이해하는 방식 연산자가 중간에 있어서 "중"위 4 * 3 = 12 (a*b)+c a*b+d/c-2 후위 표기법 : 컴파일러가 쉽게 계산할 수 있도록 하는 방식 연산자가 뒤에 있어서 "후"위 /* 위에 것을 후위로 내렸습니다 */ 4 3 * a b * c + a b * d c / + 2 - 1. 스택을 통해, 중위 표기법 계산을 후위 표기법 계산으로 바꾼다. 2. 후위 표기법을 통해 연산을 한다. 굳이 중위 연산자에 일일히 소괄호를 칠 필요는 없다 연산자 우선순위로 판단하니까! ex)

  2. 2015.04.15 [C++] 파일입출력) EOF에 대한 이해

    파일입출력을 사용할때 eof에 대해 이해해보자 eof 는 f stream 객체가 EOF를 만나면 상수 -1 로서, 참값을 반환한다. (조건식에서 0은 거짓, 나머지는 참) eof 는 파일의 끝에 도달하면 반환(-1)을 한다 == 파일의 끝에 도달하면 eof 가 반환이 된다 파일입출력에 대한 예제코드를 보자 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #include /**/ #include using namespace std; ofstream fout; //화면에서 파일로 ifstream fin; //파일에서 화면으로 v..

  3. 2015.04.14 정수 출력

    정수의 각 자리수를 출력하는 함수를 재귀함수로 만들어보자 예제)정수를 입력하시오 : 1234실행 : 1 2 3 4 천의자리는 1, 백의자리는 2, 십의자리는 3, 일의자리는 4...이렇게 차례대로 출력하면서 입력받는 숫자는 음수만 아니면 된다 1. 몫이 일의자리가 되는, 1~9 사이의 숫자를 찾는다2. 찾은 숫자를 출력3. 다음 계산할 숫자를 재귀함수의 매개변수로 넘겨준다 point1~9 사이의 숫자 찾는 방법 :10의 제곱으로 나누면서 몫이 일의자리인 숫자를 찾는다== 가장 큰 자리 숫자 12345678910111213141516171819202122232425262728#include #include void main(){ int num; printf("정수를 입력하시오 : "); scanf("%d"..

 

중위 표기법

: 우리가 직관적으로 이해하는 방식

연산자가 중간에 있어서 "중"위

 

4 * 3 = 12

(a*b)+c

a*b+d/c-2

 

후위 표기법

: 컴파일러가 쉽게 계산할 수 있도록 하는 방식

연산자가 뒤에 있어서 "후"위

 

/* 위에 것을 후위로 내렸습니다 */

 

4 3 *

a b * c +

a b * d c / + 2 -

 

<코드로 계산하는 순서>

 

1. 스택을 통해, 중위 표기법 계산을 후위 표기법 계산으로 바꾼다.

2. 후위 표기법을 통해 연산을 한다.

 

 

 

굳이 중위 연산자에 일일히 소괄호를 칠 필요는 없다

연산자 우선순위로 판단하니까!

 

ex)

 

 

 

 

 

'Language > C++' 카테고리의 다른 글

2차원 배열 동적할당 & 해제  (0) 2015.04.24
[C++] 강제 형변환 & 자동 형변환  (0) 2015.04.24
[C 기초] 자리맞춰서 출력하기  (2) 2015.04.20
[C++] 파일입출력) EOF에 대한 이해  (0) 2015.04.15
정수 출력  (0) 2015.04.14

파일입출력을 사용할때 eof에 대해 이해해보자

 

eof 는 f

stream 

객체가 EOF를 만나면 상수 -1 로서, 참값을 반환한다. (조건식에서 0은 거짓, 나머지는 참)

 

eof 는 파일의 끝에 도달하면 반환(-1)을 한다

== 파일의 끝에 도달하면 eof 가 반환이 된다


파일입출력에 대한 예제코드를 보자

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iosteam>
/**/
#include <fstream>
using namespace std;
 
ofstream fout; //화면에서 파일로
ifstream fin; //파일에서 화면으로
 
void main()
{
    /* 배열을 어디까지 사용했는지 idx 변수 */
    int accNum;
    /* 파일 읽기를 위한 변수 */
    int count = 0;
 
    accNum = takeFile(accArr, count); //accArr은 클래스 변수
    
    switch(num)
    {
        case EXIT:
        fout.open("accountInfo.txt");
        break;
    }
}
 
void takeFile(Account* acc, int* _count)
{
    /* 프로젝트 안에 있는 파일을 부를 시, 그냥 파일이름만 쓰면 된다
아닐시, 모든 경로를 적어주어야 한다. */
    fin.open("accountInfo.txt");
 
    while(1)
    {
        /* 파일에서 1개를 읽어옵니다 */
        fin >> accArr[_count].user_Name >> accArr[_count].user_ID >> accArr[_count].money;
        /* 읽을 것이 없다면 루프를 빠져나갑니다. 
[예제부분] */
        if( fin.eof() )
        {
            cout << "no data.." <<endl;
            break;
        }
        /* 몇개를 읽었는지 배열 idx 카운트다운 해줍니다. */
        _count++;
    }
    fin.close();
}
 cs

 

예제 코드 조건문에서

 

 

 

if( fin.eof())  // if eof 가 참이라면 == 파일의 끝에 도달했다면

 

 

 

으로 이해할 수 있다

 

(cf. if의 조건식에서, 0은 거짓이고 나머지는 모두 참으로 인식한다)

 

 

반대로,

 

! fin.eof() 는 eof 의 반대이므로

( cf. ! 는 논리 NOT 연산자 / 참 일 경우 거짓을, 거짓 일 경우 참을)

 

파일의 끝에 도달하지 않았다면

으로 이해할 수 있다

 

 

 

/* C 에서 EOF */

 

 

if( fscanf("~", ~) != EOF)

{

//문자열 끝에 도달하지 않았다면

}

else

{

//문자열 끝에 도달했다면

}

'Language > C++' 카테고리의 다른 글

2차원 배열 동적할당 & 해제  (0) 2015.04.24
[C++] 강제 형변환 & 자동 형변환  (0) 2015.04.24
[C 기초] 자리맞춰서 출력하기  (2) 2015.04.20
중위 표기법 / 후위 표기법 이해  (0) 2015.04.16
정수 출력  (0) 2015.04.14

정수 출력2015. 4. 14. 20:57


정수의 각 자리수를 출력하는 함수를 재귀함수로 만들어보자




예제)

정수를 입력하시오 : 1234

실행 : 1 2 3 4


천의자리는 1, 백의자리는 2, 십의자리는 3, 일의자리는 4...

이렇게 차례대로 출력하면서 입력받는 숫자는 음수만 아니면 된다



1. 몫이 일의자리가 되는, 1~9 사이의 숫자를 찾는다

2. 찾은 숫자를 출력

3. 다음 계산할 숫자를 재귀함수의 매개변수로 넘겨준다


point

1~9 사이의 숫자 찾는 방법 :

10의 제곱으로 나누면서 몫이 일의자리인 숫자를 찾는다

== 가장 큰 자리 숫자


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <math.h>
#include <stdio.h>
 
void main()
{
    int num;
 
    printf("정수를 입력하시오 : ");
    scanf("%d", num);
 
    
}
 
void Show_digit(int n)
{
    int k = 0; //지수
    int portion = n / (int)pow(10.0 , k);
 
    //몫이 일의자리인 수 찾기
    while(portion > 10 || portion < = 0)
    {
        k++;
        portion = n / (int)pow(10.0 , k);
    }
    
    printf("%d ", portion);
   if(k == 0)
   {
      return;
    }
    Show_digit(n % (int)pow(10.0 , k); 
}
cs


while 문이, 나눴을 때 몫이 1일 때의 가장 큰 자리수의 숫자를 찾는 반복문이다

while 문 괄호 안의 조건식이 거짓이 되면 반복문에서 벗어난다


그리고 가장 큰 자리수를 찾고 while문을 벗어났기때문에 그대로 몫을 출력해준다.

다음, 나머지를 매개변수로 다시 재귀호출을 한다


마지막으로 재귀함수이므로,

1(10의0승)으로 나누었을때 몫이 1개가 될 때를 탈출구문으로 만든다.