Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Многочлен: как описать структуру. Трудности с пониманием. 
V
    Опции темы
Kemix
  Дата 25.4.2012, 07:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 21.4.2012

Репутация: нет
Всего: нет



И снова здравствуйте, уважаемое сообщество.
Задача:Составить описание класса многочленов от одной переменной, задаваемых степенью многочлена и массивом коэффициентов. Предусмотреть методы для вычисления значения многочлена для заданного аргумента, операции сложения, вычитания и умножения многочленов с получением нового объекта - многочлена, печать (вывод на экран) описания многочлена.
Беда:Если с операциями вроде ясно(перегрузить имеющиеся), то не очень понятно как описать саму структуру многочлена. есть конечно идеи использовать массив, в котором будут записаны коэфиценты.
А какие идеи есть у вас?
Заранее спасибо smile
PM MAIL   Вверх
borisbn
Дата 25.4.2012, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 11
Всего: 135



Цитата(Kemix @  25.4.2012,  07:53 Найти цитируемый пост)
есть конечно идеи использовать массив, в котором будут записаны коэфиценты

как бы в задании прямо сказано
Цитата(Kemix @  25.4.2012,  07:53 Найти цитируемый пост)
задаваемых степенью многочлена и массивом коэффициентов

В чём вопрос то ? Показывай свой вариант и тебе подскажут чего в нём не так.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
borisbn
Дата 25.4.2012, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 11
Всего: 135





--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
Kemix
Дата 28.4.2012, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 21.4.2012

Репутация: нет
Всего: нет



Цитата(borisbn @  25.4.2012,  11:37 Найти цитируемый пост)

лови, допиливай 

Извини. но я в этом коде ничего не понял.
У нас многочлен с клавиатуры вводится, а не задаётся прямо в коде.
Может просто покажете пример кода ПОНЯТНОЙ структуры многочлена, т.е. построенного по принципу KISS?
P.S. Как в том комиксе - не очень люблю читать чужой код.

Это сообщение отредактировал(а) Kemix - 28.4.2012, 21:58
PM MAIL   Вверх
borisbn
Дата 29.4.2012, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 11
Всего: 135



Цитата(Kemix @  28.4.2012,  18:00 Найти цитируемый пост)
я в этом коде ничего не понял

Цитата(Kemix @  28.4.2012,  18:00 Найти цитируемый пост)
просто покажете пример кода ПОНЯТНОЙ структуры

Цитата(Kemix @  28.4.2012,  18:00 Найти цитируемый пост)
не очень люблю читать чужой код

Да Вы, батенька, нахал.
Не приходило в голову, что проблема может быть не в чужом коде ?


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
bsa
Дата 1.5.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 1
Всего: 196



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
Kemix
  Дата 13.5.2012, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 21.4.2012

Репутация: нет
Всего: нет



UPD: Теперь проблема в следующем: у меня перегруженный оператор присваивания должен использовать объект из класса, который описан после него(в результате этого и ошибка). При этом вынести опретор я не могу(опять же компилятор не даёт)
Код

#include <iostream>
using namespace std;
class spisok {
    double koef;
    int stepen;
    spisok * next;
public:
    friend spisok *createmn( spisok *head);
    friend spisok *add( spisok *head, double koef, int stepen);
    spisok operator=(spisok *other)
    {
           spisok *cfinal, *tail, *tailother;
           cfinal=NULL;
           tail=headm;
           tailother=other;
           while(tailother!=NULL)
           {
               cfinal=add(cfinal,tailother->koef,tailother->stepen);
               tailother=tailother->next;
           }
           return *cfinal;
    }
    friend int kolelem(spisok *tmp);
};
class mn{
public:
    void result(void);
    mn(spisok *head);
    friend void print(mn testmn);
private:
    spisok *headm;
};
mn::mn(spisok *head)
{
    mn::headm=head;
}
spisok *createmn( spisok *head)
{
    cout << "Vvedite stepen mnogochlena: ";
    int stepen;
    double koef=0;
    cin >> stepen;

    cout << "vvedite koefficienti\n";
    for (int i=0;i<=stepen;i++) {cout<<" a"<<i<<" = ";
    cin>>koef;
    if( head == NULL ) 
    {
        head = new spisok;
        head->koef = koef;
        head->stepen=stepen;
        head->next=NULL;
    }
    else
    {
        spisok *tail;
        for( tail = head; tail->next != NULL; tail = tail->next) continue;
        spisok *tmp = new spisok;
        tmp->koef = koef;
        tmp->stepen=stepen;
        tmp->next=NULL;
        tail->next = tmp;
    }
    }
    return head; }
