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

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

Войти
Регистрация
Восстановить пароль
 
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
#1

Прога проскакивет условие выхода, не могу найти ошибку в коде - C++

15.03.2012, 14:54. Просмотров 407. Ответов 6
Метки нет (Все метки)

Задание поделить многочлен на его производную, все делиться хорошо, но при условии когда мы находим НОД т е при деление в остатке 0 прога должна вывести нод, есть усл что при 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
148
149
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    double e1[10], e2[10], cop1[10], cop2[10], otv[10], cop22[10], otv1[10], ee2[10];
    int d1, d2;
    cout<<"Введите многочлен"<<endl;
    A:  cout<<"Введите значениe старшей степени многочлена:"; cin>>d1;
            if(!cin.good())
            {
                cout<<"Ошибка! Введите значениe старшей степени многочлена, заново!"<<endl;
                _flushall();
                cin.clear();
                _getch();
                goto A;
            }
 
            for(int i=0; i<d1+1; i++)
            {
    A1:      cout<<"Введите коэффициент x^"<<i<<"=";
             cin>>e1[i];
             if(!cin.good()&&(e1[d1]!=3)||(e1[i]==0))
                {
                    cout<<"Ошибка"<<endl;
                    _flushall();
                    cin.clear();
                    goto A1;
                }
            }
            cout<<e1[d1]<<"(x^"<<d1<<")";
            for(int i=d1-1; i>=0; i--)
            {   
                if(e1[i]>0) cout<<"+"<<e1[i]<<"(x^"<<i<<")";
                else cout<<e1[i]<<"(x^"<<i<<")";
            }
        for(int i=d1; i>=0; i--)
        {
            e2[i]=e1[i];
            cop1[i]=e1[i];//копия 1
        }
    cout<<" "<<endl;
 
    cout<<"Производная многочлена:";
    for(int i=d1; i>=1; i--)
    {
        e2[i-1]=e1[i]*i;
    }
    d2=d1-1;
    cout<<e2[d2]<<"(x^"<<d1-1<<")";
    for(int i=d2-1; i>=0; i--)
            {   
                if(e2[i]>0) cout<<"+"<<e2[i]<<"(x^"<<i<<")";
                else cout<<e2[i]<<"(x^"<<i-1<<")";
                ee2[i]=e2[i];
            }
    cout<<" "<<endl;
w:  if(d1<0) {cout<<"ОШИБКА";}
    else{
    int e = d1 - d2;
    cout<<"делимое:";
    cout<<cop1[d1]<<"(x^"<<d1<<")";
            for(int i=d1-1; i>=0; i--)
            {   
                if(cop1[i]>0) cout<<"+"<<cop1[i]<<"(x^"<<i<<")";
                else cout<<cop1[i]<<"(x^"<<i<<")";
            }
    cout<<"делитель:";
    cout<<e2[d2]<<"(x^"<<d1-1<<")";
    for(int i=d2-1; i>=0; i--)
            {   
                if(e2[i]>0) cout<<"+"<<e2[i]<<"(x^"<<i<<")";
                else cout<<e2[i]<<"(x^"<<i-1<<")";
            }
    for(int i=0; i<d1+1; i++)
        {
            if(i==0) cop2[i]=0;
            else cop2[i]=e2[i-1];
        }
                do//деление многочлена на производную
                    {
        
                        double u = cop1[d1]/cop2[d1];
                        cout<<"Коэф:";
                        for(int i=0; i<d1+1; i++)
                        {
                            cop22[i] = cop2[i] * u;
                            cout<<"   "<<cop22[i];
                        }
                        cout<<" "<<endl;
                        cout<<cop22[d1]<<"(x^"<<d1<<")";
                        for(int i=d1-1; i>=0; i--)
                        {
                            if(cop22[i]>0) cout<<"+"<<cop22[i]<<"(x^"<<i<<")";
                            else cout<<cop22[i]<<"(x^"<<i<<")";
                        }
                        cout<<" "<<endl;
                        for(int i=0; i<d1+1; i++)
                        {
                            otv[i]=cop1[i]-cop22[i];
                        }
                        cout<<"Промежуточн отв"<<endl;
                        cout<<otv[d1]<<"(x^"<<d1<<")";
                        for(int i=d1-1; i>=0; i--)
                        {
                            if(otv[i]>0) cout<<"+"<<otv[i]<<"(x^"<<i<<")";
                            else cout<<otv[i]<<"(x^"<<i<<")";
                        }
                        cout<<""<<endl; 
                        d1 = d1 - 1;
                        for(int i=0; i<d1+1; i++)
                        {
                            cop1[i] = otv[i];
                            cop2[i] = e2[i];
                        }
                    }
                while(d1>=d2);
                if(otv[d1]==0){     cout<<"НОД"<<endl;
                                    cout<<cop2[d2]<<"(x^"<<d2<<")";
                                    for(int i=d2-1; i>=0; i--)
                                    {
                                        if(cop2[i]>0) cout<<"+"<<cop2[i]<<"(x^"<<i<<")";
                                        else cout<<cop2[i]<<"(x^"<<i<<")";
                                    }
                                }
                
                else{
                    d1=d2;
                    d2=d1-1;
                        for(int i=0; i<d1+1; i++)
                        {
                            cop1[i]=e2[i];
                            e2[i]=otv[i];
                            
                        }
                        goto w;
                    }
    }
 
    system("pause");
    return 0;
}
 
[ATTACH]134485[/ATTACH]
0
Миниатюры
Прога проскакивет условие выхода, не могу найти ошибку в коде  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.03.2012, 14:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Прога проскакивет условие выхода, не могу найти ошибку в коде (C++):

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

Не могу найти ошибку в коде - C++
Не могу найти ошибку в коде. Помогите плиз. Нужно вычислить приближённое значение суммы этого бесконечного ряда. #include &lt;iostream&gt;...

Не могу найти ошибку в коде - C++
Здравствуйте еще раз! У меня возникла проблема: В написанном мною коде какая то ошибка, которую ни я, ни компилятор, не может выявить. ...

Не могу найти ошибку в коде - C++
Привет всем. У меня не получается построить решение. Вот код. #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;clocale&gt; using...

Не могу найти ошибку в коде - C++
class genetic { typedef bool* chr; typedef vector&lt;chr&gt; vals; vals population; bool...

Не могу найти ошибку в коде - C++
Работаю со связанным списком. нужно удалить из него указанный элемент. Вот код функции удаления: void List::Delete(int Number){ ...

6
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.03.2012, 15:25 #2
Цитата Сообщение от White Luna Посмотреть сообщение
но при условии когда мы находим НОД т е при деление в остатке 0 прога должна вывести нод, есть усл что при 0 коэф вывод нода, но прог проскакивает это усл
А в какой строке это условие?
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
15.03.2012, 15:30  [ТС] #3
124 строка

Добавлено через 2 минуты
ой, нашла еще одну проблему он не доходит до усл 0, у меня зацикливается цикл в 123 строке, непонятно почему
0
fasked
Эксперт С++
4948 / 2528 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
15.03.2012, 15:50 #4
Цитата Сообщение от White Luna Посмотреть сообщение
124 строка
На ум приходит две из возможных причин:
1. Никогда не сравнивайте числа с плавающей запятой с точными числами. Лучше напишите, что-нибудь в духе
if (otv[d1] < 0.0005 && otv[d1] > -0.0005)

Такие числа сравнивать надо с погрешностью. Они почти никогда не бывают равны именно 0.

2. Проверить на корректность d1. Может индекс расчитывается неправильно и обращение происходит к другому элементу.

Добавлено через 13 минут
Цитата Сообщение от White Luna Посмотреть сообщение
ой, нашла еще одну проблему он не доходит до усл 0, у меня зацикливается цикл в 123 строке, непонятно почему
На каких данных зацикливается? Вроде не должен. Уверены, что это не после goto на 142 строке?

Добавлено через 5 минут
White Luna, и все таки перепишите строку сравнения вот так:
C++
1
if(otv[d1] > -0.001 && otv[d1] < 0.001)
Подберите нужную Вам точность. Я проверил у себя - так работает, как Вы и ожидаете. То есть печатает НОД.
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
15.03.2012, 17:44  [ТС] #5
странно у меня даже после вставки условия выдает ошибку
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
15.03.2012, 17:54  [ТС] #6
ну вот, если при таких условиях, то даже ха пределы деления не выходит, и ошибка сама всетаки в условии 123 строки, тут Razmer первое d1, а второе d2, и деже при том что после 0 0, идет -1 0, что явно протеворечит условию окончания цикла. Вот ошибка. немогу понять из-за чего.

Прога проскакивет условие выхода, не могу найти ошибку в коде
0
White Luna
32 / 26 / 2
Регистрация: 08.09.2010
Сообщений: 402
15.03.2012, 20:14  [ТС] #7
C++
1
while(d1>=d2);
хотя условие четкое, но почему то не срабатвает, или может ли интерпритатор его игнорить?

Добавлено через 1 час 27 минут
к данному коду еще добавляет деление многочлена на нод, который находиться в первом коде
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
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
#include "stdafx.h"
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL,"Russian");
    double e1[10], e2[10], cop1[10], cop2[10], otv[10], cop22[10], ee2[10];
    int d1, d2;
    cout<<"Введите многочлен"<<endl;
    A:  cout<<"Введите значениe старшей степени многочлена:"; cin>>d1;
            if(!cin.good())
            {
                cout<<"Ошибка! Введите значениe старшей степени многочлена, заново!"<<endl;
                _flushall();
                cin.clear();
                _getch();
                goto A;
            }
 
            for(int i=0; i<d1+1; i++)
            {
    A1:      cout<<"Введите коэффициент x^"<<i<<"=";
             cin>>e1[i];
             if(!cin.good()&&(e1[d1]!=3)||(e1[i]==0))
                {
                    cout<<"Ошибка"<<endl;
                    _flushall();
                    cin.clear();
                    goto A1;
                }
            }
            int rez=d1;
            cout<<e1[d1]<<"(x^"<<d1<<")";
            for(int i=d1-1; i>=0; i--)
            {   
                if(e1[i]>0) cout<<"+"<<e1[i]<<"(x^"<<i<<")";
                else cout<<e1[i]<<"(x^"<<i<<")";
            }
        for(int i=d1; i>=0; i--)
        {
            e2[i]=e1[i];
            cop1[i]=e1[i];//копия 1
        }
    cout<<" "<<endl;
 
    cout<<"Производная многочлена:";
    for(int i=d1; i>=1; i--)
    {
        e2[i-1]=e1[i]*i;
    }
    d2=d1-1;
    cout<<e2[d2]<<"(x^"<<d1-1<<")";
    for(int i=d2-1; i>=0; i--)
            {   
                if(e2[i]>0) cout<<"+"<<e2[i]<<"(x^"<<i<<")";
                else cout<<e2[i]<<"(x^"<<i-1<<")";
                ee2[i]=e2[i];
            }
    cout<<" "<<endl;
w:  if(d1<0) {cout<<"ОШИБКА";}
    else{
    int e = d1 - d2;
    cout<<"делимое:";
    cout<<cop1[d1]<<"(x^"<<d1<<")";
            for(int i=d1-1; i>=0; i--)
            {   
                if(cop1[i]>0) cout<<"+"<<cop1[i]<<"(x^"<<i<<")";
                else cout<<cop1[i]<<"(x^"<<i<<")";
            }
    cout<<"делитель:";
    cout<<e2[d2]<<"(x^"<<d1-1<<")";
    for(int i=d2-1; i>=0; i--)
            {   
                if(e2[i]>0) cout<<"+"<<e2[i]<<"(x^"<<i<<")";
                else cout<<e2[i]<<"(x^"<<i-1<<")";
            }
    for(int i=0; i<d1+1; i++)
        {
            if(i==0) cop2[i]=0;
            else cop2[i]=e2[i-1];
        }
                //деление многочлена на производную
            do
            {
                        double u = cop1[d1]/cop2[d1];
                        cout<<"Коэф:";
                        for(int i=0; i<d1+1; i++)
                        {
                            cop22[i] = cop2[i] * u;
                            cout<<"   "<<cop22[i];
                        }
                        cout<<" "<<endl;
                        cout<<cop22[d1]<<"(x^"<<d1<<")";
                        for(int i=d1-1; i>=0; i--)
                        {
                            if(cop22[i]>0) cout<<"+"<<cop22[i]<<"(x^"<<i<<")";
                            else cout<<cop22[i]<<"(x^"<<i<<")";
                        }
                        cout<<" "<<endl;
                        for(int i=0; i<d1+1; i++)
                        {
                            otv[i]=cop1[i]-cop22[i];
                        }
                        cout<<"Промежуточн отв"<<endl;
                        cout<<otv[d1]<<"(x^"<<d1<<")";
                        for(int i=d1-1; i>=0; i--)
                        {
                            if(otv[i]>0) cout<<"+"<<otv[i]<<"(x^"<<i<<")";
                            else cout<<otv[i]<<"(x^"<<i<<")";
                        }
                        cout<<""<<endl; 
                        d1 = d1 - 1;
                        cout<<"Razmer"<<endl;
                        cout<<d1<<endl;
                        cout<<d2<<endl;
                        for(int i=0; i<d1+1; i++)
                        {
                            cop1[i] = otv[i];
                            cop2[i] = e2[i];
                        }
                    
            }while(d1>=d2);
                if(otv[d1] > -0.001 && otv[d1] < 0.001)
                                {       cout<<"НОД"<<endl;
                                    cout<<cop2[d2]<<"(x^"<<d2<<")";
                                    for(int i=d2-1; i>=0; i--)
                                    {
                                        if(cop2[i]>0) cout<<"+"<<cop2[i]<<"(x^"<<i<<")";
                                        else cout<<cop2[i]<<"(x^"<<i<<")";
                                    }
                                }
                else{
                    d1=d2;
                    d2=d1-1;
                        for(int i=0; i<d1+1; i++)
                        {
                            cop1[i]=e2[i];
                            e2[i]=otv[i];
                        }
                        goto w;
                    }
    }
/////////////////////////рез деление многочлена на нод
    double w[10], w2[10], posl[10], zam[10];
    int y=rez-d2;
    for(int i=0; i<d2; i++){zam[i]=cop2[i];}
    for(int i=rez; i>=0; i++)
    {
        if((i-y)<0) w[i]=0;
        else w[i]=cop2[i-y];
    }
    do{
 
        double q=e1[rez]/w[rez];
        for(int i=0; i<rez+1; i++)
        {
            w2[i]=w[i]*q;
        }
        for(int i=0; i<rez+1; i++)
        {
            posl[i]=e1[i]-w2[i];
        }
        cout<<"Ответ деления"<<endl;
        cout<<posl[rez]<<"(x^"<<d1<<")";
        for(int i=rez-1; i>=0; i--)
        {
            if(posl[i]>0) cout<<"+"<<posl[i]<<"(x^"<<i<<")";
            else cout<<posl[i]<<"(x^"<<i<<")";
        }
        cout<<""<<endl;
        rez=rez-1;
        for(int i=0; i<rez+1; i++)
        {
            e1[i]=posl[i];
            w[i]=zam[i];
        }
 
      }while(rez>=d2);
 
    system("pause");
    return 0;
}
и все равно та же ошибка с d1 и d2 где не срабатывает условие
0
15.03.2012, 20:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.03.2012, 20:14
Привет! Вот еще темы с ответами:

Не могу найти ошибку в коде - C++
Помогите пожалуйста найти ошибку в коде: #include &lt;fstream&gt; #include &lt;iostream&gt; using namespace std; const int n = 8; ...

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

Не могу найти ошибку в коде :( - C++
#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; void main () { clrscr(); float eps=0.0001; float x,S,ocr; scanf...

Не могу найти ошибку в коде - C++
Игра &quot;БлэкДжек&quot; Ошибка - &quot;Прекращена работ программы&quot;. С чем это связано - не могу понять... // Д/З 25 Блэк-Джек #include...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

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