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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
TankMr
1 / 1 / 0
Регистрация: 13.05.2013
Сообщений: 30
#1

Очередь: Напишите программу сложения и умножения многочленов, представленных описанным образом - C++

20.05.2013, 11:42. Просмотров 1394. Ответов 20
Метки нет (Все метки)

Всем Здрасти

Многочлены вида , где можно представить в виде очереди, где каждый элемент имеет три поля: одно – для коэффициента ci, второе – для показателя степени ei, третье – для указателя на следующую ячейку. Напишите программу сложения и умножения многочленов, представленных описанным образом (реализация 6).

Реализация 6. Разработайте класс, реализующий очередь с помощью указателей. Методы класса: добавление элемента в очередь, удаление элемента из очереди, получение значения из очереди, проверка заполнения очереди, проверка пустоты очереди.


вот написал саму реализацию своей программы.

Вопрос , как создать этот многочлен? Ну, эмм я не знаю как написать 2 очереди и функцию суммы


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#include <iostream>
#include <process.h>
#include <conio.h>
#include <math.h>
 
 
using namespace std;
 
class Element
{
    public:
        float e, c;
        Element *Next;
        Element()
        {
            Next = NULL;
            c = 0;
            e = 0;
        }
};
class Queue
{
    public:
        Element *Head, *Tail;
        Queue()
        {
            Head = Tail = NULL;
        }
        ~Queue()
        {
            Element *Vsp;
            while(Head)
            {
                Vsp = Head;
                Head = Head->Next;
                delete Vsp;
            }
        }
 
    int EmptyQueue(void)
    {
        if(Head)
        {
            cout<<"\n\n\t\tEmpty it's full\n\n\n";
            return 0;
        }
        else
        {
            cout << "\n\n\t\t\tQueue is empty!!!"<< endl;
            return 1;
        }
    }
 
    void HeadQueue(void)
    {
        cout << endl << "\t\tHEAD QUEUE:"<<endl<<endl;
        if(!EmptyQueue())
            cout << "\n\nHead = "<<"C\t\tX\t\tE\n"<<"\t"<< Head->c << "\t\t" <<Head->e<<endl<<endl<<endl;
    }
    
    void ShowQueue(void)
    {
        Element *Vsp;
        cout << endl << "\t\tShow QUEUE:" << endl;
            if(!EmptyQueue())
            {
                while(Head)
                {
                    cout<<Head->c<<"*x^"<<Head->e<<"+";
                    Vsp = Head;
                    Head = Head -> Next;
                    delete Vsp;
                }
                Head = Tail = NULL;
            }
    }
    void AddQueue(void)
    {
        Element *Vsp = new Element;
        if(!Vsp) 
            exit(1);
 
        cout << endl << "\t\t\tADD QURUE:" << endl;
 
        if(!Head)
            Head = Vsp;
        else
            Tail -> Next = Vsp;
        Tail = Vsp;
    }
    void DeleteQueue(void)
    {
        Element *Vsp;
        cout<<"\n\n\t\t\Delete Queue:\n\n"<<endl;
        if(!EmptyQueue())
        {
            cout<<"\n\t\tDelete element:\n\n"<<endl;
            if(Head)
                Vsp = Head;
                Head = Head->Next;
                delete Vsp;
        }
    }
    void Menu(void)
    {
        int key = 0;
        do
        {
            cout << "\t\t\tMENU:" << endl << endl << "\t1 - ADD QUEUE" << endl 
            << "\t2 - Golova(Top) QUEUE" << endl << "\t3 - Empty Queue" << endl <<"\t4 - Rezult Mnogochlena "<<endl<<"\t5 - Delete Queue" <<endl
            << "\t6 - Summa"<< endl << "\tEsc - Exit" << endl << endl << "Press any key..." << endl;
            key = getch();
            switch(key)
            {
                case 49: AddQueue(); break;
                case 50: HeadQueue(); break;
                case 51: EmptyQueue(); break;
                case 52: ShowQueue(); break;
                case 53: DeleteQueue(); break;
                //case 54: Summa(); break;
            }
        }while(key!=27);
    }
};
 
int main()
{
    Queue Q;
    Q.Menu();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2013, 11:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Очередь: Напишите программу сложения и умножения многочленов, представленных описанным образом (C++):

Подпрограммы сложения и умножения целых чисел, представленных в системах счисления с любым основанием от 2 до 10 - C++
1. Определить подпрограммы сложения и умножения целых чисел, представленных в системах счисления с любым основанием от 2 до 10. результаты...

Составить программу,которая печатает таблицу умножения и сложения натуральных чисел в шестнадцатеричной системе счисления - C++
Составить программу,которая печатает таблицу умножения и сложения натуральных чисел в шестнадцатеричной системе счисления.

Составить программу,которая печатает таблицу умножения и сложения натуральных чисел в десятичной системе счисления на пять - C++
Помагите пожалуйсто написать такую программу: Составить программу,которая печатает таблицу умножения и сложения натуральных чисел в...

Цикл: Напишите программу, которая выводит на экран квадрат Пифагора – таблицу умножения. - C++
Решите пожалуйста задачу по программированию. Желательно с пояснениями. Напишите программу, которая выводит на экран квадрат Пифагора –...

Напишите программу, заполняющую массив N×N следующим образом - C++
Напишите программу, заполняющую массив N×N следующим образом: на побочной диагонали стоят нули, выше диагонали двойки, ниже единицы. ...

Segmentation fault. Программа для сложения многочленов - C++
Доброго времени суток всем. Мне задали сделать программу по сложению и перемножению многочленов. Написав код для сложения, я столкнулся с...

20
TankMr
1 / 1 / 0
Регистрация: 13.05.2013
Сообщений: 30
20.05.2013, 21:45  [ТС] #16
Ввожу коэффициенты многочлена, потом вызываю функцию суммы, и пишет мне

Unhandled exception at 0x00ce5049 in 1.exe: 0xC0000005: Access violation reading location 0xcdcdcdd1.
1.exe!main() Line 152 + 0x10 bytes C++
1.exe!__tmainCRTStartup() Line 582 + 0x19 bytes C
1.exe!mainCRTStartup() Line 399 C
kernel32.dll!75de8543()
[Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]
ntdll.dll!775abf39()


ntdll.dll!775abf0c()

Добавлено через 20 секунд
> 1.exe!Queue::SummQueue(Queue p={...}) Line 94 + 0x8 bytes C++
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
20.05.2013, 21:56 #17
TankMr, а ты вводил всего по одному элементу в очередь?
1
TankMr
1 / 1 / 0
Регистрация: 13.05.2013
Сообщений: 30
20.05.2013, 22:28  [ТС] #18
Вопрос не понятен, но я вводил сразу по 3 элемента, с е х, потом во вторую очередь с е х
0
yoghurt92
374 / 345 / 22
Регистрация: 17.05.2012
Сообщений: 1,049
20.05.2013, 22:39 #19
TankMr, сейчас посмотрю

Добавлено через 11 минут
TankMr, у вас неправильно оформлена функция добавления нового элемента в очередь, NULL - признак конца очереди, вы при добавление не указываете его, что приводит к ошибки когда мы проходим по очереди...

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void AddQueue(void)
    { 
        Element *Vsp = new Element;
        if(!Vsp) 
            exit(1);
 
        cout << endl << "\t\t\tADD QURUE:" << endl;
 
        Vsp -> input(); 
 
        if(!Head) {
            Head = Vsp; 
            Vsp ->Next = nullptr;
        }
        else
            Tail -> Next = Vsp; 
        Tail = Vsp;
        Vsp ->Next = nullptr;
    }
вставьте и все заработает и измените функцию сумму на следующий код, иначе при выводе последнего у вас будет стоять знак сложения

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void SummQueue(Queue p)
    { 
 
        Element *Tail(this->Head), //указатель на голову первой очереди
            *Tail1(p.Head); //указатель на голову второй очереди
 
            while(Tail != nullptr)
            { 
                if(Tail ->Next == nullptr){
                    cout << Tail->ci + Tail1->ci <<"*"<< Tail->x + Tail1->x<<"^"
                    << Tail->ei + Tail1->ei;
                }
                else{
                    cout << Tail->ci * Tail1->ci <<"*"<< Tail->x * Tail1->x<<"^"
                        << Tail->ei * Tail1->ei <<"+";
                }
 
                Tail = Tail ->Next;
                Tail1 = Tail1 ->Next;
            }
    }
1
TankMr
1 / 1 / 0
Регистрация: 13.05.2013
Сообщений: 30
20.05.2013, 23:04  [ТС] #20
Спасибо за ПОМОЩЬ
0
TankMr
1 / 1 / 0
Регистрация: 13.05.2013
Сообщений: 30
22.05.2013, 19:46  [ТС] #21
Привет

Вообщем сделал программу, но оказывается не то нужно было.

Там просто нужно вывести их на экран, в порядке убывания.

Например: 1*x^6+4*x^4+2*x^3 и тд

Вот точно же такую нужно написать, но я не знаю в чем отличие циклического массива от односвязного списка

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
#include "iostream"
#include <string.h>
#include <process.h>
#include <conio.h>
 
#define N 100
 
using namespace std;
 
struct Vspom
{
    int a;//для коэ-та Сi
    float e;//для показателя степени 
};
 
class Dat
{
    private: 
        Vspom s[N];
        int i,n;
    public:
        Dat()//конструктор
        {
            i=0;
            n=0;
        }
    void Add(Vspom);
    Vspom Del(void);//del
    int Pust(void);//pustoty
    int Poln(void);//polnoty
    Vspom Read(void);//неразруш. чтен
};
 
void Dat::Add(Vspom x)
{
    if(n<N)
    {
        s[i+n]=x;
        n++;
    }
    else cout<<"error!!"<<endl;
}
 
Vspom Dat::Del(void)
{
    if(n!=0)
    {
        i++; n--;
        return s[i-1];
    }
}
 
int Dat::Pust(void)
{
    return n==0;
}
 
int Dat::Poln(void)
{
    return n==N;
}
 
Vspom Dat::Read(void)
{
    return s[i];
}
 
int main()
{
    Dat pol1,pol2,sum;
    Vspom b,q;
    char k;
    do
    {
        //cout«"Menu:\n\n";
        cout<<"1-Enter Pol_1\n2-Enter Pol_2\n3-Rezult\n\n";
        k=getch();
        if(k=='1')
        {
            cout<<"Pop1:\n\n";
            cout<<"a=";
            cin>>b.a;
            cout<<"e=";
            cin>>b.e;
            pol1.Add(b);
        }
        if(k=='2')
        {
            cout<<"Pol2:\n\n";
            cout<<"a=";
            cin>>b.a;
            cout<<"e=";
            cin>>b.e;
            pol2.Add(b);
        }
    }
    while(k!='3');
    cout<<"\n\n";
    cout<<"Summa\n\n";
    while(!pol1.Pust()&&!pol2.Pust())
    {
        b=pol1.Read();
        q=pol2.Read();
        if(b.e==q.e)
        {
            b.a+=q.a;
            sum.Add(b);
            pol1.Del();
            pol2.Del();
        }
        else if(b.e>q.e)
        {
            sum.Add(b);
            pol1.Del();
        }
        else
        {
            sum.Add(q);
            pol2.Del();
        }
 
    }
    while(!pol1.Pust())
    {
        b=pol1.Del();
        sum.Add(b);
    }
    while(!pol2.Pust())
    {
        q=pol2.Del();
        sum.Add(q);
    }
    while(!sum.Pust())
    {
        b=sum.Del();
        cout<<b.a<<"*x^"<<b.e;
        if(!sum.Pust())
        {
            cout<<"+";
        }
 
    }
    getch();
}
Это циклический массив
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2013, 19:46
Привет! Вот еще темы с ответами:

Напишите программу, которая соединит три строки в одну таким образом, что... - C++
Заданы три строки длиной по 11 символов. Напишите программу, которая соединит три строки в одну таким образом, что в первую очередь будет...

Последовательность многочленов T0(x),T1(x),. определяется следующим образом - C++
Последовательность многочленов T0(x),T1(x),..... определяется следующим...

Определить подпрограммы сложения и умножения - C++
Определить подпрограммы сложения и умножения целых чисел, представленных в системах счисления с любым основанием от 2 до 10. Результаты...

Перегрузка операторов сложения и умножения - C++
По условию задачи мне необходимо получить сумму и произведение двух матриц с помощью перегрузки операторов сложения и умножения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
21
Yandex
Объявления
22.05.2013, 19:46
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru