Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

11.04.2012, 01:27. Просмотров 545. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2012, 01:27
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Что нужно изменить ,чтобы функция с методом Гаусса возвращала массив? (C++):

Нужно чтобы функция в зависимости от условий возвращала string или double - C++
Привет, как можно реализовать? Нужно чтобы функция в зависимости от условий возвращала string или double

Как сделать, чтобы функция возвращала массив? - C++
Доброго времени суток! Есть функция которая находит значения 4х элементов массива. как сделать чтобы она возвращала сразу весь массив?

Работа с классами (сделать, чтобы функция возвращала массив, получаемый суммированием двух входных) - C++
В программу передаю 2 массива из пяти чисел. После выполнения функции getAM хочу, чтобы она возвращала массив, получаемый суммированием...

Что нужно изменить, чтобы был динамический массив? - C++
Не нашел ничего дельного на эту тему. Как объявить переменную в данном случае, чтобы массив был динамическим? Не могу понять что делать....

Что нужно изменить, чтобы выводило максимальный элемент каждой строки в одномерный массив? - C++
#include &lt;iostream&gt; #include &lt;math.h&gt; #include &lt;conio.h&gt; /* run this program using the console pauser or add your own getch,...

Сделать так, чтобы функция возвращала параметр - C++
В общем, есть 3 матрицы, выведение их на экран и перемножение, сделанное через класс. Функции mult1 и mult2 умножают и выводят сразу на...

7
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
11.04.2012, 01:42 #2
C++
1
double gaus(int n, double c[30][30], double d[30])
Тут ты передаеш не массив как параметр а только его 30*30- элемент

Возвратить непосредственно массив нельзя, можно либо изменить массив тот который передашь как параметр или возвратить указатель на новый динамически созданный массив (но тогда нужно будет не забыть его вручную удалить)
0
Kuzia domovenok
2127 / 1957 / 196
Регистрация: 25.03.2012
Сообщений: 6,808
Записей в блоге: 1
11.04.2012, 02:06 #3
передавай указатель на массив и будет тебе счастье. И массив передашь в функцию, и все изменения возвратятся из неё
C++
1
double gaus(int n, double** c, double* d)
тем более размер ты и так передаёшь
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
11.04.2012, 02:26 #4
Avazart, вообще то передается массив 30х30, это не вызов функции а ее описание.

Вопрос в другом, зачем возвращать массив, если он передается по ссылке? И тем более массив статический. Если вы хотите вернуть тот вектор что создаете в функции, то измените возвращаемый тип на vector< double >
И в функции думаю нужно написать vector< double > t( 30 ) вместо vector< double > t[ 30 ]
1
Avazart
Эксперт С++
7574 / 5559 / 327
Регистрация: 10.12.2010
Сообщений: 24,934
Записей в блоге: 17
11.04.2012, 02:54 #5
Toshkarik, да точно, тупанул.
Там действительно функция будет изменять массив который ей передашь, если надо именно возвращать то только через указатель.
0
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();
}
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
11.04.2012, 19:45 #7
Что именно она должна считать? И как вы используете эту функцию в main?
0
Nadja
1 / 1 / 0
Регистрация: 20.12.2010
Сообщений: 27
12.04.2012, 21:42  [ТС] #8
Должна выводить корни при заданных значениях коэффициентов c[30][30] И d[30].
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2012, 21:42
Привет! Вот еще темы с ответами:

Как сделать так, чтобы функция rand() возвращала разные значения - C++
Добрый вечер, как можно в visual studio в цикле каждый раз задавать новые рандомные значения перменной, к примеру for(int i=0;i&lt;10;i++) ...

Как сделать так что бы функция возвращала строку - C++
Как сделать так что бы функция возвращала строку

Что нужно изменить, чтобы получился однонаправленный список? - C++
Что нужно добавить или изменить, чтобы получился однонаправленный список? struct car{ char name; // название марки машины int top;...

Что нужно изменить в функции,чтобы Visual начал воспринимать - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;Windows.h&gt; using namespace std; void sravn(char s); void main() { ...


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

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

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