![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
управляемый код? ну да ладно...
про устройство рациональных чисел вы что-то молчите... |
|||
|
||||
DarkinRal |
|
|||
![]() This_IS_300 Профиль Группа: Участник Сообщений: 14 Регистрация: 27.11.2013 Где: Ukraine/Kremenchu k Репутация: нет Всего: нет |
||||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
очень хорошо. давайте их обозначим p и q соответственно.
значит в реализации класса должны присутствовать два члена, в которых будут храниться значения p и q. надо определиться, какого они типа, и добавить их в класс - в приватную секцию (выше "public"). ими мы и будем манипулировать, реализуя методы класса. |
|||
|
||||
DarkinRal |
|
|||
![]() This_IS_300 Профиль Группа: Участник Сообщений: 14 Регистрация: 27.11.2013 Где: Ukraine/Kremenchu k Репутация: нет Всего: нет |
VS показует ошибки в функции константы.ToString() просит поставить ; operator - функция преобразования должна быть нестатической функциией-членом |
|||
|
||||
baldina |
|
||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
функции-члены класса должны быть объявлены в теле класса. посчитайте скобочки.
определение класса должно заканчиваться точкой с запятой. Данные класса p и q определены, прекрасно. Как будут устанавливаться их начальные значения? Для этого служат специальные функции-члены - конструкторы. Это функции одноименные с классом, вызываются в момент объявления переменной.
нам понадобится конструктор вида Frac (int p=0, int q=1) параметры по умолчанию полезны тем, что мы сможем объявлять переменные не только как
теперь определение операций. давайте с легкого начнем. сумма двух рациональных чисел p1/q1+p2/q2= (p1*q2+p2*q1)/(q1*q2). значит функцию operator+= можно определить так:
Минус можно реализовать через плюс
остальные делаете аналогично. Как справитесь, поговорим о нормализации числа |
||||||||||
|
|||||||||||
DarkinRal |
|
|||
![]() This_IS_300 Профиль Группа: Участник Сообщений: 14 Регистрация: 27.11.2013 Где: Ukraine/Kremenchu k Репутация: нет Всего: нет |
Только не понял,что там в конструкторе надо объявить. и надо ли там операции == и != ? |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
DarkinRal, объявляя функцию в классе не надо писать Frac::
Этот префикс нужен только для определений вне класса, для указания к какому классу относится функция. Вы бы хоть попробовали откомпилировать код. Добавлено @ 14:37 где там? все уже написано вроде как правильно. в конструкторе надо проинициализировать значения членов класса p и q соответствующими аргументами конструктора. ну или хотя бы присвоить. арументам лучше дать другие имена, что бы не путать с членами класса. часто членам класса добавляют префиксы или суффиксы, что бы легче отличать. например, p_ и q_ Добавлено @ 14:39 т.е.
Это сообщение отредактировал(а) baldina - 7.1.2014, 14:40 |
|||
|
||||
baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 1 Всего: 101 |
для реализации операций понадобится функция нормализация числа: сокращение числителя и знаменателя на наибольший общий делитель, что бы числа, например, вида 4/8 приводить к 1/2
для этого надо уметь находить НОД. существует алгоритм Евклида, который можно записать рекуррентным соотношением gcd (m, n) = gcd (n, m mod n) c с ограничением gcd (m, 0) = m gcd - greatest common divisor mod - операция получения остатка от деления, в C/C++ это операция % в общем виде алгоритм можно реализовать простой рекурсивной функцией
Добавлено через 4 минуты и 10 секунд в итоге должно получиться что-то вроде http://ideone.com/OHZ2ph изучайте Это сообщение отредактировал(а) baldina - 7.1.2014, 14:55 |
|||
|
||||
DarkinRal |
|
|||
![]() This_IS_300 Профиль Группа: Участник Сообщений: 14 Регистрация: 27.11.2013 Где: Ukraine/Kremenchu k Репутация: нет Всего: нет |
Здраствуйте,спасибо за пример.Но когда запустил его через visual studio 2012 то выдало несколько ошибок:
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |