Загрузка данных


#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");
}