Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/47: Рейтинг темы: голосов - 47, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
1

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

22.09.2012, 21:37. Показов 8535. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребят помогите пожалуйста,как создать функцию возвращающую указатель на структуру,в общем задание звучит так:написать библиотеку для полиномов:сложение, вычитание,значение в точке.
я описываю структуру в header,массив коэффициентов и степень многочлена
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
#ifndef POLINOM_MODULE_H_INCLUDED
#define POLINOM_MODULE_H_INCLUDED
struct polinom
{
    double *massiv_koef;
    int stepen_m;
}
polinom *SummaPolinomov(polinom *a,*b);
 
#endif // POLINOM_MODULE_H_INCLUDED 
а в сpp пишу вот так-это пока только сложение 
 
polinom *SummaPolinomov(polinom *a,*b)
{polinom *c=new polinom[];
    if(*a.stepen_m>*b.stepen_m){
       *c.massiv_koef=new double[*a.stepen_m];
       for (int i=0;i<*b.stepen_m;i++){
           *c.massiv_koef[i]=*a.massiv_koef[i]+*b.massiv_koef[i];}
       for(int i=*b.stepen_m;i<*a.stepen_m;i++){
           *c.massiv_koef[i]=*a.massiv_koef[i];}
}
    else{
    *c.massiv_koef=new double[*b.stepen_m];
       for (int i=0;i<*a.stepen_m;i++){
           *c.massiv_koef[i]=*b.massiv_koef[i]+*a.massiv_koef[i];}
       for(int i=*a.stepen_m;i<*b.stepen_m;i++){
           *c.massiv_koef[i]=*b.massiv_koef[i];} };
           return c;}
что не так?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.09.2012, 21:37
Ответы с готовыми решениями:

Функция, возвращающая указатель на структуру
Помогите пожалуйста понять в чем ошибка! Функция create должна возвращать указатель на структуру...

Структура и функция, возвращающая указатель на структуру
Добрый вечер! В чем проявляется особенность функции, если мы даем ей тип от имени структуры? (или...

Функция, возвращающая указатель
Нужно написать функцию, входящие параметры которой являются указателем на структуру. Заполнить в...

Функция, возвращающая указатель
Здравствуйте. Пускай есть класс Some_type и массив такого класса. Можно ли функцией Some_type*...

15
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
22.09.2012, 21:53 2
C++
1
2
3
4
5
6
polinom *SummaPolinomov(polinom *a,*b)
{
//...
   if(*a.stepen_m>*b.stepen_m)
// ...
}
Если вы используете указатели на структуры, то для обращения к полям структуры не обязательно разыменовывать указатели. Лучше пользоваться оператором -> вот так:
C++
1
2
3
4
5
6
polinom *SummaPolinomov(polinom *a,*b)
{
//...
   if (a->stepen_m > b->stepen_m)
// ну ивезде по тексту поменять
}
А при той записи, как у вас, разыменовывается не указатель, а поле stepen_m, которое указателем не является, и, соответсвтенно, оператор разыменовывания к нему не применим.

По поводу возвращаемого значения - всё правильно.
0
ComfyMobile
401 / 282 / 34
Регистрация: 24.07.2012
Сообщений: 916
22.09.2012, 21:54 3
Цитата Сообщение от Fissil Посмотреть сообщение
что не так?
для начала оформление исправте
0
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
22.09.2012, 21:54 4
C++
1
*c.massiv_koef[i]=*a.massiv_koef[i]
Тут тоже должно быть так:
C++
1
c->massiv_koef[i] = a->massiv_koef[i]
0
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
22.09.2012, 22:18  [ТС] 5
Компилятор показывает ошибку в обьявлении функции и говорит
error: expected constructor, destructor, or type conversion before '*' token

Добавлено через 58 секунд
polinom *SummaPolinomov(polinom *a,*b)
ошибка в этой строке
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
22.09.2012, 22:21 6
Цитата Сообщение от Fissil Посмотреть сообщение
polinom *SummaPolinomov(polinom *a,*b)
разумеется ошибка
*b это кто???
может все таки
C++
1
polinom *SummaPolinomov(polinom *a,polinom *b)
0
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
22.09.2012, 22:23  [ТС] 7
Никакой разницы,все равно
0
Модератор
Эксперт по электронике
8909 / 6678 / 918
Регистрация: 14.02.2011
Сообщений: 23,523
22.09.2012, 22:32 8
т.е ты хочешь сказать что
Цитата Сообщение от Fissil Посмотреть сообщение
polinom *SummaPolinomov(polinom *a,*b)
и
Цитата Сообщение от ValeryS Посмотреть сообщение
polinom *SummaPolinomov(polinom *a,polinom *b)
Это одно и тоже?
0
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
22.09.2012, 22:36  [ТС] 9
нет в смысле ошибка та же самая
0
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
22.09.2012, 22:43 10
нет в смысле ошибка та же самая
Ошибка у тебя из-за того, что после определения структуры точку с запятой не поставил.
1
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
22.09.2012, 23:01  [ТС] 11
Блин,спасибо огромное=))

Добавлено через 1 минуту
А нет,все равно пишет,что перед * ожидался идентификатор

Добавлено через 3 минуты
Нет все равно пишет,только теперь header
error: expected identifier before '*' token|
0
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
22.09.2012, 23:04 12
Говорили же.
C++
1
polinom *SummaPolinomov(polinom *a,*b)
А надо:
C++
1
polinom *SummaPolinomov(polinom *a,polinom*b)
Добавлено через 1 минуту
А сама функция должна быть так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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];
        for (int i=0;i<b->stepen_m;i++){
            c->massiv_koef[i]=a->massiv_koef[i]+b->massiv_koef[i];}
        for(int i=b->stepen_m;i<a->stepen_m;i++){
            c->massiv_koef[i]=a->massiv_koef[i];}
    } else
    {
        c->massiv_koef=new double[b->stepen_m];
        for (int i=0;i<a->stepen_m;i++)
            c->massiv_koef[i]=b->massiv_koef[i]+a->massiv_koef[i];
        for(int i=a->stepen_m;i<b->stepen_m;i++)
            c->massiv_koef[i]=b->massiv_koef[i];
    };
    return c;
}
1
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
22.09.2012, 23:06  [ТС] 13
Да-Да я абсолютно все исправил,в обычном проекте работает,а когда в библиотеке то нет
0
2278 / 1769 / 741
Регистрация: 27.07.2012
Сообщений: 5,253
22.09.2012, 23:08 14
Цитата Сообщение от Fissil Посмотреть сообщение
в обычном проекте работает,а когда в библиотеке то нет
Что ты имеешь ввиду под "обычным проектом" и "библиотекой"?
1
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
22.09.2012, 23:10  [ТС] 15
Все-все,я разобрался,спасибо вам большое,я просто еще совсем нуб в проганье))
0
0 / 0 / 0
Регистрация: 22.09.2012
Сообщений: 19
05.10.2012, 22:50  [ТС] 16
Ребят вылезла проблема,я уже голову сломал
Не работает сумма(разность) полиномов когда один(или оба) полинома нулевой степени
помогите пожалуйста вот библиотека


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;
}
0
05.10.2012, 22:50
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.10.2012, 22:50
Помогаю со студенческими работами здесь

Функция, возвращающая указатель
Добрый вечер. Требуется написать программу, содержащую структуру вида type1 *имя(type2); т.е....

Функция, возвращающая указатель на функцию
Всем привет, Мне нужно создать функцию, которая будет возвращает указатель на функцию. Я создам...

Функция возвращающая указатель на int
Не могу понять ошибки. // prata 7 pt to function.cpp : Defines the entry point for the console...

Функция, возвращающая умный указатель
Здравствуйте, помогите пожалуйста создать функцию, возвращающую умный указатель. Мой вариант не...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru