Суть задания:
Реализовать класс Fraction для работы с дробными числами, число представлено двумя полями: целая часть (long int) и дробная часть (unsigned short int). Реализовать сложение, вычитание, умножение и сравнение.
Пример моей реализации:
class Fraction{
private:
long int integer;
unsigned short int fractional;
public:
void Read(){
cin >> integer;
cin >> fractional;
}
bool isEq(const Fraction& obj){
if(integer == obj.integer && fractional == obj.fractional){
return true;
}
else{
return false;
}
}
void Sum(const Fraction& obj){
integer += obj.integer;
fractional += obj.fractional;
}
void Display(){
cout << integer << "." << fractional << endl;
}
};
Вопрос: При сложении дробей может возникнуть ситуация, когда сумма дробной части превышает 1 (3.25 + 3.85 = 7.1 (В программе выходит 6.110)). Как реализовать корректное сложение дробной части?
Вопрос 2: Возможно ли представить дробную часть которая начинается с "0" (.001) используя unsigned short int?
Ваш класс должен выглядеть совершенно иначе, но все же ответ на первый вопрос. Нужно определять количество цифр у максимального числа, и после этого все легко:
void Sum(const Fraction& obj) {
integer += obj.integer;
unsigned short e = 10,
max = std::max(fractional, obj.fractional);
fractional += obj.fractional;
while (max > e)
e *= 10;
if (fractional > e) {
fractional %= e;
++integer;
}
}
Ответ на второй вопрос: возможно, но нужно хранить в классе количество этих нулей
Думаю, предполагается, что в дробной части хранятся сотые.
void Sum(const Fraction& obj) {
integer += obj.integer;
fractional += obj.fractional;
integer += fractional / 100;
fractional = fractional % 100;
}
cout << integer << "." << /* add 0 if needed */fractional << endl;
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Спустя неоднократные попытки анимировать круг со свойством stroke-dasharray, придумал вариант вложенности circle в circle:
У меня есть path SVG со следующими точками в атрибуте d
Есть задачаНаписать функцию, которая принимает время (часы, минуты, секунды) и выводит его на экран в формате «чч:мм:сс»