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

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

Войти
Регистрация
Восстановить пароль
 
Nadja
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 27
#1

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

11.04.2012, 01:27. Просмотров 500. Ответов 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
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++ как сделать чтобы функция возвращала массив?
Как сделать так что бы функция возвращала строку C++
Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,051
Записей в блоге: 17
11.04.2012, 01:42     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? #2
C++
1
double gaus(int n, double c[30][30], double d[30])
Тут ты передаеш не массив как параметр а только его 30*30- элемент

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

Вопрос в другом, зачем возвращать массив, если он передается по ссылке? И тем более массив статический. Если вы хотите вернуть тот вектор что создаете в функции, то измените возвращаемый тип на vector< double >
И в функции думаю нужно написать vector< double > t( 30 ) вместо vector< double > t[ 30 ]
Avazart
7063 / 5240 / 262
Регистрация: 10.12.2010
Сообщений: 23,051
Записей в блоге: 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
1139 / 856 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 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++
Интерполяция методом Гаусса (нужно исправить работу) C++
C++ Что нужно изменить в функции,чтобы Visual начал воспринимать

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

Или воспользуйтесь поиском по форуму:
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     Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив?
Ответ Создать тему
Опции темы

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