void main(){
    //Создание объекта
    spisok *testsp=NULL;
    testsp=createmn(testsp);
    mn testmn(testsp);
    print(testmn);

}
spisok *add( spisok *head, double koef, int stepen)
{
   if( head == NULL ) 
  {
     head = new spisok;
     head->koef = koef;
     head->stepen=stepen;
     head->next=NULL;
  }
  else
  {
     spisok *tail;
     for( tail = head; tail->next != NULL; tail = tail->next) continue;
     spisok *tmp = new spisok;
     tmp->koef = koef;
     tmp->stepen=stepen;
     tmp->next=NULL;
     tail->next = tmp;
  }
  return head;
}
int kolelem(spisok *tmp)
{
 int i=0;
 while(tmp!=NULL)
  {
   i++;
   tmp=tmp->next;
 }
 return i;
}

void print(mn testmn)
{
  while(testmn::headm!=NULL)
    {
        cout << "(" << testmn::headm->koef<<")*x^(" << testmn::headm->stepen <<")+";
        testmn::headm=testmn::headm->next;
    }
    cout << "0\n";
}


Подскажите обходной путь проблемы.

Это сообщение отредактировал(а) Kemix - 15.5.2012, 18:27
PM MAIL   Вверх
Kemix
Дата 15.5.2012, 18:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 21.4.2012

Репутация: нет
Всего: нет



Glvbyf.? т.к. обновил пред. пост.
PM MAIL   Вверх
Kemix
  Дата 22.5.2012, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 21.4.2012

Репутация: нет
Всего: нет



Всё, задачу сам написал.
Код

#include "StdAfx.h"
#include <iostream>
using namespace std;
class spisok {
    double koef;
    int stepen;
    spisok * next;
public:
    friend spisok *createmn( spisok *head);
    friend spisok *add( spisok *head, double koef, int stepen);
    friend spisok *slozh(spisok *heada, spisok *headb);
    friend spisok *vichit(spisok *heada, spisok *headb);
    friend spisok *umnozh(spisok *heada, spisok *headb);
    friend spisok *delenie(spisok *heada, spisok *headb);
    spisok operator=(spisok *other)
    {
           spisok *cfinal, *tail, *tailother;
           cfinal=NULL;
           tail=this;
           tailother=other;
           while(tailother!=NULL)
           {
               cfinal=add(cfinal,tailother->koef,tailother->stepen);
               tailother=tailother->next;
           }
           return *cfinal;
    }
    friend spisok *spnext(spisok *head);
    friend int kolelem(spisok *tmp);
    friend double returnelem(spisok *head);
    friend int returnstep(spisok *head);
};
double returnelem(spisok *head)
    {
        return head->koef;
    }
int returnstep(spisok *head)
    {
        return head->stepen;
    }
spisok *spnext(spisok *head)
{
   head=head->next;
   return head;
}
class mn{
public:
    void result(void);
    mn(spisok *head);
    friend void print(mn testmn);
    mn operator=(mn other)
    {
        this->headm=other.headm;
        return *this;

    }
    mn operator+(mn other)
    {
        spisok *spf=NULL;
        spf=slozh(this->headm,other.headm);
        mn mnplus(spf);
        return mnplus;
    }
    mn operator-(mn other)
    {
        spisok *spf=NULL;
        spf=vichit(this->headm,other.headm);
        mn mnminus(spf);
        return mnminus;
    }
    mn operator*(mn other)
    {
        spisok *spf=NULL;
        spf=umnozh(this->headm,other.headm);
        mn mnumnozh(spf);
        return mnumnozh;
    }
    friend mn newmn(mn novi)
    {
        spisok *sp=NULL;
        sp=createmn(sp);
        mn tmp(sp);
        novi=tmp;
        return novi;
    }
private:
    spisok *headm;
};
mn::mn(spisok *head)
{
    mn::headm=head;
}
spisok *createmn( spisok *head)
{
    cout << "Vvedite stepen mnogochlena: ";
    int stepen;
    double koef=0;
    cin >> stepen;
    cout << "vvedite koefficienti\n";
    for (int i=0;i<=stepen;i++) {cout<<" a"<<i<<" = ";
    cin>>koef;
    if( head == NULL ) 
    {
        head = new spisok;
        head->koef = koef;
        head->stepen=stepen-i;
        head->next=NULL;
    }
    else
    {
        spisok *tail;
        for( tail = head; tail->next != NULL; tail = tail->next) continue;
        spisok *tmp = new spisok;
        tmp->koef = koef;
        tmp->stepen=stepen-i;
        tmp->next=NULL;
        tail->next = tmp;
    }
    }
    return head; }
