IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> error C2664 исправьте пожалуйста, С++
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


Програма решения уравнений методом Гауса, но есть одна ошибка:
#include "stdafx.h"
float systgaus(float,float,float);

int _tmain(int argc, _TCHAR* argv[])
{
float A[]={5,0.1,0.2,0.1,4,-0.1,0.1,-0.2,3};
float B[]={10,20,-4.5},X[3];
systgaus(A,B,X);
printf("\n x1=%f,x2=%f,x3=%f", X[0],X[1],X[2]);
return 0;
}

float systgaus (float A0[],float B0[],float X[])
{
int i,j,k;
float A[3][3],B[3],S,D,C;
for(i=0;i<3;i++)
{
B[i]=B0[i]; A[0][i]=A0[i]; A[1][i]=A0[i+3]; A[2][i]=A0[i+6];
}
for(i=0;i<3;i++)
{
D=A[i][i];B[i]=B[i]/D;
for(j=i;j<3;j++) A[i][j]=A[i][j]/D;
for(k=(i+1);k<3;k++)
{
C=A[k][i]; B[k]=B[k]-B[i]*C;
for(j=i;j<3;j++) A[k][j]=A[k][j]-A[i][j]*C;
}
}
X[2]=B[2];
for(k=1;k>0;k--)
{
S=0; for(j=2;j>k;j--) S=S+X[j]*A[k][j]; X[k]=B[k]-S;
}
}


Сообщение отредактировано: Lapp -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
но есть одна ошибка
Еще бы... Ты в прототипе функции указываешь, что все 3 параметра имеют тип float, и тут же пытаешься передать все три указателя на float. Поменяй прототип:
float systgaus(float*,float*,float*);


Кстати, можно узнать, чему у тебя после того, как процедура отработает, будет равно значение X[0]? Оно внутри systgaus никак не заполняется, а в основной программе никак не инициализируется. Мусор получишь...

И почему ты в основной программе никак не ограничиваешь массивы, а внутри подпрограммы уже жестко прописываешь, что размеры равны 3? Или вводи какую-нибудь константу для размера матрицы, и работай с ней, или уж передавай этот самый размер в подпрограмму и там работай именно с ним, а не с тройкой...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 2
Пол: Мужской
Реальное имя: Артем

Репутация: -  0  +


Спасибо большое. После всех исправлений все получилось. А про масивы нечего не понял(если можно объесните что именно).
#include "stdafx.h"
float systgaus(float* , float* , float* );

int _tmain(int argc, _TCHAR* argv[])
{
float A[]={1.6,-0.2,0.4,-0.2,1.8,-0.1,0.3,-0.1,2};
float B[]={10,20,-4.5},X[3];
systgaus(A,B,X);
printf("\n x1=%f, x2=%f, x3=%f", X[0],X[1],X[2]);
return 0;
}

float systgaus (float A0[],float B0[],float X[])
{
int i,j,k;
float A[3][3],B[3],S,D,C;
for(i=0;i<3;i++)
{
B[i]=B0[i]; A[0][i]=A0[i]; A[1][i]=A0[i+3]; A[2][i]=A0[i+6];
}
for(i=0;i<3;i++)
{
D=A[i][i];B[i]=B[i]/D;
for(j=i;j<3;j++) A[i][j]=A[i][j]/D;
for(k=(i+1);k<3;k++)
{
C=A[k][i]; B[k]=B[k]-B[i]*C;
for(j=i;j<3;j++) A[k][j]=A[k][j]-A[i][j]*C;
}
}
X[2]=B[2];
for(k=1;k>=0;k--)
{
S=0; for(j=2;j>k;j--)
S=S+X[j]*A[k][j]; X[k]=B[k]-S;
}
return 1;
}


М
Просьба использовать правильные тэги!
code=cpp
Lapp

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Цитата
А про масивы нечего не понял(если можно объесните что именно).
Я о чем-то вроде этого:
#include "stdafx.h"
float systgaus(float* , float* , float* );

#define N 4

int _tmain(int argc, _TCHAR* argv[])
{
int i;
float A[N*N] = {8, 5, -3, 4, 2, 2, -1, 1, 3, 3, -2, 2, 4, 3, -1, 2};
float B[N] = {-8, 6, -2, -4}, X[4];

systgaus(A,B,X);
printf("\n");
for(i = 0; i < N; i++)
{
printf(" x%d=%f%c", i, X[i], (i == N-1)?' ':',');
}
return 0;
}

float systgaus (float A0[],float B0[],float X[])
{
int i,j,k;
float A[N][N],B[N],S,D,C;
for(i=0;i<N;i++)
{
B[i]=B0[i];
for(j = 0; j<N; j++)
{
A[j][i]=A0[i+N*j];
}
}
for(i=0;i<N;i++)
{
D=A[i][i];B[i]=B[i]/D;
for(j=i;j<N;j++) A[i][j]=A[i][j]/D;
for(k=(i+1);k<N;k++)
{
C=A[k][i]; B[k]=B[k]-B[i]*C;
for(j=i;j<N;j++) A[k][j]=A[k][j]-A[i][j]*C;
}
}
X[N-1]=B[N-1];
for(k=N-2;k>=0;k--)
{
S=0;
for(j=N-1;j>k;j--) S=S+X[j]*A[k][j];
X[k]=B[k]-S;
}
return 1;
}
Обрати внимание, теперь программа будет работать как для 3-х уравнений, так и для 4-х, и т.д. Достаточно только изменить N, и впечатать нужные данные...
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.08.2022 10:00
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name