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

Функция, возвращающая указатель на структуру - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Расчет ускорения тела на плоскости http://www.cyberforum.ru/cpp-beginners/thread656223.html
Доброго время суток. Написать программу для расчета тела массой m, которое находится на горизонтальной плоскости и к которому под углом \alpha (к горизонту) приложена сила {F}_{0}. Коэффициент трения тела о плоскость равен \mu. Предусмотреть вариант, когда тело неподвижно (использовать тернарный оператор). Воспользоваться тем, что если тело движется, на него вдоль плоскости движения действует...
C++ помогите решить задачу Написати програму в C++ яку водиться: Дата/Місяць/Рік і виводитись має Місяць/День/Рік але вводитись має число а виводитись повністю назва місяця наприклад 01/01/12 і виводиться Січень/01/2012 Допоможіть. http://www.cyberforum.ru/cpp-beginners/thread656221.html
C++ Как передать в качестве параметра конструктора ПОТОК,
Здравтсвуйте. Есть класс Notebook(); Один из конструкторов принимает в качестве параметра поток(файл), заполняет книжку именами из файла. main.c #include <iostream> #include <stdio.h> #include "notebook.h" using namespace std;
C++ Принцип работы рекурсии
Искал в инете и в поиске, но никак не могу понять принцип работы рекурсии программно. Допустим есть функция int f(int n) { if(0 == n) return 0; else return n % 10 + f(n / 10); } если переделать данную функцию static int i; int f(int n) {
C++ Добавить в элементы список и вывести их на экран http://www.cyberforum.ru/cpp-beginners/thread656208.html
написала программу, которая добавляет в список элементы и должна их выводить на экран. функция, которая должна их выводить не работает. подскажите, в чем ошибка? #include <iostream> using namespace std; struct list { int data; list *next;
C++ auto Хочу сделать автомат. переменную auto int x; auto double f; Ругается. Как исправить? подробнее

Показать сообщение отдельно
Fissil
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
05.10.2012, 22:50  [ТС]     Функция, возвращающая указатель на структуру
Ребят вылезла проблема,я уже голову сломал
Не работает сумма(разность) полиномов когда один(или оба) полинома нулевой степени
помогите пожалуйста вот библиотека


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
#include"polinom_module.h"
#include <cmath>
#include<iostream>
using namespace std;
//#include "TXLib.h"
 
 
 
double gorner(double x,double  *massiv_koef ,int i, int stepen_m)
{
    if (i+1 < stepen_m)
        return gorner(x,massiv_koef,i+1,stepen_m)*x + massiv_koef[i];
    else
        return massiv_koef[stepen_m]*x + massiv_koef[i];
}
 
polinom *SummaPolinomov(polinom *a,polinom*b)
{
    polinom *c=new polinom;
    if(a->stepen_m>=b->stepen_m)
    {
        c->massiv_koef=new double[a->stepen_m+1];
        c->stepen_m=a->stepen_m;
        for (int i=0; i<b->stepen_m+1; i++)
        {   cout<<'1'<<endl;
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];
        }   cout<<'2';
        for(int i=b->stepen_m+1; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i];
        }
        if (c->massiv_koef[c->stepen_m]==0)
        {
            c->stepen_m=c->stepen_m-1;
        }
 
    }
 
    if (a->stepen_m<b->stepen_m)
    {   cout<<"1";
        c->massiv_koef=new double[b->stepen_m+1];
        c->stepen_m=b->stepen_m;
        for (int i=0; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];
            cout<<c->massiv_koef[i]<<endl;
        }
        for(int i=a->stepen_m+1; i<b->stepen_m+1; i++)
        {
            c->massiv_koef[i]=b->massiv_koef[i];
        }
    }
    return c;
}
 
polinom *RaznostPolinomov(polinom *a,polinom*b)
{
    polinom *c=new polinom;
    if(a->stepen_m>=b->stepen_m)
    {
        c->massiv_koef=new double[a->stepen_m+1];
        c->stepen_m=a->stepen_m;
        for (int i=0; i<b->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i]-b->massiv_koef[i];
        }
        for(int i=b->stepen_m+1; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i];
        }
        if (c->massiv_koef[c->stepen_m]==0)
        {
            c->stepen_m=c->stepen_m-1;
        }
    }
    else
    {
        c->massiv_koef=new double[b->stepen_m+1];
        c->stepen_m=b->stepen_m;
        for (int i=0; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=b->massiv_koef[i]-a->massiv_koef[i];
        }
        for(int i=a->stepen_m+1; i<b->stepen_m+1; i++)
        {
            c->massiv_koef[i]=b->massiv_koef[i];
        }
    }
    return c;
}
 
polinom *ProizPolinomov(polinom *a,polinom*b)
{
    polinom *c=new polinom;
    c->stepen_m=(a->stepen_m)+(b->stepen_m);
    c->massiv_koef=new double[c->stepen_m+1];
    for (int k=0; k<c->stepen_m+1; k++)
    {
        c->massiv_koef[k]=0;
        //cout<<"Y"<<endl;
    }
    for(int i=0; i<=(a->stepen_m)+(b->stepen_m)+1; i++)
    {
        for(int j=0; j<=i; j++)
        {
            c->massiv_koef[i]=c->massiv_koef[i]+(a->massiv_koef[j])*(b->massiv_koef[i-j]);
        };
    };
    return c;
 
}
 
double Znach(polinom *a,double x)
{
    if(a->stepen_m==0)
    {
        return a->massiv_koef[0];
    }
    return gorner(x,a->massiv_koef ,0, a->stepen_m);
}
 
polinom * Diff(polinom *a)
{
    int k=1;
    a->massiv_koef=a->massiv_koef+1;
    a->stepen_m=a->stepen_m-1;
    for (int i=0; i<a->stepen_m+1; i++)
    {
        a->massiv_koef[i]=a->massiv_koef[i]*k;
        k++;
    }
    return a;
}
 
// A function doing nothing ;)
void SampleFunction1()
{
    // insert code here
}
 
// A function always returning zero
int SampleFunction2()
{
    // insert code here
 
    return 0;
}
вот header

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef POLINOM_MODULE_H_INCLUDED
#define POLINOM_MODULE_H_INCLUDED
struct polinom;
 
struct polinom
{
    double *massiv_koef;
    int stepen_m;
};
polinom* DeleteLast(polinom* arr);
polinom *SummaPolinomov(polinom *a,polinom *b);
polinom *RaznostPolinomov(polinom *a,polinom *b);
polinom *ProizPolinomov(polinom *a,polinom *b);
double Znach(polinom *a,double x);
polinom * Diff(polinom *a);
 
#endif // POLINOM_MODULE_H_INCLUDED
вот main

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
#include <iostream>
#include "polinom_module.h"
//#include "TXLib.h"
using namespace std;
void vivod(polinom *a)
{
 
 
    for(int i=0; i<a->stepen_m+1; i++)
    {
        cout<<"коэффициент "<<i<<" - "<<a->massiv_koef[i]<<endl;
    }
    cout<<"Cтепень многочлена равна "<<a->stepen_m<<endl;
};
/*void print(double a, double b, double c, polinom *p)
{
    double y1=800/(b-a);
    c=c/y1;
//c=c/1000;
    for(a; a<b; a=a+c)
    {
 
        txLine (a*y1+400, 300-Znach(p,a)*y1, (a+c)*y1+400, 300-Znach(p,a+c)*y1);
    }
 
 
};*/
 
int main()
{
    int j;
    setlocale(LC_ALL, "Russian");
//
// Ввод данных
//
 
//
// Вычисления
//
    polinom *a=new polinom;
    polinom *b=new polinom;
    a->stepen_m=0;
    b->stepen_m=0;
    a->massiv_koef=new double[1];
    b->massiv_koef=new double[1];
    cout<<"введите коэффициенты первого массива"<<endl;
    for (int i=0; i<a->stepen_m+1; i++)
    {
        cin>>a->massiv_koef[i];
    }
    cout<<"введите коэффициенты второго массива"<<endl;
    for (int j=0; j<b->stepen_m+1; j++)
    {
        cin>>b->massiv_koef[j];
    }
    //a->massiv_koef[0]=-3;
    //a->massiv_koef[1]=-1;
    //a->massiv_koef[2]=2;
    //a->massiv_koef[3]=15;
    //b->massiv_koef[0]=12;
    //b->massiv_koef[1]=5;
    //b->massiv_koef[2]=4;
    //b->massiv_koef[3]=-7;
    polinom *c=SummaPolinomov(a,b);
    polinom *d=RaznostPolinomov(a,b);
    polinom *l=ProizPolinomov(a,b);
    polinom *m=Diff(b);
    //cout<<c->massiv_koef[1]<<endl;
    cout<<"Сумма полиномов"<<endl;
    vivod(c);
    
    cout<<"Разность полиномов"<<endl;
    vivod(d);
    cout<<"Произведение полиномов"<<endl;
    vivod(l);
    cout<<"Производная полинома"<<endl;
    vivod(m);
    cout<<"введите точку для определения значения полинома";
    cin>>j;
    cout<<endl;
    cout<<"Значение первого полинома в точке "<<j<<" "<<Znach(a,j)<<endl;
 
    /*cout<<c->stepen_m<<endl;
    cout<<Znach(a,0);*/
    //double first_x;
    //cout<<"СТРОИМ ГРАФИК"<<endl;
    //cout<<"Введите интервал"<<endl;
    //cin>>first_x;
    //vivod(a);
    /*txCreateWindow (800, 600);
    txBegin();
    txTextOut (780, 280, "x");
    txTextOut (380, 20, "y");
    txLine (0, 300, 800, 300);
    txLine (400, 0, 400, 600);
    print(-first_x,first_x,1,a);
    txSleep(1000);
    txSetColor(TX_RED);
    print(-first_x,first_x,1,Diff(a));
    txEnd();*/
    delete[] a->massiv_koef;
    delete[] b->massiv_koef;
    delete[] c->massiv_koef;
    delete[] d->massiv_koef;
    delete[] a;
    delete[] b;
    delete[] c;
    delete[] d;
 
//delete[] l;
    return 0;
}
Добавлено через 21 минуту
скорее всего где-то здесь ошибка((

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
polinom *SummaPolinomov(polinom *a,polinom*b)
{
    polinom *c=new polinom;
    if(a->stepen_m>=b->stepen_m)
    {
        c->massiv_koef=new double[a->stepen_m+1];
        c->stepen_m=a->stepen_m;
        for (int i=0; i<b->stepen_m+1; i++)
        {   cout<<'1'<<endl;
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];
        }   cout<<'2';
        for(int i=b->stepen_m+1; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i];
        }
        if (c->massiv_koef[c->stepen_m]==0)
        {
            c->stepen_m=c->stepen_m-1;
        }
 
    }
 
    if (a->stepen_m<b->stepen_m)
    {   cout<<"1";
        c->massiv_koef=new double[b->stepen_m+1];
        c->stepen_m=b->stepen_m;
        for (int i=0; i<a->stepen_m+1; i++)
        {
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];
            cout<<c->massiv_koef[i]<<endl;
        }
        for(int i=a->stepen_m+1; i<b->stepen_m+1; i++)
        {
            c->massiv_koef[i]=b->massiv_koef[i];
        }
    }
    return c;
}
 
Текущее время: 14:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru