관리 메뉴

Kim's Programming

구구단 세로로 출력(수정) 본문

Programming/기타 소스

구구단 세로로 출력(수정)

Programmer. 2015. 9. 12. 00:13

구구단을 세로로 포인터, 배열, 구조체, 클래스를 이용하여 출력하는데 조금더 객체지향적으로 작성한 소스입니다.


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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<string>
using namespace std;
 
struct String//문자열 저장용 구조체
{
    int init = 0;
    char str[30];
    char temp[30];
    void input(char *cha)
    {
        strcpy(str, cha);
    }
    void out()
    {
        cout << str;
    }
};
 
class MyClass//계산 입 입력
{
public:
    //변수
    char _itoa_buffer[50];
    String str_C[2000];
    String *pStr_C = str_C;
    //생성 초기화
    MyClass(int MAX_3, int DAN, int START);//초기화용 생성자
    ~MyClass();
 
    int max_return();//최대 통제용 함수
    string Make_Mutlplication_String(int Num_1, int Num_2, char Buffer[]);//곱셈식 개별 생성 함수
    void Array_Copy_Struct2Stuct(String *Dest_Str, String *Copy_Str, int MAX);//구조체 배열 복사 함수
    void Making();//곱셉 집단 출력 3배수 단위
 
    void Array_Initializer(char Str[], int MAX);//배열 초기화용 함수
    
 
    
    void Output(String *Str, int count);//출력용 함수
    
private:
    int start;
    int max;
    int dan;
};
void main()
{
    int count = 0;
    cout << "입력 숫자 3배수의 구구단까지 출력" << endl;
    cin >> count;
    cout << endl;
 
    MyClass My(count, 9,1);//3배수, 9단까지, 1부터
    MyClass *= &My;
 
    String str[2000]; //STR 선언
    String *pString = str; //STR 포인터 참조
 
    M->Making();
    M->Array_Copy_Struct2Stuct(pString, M->str_C, 2000);
    M->Output(pString, M->max_return());
}
MyClass::MyClass(int MAX_3, int DAN, int START)
{
    dan = DAN;
    max = MAX_3 + 1;
    start = START;
}
MyClass::~MyClass(){}
void MyClass::Making()
{
    for (int z = 1; z < max; z++)//3의 배수로 어디까지 뽑을 것인가.
    {
        for (int i = 1; i <=dan ; i++)//몇 단 까지 할것인지를 결정
        {
            for (int j = start; j < start + 3; j++)//현재 출력중 배수 3배수 단위
            {
                strcpy(pStr_C->str, Make_Mutlplication_String(j,i,_itoa_buffer).c_str());
                pStr_C++;
            }
        }
        start += 3;//다음 배수 출력용
    }
}
void MyClass::Output(String *Str, int count)//구조체 출력 9개식 3개 묶음 씩 출력
{
    int line = 0;
    for (int i = 0; i < (count-1* 9; i++)
    {
        for (int i = 0; i < 3; i++)
        {
            Str->out();
            Str++;
            line++;
            if (line % 27 == 0)
                cout << endl;
        }
        cout << endl;
    }
}
 
void MyClass::Array_Initializer(char Str[], int MAX)
{
    for (int i = 0; i < 50; i++)
    {
        Str[i] = NULL;
    }
}
void MyClass::Array_Copy_Struct2Stuct(String *Dest_Struct, String *Copy_Struct, int MAX)
{
    for (int i = 0; i < MAX; i++)
    {
        Dest_Struct[i] = Copy_Struct[i];
    }
}
string MyClass::Make_Mutlplication_String(int Num_1, int Num_2, char Buffer[])
{
    char Temp[50];
    Array_Initializer(Temp, strlen(Temp));
    strcat(Temp, _itoa(Num_1, Buffer, 10));
    strcat(Temp, " * ");
    strcat(Temp, _itoa(Num_2, Buffer, 10));
    strcat(Temp, " = ");
    strcat(Temp, _itoa(Num_1*Num_2, Buffer, 10));
    strcat(Temp, "  ");
    return Temp;
}
int MyClass::max_return()
{
    return max;
}
cs