Форум программистов, компьютерный форум CyberForum.ru

Создать класс с именем Rational для выполнения арифметических действий с дробями - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Помогите переписать с C# на c++ http://www.cyberforum.ru/cpp-beginners/thread335936.html
Помогите переписать на c++. хоть языки чем то похожи, однако я не доконца понял. В архиве есть всё, что нужно для работы, в том числе уже скомпилированное приложение. Но мне c++ надо. Если нетрудно перепишите плз.
C++ Помощь в обучении программированию доброго здравия всем форумчанам! я самостоятельно изучаю С++(по книге Дейтла и Дейтла), стараюсь понять и вникнуть во все самостоятельно, много гуглю, но бывают моменты, когда то, что написано в каком-либо источнике, до конца не ясно, а задавать вопросы в письменном виде здесь на форуме иногда бывает не просто, так как сформулировать мысль письменно о чем-то непонятном гораздо сложнее чем... http://www.cyberforum.ru/cpp-beginners/thread335935.html
C++ Floating point overflow
помогите с проблемой-создал программу для вычисления уравнений с двумя неизвестными и выдает ошибку Floating point overflow вот кодvoid __fastcall TForm1::Button1Click(TObject *Sender) { int x,y,n,x1,x2,y1,y2,y3,b1,b2,b3,otvetx,otvety,otvety1; float mnog; x=StrToInt(Edit1->Text); x2=StrToInt(Edit3->Text); y=StrToInt(Edit2->Text); y2=StrToInt(Edit5->Text); n=StrToInt(Edit4->Text);...
C++ Повреждение автомобиля: реализация с помощью ООП
как лучше реализовать идею... к примеру движение автомобиля и столкновение с препятствием и выводом в консоли (Ваш авто поврежден) или ... как еще...
C++ перебор чисел и умножение http://www.cyberforum.ru/cpp-beginners/thread335879.html
помогите плиз,делаю программу для вычисления уравнений с двумя неизвестными и мне надо перебирать числа по тысячным т.е. 0.001;0.002 и т. д. и умножать переменную на эти числа получилось только такое mnog=1; {begin:; mnog++; mnog*x1; mnog*y1; mnog*b1; if(x1!=x2);goto begin;} заранее спасибо и не судите строго)) я новичок
C++ номер объекта Недавно начал изучать классы , и возник такой вопрос: Как создать класс с двумя полями, где одно поле хранит порядковый номер, а второе общее кол-во объектов. подробнее

Показать сообщение отдельно
soft.creator
 Аватар для soft.creator
103 / 103 / 4
Регистрация: 17.10.2010
Сообщений: 283
25.07.2011, 00:44     Создать класс с именем Rational для выполнения арифметических действий с дробями
Цитата Сообщение от aquarius-a Посмотреть сообщение
to ValeryS: нормализацию дроби я еще не дописал, так как споткнулся о вышеуказанную ошибку.
вы бы не могли объяснить, что значит конструктор копирования? и что значит "класс Rational должен содержать представление одного числа, а не трех"?
Про конструктор копирования пока не забивайте себе голову, хотя будет время - обязательно почитайте. Очень хорошо объяснено в "C++ для чайников" Дэвиса, не пугайтесь названия книги, она очень толковая.

А по поводу трех постараюсь объяснить - это принципиальный момент. Смотрите.
С точки зрения реального мира или предметной области рациональное число - это отношение числителя к знаменателю. Экземпляр (ну, просто отдельная переменная) класса Rational должен моделировать одно рациональное число. Поэтому внутри класса Rational, который я привел как пример, есть только один числитель и знаменатель.
В Вашем же варианте один класс Rational хранит внутри данные двух исходных чисел и одного результата, то есть фактически три числителя и три знаменателя. Недостатки такого подхода:
- Любой, кто будет разбираться в Вашем коде, будет вынужден выяснять, какое поле к чему относится. А код должен быть понятен читающему.
- Ваш класс пытается решить слишком много задач сразу. Тут и ввод значения знаменателя, если он нулевой, и хранение двух исходных чисел, и хранение результата.
- К тому же, Ваш вариант годится только для решения одной конкретной задачи. А если на сдаче лабы препод попросит сложить два числа и умножить их на третье? Я бы попросил

Если Вы обратите внимание, как реализована функция plus у меня, она просто принимает на вход другое рациональное число, формирует третье и возвращает его как результат. Как видите, здесь все достаточно просто написано и понятно любому читающему. К тому же, можно строить таким образом сложные выражения, наподобие:
C++
1
2
3
4
Rational a, b, c, d;
// ... вводим a, b, c ...
Rational tmp = a.plus(b);
d = tmp.mult(c);
Получаем d = (a+b)*c
 
Текущее время: 13:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru