다음 소스 코드는 C 언어로부터 1단계로 수정된 C++용 소스파일 testForForCPP.cpp를 printf 대신 cout와 endl을 쓸 수 있도록 2단계 수정한 것이다.  (소스에서 진하게 된 부분)



  1. /*
  2.  *  Filename: testForForCPP2.cpp
  3.  *
  4.  *  Compile:  cl -GX testForForCPP2.cpp
  5.  *  Execute:  testForForCPP2
  6.  *
  7.  *  Date:  2008. 3. 3.
  8.  */
  9. #include <iostream>
  10. #include <string>
  11. #include <memory>
  12. using namespace std;
  13. // 매개변수 dan으로 지정된 한 단의 결과를 매개변수 t로 전달한다.
  14. // 중요!! t로 전달된 메모리는 사용 후 반드시 해제(free)하여야 한다.
  15. void getDan(char *t[19], int dan) {
  16.     char sa[10], sb[10], sval[10];
  17.     int j;
  18.     // t[0], ... , t[18]에 각각 동적 메모리를 할당한다.
  19.     for (j = 0; j < 19; j++) {
  20.         t[j] = (char *) calloc(21, sizeof(char));
  21.     }
  22.     for (j = 0; j < 19; j++) {
  23.         sprintf(sa, "%d", dan);
  24.         if (strlen(sa) < 2)
  25.             sprintf(sa, " %d", dan);
  26.         sprintf(sb, "%d", j + 1);
  27.         if (strlen(sb) < 2)
  28.             sprintf(sb, " %d", j + 1);
  29.         sprintf(sval, "%d", dan*(j + 1));
  30.         if (strlen(sval) < 2)
  31.             sprintf(sval, "  %d", dan*(j + 1));
  32.         else if (strlen(sval) < 3)
  33.             sprintf(sval, " %d", dan*(j + 1));
  34.         strcpy(t[j], sa);
  35.         strcat(t[j], " x ");
  36.         strcat(t[j], sb);
  37.         strcat(t[j], " = ");
  38.         strcat(t[j], sval);
  39.     }
  40. }
  41. // 19단표를 모두 80컬럼 컨솔에 출력한다.
  42. void printAllNineteenDan() {
  43.     int d[4] = { 2, 7, 11, 16 };      // 각 줄단위 블럭의 첫단
  44.     int counter[4] = { 5, 4, 5, 4 };  // 각 줄단위 블럭에 속한 단의 개수
  45.     char *lines[19];
  46.     char *v[19];
  47.     int i, j, k;
  48.     char arr[18][19][21];
  49.     for (i = 2; i < 20; i++) {
  50.         getDan(v, i);
  51.         for (j = 0; j < 19; j++) {
  52.             strcpy(arr[i - 2][j], v[j]);
  53.         }
  54.     }
  55.     // lines[0], ... , lines[18]에 각각 동적 메모리를 할당한다.
  56.     for (j = 0; j < 19; j++) {
  57.         lines[j] = (char *) malloc(81 * sizeof(char));
  58.     }
  59.     for (k = 0; k < (sizeof(d)/sizeof(int)); k++) {
  60.         // 8-바이트 길이의 한 줄씩 완성
  61.         for (i = 0; i < 19; i++) {
  62.             strcpy(lines[i], arr[d[k]-2][i]);
  63.             for (j = 1; j < counter[k]; j++) {
  64.                 strcat(lines[i], "   ");
  65.                 strcat(lines[i], arr[d[k]-2+j][i]);
  66.             }
  67.         }
  68.         // 80 바이트 길이의 한 줄씩 출력
  69.         for (i = 0; i < 19; i++) {
  70.             cout << lines[i] << endl;
  71.         }
  72.         cout << endl;
  73.     }
  74.     // lines[0], ... , lines[18]로 할당받은 모든 동적 메모리를 해제한다.
  75.     for (j = 0; j < 19; j++) {
  76.         free(lines[j]);
  77.     }
  78.     // v[0], ... , v[18]로 할당받은 모든 동적 메모리를 해제한다.
  79.     for (j = 0; j < 19; j++) {
  80.         free(v[j]);
  81.     }
  82.  }
  83. // C/C++ 언어의 main 함수 : 실행 시작 지점
  84. int main(void) {
  85.     printAllNineteenDan();    // 객체에 속하는 메소드 printDan()을 호출한다.
  86.     return 0;
  87. }



컴파일> cl /EHsc testForForCPP2.cpp
실행> testForForCPP2

 2 x  1 =   2    3 x  1 =   3    4 x  1 =   4    5 x  1 =   5    6 x  1 =   6
 2 x  2 =   4    3 x  2 =   6    4 x  2 =   8    5 x  2 =  10    6 x  2 =  12
 2 x  3 =   6    3 x  3 =   9    4 x  3 =  12    5 x  3 =  15    6 x  3 =  18
 2 x  4 =   8    3 x  4 =  12    4 x  4 =  16    5 x  4 =  20    6 x  4 =  24
 2 x  5 =  10    3 x  5 =  15    4 x  5 =  20    5 x  5 =  25    6 x  5 =  30
 2 x  6 =  12    3 x  6 =  18    4 x  6 =  24    5 x  6 =  30    6 x  6 =  36
 2 x  7 =  14    3 x  7 =  21    4 x  7 =  28    5 x  7 =  35    6 x  7 =  42
 2 x  8 =  16    3 x  8 =  24    4 x  8 =  32    5 x  8 =  40    6 x  8 =  48
 2 x  9 =  18    3 x  9 =  27    4 x  9 =  36    5 x  9 =  45    6 x  9 =  54
 2 x 10 =  20    3 x 10 =  30    4 x 10 =  40    5 x 10 =  50    6 x 10 =  60
 2 x 11 =  22    3 x 11 =  33    4 x 11 =  44    5 x 11 =  55    6 x 11 =  66
 2 x 12 =  24    3 x 12 =  36    4 x 12 =  48    5 x 12 =  60    6 x 12 =  72
 2 x 13 =  26    3 x 13 =  39    4 x 13 =  52    5 x 13 =  65    6 x 13 =  78
 2 x 14 =  28    3 x 14 =  42    4 x 14 =  56    5 x 14 =  70    6 x 14 =  84
 2 x 15 =  30    3 x 15 =  45    4 x 15 =  60    5 x 15 =  75    6 x 15 =  90
 2 x 16 =  32    3 x 16 =  48    4 x 16 =  64    5 x 16 =  80    6 x 16 =  96
 2 x 17 =  34    3 x 17 =  51    4 x 17 =  68    5 x 17 =  85    6 x 17 = 102
 2 x 18 =  36    3 x 18 =  54    4 x 18 =  72    5 x 18 =  90    6 x 18 = 108
 2 x 19 =  38    3 x 19 =  57    4 x 19 =  76    5 x 19 =  95    6 x 19 = 114

 7 x  1 =   7    8 x  1 =   8    9 x  1 =   9   10 x  1 =  10
 7 x  2 =  14    8 x  2 =  16    9 x  2 =  18   10 x  2 =  20
 7 x  3 =  21    8 x  3 =  24    9 x  3 =  27   10 x  3 =  30
 7 x  4 =  28    8 x  4 =  32    9 x  4 =  36   10 x  4 =  40
 7 x  5 =  35    8 x  5 =  40    9 x  5 =  45   10 x  5 =  50
 7 x  6 =  42    8 x  6 =  48    9 x  6 =  54   10 x  6 =  60
 7 x  7 =  49    8 x  7 =  56    9 x  7 =  63   10 x  7 =  70
 7 x  8 =  56    8 x  8 =  64    9 x  8 =  72   10 x  8 =  80
 7 x  9 =  63    8 x  9 =  72    9 x  9 =  81   10 x  9 =  90
 7 x 10 =  70    8 x 10 =  80    9 x 10 =  90   10 x 10 = 100
 7 x 11 =  77    8 x 11 =  88    9 x 11 =  99   10 x 11 = 110
 7 x 12 =  84    8 x 12 =  96    9 x 12 = 108   10 x 12 = 120
 7 x 13 =  91    8 x 13 = 104    9 x 13 = 117   10 x 13 = 130
 7 x 14 =  98    8 x 14 = 112    9 x 14 = 126   10 x 14 = 140
 7 x 15 = 105    8 x 15 = 120    9 x 15 = 135   10 x 15 = 150
 7 x 16 = 112    8 x 16 = 128    9 x 16 = 144   10 x 16 = 160
 7 x 17 = 119    8 x 17 = 136    9 x 17 = 153   10 x 17 = 170
 7 x 18 = 126    8 x 18 = 144    9 x 18 = 162   10 x 18 = 180
 7 x 19 = 133    8 x 19 = 152    9 x 19 = 171   10 x 19 = 190

11 x  1 =  11   12 x  1 =  12   13 x  1 =  13   14 x  1 =  14   15 x  1 =  15
11 x  2 =  22   12 x  2 =  24   13 x  2 =  26   14 x  2 =  28   15 x  2 =  30
11 x  3 =  33   12 x  3 =  36   13 x  3 =  39   14 x  3 =  42   15 x  3 =  45
11 x  4 =  44   12 x  4 =  48   13 x  4 =  52   14 x  4 =  56   15 x  4 =  60
11 x  5 =  55   12 x  5 =  60   13 x  5 =  65   14 x  5 =  70   15 x  5 =  75
11 x  6 =  66   12 x  6 =  72   13 x  6 =  78   14 x  6 =  84   15 x  6 =  90
11 x  7 =  77   12 x  7 =  84   13 x  7 =  91   14 x  7 =  98   15 x  7 = 105
11 x  8 =  88   12 x  8 =  96   13 x  8 = 104   14 x  8 = 112   15 x  8 = 120
11 x  9 =  99   12 x  9 = 108   13 x  9 = 117   14 x  9 = 126   15 x  9 = 135
11 x 10 = 110   12 x 10 = 120   13 x 10 = 130   14 x 10 = 140   15 x 10 = 150
11 x 11 = 121   12 x 11 = 132   13 x 11 = 143   14 x 11 = 154   15 x 11 = 165
11 x 12 = 132   12 x 12 = 144   13 x 12 = 156   14 x 12 = 168   15 x 12 = 180
11 x 13 = 143   12 x 13 = 156   13 x 13 = 169   14 x 13 = 182   15 x 13 = 195
11 x 14 = 154   12 x 14 = 168   13 x 14 = 182   14 x 14 = 196   15 x 14 = 210
11 x 15 = 165   12 x 15 = 180   13 x 15 = 195   14 x 15 = 210   15 x 15 = 225
11 x 16 = 176   12 x 16 = 192   13 x 16 = 208   14 x 16 = 224   15 x 16 = 240
11 x 17 = 187   12 x 17 = 204   13 x 17 = 221   14 x 17 = 238   15 x 17 = 255
11 x 18 = 198   12 x 18 = 216   13 x 18 = 234   14 x 18 = 252   15 x 18 = 270
11 x 19 = 209   12 x 19 = 228   13 x 19 = 247   14 x 19 = 266   15 x 19 = 285

16 x  1 =  16   17 x  1 =  17   18 x  1 =  18   19 x  1 =  19
16 x  2 =  32   17 x  2 =  34   18 x  2 =  36   19 x  2 =  38
16 x  3 =  48   17 x  3 =  51   18 x  3 =  54   19 x  3 =  57
16 x  4 =  64   17 x  4 =  68   18 x  4 =  72   19 x  4 =  76
16 x  5 =  80   17 x  5 =  85   18 x  5 =  90   19 x  5 =  95
16 x  6 =  96   17 x  6 = 102   18 x  6 = 108   19 x  6 = 114
16 x  7 = 112   17 x  7 = 119   18 x  7 = 126   19 x  7 = 133
16 x  8 = 128   17 x  8 = 136   18 x  8 = 144   19 x  8 = 152
16 x  9 = 144   17 x  9 = 153   18 x  9 = 162   19 x  9 = 171
16 x 10 = 160   17 x 10 = 170   18 x 10 = 180   19 x 10 = 190
16 x 11 = 176   17 x 11 = 187   18 x 11 = 198   19 x 11 = 209
16 x 12 = 192   17 x 12 = 204   18 x 12 = 216   19 x 12 = 228
16 x 13 = 208   17 x 13 = 221   18 x 13 = 234   19 x 13 = 247
16 x 14 = 224   17 x 14 = 238   18 x 14 = 252   19 x 14 = 266
16 x 15 = 240   17 x 15 = 255   18 x 15 = 270   19 x 15 = 285
16 x 16 = 256   17 x 16 = 272   18 x 16 = 288   19 x 16 = 304
16 x 17 = 272   17 x 17 = 289   18 x 17 = 306   19 x 17 = 323
16 x 18 = 288   17 x 18 = 306   18 x 18 = 324   19 x 18 = 342
16 x 19 = 304   17 x 19 = 323   18 x 19 = 342   19 x 19 = 361


Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
Posted by Scripter
,

다음 소스 코드는 C 언어로 작성된 소스파일 testForFor.c 를 C++용으로 (최소한의 수정만으로) 고친 것이다. 인클루드 구문만 고쳤다. (소스에서 진하게 된 부분)



  1. /*
  2.  *  Filename: testForForCPP.cpp
  3.  *
  4.  *  Compile:  cl -GX testForForCPP.cpp
  5.  *  Execute:  testForForCPP
  6.  *
  7.  *  Date:  2008. 3. 3.
  8.  */
  9. #include <iostream>
  10. #include <string>
  11. #include <memory>
  12. using namespace std;
  13. // 매개변수 dan으로 지정된 한 단의 결과를 매개변수 t로 전달한다.
  14. // 중요!! t로 전달된 메모리는 사용 후 반드시 해제(free)하여야 한다.
  15. void getDan(char *t[19], int dan) {
  16.     char sa[10], sb[10], sval[10];
  17.     int j;
  18.     // t[0], ... , t[18]에 각각 동적 메모리를 할당한다.
  19.     for (j = 0; j < 19; j++) {
  20.         t[j] = (char *) calloc(21, sizeof(char));
  21.     }
  22.     for (j = 0; j < 19; j++) {
  23.         sprintf(sa, "%d", dan);
  24.         if (strlen(sa) < 2)
  25.             sprintf(sa, " %d", dan);
  26.         sprintf(sb, "%d", j + 1);
  27.         if (strlen(sb) < 2)
  28.             sprintf(sb, " %d", j + 1);
  29.         sprintf(sval, "%d", dan*(j + 1));
  30.         if (strlen(sval) < 2)
  31.             sprintf(sval, "  %d", dan*(j + 1));
  32.         else if (strlen(sval) < 3)
  33.             sprintf(sval, " %d", dan*(j + 1));
  34.         strcpy(t[j], sa);
  35.         strcat(t[j], " x ");
  36.         strcat(t[j], sb);
  37.         strcat(t[j], " = ");
  38.         strcat(t[j], sval);
  39.     }
  40. }
  41. // 19단표를 모두 80컬럼 컨솔에 출력한다.
  42. void printAllNineteenDan() {
  43.     int d[4] = { 2, 7, 11, 16 };      // 각 줄단위 블럭의 첫단
  44.     int counter[4] = { 5, 4, 5, 4 };  // 각 줄단위 블럭에 속한 단의 개수
  45.     char *lines[19];
  46.     char *v[19];
  47.     int i, j, k;
  48.     char arr[18][19][21];
  49.     for (i = 2; i < 20; i++) {
  50.         getDan(v, i);
  51.         for (j = 0; j < 19; j++) {
  52.             strcpy(arr[i - 2][j], v[j]);
  53.         }
  54.     }
  55.     // lines[0], ... , lines[18]에 각각 동적 메모리를 할당한다.
  56.     for (j = 0; j < 19; j++) {
  57.         lines[j] = (char *) malloc(81 * sizeof(char));
  58.     }
  59.     for (k = 0; k < (sizeof(d)/sizeof(int)); k++) {
  60.         // 80 바이트 길이의 한 줄씩 완성
  61.         for (i = 0; i < 19; i++) {
  62.             strcpy(lines[i], arr[d[k]-2][i]);
  63.             for (j = 1; j < counter[k]; j++) {
  64.                 strcat(lines[i], "   ");
  65.                 strcat(lines[i], arr[d[k]-2+j][i]);
  66.             }
  67.         }
  68.         // 80 바이트 길이의 한 줄씩 출력
  69.         for (i = 0; i < 19; i++) {
  70.             printf("%s\n", lines[i]);
  71.         }
  72.         printf("\n");
  73.     }
  74.     // lines[0], ... , lines[18]로 할당받은 모든 동적 메모리를 해제한다.
  75.     for (j = 0; j < 19; j++) {
  76.         free(lines[j]);
  77.     }
  78.     // v[0], ... , v[18]로 할당받은 모든 동적 메모리를 해제한다.
  79.     for (j = 0; j < 19; j++) {
  80.         free(v[j]);
  81.     }
  82. }
  83. // C/C++ 언어의 main 함수 : 실행 시작 지점
  84. int main(void) {
  85.     printAllNineteenDan();    // 객체에 속하는 메소드 printDan()을 호출한다.
  86.     return 0;
  87. }




