Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2011, 14:58   #1
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию Дроби. Электронное пособие обучения работы с дробями (Delphi)

Здравствуйте. Необходима ваша помощь в решении одной программы, а именно: разработать в визуальной среде delfi программу которая отображала бы как бы электронный учебник по математике, а именно раздел дроби. Т. е. протрамма должна находить: сложение, вычитание, деление, умножение и НОК знаменателей. Есть небольшой исходник на C++, но преподад забраковал, сказав, что не та визуальная среда программирования. Что делать не знаю осталось очень мало времени. Просьба помочь хоть чем-то, я просто в безвыходном положении...
lodos вне форума Ответить с цитированием
Старый 17.05.2011, 16:22   #2
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Кинь исход, попробую переписать.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 17.05.2011, 17:08   #3
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию

я разобью его на 2 части, а то сильно большой
Код:
using namespace std;
 
class fraction
{
public: 
        fraction();
        fraction(int,int);
        fraction(int);
        fraction& operator +(fraction&);
        fraction& operator *(fraction&);
        fraction& operator /(fraction&);
        fraction& operator -(fraction&);
        friend ostream& operator<<(ostream&, const fraction&);
        friend istream& operator>>(istream&, fraction&);
        bool operator !=(fraction&);
        bool operator >(fraction&);
        bool operator <(fraction&);
        bool operator ==(fraction&);
        fraction& abs();
        int get_numerator();
        int get_denominator();
        int NOD(fraction&);
        static int NOD(const int, const int);
        fraction& reduce();
        ~fraction(){};
private:
        int numerator;
        int denominator;
};
 
int fraction::get_denominator()
{
        return this->denominator;
}
 
int fraction::get_numerator()
{
        return this->numerator;
}
 
bool fraction::operator !=(fraction &x)
{
        return !((*this)==x);
}
 
bool fraction::operator >(fraction &x)
{
        return ((double)this->numerator/this->denominator>(double)x.numerator/x.denominator);
}
 
bool fraction::operator <(fraction &x)
{
        return ((*this)!=x)? !((*this)>x) : false;
}
 
 
bool fraction::operator ==(fraction &x)
{       
        return (this->numerator==x.numerator && this->denominator==x.denominator);
}
 
 
fraction& fraction::abs()
{
        fraction* x=new fraction(*this);
        if (x->numerator<0) 
        {
                x->numerator*=-1;
        }
        if (x->denominator<0)
        {
                x->denominator*=-1;
        }
        return *x;
}
 
fraction::fraction()
{
        numerator=0; denominator=1;
}
 
fraction::fraction(int x, int y)
{
        if (!y)
        {
                denominator=1;
        }
        else
        {
                numerator=x; 
                denominator=y;
        }
}
 
fraction::fraction(int x)
{
        numerator=x; denominator=1;
}
 
fraction& fraction::operator *(fraction& x)
{
        return *(new fraction(this->numerator*x.numerator,this->denominator*x.denominator));
}
 
fraction& fraction::operator +(fraction& x)
{
        return *(new fraction(this->numerator*x.denominator/NOD(x)
                +x.numerator*this->denominator/NOD(x),
                this->denominator*x.denominator/NOD(x)));
}
 
fraction& fraction::operator -(fraction& x)
{
        return *(new fraction((*this)+x*(*(new fraction(-1)))));
}
 
fraction& fraction::operator /(fraction& x)
{
        return *(new fraction(this->numerator*x.denominator,this->denominator*x.numerator));
}
 
int fraction::NOD(fraction& x)
{
        this->reduce(); x.reduce();
        int c, a=this->denominator, b=x.denominator;
        while (b) 
        {
                c = a%b;
                a = b;
                b = c;        
        }
        return a;
}
                
int fraction::NOD(const int x, const int y)
{
        int c, a=x, b=y;
        while (b) 
        {
                c = a%b;
                a = b;
                b = c;        
        }
        return a;
}
 
fraction& fraction::reduce()
{
        int x=NOD(denominator,numerator);
        this->denominator/=x;
        this->numerator/=x;
        return *this;
}
 
ostream& operator<<(ostream& os, fraction& f)
{
это первая часть
lodos вне форума Ответить с цитированием
Старый 17.05.2011, 17:08   #4
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию

Код:
f.reduce();
        int numerator=f.get_numerator(), denominator=f.get_denominator();
        if (numerator!=0)
        {
                if (denominator==1) 
                {
                        os<<numerator;
                }
                else
                {
                        if (denominator==-1)
                        {
                                os<<-numerator;
                        }
                        else
                        {
                                if (denominator<0)
                                {
                                        os<<-numerator<<'/'<<-denominator;
                                }
                                else
                                {
                                        os<<numerator<<'/'<<denominator;
                                }
                        }
                }
        }
        else
        {
                os<<0;
        }
        return os;
}
 
istream& operator>>(istream& is, fraction& f)
{
        char delim;
        is>>f.numerator>>delim>>f.denominator;
        return is;
}
 
int _tmain(int argc, _TCHAR* argv[])
{
        fraction x, y, result;
        char operand;
        do
        {
                cout<<"Input fractions: ";
                cin>>x>>operand>>y;
                switch(operand)
                {
                case '+':
                        result=x+y;
                        break;
                case '-':
                        result=x-y;
                        break;
                case '*':
                        result=x*y;
                        break;
                case '/':
                        result=x/y;
                        break;
                default:
                        cout<<"Incorrect operand!";
                }
                cout<<"="<<result<<endl;
                cout<<"Press esc to exit.."<<endl;
        }
        while (_getch()!=27);
        return 0;
}
а это вторая
lodos вне форума Ответить с цитированием
Старый 17.05.2011, 17:09   #5
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию

извени за то что спрашиваю, но суть моего вопроса понятна в теме, если нет, то я постораюсь изложить яснее...
если не получится хоть напиши пожалуйста, чтоб я не надеялся. хорошо..
lodos вне форума Ответить с цитированием
Старый 17.05.2011, 20:01   #6
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию

так что можно что то сделать
lodos вне форума Ответить с цитированием
Старый 18.05.2011, 08:36   #7
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Не совсем понятно чего вы хотите. Вам калькулятор надо? Объясните поподробнее.
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 18.05.2011, 09:38   #8
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию

задача должна как бы соответствовать эллектронному учебнику, то есть:
на визуально должно показываться например сложение дробей, в окне должен быть сам пример, а сверху что то тиипа описания, как так получилось.

в общем тема звучит так
"Разработка электронного учебного пособия в среде визуального программирования, использование, которого помогает освоить теоретические и практические аспекты темы, сформировать навыки и умения работы с дробями, провести тестирования по теме."

Последний раз редактировалось lodos; 18.05.2011 в 09:54.
lodos вне форума Ответить с цитированием
Старый 18.05.2011, 15:38   #9
ZvEr_HaCkEr
VisualC++/DirectX
Форумчанин
 
Аватар для ZvEr_HaCkEr
 
Регистрация: 16.07.2010
Сообщений: 831
По умолчанию

Че-то я сегодня тупой, есть скомпилированный exe'шник посмотреть как все устроено?
ZvEr_HaCkEr вне форума Ответить с цитированием
Старый 18.05.2011, 17:16   #10
lodos
Пользователь
 
Регистрация: 06.05.2011
Сообщений: 39
По умолчанию

есть, тока не знаю как скинуть его сюда
lodos вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа в FRAC (обыкн. дроби) в Delphi Мартин Помощь студентам 5 28.09.2010 16:40
Электронное учебное пособие Zeibel Помощь студентам 10 31.05.2010 10:55
дельфи электронное пособие yashel Помощь студентам 1 09.01.2010 15:21
преобразование десятичной дроби в обыкновенную и обратно, Delphi ИгорьОК Помощь студентам 4 04.04.2007 21:12