void main(){
    int x;
    mn mn1(NULL), mn2(NULL);
    mn1=newmn(mn1);
    print(mn1);
    mn2=newmn(mn2);
    print(mn2);
    mn mn3(NULL);
    mn3=mn1+mn2;
    print(mn3);
    mn3=mn1-mn2;
    print(mn3);
    mn3=mn1*mn2;
    print(mn3);
    cin >> x;
}
spisok *add( spisok *head, double koef, int stepen)
{
   if( head == NULL ) 
  {
     head = new spisok;
     head->koef = koef;
     head->stepen=stepen;
     head->next=NULL;
  }
  else
  {
     spisok *tail;
     for( tail = head; tail->next != NULL; tail = tail->next) continue;
     spisok *tmp = new spisok;
     tmp->koef = koef;
     tmp->stepen=stepen;
     tmp->next=NULL;
     tail->next = tmp;
  }
  return head;
}
int kolelem(spisok *tmp)
{
 int i=0;
 while(tmp!=NULL)
  {
   i++;
   tmp=tmp->next;
 }
 return i;
}
void print(mn testmn)
{
    spisok *tmp=NULL;
    tmp=testmn.headm;
  while(tmp!=NULL)
    {
        cout << "(" << returnelem(tmp)<<")*x^(" << returnstep(tmp)<<")+";
        tmp=spnext(tmp);
    }
    cout << "0\n";
}
spisok *slozh(spisok *heada, spisok *headb)
{
    cout << "Sloshenie A(x)+B(x): ";
    spisok *headc=NULL;
    spisok *taila=heada, *tailb=headb;
    if (kolelem(taila)>kolelem(tailb))
    {
        while(taila!=NULL){
            if (returnstep(taila)==returnstep(tailb))
            {
                headc=add(headc,returnelem(taila)+returnelem(tailb),returnstep(taila));
                tailb=spnext(tailb);
                taila=spnext(taila);
            }
            else
            {
                headc=add(headc,returnelem(taila),returnstep(taila));
                taila=spnext(taila);
            }
        }
    }
    else
    {
        if (kolelem(taila)<kolelem(tailb))
        {
            while(tailb!=NULL){
                if (returnstep(taila)==returnstep(tailb))
                {
                    headc=add(headc,returnelem(taila)+returnelem(tailb),returnstep(taila));
                    tailb=spnext(tailb);
                    taila=spnext(taila);
                }
                else
                {
                    headc=add(headc,returnelem(tailb),returnstep(tailb));
                    tailb=spnext(tailb);
                }
            }
        }
        else
        {
            while(taila!=NULL){
                headc=add(headc,returnelem(taila)+returnelem(tailb),returnstep(taila));
                tailb=spnext(tailb);
                taila=spnext(taila);
            }
        }
    }
    return headc;
}
spisok *vichit(spisok *heada, spisok *headb)
{
    cout << "Vichitanie A(x)-B(x): ";
    spisok *headc=NULL;
    spisok *taila=heada, *tailb=headb;
    if (kolelem(taila)>kolelem(tailb))
    {
        while(taila!=NULL){
            if (returnstep(taila)==returnstep(tailb))
            {
                headc=add(headc,returnelem(taila)-returnelem(tailb),returnstep(taila));
                tailb=spnext(tailb);
                taila=spnext(taila);
            }
            else
            {
                headc=add(headc,returnelem(taila),returnstep(taila));
                taila=spnext(taila);
            }
        }
    }
    else
    {
        if (kolelem(taila)<kolelem(tailb))
        {
            while(tailb!=NULL){
                if (returnstep(taila)==returnstep(tailb))
                {
                    headc=add(headc,returnelem(taila)-returnelem(tailb),returnstep(taila));
                    tailb=spnext(tailb);
                    taila=spnext(taila);
                }
                else
                {
                    headc=add(headc,-returnelem(tailb),returnstep(tailb));
                    tailb=spnext(tailb);
                }
            }
        }
        else
        {
            while(taila!=NULL){
                headc=add(headc,returnelem(taila)-returnelem(tailb),returnstep(taila));
                tailb=spnext(tailb);
                taila=spnext(taila);
            }
        }
    }
    return headc;
}
spisok *umnozh(spisok *heada, spisok *headb)
{
    cout << "Umnozhenie A(x)*B(x): ";
    spisok *headc=NULL;
    spisok *taila=heada, *tailb=headb;
    while(tailb!=NULL){
        while(taila!=NULL){
            headc=add(headc,returnelem(taila)*returnelem(tailb),returnstep(taila)+returnstep(tailb));
            taila=spnext(taila);
        }
        taila=heada;
        tailb=spnext(tailb);
    }
    return headc;
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0529 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.