컴파일> cl /GX testForForCPP.cpp
실행> testForForCPP

 2 x  1 =   2    3 x  1 =   3    4 x  1 =   4    5 x  1 =   5    6 x  1 =   6
 2 x  2 =   4    3 x  2 =   6    4 x  2 =   8    5 x  2 =  10    6 x  2 =  12
 2 x  3 =   6    3 x  3 =   9    4 x  3 =  12    5 x  3 =  15    6 x  3 =  18
 2 x  4 =   8    3 x  4 =  12    4 x  4 =  16    5 x  4 =  20    6 x  4 =  24
 2 x  5 =  10    3 x  5 =  15    4 x  5 =  20    5 x  5 =  25    6 x  5 =  30
 2 x  6 =  12    3 x  6 =  18    4 x  6 =  24    5 x  6 =  30    6 x  6 =  36
 2 x  7 =  14    3 x  7 =  21    4 x  7 =  28    5 x  7 =  35    6 x  7 =  42
 2 x  8 =  16    3 x  8 =  24    4 x  8 =  32    5 x  8 =  40    6 x  8 =  48
 2 x  9 =  18    3 x  9 =  27    4 x  9 =  36    5 x  9 =  45    6 x  9 =  54
 2 x 10 =  20    3 x 10 =  30    4 x 10 =  40    5 x 10 =  50    6 x 10 =  60
 2 x 11 =  22    3 x 11 =  33    4 x 11 =  44    5 x 11 =  55    6 x 11 =  66
 2 x 12 =  24    3 x 12 =  36    4 x 12 =  48    5 x 12 =  60    6 x 12 =  72
 2 x 13 =  26    3 x 13 =  39    4 x 13 =  52    5 x 13 =  65    6 x 13 =  78
 2 x 14 =  28    3 x 14 =  42    4 x 14 =  56    5 x 14 =  70    6 x 14 =  84
 2 x 15 =  30    3 x 15 =  45    4 x 15 =  60    5 x 15 =  75    6 x 15 =  90
 2 x 16 =  32    3 x 16 =  48    4 x 16 =  64    5 x 16 =  80    6 x 16 =  96
 2 x 17 =  34    3 x 17 =  51    4 x 17 =  68    5 x 17 =  85    6 x 17 = 102
 2 x 18 =  36    3 x 18 =  54    4 x 18 =  72    5 x 18 =  90    6 x 18 = 108
 2 x 19 =  38    3 x 19 =  57    4 x 19 =  76    5 x 19 =  95    6 x 19 = 114

 7 x  1 =   7    8 x  1 =   8    9 x  1 =   9   10 x  1 =  10
 7 x  2 =  14    8 x  2 =  16    9 x  2 =  18   10 x  2 =  20
 7 x  3 =  21    8 x  3 =  24    9 x  3 =  27   10 x  3 =  30
 7 x  4 =  28    8 x  4 =  32    9 x  4 =  36   10 x  4 =  40
 7 x  5 =  35    8 x  5 =  40    9 x  5 =  45   10 x  5 =  50
 7 x  6 =  42    8 x  6 =  48    9 x  6 =  54   10 x  6 =  60
 7 x  7 =  49    8 x  7 =  56    9 x  7 =  63   10 x  7 =  70
 7 x  8 =  56    8 x  8 =  64    9 x  8 =  72   10 x  8 =  80
 7 x  9 =  63    8 x  9 =  72    9 x  9 =  81   10 x  9 =  90
 7 x 10 =  70    8 x 10 =  80    9 x 10 =  90   10 x 10 = 100
 7 x 11 =  77    8 x 11 =  88    9 x 11 =  99   10 x 11 = 110
 7 x 12 =  84    8 x 12 =  96    9 x 12 = 108   10 x 12 = 120
 7 x 13 =  91    8 x 13 = 104    9 x 13 = 117   10 x 13 = 130
 7 x 14 =  98    8 x 14 = 112    9 x 14 = 126   10 x 14 = 140
 7 x 15 = 105    8 x 15 = 120    9 x 15 = 135   10 x 15 = 150
 7 x 16 = 112    8 x 16 = 128    9 x 16 = 144   10 x 16 = 160
 7 x 17 = 119    8 x 17 = 136    9 x 17 = 153   10 x 17 = 170
 7 x 18 = 126    8 x 18 = 144    9 x 18 = 162   10 x 18 = 180
 7 x 19 = 133    8 x 19 = 152    9 x 19 = 171   10 x 19 = 190

11 x  1 =  11   12 x  1 =  12   13 x  1 =  13   14 x  1 =  14   15 x  1 =  15
11 x  2 =  22   12 x  2 =  24   13 x  2 =  26   14 x  2 =  28   15 x  2 =  30
11 x  3 =  33   12 x  3 =  36   13 x  3 =  39   14 x  3 =  42   15 x  3 =  45
11 x  4 =  44   12 x  4 =  48   13 x  4 =  52   14 x  4 =  56   15 x  4 =  60
11 x  5 =  55   12 x  5 =  60   13 x  5 =  65   14 x  5 =  70   15 x  5 =  75
11 x  6 =  66   12 x  6 =  72   13 x  6 =  78   14 x  6 =  84   15 x  6 =  90
11 x  7 =  77   12 x  7 =  84   13 x  7 =  91   14 x  7 =  98   15 x  7 = 105
11 x  8 =  88   12 x  8 =  96   13 x  8 = 104   14 x  8 = 112   15 x  8 = 120
11 x  9 =  99   12 x  9 = 108   13 x  9 = 117   14 x  9 = 126   15 x  9 = 135
11 x 10 = 110   12 x 10 = 120   13 x 10 = 130   14 x 10 = 140   15 x 10 = 150
11 x 11 = 121   12 x 11 = 132   13 x 11 = 143   14 x 11 = 154   15 x 11 = 165
11 x 12 = 132   12 x 12 = 144   13 x 12 = 156   14 x 12 = 168   15 x 12 = 180
11 x 13 = 143   12 x 13 = 156   13 x 13 = 169   14 x 13 = 182   15 x 13 = 195
11 x 14 = 154   12 x 14 = 168   13 x 14 = 182   14 x 14 = 196   15 x 14 = 210
11 x 15 = 165   12 x 15 = 180   13 x 15 = 195   14 x 15 = 210   15 x 15 = 225
11 x 16 = 176   12 x 16 = 192   13 x 16 = 208   14 x 16 = 224   15 x 16 = 240
11 x 17 = 187   12 x 17 = 204   13 x 17 = 221   14 x 17 = 238   15 x 17 = 255
11 x 18 = 198   12 x 18 = 216   13 x 18 = 234   14 x 18 = 252   15 x 18 = 270
11 x 19 = 209   12 x 19 = 228   13 x 19 = 247   14 x 19 = 266   15 x 19 = 285

16 x  1 =  16   17 x  1 =  17   18 x  1 =  18   19 x  1 =  19
16 x  2 =  32   17 x  2 =  34   18 x  2 =  36   19 x  2 =  38
16 x  3 =  48   17 x  3 =  51   18 x  3 =  54   19 x  3 =  57
16 x  4 =  64   17 x  4 =  68   18 x  4 =  72   19 x  4 =  76
16 x  5 =  80   17 x  5 =  85   18 x  5 =  90   19 x  5 =  95
16 x  6 =  96   17 x  6 = 102   18 x  6 = 108   19 x  6 = 114
16 x  7 = 112   17 x  7 = 119   18 x  7 = 126   19 x  7 = 133
16 x  8 = 128   17 x  8 = 136   18 x  8 = 144   19 x  8 = 152
16 x  9 = 144   17 x  9 = 153   18 x  9 = 162   19 x  9 = 171
16 x 10 = 160   17 x 10 = 170   18 x 10 = 180   19 x 10 = 190
16 x 11 = 176   17 x 11 = 187   18 x 11 = 198   19 x 11 = 209
16 x 12 = 192   17 x 12 = 204   18 x 12 = 216   19 x 12 = 228
16 x 13 = 208   17 x 13 = 221   18 x 13 = 234   19 x 13 = 247
16 x 14 = 224   17 x 14 = 238   18 x 14 = 252   19 x 14 = 266
16 x 15 = 240   17 x 15 = 255   18 x 15 = 270   19 x 15 = 285
16 x 16 = 256   17 x 16 = 272   18 x 16 = 288   19 x 16 = 304
16 x 17 = 272   17 x 17 = 289   18 x 17 = 306   19 x 17 = 323
16 x 18 = 288   17 x 18 = 306   18 x 18 = 324   19 x 18 = 342
16 x 19 = 304   17 x 19 = 323   18 x 19 = 342   19 x 19 = 361



Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,

소스 파일명: testWhileCPP.cpp

  1. /*
  2.  * Filename: testWhileCPP.cpp
  3.  *
  4.  * Purpose:  Example using the while loop syntax
  5.  *               while ....
  6.  *
  7.  * Compile:  cl -EHsc testWhileCPP.cpp
  8.  *
  9.  * Execute:  testWhileCPP -200 300
  10. */
  11. #include <iostream>
  12. #include <cmath>
  13. using namespace std;
  14. // 사용법 표시
  15. void printUsage() {
  16.     cout << "Using: testWhileCPP [integer1] [integer2]" << endl;
  17.     cout << "This finds the greatest common divisor of the given two integers." << endl;
  18. }
  19. int main(int argc, char *argv[]) {
  20.     long val1, val2;
  21.     long a, b, q, r, gcd;
  22.     if (argc != 3) {
  23.         printUsage();
  24.         exit(1);
  25.     }
  26.     // 명령행 인자의 두 스트링을 가져와서
  27.     // 긴정수(long) 타입으로 변환하여
  28.     // 변수 val1과 val2에 저장한다.
  29.     val1 = atoi(argv[1]);
  30.     val2 = atoi(argv[2]);
  31.     // a는 |val1|, |val2| 중 큰 값
  32.     a = abs(val1);
  33.     b = abs(val2);
  34.     if (a < b) {
  35.         a = abs(val2);
  36.         b = abs(val1);
  37.     }
  38.     if (b == 0L) {
  39.         cout << "GCD(" << val1 << ", " << val2 << ") = " << a << endl;
  40.         exit(0);
  41.     }
  42.     // -------------------------------------------
  43.     // Euclidean 알고리즘의 시작
  44.     //
  45.     // a를 b로 나누어 몫은 q에, 나머지는 r에 저장
  46.     q = a / b;
  47.     r = a % b;
  48.     // Euclidean 알고리즘의 반복 (나머지 r이 0이 될 때 까지)
  49.     while (r != 0L) {
  50.         a = b;
  51.         b = r;
  52.         q = a / b;
  53.         r = a % b;
  54.     }
  55.     // 나머지가 0이면 그 때 나눈 수(제수) b가 최대공약수(GCD)이다.
  56.     gcd = b;
  57.     // 최대공약수(GCD)를 출력한다.
  58.     cout << "GCD(" << val1 << ", " << val2 << ") = " << gcd << endl;
  59.     return 0;
  60. }



컴파일:

Command> cl -EHsc testWhileCPP.cpp


실행:

Command> testWhileCPP
Using: testWhileCPP [integer1] [integer2]
This finds the greatest common divisor of the given two integers.

Command> testWhileCPP 200 -300
GCD(200, -300) = 100

Command> testWhileCPP 0 -300
GCD(0, -300) = 300

Command> testWhileCPP 20 -125
GCD(20, -125) = 5

Command> testWhileCPP 121 66
GCD(121, 66) = 11

Command> testWhileCPP -111 -37
GCD(-111, -37) = 37




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,

소스 파일명: testIfCPP.cpp

  1. #include <iostream>
  2. #include <cmath>        // atof() 함수 사용을 위해
  3. using namespace std;    // cout 사용을 위해
  4. // 사용법 표시 함수
  5. void printUsing() {
  6.     cout << "Using: testIfCPP [number]\n";
  7.     cout << "This determines whether the number is positive or not.\n";
  8. }
  9. // main 함수
  10. int main(int argc, char *argv[]) {
  11.     float val;
  12.     if (argc != 2) {
  13.         printUsing();
  14.         exit(1);
  15.         return 1;
  16.     }
  17.     // 명령행 인자의 스트링을 가져와서
  18.     // 배정밀도 부동소수점수로 변환하여
  19.     // 변수 val에 저장한다.
  20.     val = atof(argv[1]);
  21.     // 변수 val에 저장된 값이 양수인지 음수인지 0인지를
  22.     // 판단하는 if...else... 조건문
  23.     if (val > 0.0)
  24.         cout << val << " is a positive number.\n";
  25.     else if (val < 0.0)
  26.         cout << val << " is a negative number.\n";
  27.     else
  28.         cout << val << " is zero.\n";
  29.     return 0;
  30. }

컴파일> cl /GX testIfCPP.cpp

실행> testIfCPP
Using: testIfCPP [number]
This determines whether the number is positive or not.

실행> testIfCPP 1.234
1.234 is a positive number.

실행> testIfCPP 1.234
-1.234 is a negative number.

실행> testIfCPP 0
0 is zero.



※ Ch 5.5를 사용하여 컴피일 과정 없이 소스를 실행시키려면 인클루드문

        #incldue <cmath>



        #incldue <math.h>

로 고치면 된다. 그대신 부동소수점수의 출력이 다소 다르다.



실행> ch testIfCPP.cpp
Using: testIfCPP [number]
This determines whether the number is positive or not.

실행> ch testCPP.cpp 2.7
2.7000 is a positive number.

실행> ch testCPP.cpp -2.7
-2.7000 is a negative number.

실행> ch testCPP.cpp 0
0 is zero.




Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,
소스 파일명: testArgumentsCPP.cpp
  1. #include <iostream>  // cout 함수와 endl 문자의사용을 위해
  2. #include <cmath>     // atof 함수 사용을 위해
  3. using namespace std;
  4. // argc는 명령행 인자 개수, argv는 명령행 인자 문자열의 배열
  5. int main(int argc, char *argv[]) {
  6.     int i;
  7.     double sum = 0.0;    // 초기화
  8.     // 명령행 인자(command-line argument) 개수 출력
  9.     cout << "Count of arguments: " << argc << endl;
  10.     for (i = 0; i < argc; i++) {
  11.         // 스트링을 배정밀도 부동소수점수로 변환하여 누적
  12.         sum += atof(argv[i]);
  13.     }
  14.     // 배정밀도 부동소수점수 값을 cout로 출력
  15.     cout << "The sum of arguments is " << sum << endl;
  16.     return 0;
  17. }


