Поле first – целое положительное число, числитель; поле second – целое положительное число, знаменатель. реализовать метод nesokr ( ) – дроби first/second к несократимому виду. тема: классы, язык с++
247
445
Ответы на вопрос:
Код ниже, : 1. отметь ответ как лучший (поставь 5 звезд). 2. нажми кнопочку "" тут и в моем аккаунте, : ) (за 8 былов такое никто не делает кроме меня, , будь в ответ) код прокомментирован, за дополнительными вопросами или информацией прошу: * обращайся в комментарии, я отвечу на вопросы. * зайди ко мне в профиль, в моих записях ты найдешь ссылки на полезные ресурсы. file: cfraction.hpp #ifndef cfraction_hpp #define cfraction_hpp //это класс дроби, тут мы храним чеслитель, знаменатель и функцию 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_hpp file: 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; }
Сходства: то что они оба реагируют на изменения в поле действия датчика определённого типа
Различия: один из них реагирует на цвет, другой на звук
Реши свою проблему, спроси otvet5GPT
-
Быстро
Мгновенный ответ на твой вопрос -
Точно
Бот обладает знаниями во всех сферах -
Бесплатно
Задай вопрос и получи ответ бесплатно
Популярно: Информатика
-
Lilya14615.01.2020 08:14
-
Alla12348925.02.2021 18:22
-
Zloo602460027.02.2020 10:02
-
dibtdi22.02.2020 03:36
-
100719926.06.2021 10:46
-
Xopccc1337715.08.2021 12:31
-
Dyhanexis27.11.2022 05:59
-
Xopccc1337701.03.2020 02:18
-
azatnacu16.01.2021 02:27
-
Aleksandra2006114.12.2020 02:48
Есть вопросы?
-
Как otvet5GPT работает?
otvet5GPT использует большую языковую модель вместе с базой данных GPT для обеспечения высококачественных образовательных результатов. otvet5GPT действует как доступный академический ресурс вне класса. -
Сколько это стоит?
Проект находиться на стадии тестирования и все услуги бесплатны. -
Могу ли я использовать otvet5GPT в школе?
Конечно! Нейросеть может помочь вам делать конспекты лекций, придумывать идеи в классе и многое другое! -
В чем отличия от ChatGPT?
otvet5GPT черпает академические источники из собственной базы данных и предназначен специально для студентов. otvet5GPT также адаптируется к вашему стилю письма, предоставляя ряд образовательных инструментов, предназначенных для улучшения обучения.