C++에서 생성자를 사용하여 분수에 대한 산술 연산
이 기사에서는 생성자를 사용하여 분수를 만드는 방법, 분수 배수를 줄이는 GCD를 찾는 방법, 계산을 수행하는 방법에 대해 설명합니다.
C++에서 생성자를 사용하여 분수에 대한 산술 연산
독자는 프로그램의 전제 조건을 이해해야 합니다. 생성자를 사용하여 분수를 만들려면,
- 분모는 0이 아니어야 합니다.
- 분자와 분모가 모두 서로 나눌 수 있는 경우 최소 배수로 줄여야 합니다.
- 프로그램은 결과가 새로운 데이터 멤버를 통해 저장되고 표시되도록 설계되어야 하며, 기존 변수는 변경되지 않아야 합니다.
이러한 조건은 프로그램을 실행 가능하게 만들고 분수를 올바르게 계산할 수 있게 합니다.
C++에서 생성자 선언 및 데이터 멤버 초기화
생성자는 다른 멤버 메서드와 상호 작용하고 서로 값을 전달합니다. 모든 생성자 프로그램의 첫 번째 단계는 가져오기 패키지를 로드하고 기본 생성자와 매개변수화된 생성자를 선언하는 것입니다.
-
패키지를 가져옵니다.
#include <iostream>
-
멤버 메소드
reduce()
는 분수를 가장 낮은 배수로 줄이는 데 사용됩니다.int reduce(int m, int n);
-
namespace std
는iostream
패키지에 사용됩니다.using namespace std;
-
클래스 이름은 멤버 메서드와 이름이 같아야 합니다.
class computefraction
-
기본 생성자
private
: 분수의 분자와 분모에 대한 두 개의 데이터 멤버가 있습니다.{ private: int topline; int bottomline;
-
매개변수화된 생성자
public:
이 이후에 선언됩니다. 기본 생성자의 데이터 멤버는 여기에서 동일한 데이터 유형(int tl = 0, int bl = 1)
을 가진 두 개의 새 변수로 초기화됩니다.
생성자 클래스에는 5개의 멤버 메서드가 있습니다. 첫번째. computefraction()
은 클래스 이름과 동일한 이름을 공유하고 축소 전후의 분수 값을 저장합니다.
값이 다른 멤버 메서드에 전달되기 전에 분수의 감소가 발생해야 합니다. 4가지 연산자 계산(더하기, 빼기, 곱하기 및 나누기)에 대해 4개의 멤버 메서드가 선언됩니다.
선언된 다른 두 멤버 메서드는 분수를 읽고 인쇄합니다.
public:
computefraction(int tl = 0, int bl = 1);
computefraction sum(computefraction b2) const;
computefraction minus(computefraction b2) const;
computefraction mult(computefraction b2) const;
computefraction rem(computefraction b2) const;
void show() const;
void see();
아래는 프로그램의 첫 부분을 나타낸 것입니다.
#include <iostream>
int reduce(int m, int n);
using namespace std;
class computefraction {
private:
int topline;
int bottomline;
public:
computefraction(int tl = 0, int bl = 1);
computefraction sum(computefraction b2) const;
computefraction minus(computefraction b2) const;
computefraction mult(computefraction b2) const;
computefraction rem(computefraction b2) const;
void show() const;
void see();
};
C++에서 작업을 수행하는 멤버 메서드 구현
C++에서 분수에 대한 산술 연산을 수행하는 멤버 메서드는 이 기사의 이 부분에서 구현됩니다.
C++에서 분수 클래스 연산자 오버로딩
이 프로그램에서 연산자는 두 분수의 값을 단일 개체에 맞추기 위해 모든 멤버 메서드에서 오버로드됩니다. 오버로딩은 내장 데이터형 대신 사용자 정의 데이터형을 사용하고 반환형을 변경해야 할 때 수행됩니다.
이것은 ::
범위 확인 연산자에 의해 달성됩니다. 특정 클래스에서 생성자의 지역 변수에 액세스합니다.
분수 값은 computefraction
생성자에 저장됩니다. 프로그램은 이 값을 다른 멤버 메서드에 전달하여 산술 연산을 수행하지만 먼저 분수를 줄여야 다른 멤버 메서드에 제공됩니다.
computefraction::computefraction(int tl, int bl)
구문은 computefraction
생성자의 지역 변수에 액세스하는 데 사용됩니다.
computefraction::computefraction(int tl, int bl) : topline(tl), bottomline(bl)
유사하게, 두 분수를 더하는 멤버 메소드에서 연산자 sum
은 두 분수의 값에 맞게 오버로드됩니다.
통사론:
return_method class_name::operator(argument)
이 구문은 computefraction
클래스에서 sum
연산자에 액세스하고 복사 개체 b2
로 오버로드하고 최종 결과를 생성자 computefraction
에 반환합니다.
computefraction computefraction::sum(computefraction b2) const
C++에서 분수의 GCD를 찾는 멤버 메서드
gcd
함수는 분수 배수를 줄이기 위해 GCD를 찾습니다. 분자와 분모는 int m
과 int n
의 두 데이터 멤버입니다.
함수는 처음에 값이 음수인지 양수인지 확인합니다. 분자나 분모가 음수이면 m = (m < 0) ? -m : m;
.
이 함수는 변수 m
과 n
중에서 더 높은 값을 비교하여 분수 배수를 줄이기 위한 GCD를 찾습니다. 더 큰 값이 변수 n
에 저장되면 m
으로 바뀝니다.
함수는 더 높은 값이 항상 변수 m
에 저장되도록 설계되었습니다. 이 기능은 m
이 0으로 줄어들 때까지 높은 값에서 낮은 값을 뺍니다.
마지막으로 n
변수에 남아 있는 값은 GCD이며 반환됩니다.
int gcd(int m, int n) {
m = (m < 0) ? -m : m;
n = (n < 0) ? -n : n;
while (m > 0) {
if (m < n) {
int bin = m;
m = n;
n = bin;
}
m -= n;
}
return n;
}
C++에서 분수의 분자와 분모를 줄이는 멤버 메서드
분자와 분모를 GCD로 나누어 분수를 줄입니다.
여기에서 분자에 대한 topline
과 분모에 대한 bottomline
의 두 변수가 초기화됩니다.
if-else
조건은 변수 bottomline
값을 확인합니다. 값이 0이면 프로그램이 오류 메시지와 함께 종료됩니다.
정수 변수 reduce
는 gcd
메서드에서 반환된 두 숫자의 GCD를 저장하기 위해 초기화됩니다.
그런 다음 reduce
에 저장된 값을 topline
과 bottomline
에서 나누어 결과를 동일한 변수에 다시 저장합니다.
computefraction::computefraction(int tl, int bl) : topline(tl), bottomline(bl) {
if (bl == 0) {
cout << "You cannot put 0 as a denominator" << endl;
exit(0); // program gets terminated
} else
bottomline = bl;
int reduce = gcd(topline, bottomline);
topline /= reduce;
bottomline /= reduce;
}
C++에서 두 개의 분수를 추가하는 멤버 메서드 만들기
계산 작업에 사용되는 모든 메서드는 복사 생성자와 같은 복사 개체를 만듭니다. 이는 computefraction computefraction::sum(bounty b2) const
구문으로 수행됩니다.
bounty b2
키워드는 b2
사본 객체를 생성합니다. 복사 객체를 만드는 것은 추가 변수를 초기화하지 않고 두 번째 분수에 대해 객체를 재사용하는 것입니다.
두 분수 a/b와 c/d를 더하는 방정식은 다음과 같습니다.
변수 int tl
은 분자의 결과를 저장하고 int bl
은 분모의 결과를 저장합니다. 마지막으로 tl
및 bl
이 전달됩니다.
computefraction computefraction::sum(bounty b2) const {
int tl = topline * b2.bottomline + b2.topline * bottomline;
int bl = bottomline * b2.bottomline;
return computefraction(tl, bl);
}
다른 멤버 메서드도 같은 방식으로 생성됩니다. 이를 확인하기 위해 독자는 이 기사의 최종 프로그램으로 이동할 수 있습니다.
C++에서 생성자를 사용하여 주요 기능을 구현하는 방법
모든 멤버 메서드가 생성되면 프로그램이 전달된 값을 반환하고 표시할 수 있도록 main()
함수를 작성해야 합니다.
이 프로그램은 최종 사용자에게 다음과 같은 순서로 선택과 응답을 제공하는 방식으로 작성되어야 합니다.
- 덧셈, 뺄셈 등 연산자를 선택하는 옵션
- 선택이 잘못되어 프로그램이 다시 로드되면 예외를 던집니다.
- 올바른 선택이 주어지면 사용자는 첫 번째 분수의 분자와 분모를 입력하고 두 번째 분수를 입력해야 합니다.
- 분모에 0을 삽입하고 종료하면 오류 예외가 발생합니다.
- 입력이 정확하면 프로그램은 결과를 최종 응답으로 제공합니다.
- 프로그램이 1단계로 다시 로드됩니다.
주요 기능에 대한 지역 변수 및 생성자 객체 초기화
메뉴 구동 프로그램으로 char 변수 ch
가 선언됩니다. 세 개의 객체가 선언되었습니다. up
은 첫 번째 분수를 전달하고 저장하고 down
은 두 번째 분수를 저장하고 final
은 두 분수의 결과를 표시합니다.
int main() {
char ch;
computefraction up;
computefraction down;
computefraction final;
}
Do While
루프를 사용하여 메뉴 기반 조건 구현
이 프로그램은 do-while
루프에서 5개의 메뉴 기반 케이스와 기본 케이스를 사용합니다. 처음 네 가지 경우는 계산 작업을 수행하고 다섯 번째 경우는 종료 옵션을 위해 예약되어 있습니다.
default
는 범위를 벗어난 선택에 대해 정의됩니다. 프로그램은 사용자가 다섯 번째 경우를 선택하여 프로그램을 종료할 때까지 루프에서 실행됩니다.
do {
switch (ch) {
case '1':
cout << "first fraction: ";
up.see();
cout << "Second fraction: ";
down.see();
final = up.sum(down);
final.show();
break;
... case '5':
break;
default : cerr << "Choice is out of scope" << ch << endl;
break;
}
} while (ch != '5');
C++에서 생성자를 사용하여 분수를 계산하는 완전한 코드
// import package
#include <iostream>
// member method to find gcd, with two data members
int gcd(int m, int n);
using namespace std;
class computefraction {
// Default constructor
private:
int topline;
int bottomline;
// Parameterized Constructor
public:
computefraction(int tl = 0, int bl = 1);
computefraction sum(computefraction b2) const;
computefraction minus(computefraction b2) const;
computefraction mult(computefraction b2) const;
computefraction rem(computefraction b2) const;
void show() const;
void see();
};
// Member methods of class type bounty.
// In constructors, the class and constructor names must be the same.
computefraction::computefraction(int tl, int bl) : topline(tl), bottomline(bl) {
if (bl == 0) {
cout << "You cannot put 0 as a denominator" << endl;
exit(0); // program gets terminated
} else
bottomline = bl;
// Below codes reduce the fractions using gcd
int reduce = gcd(topline, bottomline);
topline /= multiple;
bottomline /= multiple;
}
// Constructor to add fractions
computefraction computefraction::sum(computefraction b2) const {
int tl = topline * b2.bottomline + b2.topline * bottomline;
int bl = bottomline * b2.bottomline;
return computefraction(tl, bl);
}
// Constructor to subtract fractions
computefraction computefraction::minus(computefraction b2) const {
int tl = topline * b2.bottomline - b2.topline * bottomline;
int bl = bottomline * b2.bottomline;
return computefraction(tl, bl);
}
// Constructor to multiply fractions
computefraction computefraction::mult(computefraction b2) const {
int tl = topline * b2.topline;
int bl = bottomline * b2.bottomline;
return computefraction(tl, bl);
}
// Constructor to divide fractions
computefraction computefraction::rem(computefraction b2) const {
int tl = topline * b2.bottomline;
int bl = bottomline * b2.topline;
return computefraction(tl, bl);
}
// Method to print output
void computefraction::show() const {
cout << endl << topline << "/" << bottomline << endl;
}
// Method to read input
void computefraction::see() {
cout << "Type the Numerator ";
cin >> topline;
cout << "Type the denominator ";
cin >> bottomline;
}
// GCD is calculated in this method
int gcd(int m, int n) {
m = (m < 0) ? -m : m;
n = (n < 0) ? -n : n;
while (m > 0) {
if (m < n) {
int bin = m;
m = n;
n = bin;
}
m -= n;
}
return n;
}
// Main Function
int main() {
char ch;
computefraction up;
computefraction down;
computefraction final;
do {
cout << " Choice 1\t Sum\n";
cout << " Choice 2\t Minus\n";
cout << " Choice 3\t multiply\n";
cout << " Choice 4\t Divide\n";
cout << " Choice 5\t Close\n";
cout << " \nEnter your choice: ";
cin >> ch;
cin.ignore();
switch (ch) {
case '1':
cout << "first fraction: ";
up.see();
cout << "Second fraction: ";
down.see();
final = up.sum(down);
final.show();
break;
case '2':
cout << "first fraction: ";
up.see();
cout << "Second fraction: ";
down.see();
final = up.minus(down);
final.show();
break;
case '3':
cout << "first fraction: ";
up.see();
cout << "Second fraction: ";
down.see();
final = up.sum(down);
final.show();
break;
case '4':
cout << "first fraction: ";
up.see();
cout << "Second fraction: ";
down.see();
final = up.mult(down);
final.show();
break;
case '5':
break; // exits program.
default:
cerr << "Choice is out of scope" << ch << endl;
break;
}
} while (ch != '5'); // program stops reloading when choice 5 is selected
return 0;
}
출력:
Choice 1 Sum
Choice 2 Minus
Choice 3 multiply
Choice 4 Divide
Choice 5 Close
Enter your choice: 2
first fraction: Type the Numerator 15
Type the denominator 3
Second fraction: Type the Numerator 14
Type the denominator 7
3/1
Choice 1 Sum
Choice 2 Minus
Choice 3 multiply
Choice 4 Divide
Choice 5 Close
Enter your choice: 3
first fraction: Type the Numerator 5
Type the denominator 0
Second fraction: Type the Numerator 6
Type the denominator 8
You cannot put 0 as a denominator
--------------------------------
Process exited after 47.24 seconds with return value 0
Press any key to continue . . .