컴파일> cl -GX testArgumentsCPP.cpp

실행> testArgumentsCPP 1 2 3 4
Count of arguments: 5
The sum of arguments is 10

실행> testArgumentsCPP 1 2 3 4.1
Count of arguments: 5
The sum of arguments is 10.1





Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by Scripter
,
<iostream.h>는 C++의 표준안이 확립되기 전에, 관습처럼 사용되던 표준 입출력 라이브러리의 헤더였습니다. 현재의 C++표준안이 확립된 것은 1998년으로, 최초의 C++표준 문서는 ISO/IEC 14882:1998 이었죠. 따라서, 1998년 이전에 출시된 개발 툴은 관습적으로 <iostream.h>헤더를 포함하여 나왔습니다.



표준안 논의 과정에서 네임스페이스가 포함되고, 모든 표준 라이브러리의 요소를 std 네임스페이스에 넣어야 한다고 결정함에 따라, 기존 헤더에 선언되어 있던 전역 요소들 때문에 더이상 같은 파일이름을 사용해서는 안되는 상황이 된 것이죠. 즉, 어떤 환경에서는 <iostream.h>파일을 포함하면 cout이 std 네임스페이스에 소속되어 있어서 cout 이라는 이름을 사용자가 사용하였는데, 다른 환경에서는 표준 스트림 라이브러리의 cout이 전역에 소속되어 있다면, 당연히 컴파일시 에러를 내겠죠. 이러한 문제 때문에 기존에 사용되던 모든 C++표준 라이브러리에 있던 모든 요소는 std 네임스페이스에 넣고 .h 확장자를 제거하여 헤더를 제공하는 것으로 표준안이 마련되었습니다. 더불어 기존 C 표준라이브러리의 요소 역시 std 네임스페이스에 소속시키고, .h확장자를 제거하고 c접두어를 붙인 헤더에 담아 제공하게 되죠. 즉, <stdio.h> => <cstdio> , <math.h> => <cmath> 와 같은 식의 헤더 역시 기존 C스타일 헤더와 더불어 제공합니다. 물론, C++표준 라이브러리의 헤더는 확장자가 없는 표준 헤더만을 제공하죠.



결론적으로, .h 확장자가 붙는 헤더는 과거, 1998년 이전의 관습을 따르던 것이며, .h확장자가 없는 것이 1998년에 제정된 표준을 따르는 표준 헤더입니다. 이 두 헤더 사이의 결정적인 차이점은, 구성 요소의 이름이 std네임스페이스에 소속되어 있느냐 아니냐의 차이이죠. 표준헤더(<iostream>)는 std 네임스페이스에 선언되어 있으며, 이전의 관습적 헤더(<iostream.h>)는 전역으로 선언되어 있습니다.


<iostream>을 선언하고
using namespace std; 를 사용하면 cin cout을 사용할 수 있다.

<iostream>만 선언할 경우에는 scanf, printf와 같은 함수를 사용할 수 있다.

Posted by Scripter
,

Visual C++ 2005 Express Edition에서 Win32어플리케이션을
만들기위해서는 몇가지 설정을 해주어야된다.

1) 먼저 Visual C++ 2005 Express Edition 다운로드해서 셋업한다.

2) Microsoft Platform SDK를 다운로드해서 셋업한다.

3) 패스를 설정한다.
  Visual C++ 2005 Express Edition을 시작해서 툴 > 옵션 > 프로젝트 및 솔루션 > VC++ 디렉토리에
  Microsoft Platform SDK의 Bin, Includem lib의 패스를 추가한다.

4) 라이브러리 추가
  C:\Program Files\Microsoft Visual Studio 8\VC\VCProjectDefaults
     \corewin_express.vsprops의 AdditionalDependencies의 kernel32.dll의 뒤에
  반각 스페이스를 넣어서 user32.lib gdi32.lib winspool.lib comdlg32.dll advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib 를 추가한다.

5) Win32 템플레이트의 유효화
  C:\Program Files\Microsoft Visual Studio 8\VC\VCWizards\AppWiz\Generic
     \Application\html\1041\AppSettings.htm

    //WIN_APP.disabled=true;
    //WIN_APP_LABEL.disabled=true;
    //DLL_APP.disabled=true;
    //DLL_APP_LABEL.disabled=tu\rue;

  위의 네줄을 코멘트처리한다.

6) 개발환경을 재기동하면 Visual C++ 2005 Express Edition에서 Win32 어플리케이션을
  만들 수 있게된다.

Posted by Scripter
,