|
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
|
||||||
Создать класс с именем Rational для выполнения арифметических действий с дробями24.07.2011, 23:33. Показов 12113. Ответов 20
Метки нет (Все метки)
здравствуйте!
подскажите пожалуйста в чем ошибка? по задаче мне нужно создать класс с именем Rational для выполнения арифметических действий с дробями. для представления закрытых членов данных класса (числителя и знаменателя) )нужно использовать целые переменные. надо создать функцию конструктор, которая позволяет объекту класса принимать начальные значения при его объявлении(конструктор должен также содержать значения по умолчанию). конструктор должен хранить дроби в сокращенном виде (т.е. дробь 2/4 должна храниться в объекте как 1 в числителе и 2 в знамнателе). нужно создать открытые функции-члены для каждой арифметической операции. мой код не корректно работает если знаменатели задаются нулевым значением, почему так? вот код:
0
|
||||||
| 24.07.2011, 23:33 | |
|
Ответы с готовыми решениями:
20
Создайте класс с именем Rational для выполнения действий с дробями Создайте класс с именем Complex для выполнения арифметических действий с комплексными числами
|
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|
| 24.07.2011, 23:42 | |
|
А в чем именно заключается ошибка?
P.S. Как мне подсказывает мой трехлетний аспирантский опыт преподавания, с таким подходом к реализации классов Вы никогда не сдадите эту задачу... Не обижайтесь, но это ужас
0
|
|
|
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
|
|
| 24.07.2011, 23:51 [ТС] | |
|
вы бы не могли пояснить в чем именно ужас?
ошибка в том, что если задавать числители и знаменатели числами отличными от нуля, то результат правильный. если задать один из знаменателей нулем, то получается ерунда.
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
||||||||||||
| 24.07.2011, 23:54 | ||||||||||||
|
а Если не правильное??? ты прсишь ввести правильное и тут же его теряешь! выбрось else
1
|
||||||||||||
| 24.07.2011, 23:56 | |
|
Не по теме: ужас в том, что задача странная и некрасивая. было бы логичнее, если бы арифметические операции нужно было реализовать не описанием ф-ций-членов, а перегрузкой соответствующих операций +, - и прочих.
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|
| 24.07.2011, 23:56 | |
|
0
|
|
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 24.07.2011, 23:58 | |
|
0
|
|
|
Добрый самаритянин
1107 / 622 / 139
Регистрация: 31.03.2009
Сообщений: 2,567
|
|
| 25.07.2011, 00:00 | |
|
0
|
|
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
||||||
| 25.07.2011, 00:00 | ||||||
|
Ужас в том, что класс Rational должен содержать представление одного числа, а не трех.
Примерно так:
P.S. Как уже упоминалось выше, арифметические операции обычно реализуют с помощью перегрузки операторов Кстати, ввод/вывод объекта Rational тоже неплохо бы реализовать как перегрузку операторов <<, >>
0
|
||||||
|
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
|
|
| 25.07.2011, 00:09 [ТС] | |
|
ValeryS, спасибо
насчет возврата двух значений я гоню. to alex_x_x, если мне нужно задать значения по умолчанию и я написал Rational(int =1,int =1,int =1,int =1); это ошибочно?
0
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|||
| 25.07.2011, 00:13 | |||
|
переопределить сложение,вычитание,умножение,деление, присваивания, может быть возведение в степень и получится хороший классик для последующей работы а не для сдачи лаб можно сделать так вычисляем остаток от деления если его нет смело делим(а ну надо вычислить обший делитель) но как быть с неправильными дробями и в частности с такими 5/1
0
|
|||
|
бжни
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
|
|
| 25.07.2011, 00:15 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
|
|
| 25.07.2011, 00:22 [ТС] | |
|
to alex_x_x: подшучиваете?
0
|
|
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|||
| 25.07.2011, 00:24 | |||
![]() Добавлено через 1 минуту А вариант реализации сложения я написал. Остальные можно сделать по аналогии. А насчет наибольшего общего делителя, Вы, конечно, правы.
0
|
|||
|
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
|
|
| 25.07.2011, 00:26 [ТС] | |
|
to ValeryS: нормализацию дроби я еще не дописал, так как споткнулся о вышеуказанную ошибку.
вы бы не могли объяснить, что значит конструктор копирования? и что значит "класс Rational должен содержать представление одного числа, а не трех"?
0
|
|
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|||||||
| 25.07.2011, 00:44 | |||||||
|
А по поводу трех постараюсь объяснить - это принципиальный момент. Смотрите. С точки зрения реального мира или предметной области рациональное число - это отношение числителя к знаменателю. Экземпляр (ну, просто отдельная переменная) класса Rational должен моделировать одно рациональное число. Поэтому внутри класса Rational, который я привел как пример, есть только один числитель и знаменатель. В Вашем же варианте один класс Rational хранит внутри данные двух исходных чисел и одного результата, то есть фактически три числителя и три знаменателя. Недостатки такого подхода: - Любой, кто будет разбираться в Вашем коде, будет вынужден выяснять, какое поле к чему относится. А код должен быть понятен читающему. - Ваш класс пытается решить слишком много задач сразу. Тут и ввод значения знаменателя, если он нулевой, и хранение двух исходных чисел, и хранение результата. - К тому же, Ваш вариант годится только для решения одной конкретной задачи. А если на сдаче лабы препод попросит сложить два числа и умножить их на третье? Я бы попросил ![]() Если Вы обратите внимание, как реализована функция plus у меня, она просто принимает на вход другое рациональное число, формирует третье и возвращает его как результат. Как видите, здесь все достаточно просто написано и понятно любому читающему. К тому же, можно строить таким образом сложные выражения, наподобие:
0
|
|||||||
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|||||||||||||||||||
| 25.07.2011, 00:50 | |||||||||||||||||||
|
т.е ты можешь создать такую запись
если переопределишь операцию присвоения то сможешь написать так
в классе Rational всего два члена числитель и знаменатель(может быть третий для целого при нормализации неправильной дроби) а ты впихнул туда всю структуру программы только зачем то описал классом (а если надо будет сложить 3 дроби? всю программу переписывай) смотри пример от soft.creator тогда ты сможешь работать с этим классом как захочешь например так
0
|
|||||||||||||||||||
|
0 / 0 / 1
Регистрация: 16.04.2011
Сообщений: 48
|
||||||
| 25.07.2011, 00:56 [ТС] | ||||||
|
soft.creator, а вы бы не могли закоментировать ваш пример кода, у меня скорее мозги сломаются, чем я его пойму. допустим мне непонятно: вы пишете в public: Rational plus(Rational r).
насколько я понимаю перед функцией должен находиться тип возвращаемого значения (void, int, char и т.д.), а у вас стоит класс Rational - как это? и в списке параметров функции Plus вы указываете объект класса Rational? вот это тоже непонятно:
0
|
||||||
|
106 / 106 / 11
Регистрация: 17.10.2010
Сообщений: 283
|
|
| 25.07.2011, 01:00 | |
|
В языке C++ есть встроенные типы данных (int, float и т.д.), а есть определяемые пользователем (это как раз наш класс Rational). И те, и другие можно равноправно применять при передаче параметров в функции и возврате значений из них. Кстати, класс string языка C++ - это тоже определяемый пользователем тип, просто добрые дяди его предоставили нам совершенно безвозмездно, т.е. даром (C).
Больше того, для класса Rational можно даже самостоятельно определить все математические операторы, и даже операторы вывода в поток и чтения из потока, тогда он будет практически неотличим от встроенных типов. Хотя это несколько выходит за рамки вашей лабораторки. Моя функция создает новый объект Rational, задает ему его числитель и знаменатель через конструктор, и возвращает этот объект в вызвавшую программу. P.S. В стандартной библиотеке C++ есть класс complex - это реализация комплексного числа. Он как раз позволяет делать все то, что я написал выше. И его совершенно свободно можно передавать в функции и возвращать из них. Цель Вашей лабы - научить вас создавать собственные типы данных C++. Я же пытаюсь подсказать Вам, как это лучше сделать с точки зрения профессионального программиста С++
1
|
|
|
Модератор
8978 / 6744 / 921
Регистрация: 14.02.2011
Сообщений: 23,852
|
|
| 25.07.2011, 01:02 | |
|
1
|
|
| 25.07.2011, 01:02 | |
|
Помогаю со студенческими работами здесь
20
Пример арифметических действий с обыкновенными дробями Написать программу для выполнения простейших арифметических действий С++ класс (создайте класс с именем Complex для выполнения в арифмитических операий с комплексными числами)) Создать класс для работы с дробями Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|