0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 5
1

Return

11.04.2011, 01:51. Показов 1270. Ответов 9
Метки нет (Все метки)

Всем доброго времени суток! У меня возникла проблема с возвратом значения массива double *c, у меня берётся только одно последнее значение c[i]. Прошу объяснить в чём моя ошибка, заранее спасибо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double POL(double *x,double *y,int n)
{
double *c;
...
    for(i=1;i<=n;i++)
    {
        c[i]=0;
        for(int k=1;k<=n;k++)
        {
            c[i]=c[i]+a[k][i]*y[k-1];
        }
    }
    return *c;
}
int main()
{
...
    for(j=1;j<=N;j++)
    {
        yj[j-1]=POL(xi,yi,m);
    }
...
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2011, 01:51
Ответы с готовыми решениями:

В чем разница между return и return false/true
Привет всем. Вот подскажите плиз) return; return false; return true; расскажите пожалуйста...

Как сделать так, что если файл существует return true, если нет - return false
Здравствуйте, я новичок в программировании. Мой вопрос очень прост: как сделать так, что если файл...

с++ while return
Задание:Вводится точность e. Вычислить сумму ряда 1-1/3+1/5-1/7.... сумма Вычисления продолжать до...

return *this;
return *this; Возвращает само себя?

9
Эксперт С++
5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
11.04.2011, 01:58 2
Не понятно, что вам не нравится... Вы возвращаете *c, т.е. c[0]. А что вы хотели вернуть?
0
4238 / 2210 / 815
Регистрация: 29.11.2010
Сообщений: 4,838
11.04.2011, 02:02 3
Что это?
Массивы начинаются с нуля.
Память под "с" выделяется? Если нет, эффект непредсказуем.
Возвращается значение double. То бишь значение double, расположенное по указателю "c".
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 5
11.04.2011, 02:04  [ТС] 4
Мне нужно из функции вернуть от с[0] до с[n].
0
Эксперт С++
5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
11.04.2011, 02:12 5
Просто вернуть массив не получится. Можно выделять память под массив в функции, возвращать указатель, а очищать память в другом месте. Можно использовать std::vector, его можно вернуть. Можно завернуть массив в структуру и возвращать экземпляр структуры.
1
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 5
11.04.2011, 02:25  [ТС] 6
Цитата Сообщение от silent_1991 Посмотреть сообщение
Просто вернуть массив не получится. Можно выделять память под массив в функции, возвращать указатель, а очищать память в другом месте. Можно использовать std::vector, его можно вернуть. Можно завернуть массив в структуру и возвращать экземпляр структуры.
Если массив нельзя возвращать, то с моим знанием языка, наверное, легче будет просто массив с[n] считать в главной функции без искользования функции POL.
0
34 / 34 / 9
Регистрация: 19.03.2010
Сообщений: 136
11.04.2011, 03:00 7
Как вариант мне кажется конструкция типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double POL(double *x,double *y,int n, int index)
{
double *c;
...
        for(i=1;i<=n;i++)
        {
                c[i]=0;
                for(int k=1;k<=n;k++)
                {
                        c[i]=c[i]+a[k][i]*y[k-1];
                }
        }
        return c[index];
}
int main()
{
...
        for(j=1;j<=N;j++)
        {
                yj[j-1]=POL(xi,yi,m,j-1);
        }
...
}
Если я правильно понял задачу.
Но тогда при каждом вызове в массиве будут вноситься изменения,был бы более полный код может подсказал бы что...
0
Эксперт С++
5052 / 3113 / 271
Регистрация: 11.11.2009
Сообщений: 7,045
11.04.2011, 03:04 8
Fafle, нет, ТС хотел возвратить массив. Самое смешное, что когда я пишу код - я всё помню, а когда перечисляю варианты, как можно вернуть массив из функции, всегда забываю главный - передача массива через параметр-указатель))) Это, конечно, нельзя назвать чистым возвратом, но основная цель достигнута - массив изменён функцией, и эти изменения видны извне.
0
4201 / 1793 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.04.2011, 05:58 9
Nolifer, стандартом c++ предусмотрена передача массивов в функцию и возврат из неё только по указателю, а не по значению. Или пиши свой класс массива-объекта, тогда можешь плюнуть на стандарт, так как твой массив не будет стандартным.
0
0 / 0 / 0
Регистрация: 28.11.2010
Сообщений: 5
11.04.2011, 12:33  [ТС] 10
Цитата Сообщение от Fafle Посмотреть сообщение
Как вариант мне кажется конструкция типа
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double POL(double *x,double *y,int n, int index)
{
double *c;
...
        for(i=1;i<=n;i++)
        {
                c[i]=0;
                for(int k=1;k<=n;k++)
                {
                        c[i]=c[i]+a[k][i]*y[k-1];
                }
        }
        return c[index];
}
int main()
{
...
        for(j=1;j<=N;j++)
        {
                yj[j-1]=POL(xi,yi,m,j-1);
        }
...
}
Если я правильно понял задачу.
Но тогда при каждом вызове в массиве будут вноситься изменения,был бы более полный код может подсказал бы что...
Вот полный код:
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 "stdafx.h"
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <stdlib.h>
#include <conio.h>
double POL(double *x,double *y,int n)
{
    double **a,*c,d=0;
    a=new double*[n];
    c=new double[n];
    for(int i=0;i<=n;i++)
    {
        a[i]=new double[n];
    }
    for(int k=1;k<=n;k++)
    {
        a[k][1]=1;
        int i=0;
        for(int m=2;m<=n;m++)
        {
            i++;
            if(i==k)
            {
                i++;
            }
            d=x[k-1]-x[i-1];
            a[k][m]=a[k][m-1]/d;
            for(int j=m-1;j>=2;j--)
            {
                a[k][j]=(a[k][j-1]-a[k][j]*x[i-1])/d;
            }
            a[k][1]=-a[k][1]*x[i-1]/d;
        }
    }
    for(i=1;i<=n;i++)
    {
        c[i]=0;
        for(int k=1;k<=n;k++)
        {
            c[i]=c[i]+a[k][i]*y[k-1];
        }
    }
    return *c;
}
 
int main(int argc, char* argv[])
{
    int n,m,i,j,N;
    double *xi,*xj,*yi,*yj,*yfj,a,b,pog=0;
    cout<<"Vvedite kolichestvo neizvestniv parametrov n:";
    cin>>n;
    cout<<endl;
    cout<<"Vvedite kolichestvo uzlovih tochek m:";
    cin>>m;
    cout<<endl;
    cout<<"Vvedite nachalo intervala a:";
    cin>>a;
    cout<<endl;
    cout<<"Vvedite konec intervala b:";
    cin>>b;
    cout<<endl;
    N=21;
    xi=new double[m];
    xj=new double[N];
    yi=new double[m];
    yj=new double[N];
    yfj=new double[N];
    for(i=1;i<=m;i++)
    {
        xi[i-1]=a+(i-1)*(b-a)/(m-1);
    }
    for(i=1;i<=m;i++)
    {
        yi[i-1]=pow(xi[i-1],1/2.)-cos(xi[i-1])*cos(xi[i-1]);
    }
    for(j=1;j<=N;j++)
    {
        xj[j-1]=a+(j-1)*(b-a)/20;
    }
    for(j=1;j<=N;j++)
    {
        yj[j-1]=POL(xi,yi,m);
    }
    for(j=1;j<=N;j++)
    {
        yfj[j-1]=pow(xj[j-1],1/2.)-cos(xj[j-1])*cos(xj[j-1]);
    }
    for(j=1;j<=N;j++)
    {
        if(fabs(yfj[j-1]-yj[j-1])>pog)
            pog=fabs(yfj[j-1]-yj[j-1]);
    }
    cout<<"Tablica uzlovih tochek:"<<endl;
    for(i=1;i<=m;i++)
    {
        cout<<xi[i-1]<<"     "<<yi[i-1]<<endl;
    }
    cout<<"Tablica vischitannih tochek:"<<endl;
    for(i=1;i<=N;i++)
    {
        cout<<xj[i-1]<<"     "<<yfj[i-1]<<endl;
    }
    cout<<"Tablica vischitannih tochek posle approksimacii:"<<endl;
    for(i=1;i<=N;i++)
    {
        cout<<xj[i-1]<<"     "<<yj[i-1]<<endl;
    }
    cout<<"Pogreshnost'  "<<pog<<endl;
 
return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2011, 12:33
Помогаю со студенческими работами здесь

Return 1, return 2
Ребята, у меня есть задача. &quot;Используя показатели функции вычислить цепную дробь. Количество...

return (n<0) ? -n:n;
Что это означает, return (n&lt;0) ? -n:n; не как не могу понять? Может быть это как if (n&lt;0)...

Return
Подскажите пожалуйста, каким образом return ом из функции возвращать 2 значения, напрмер 2 корня...

return
Здравствуйте, форумчане! На сколько мне известно оператор return передаёт управление операционной...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru