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

рекурсивная обработка списков - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ С++ getch и putch http://www.cyberforum.ru/cpp-beginners/thread219162.html
У меня есть программа #include <iostream> #include <conio.h> using namespace std; /* 24.Слова текста из малых латинских букв записаны не менее чем через один пробел; текст оканчивается точкой. БЕЗ ИСПОЛЬЗОВАНИЯ конструкции STRING: а) написать программу ввода такого текста с клавиатуры; б) в каждом слове все гласные, начиная со второй, заменить на букву u.
C++ Шаблон класса стек Ошибка: no appropriate default constructor available. Предлагает использовать конструктор, но как это оно? template <class Type> struct data { Type e; data *next; } ; template <class data> class stack { http://www.cyberforum.ru/cpp-beginners/thread219121.html
вычислить результат выражения. C++
помогите пожалуйста написать программу, которая по заданному натуральному значению n и действительному x вычисляет результат выражения.
составить блок-схему к программе C++
Добрые люди) Помогите пожалуйста срочно составить в ближайшее время блок-схему к этой программе, завтра просто поздно будет, не поставят зачет((( Вот я написал программу а блок схема не получается! #include <stdio.h> #include <iostream.h> #include <stdlib.h> #include <math.h> int main () {
C++ Графы http://www.cyberforum.ru/cpp-beginners/thread219110.html
Граф задан своей матрицей смежностей. Вывести на экран все связные вершины...очень скоро нужно...извините за срочность
C++ Пирамидальная сортировка с вопросами Большая просьба,помоги мне ответить Это пирамидальная сортировка с++ Заранее спасибо #include<conio.h> #include <stdio.h> #include <stdlib.h> #include <time.h>// Что выполняет? подробнее

Показать сообщение отдельно
SoulTaker
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 10

рекурсивная обработка списков - C++

23.12.2010, 23:25. Просмотров 477. Ответов 0
Метки (Все метки)

написал программу для вычисления первообразной...все работает,но при введении коэфициэнта при x^0 равного нулю выскакивает ошибка...а он не должен включаться в список. если мы делаем равный нулю коэфициэнт при любом другом х то все работает как надо...помогите пожалуйста исправить косяк. вот задание
1.Многочлен P(x)=anxn+an-1xn-1+…+a0 с целыми коэффициентами представьте в виде списка, причем, если ai=0, то соответствующее звено в список не включается. Построить его первообразную

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
145
146
147
// lab0808inf.cpp: определяет точку входа для консольного приложения.
// л.р. (информатика) №8-9 вариант 1 (первообразная)
 
#include "stdafx.h"
#include <conio.h>
#include <iostream>
using namespace std;
 
struct numb
//элемент списка
{
    int a; //коэффициент перед x
    int pow; //степень
    numb* next;
};
 
//добавление элементов список (рекурсивно, один за другим)
void add_numbs(numb*& beg, numb*& end, int stepen, numb* p = NULL, int prim = 0)
//ук-ль на начало списка (только для первого элемента)
//ук-ль на конец списка
//степень (только для исходного списка)
//ук-ль на элемент исходного списка (только для первообразной)
//если первообразная - true
{
    int num, pow_;
 
    //ввод данных
    if (!prim) //для исходного списка
    {
        pow_ = stepen;
        cout << "vvedi a dlya x^" << pow_ << ":\n";
        cin >> num;
    }
    else //для списка с первообразной
    {
        num = (p->a)/((p->pow)+1);
        pow_ = (p->pow)+1;
        p = p->next;
    }
 
    if (num!=0) //если коэффициент не 0
 
    {
        numb* t = new numb;
        if (beg != NULL) //не первый элемент
        {
            t->a = num; 
            t->pow = pow_;
            t->next = NULL;
 
            end->next = t;
            end = t;
        }
        else //первый элемент
        {
            t->a = num;
            t->pow = pow_;
            t->next = NULL;
 
            beg = end = t;
        }
    }
 
    pow_--; //уменьшение степени
    
 
    if (pow_ >= 0 && !(prim && (p == NULL)))
    //степень >= 0, и указатель на след. элемент исходн. списка не 0 (при вычисл. первообразной)
        add_numbs(beg, end, pow_, p, prim);
    return;
}
 
//печатаем все элементы 
void print(numb* p, bool flag = 0) 
{
 
    if (!flag || p->a < 0) //первый вызов, не пишем "+" перед коэфф-том
    
    {
        cout << p->a;
        if (p->pow) //степень не 0
            cout << "x^" << p->pow; 
    }
    else
    {
        cout << "+" << p->a;
        if (p->pow) //степень не 0
            cout << "x^" << p->pow;
    }
    p = p->next;
 
    if (p != NULL)
        print(p,1);
    else
        cout << "\n";
}
 
//вычисление первообразной, создание списка с первообразной
void pervoobraznaja(numb* beg1, numb*& beg2, numb*& end2, int stepen)
{
    add_numbs(beg2,end2,stepen,beg1,1);
}
 
//удаление списка (рекурсивно)
numb* delete_chain(numb* beg)
{
    numb* p = beg;
 
    if (p != NULL)
    {
        numb* k = p->next;
        delete p;
        p = k;
        delete_chain(p);
    }
 
    return p;
}
 
//-------------------------------------------------------------------------------------------------
int _tmain(int argc, _TCHAR* argv[])
{
    int stepen_c, stepen; //степень многочлена (первая переменная не изменяется)
 
    numb *beg, *end, *beg2, *end2; //указатели на нач. и конец исходного и конечного списков
    beg = end = beg2 = end2 = NULL;
 
    cout << "vvedite n:\n";
    cin >> stepen_c;
    stepen = stepen_c;
 
    add_numbs(beg, end, stepen);
 
    stepen = stepen_c;
 
    pervoobraznaja(beg, beg2, end2, stepen); //формирование списка с производной т.к. элементы списка целые округляем результат в меньшую сторону
 
    print(beg); //печать исходного многочлена
    printf("\n");
    print(beg2); //печать полученного многочлена
 
    end = beg = delete_chain(beg); //освобождение памяти
    end2 = beg2 = delete_chain(beg2); //освобождение памяти
    getch();
 
    return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru