Загрузка данных
#ifndef MY_TYPE_H
#define MY_TYPE_H
// Структура рационального числа (дробь numerator / denominator)
struct Rational
{
int numerator; // Числитель
int denominator; // Знаменатель
// Конструкторы
Rational();
Rational(int num, int den);
// Методы работы с целым числом
void AddN(int number);
void SubN(int number);
void MultN(int number);
void DivN(int number);
};
// Функции для операций с двумя рациональными числами
Rational Add(Rational first, Rational second);
Rational Sub(Rational first, Rational second);
Rational Mult(Rational first, Rational second);
Rational Div(Rational first, Rational second);
#endif
#include "My_type.h"
// Конструктор по умолчанию: инициализация нулем (0 / 1)
Rational::Rational()
{
numerator = 0;
denominator = 1;
}
// Конструктор с параметрами с проверкой деления на ноль
Rational::Rational(int num, int den)
{
if (den == 0)
{
numerator = 0;
denominator = 1;
}
else
{
numerator = num;
denominator = den;
}
}
// Прибавление целого числа к дроби
void Rational::AddN(int number)
{
numerator = numerator + number * denominator;
}
// Вычитание целого числа из дроби
void Rational::SubN(int number)
{
numerator = numerator - number * denominator;
}
// Умножение дроби на целое число
void Rational::MultN(int number)
{
numerator = numerator * number;
}
// Деление дроби на целое число
void Rational::DivN(int number)
{
if (number != 0)
{
denominator = denominator * number;
}
}
// Сложение двух дробей: (a/b + c/d)
Rational Add(Rational first, Rational second)
{
Rational result;
result.numerator = first.numerator * second.denominator + second.numerator * first.denominator;
result.denominator = first.denominator * second.denominator;
return result;
}
// Вычитание двух дробей: (a/b - c/d)
Rational Sub(Rational first, Rational second)
{
Rational result;
result.numerator = first.numerator * second.denominator - second.numerator * first.denominator;
result.denominator = first.denominator * second.denominator;
return result;
}
// Умножение двух дробей: (a/b * c/d)
Rational Mult(Rational first, Rational second)
{
Rational result;
result.numerator = first.numerator * second.numerator;
result.denominator = first.denominator * second.denominator;
return result;
}
// Деление двух дробей: (a/b / c/d)
Rational Div(Rational first, Rational second)
{
Rational result;
if (second.numerator != 0)
{
result.numerator = first.numerator * second.denominator;
result.denominator = first.denominator * second.numerator;
}
else
{
result.numerator = 0;
result.denominator = 1;
}
return result;
}
#include <iostream>
#include <clocale>
#include "My_type.h"
using namespace std;
void main()
{
setlocale(LC_ALL, "Russian");
// 1. Проверка конструкторов
Rational defaultNumber;
cout << "По умолчанию: " << defaultNumber.numerator << "/" << defaultNumber.denominator << endl;
Rational validNumber(1, 2);
cout << "Созданное число: " << validNumber.numerator << "/" << validNumber.denominator << endl;
Rational zeroDenominator(3, 0);
cout << "При нулевом знаменателе: " << zeroDenominator.numerator << "/" << zeroDenominator.denominator << endl;
// 2. Проверка методов с числом N
int stepNumber = 3;
Rational currentNumber(1, 4);
cout << "\nИсходная дробь: " << currentNumber.numerator << "/" << currentNumber.denominator << endl;
currentNumber.AddN(stepNumber);
cout << "AddN(3): " << currentNumber.numerator << "/" << currentNumber.denominator << endl;
currentNumber.SubN(stepNumber);
cout << "SubN(3): " << currentNumber.numerator << "/" << currentNumber.denominator << endl;
currentNumber.MultN(stepNumber);
cout << "MultN(3): " << currentNumber.numerator << "/" << currentNumber.denominator << endl;
currentNumber.DivN(stepNumber);
cout << "DivN(3): " << currentNumber.numerator << "/" << currentNumber.denominator << endl;
// 3. Проверка функций для двух дробей
Rational fractionA(1, 3);
Rational fractionB(1, 6);
cout << "\nДробь A = " << fractionA.numerator << "/" << fractionA.denominator;
cout << ", Дробь B = " << fractionB.numerator << "/" << fractionB.denominator << endl;
Rational sumResult = Add(fractionA, fractionB);
cout << "Add: " << sumResult.numerator << "/" << sumResult.denominator << endl;
Rational subResult = Sub(fractionA, fractionB);
cout << "Sub: " << subResult.numerator << "/" << subResult.denominator << endl;
Rational multResult = Mult(fractionA, fractionB);
cout << "Mult: " << multResult.numerator << "/" << multResult.denominator << endl;
Rational divResult = Div(fractionA, fractionB);
cout << "Div: " << divResult.numerator << "/" << divResult.denominator << endl;
system("pause");
}