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

Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? - C++

Восстановить пароль Регистрация
 
Nadja
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 27
11.04.2012, 01:27     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #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
double gaus(int n, double c[30][30], double d[30])
{   int k,k1,kn,i,j;
    vector<double> t[30];
    double temp;
    for (k=1;k<n-1;++k)
    {
        if (c[k][k]==0)
        {   
            for (k1=k+1;k1<n;++k1)
            {
                if (c[k1][k]!=0)
                {
                    kn = k1;
                    for( j=1;j<n;++j)
                    {
                        temp = c[k][j];
                        c[k][j] = c[kn][j];
                        c[kn][j] = temp;
                    }
                    temp = d[k];
                    d[k] = d[kn];
                    d[kn] = temp;
                }
            }
        }
    }
    d[k] = d[k]/c[k][k];
    for (i = k+1;i<n;++i)
    {
        d[i] = d[i]-(c[i][k]*d[k]);
    }
    for (j = k+1;j<n;++j)
    {
        c[k][j] = c[k][j]/c[k][k];
        for (i = k+1;i<n;++i)
        {
            c[i][j] = c[i][j]-(c[i][k]*c[k][j]);
        }
    }
t[n] = d[n]/c[n][n];
for (i = n-1;i>1;--i)
{
    for(j = i+1;j<n;++j)
    {
        d[i] = d[i]-(t[j]*c[i][j]);
    }
    t[i] = d[i];
}
 
    return t;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 01:27     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив?
Посмотрите здесь:

C++ Как сделать так, чтобы функция rand() возвращала разные значения
Нужно чтобы функция в зависимости от условий возвращала string или double C++
Сделать так, чтобы функция возвращала параметр C++
C++ как сделать чтобы функция возвращала массив?
Как сделать так что бы функция возвращала строку C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
11.04.2012, 01:42     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #2
C++
1
double gaus(int n, double c[30][30], double d[30])
Тут ты передаеш не массив как параметр а только его 30*30- элемент

Возвратить непосредственно массив нельзя, можно либо изменить массив тот который передашь как параметр или возвратить указатель на новый динамически созданный массив (но тогда нужно будет не забыть его вручную удалить)
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
11.04.2012, 02:06     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #3
передавай указатель на массив и будет тебе счастье. И массив передашь в функцию, и все изменения возвратятся из неё
C++
1
double gaus(int n, double** c, double* d)
тем более размер ты и так передаёшь
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.04.2012, 02:26     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #4
Avazart, вообще то передается массив 30х30, это не вызов функции а ее описание.

Вопрос в другом, зачем возвращать массив, если он передается по ссылке? И тем более массив статический. Если вы хотите вернуть тот вектор что создаете в функции, то измените возвращаемый тип на vector< double >
И в функции думаю нужно написать vector< double > t( 30 ) вместо vector< double > t[ 30 ]
Avazart
 Аватар для Avazart
6904 / 5144 / 253
Регистрация: 10.12.2010
Сообщений: 22,629
Записей в блоге: 17
11.04.2012, 02:54     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #5
Toshkarik, да точно, тупанул.
Там действительно функция будет изменять массив который ей передашь, если надо именно возвращать то только через указатель.
Nadja
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 27
11.04.2012, 17:25  [ТС]     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #6
спасибо. Сделала вот так ,но функция не верно считает
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
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <vector>
using namespace std;
 
vector<double> gaus(int n, double c[30][30], double d[30])
{   int k,k1,kn,i,j;
    vector<double> t(30);
    double temp;
    for (k=1;k<n-1;++k)
    {
        if (c[k][k]==0)
        {   
            for (k1=k+1;k1<n;++k1)
            {
                if (c[k1][k]!=0)
                {
                    kn = k1;
                    for( j=1;j<n;++j)
                    {
                        temp = c[k][j];
                        c[k][j] = c[kn][j];
                        c[kn][j] = temp;
                    }
                    temp = d[k];
                    d[k] = d[kn];
                    d[kn] = temp;
                }
            }
        }
    }
    d[k] = d[k]/c[k][k];
    for (i = k+1;i<n;++i)
    {
        d[i] = d[i]-(c[i][k]*d[k]);
    }
    for (j = k+1;j<n;++j)
    {
        c[k][j] = c[k][j]/c[k][k];
        for (i = k+1;i<n;++i)
        {
            c[i][j] = c[i][j]-(c[i][k]*c[k][j]);
        }
    }
t[n] = d[n]/c[n][n];
for (i = n-1;i>1;--i)
{
    for(j = i+1;j<n;++j)
    {
        d[i] = d[i]-(t[j]*c[i][j]);
    }
    t[i] = d[i];
}
 
    return t;
}
 
int _tmain(int argc, _TCHAR* argv[])
{int n = 3;
double c[30][30];
double d[30];
for (int i=0; i<n;i++)
{   cout<<"d:"<<endl;
    cin>>d[i];
 
    for (int j=0; j<n; j++)
    {   cout<<"c:"<<endl;
        cin>>c[i][j];
 
    }
}
vector<double>  a(30);
a = gaus(n,c,d);
  for (int i = 0; i < n; ++i)
    cout << a[i] << endl;
    
getch();
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
11.04.2012, 19:45     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #7
Что именно она должна считать? И как вы используете эту функцию в main?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2012, 21:42     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив?
Еще ссылки по теме:

Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) C++
C++ Что нужно изменить, чтобы выводило максимальный элемент каждой строки в одномерный массив?
C++ Что нужно изменить, чтобы был динамический массив?

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

Или воспользуйтесь поиском по форуму:
Nadja
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 27
12.04.2012, 21:42  [ТС]     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #8
Должна выводить корни при заданных значениях коэффициентов c[30][30] И d[30].
Yandex
Объявления
12.04.2012, 21:42     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив?
Ответ Создать тему
Опции темы

Текущее время: 03:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru