Форум программистов, компьютерный форум 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++ вычислить результат выражения. помогите пожалуйста написать программу, которая по заданному натуральному значению n и действительному x вычисляет результат выражения. http://www.cyberforum.ru/cpp-beginners/thread219117.html
составить блок-схему к программе C++
Добрые люди) Помогите пожалуйста срочно составить в ближайшее время блок-схему к этой программе, завтра просто поздно будет, не поставят зачет((( Вот я написал программу а блок схема не получается! #include <stdio.h> #include <iostream.h> #include <stdlib.h> #include <math.h> int main () {
C++ Графы
Граф задан своей матрицей смежностей. Вывести на экран все связные вершины...очень скоро нужно...извините за срочность
C++ Пирамидальная сортировка с вопросами http://www.cyberforum.ru/cpp-beginners/thread219109.html
Большая просьба,помоги мне ответить Это пирамидальная сортировка с++ Заранее спасибо #include<conio.h> #include <stdio.h> #include <stdlib.h> #include <time.h>// Что выполняет?
C++ программирование с использованием структур нужно решить задачу: В справочной аэропорта хранится расписание вылета самолетов на сле-дующие сутки. Для каждого рейса указаны номер рейса, тип самолета, пункт назначения, время вылета. Вывести все номера рейсов, типы самолетов и время вылета в заданный пункт назначения в порядке возрастания времени вылета. подробнее

Показать сообщение отдельно
SoulTaker
0 / 0 / 0
Регистрация: 12.10.2010
Сообщений: 10
23.12.2010, 23:25     рекурсивная обработка списков
написал программу для вычисления первообразной...все работает,но при введении коэфициэнта при 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 18:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru