• Поле first – целое положительное число, числитель; поле second – целое положительное число, знаменатель. Реализовать метод nesokr ( ) – приведение дроби first/second к несократимому виду. Тема: Классы, язык С++

Ответы 1

  • Привет, код задачи приведен ниже, пожалуйста:1. Отметь ответ как лучший (поставь 5 звезд).2. Нажми кнопочку "Спасибо" тут и в моем аккаунте, спасибо :)(За 8 былов такое никто не делает кроме меня, пожалуйста, будь благодарен в ответ)Код прокомментирован, за дополнительными вопросами или информацией прошу:* Обращайся в комментарии, я отвечу на вопросы.* Зайди ко мне в профиль, в моих записях ты найдешь ссылки на полезные ресурсы.FILE: CFraction.hpp#ifndef CFRACTION_HPP#define CFRACTION_HPP//Это класс дроби, тут мы храним чеслитель, знаменатель и функцию nesokr().class CFraction{   public:      CFraction();   //Конструктор класа      //"Геттеры" класса для получения значений приватных полей      const unsigned int& getNumerator() const;      const unsigned int& getDenumerator() const;      //"Сеттеры" класса для задани значений приватным полям      void setNumerator(const unsigned int& value);      void setDenumerator(const unsigned int& value);      //Функция заданная по заданию для сокращения дроби      void nesokr();   private:      //Функция реализующая поиск найбольшего общего делителя по алгоритму Евклида      const unsigned int getGreatestCommonDivisor() const;      //Функция проверяющая, есть ли необходимость искать НОД      const bool isRequireCalculationGCD() const;   private:      unsigned int mFirst;    //Поле для числителя      unsigned int mSecond;   //Поле для знаменателя};#endif //CFRACTION_HPPFILE: CFraction.cpp#include "CFraction.hpp"CFraction::CFraction(): mFirst(0)    //Числитель инициализируем нулем, mSecond(1)   //Знаменатель по умолчанию инициализируем единицей{}//Возращение значений происходит по константной ссылке.//Благодаря этому избегается копирование переменной,//а так же её модификация по ссылке.const unsigned int& CFraction::getNumerator() const{   return mFirst;}//Функция имеет в конце себя слово const сигнализирующее компилятору,//что метод не способен модифицировать поля класса.const unsigned int& CFraction::getDenumerator() const{   return mSecond;}//Передача аргумента в функцию так же реализуется по константной ссылке,//из тех же соображений что и возращение поля по константной ссылке.void CFraction::setNumerator(const unsigned int& value){   mFirst = value;}void CFraction::setDenumerator(const unsigned int& value){   //Проверяем значение на 0, знаменатель не может быть равнм нулю.   //Значение не проверяется на знак отрицания, по тому, что везде используется   //беззнаковый целочисленный тип данных unsigned int.   if (0 != value)   {      mSecond = value;   }}void CFraction::nesokr(){   //Если есть необходимость проводить расчёты и сокращать дробь, то   //находим НОД и делим на него чеслитель и знаменатель.   if ( isRequireCalculationGCD() )   {      unsigned int greatestCommonDivisor = getGreatestCommonDivisor();      mFirst /= greatestCommonDivisor;      mSecond /= greatestCommonDivisor;   }}const bool CFraction::isRequireCalculationGCD() const{   //Проверяем, не является, ли знаменатель равным единице,   //иначе нет смысла проводить безсмысленную работу, т.к. в любом случаи НОД   //будет единица, то же самое делаем с числителем.   return ( (1 != mSecond || 1 != mFirst) || (1 != mSecond && 1 != mFirst) );}const unsigned int CFraction::getGreatestCommonDivisor() const{   //Алгоритм поиска НОД называется алгоритмом Евклида   unsigned int remainder(1);   //Для его реадизации берем два числа и выделяем из них большее и меньшее.   unsigned int gretestNumber = (mFirst > mSecond ? mFirst : mSecond);   unsigned int leastNumber   = (mFirst < mSecond ? mFirst : mSecond);   while (0 != remainder)   {      remainder = gretestNumber % leastNumber;      //Если остаток деления большего на меньшее равен нулю,      //то НОД является меньшее из этих чисел      if (0 != remainder)      {         //Если же остаток не равен нулю,         //то большим числом становится предыдущее меньшее,         //а меньшим становится остаток от леления.         gretestNumber = leastNumber;         leastNumber   = remainder;      }   }   return leastNumber;}FILE: main.cpp#include <iostream>#include "CFraction.hpp"int main(){   CFraction example;      example.setNumerator(15);   example.setDenumerator(255);      std::cout << "Fraction before simplification:" << std::endl;   std::cout << "Fraction numerator:   " << example.getNumerator() << std::endl;   std::cout << "Fraction denumerator: " << example.getDenumerator() << std::endl;      example.nesokr();   std::cout << "------------------------------" << std::endl;      std::cout << "Fraction after simplification:" << std::endl;   std::cout << "Fraction numerator:   " << example.getNumerator() << std::endl;   std::cout << "Fraction denumerator: " << example.getDenumerator() << std::endl;   return 0;}
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years