@m4t1k_matik

Почему вылезает ошибка в C++ zsh: segmentation fault.?

Добрый день, вылезает ошибка после ввода данный
zsh: segmentation fault "/var/folders/y7/hbkvnly103qb7050nfdxcx100000gn/T/"tempCodeRunnerFile, не могу понять на каком моменте код ломается и почему тоже не понятно, помогите пожалуйста.

#include
#include
#include

class mGauss
{
private:
int i, IM, h, sm;
double MaxA, Sum;
double **chA;
double *chB;
public:
mGauss(double **A, double *B, int m)
{
sm=m;
chB = new double[m];
chA = new double *[m];
for (int i=0; i {
chA[i]=new double [m];
}
for (int r = 0; r {
for (int c = 0; c {
chA[r][c] = A[r][c];
}
}
for (int r = 0;r {
chB[r]=B[r];
}
}

double ved(int i) // функция определения ведущего уравнения
{
int g,h,k;
double MaxA, temp;
MaxA=0;
h = -1;
for (k = i; k < sm; k++)
if (fabs(chA[k][i]) >fabs(MaxA))
{
MaxA = chA[k][i];
h = k;
}
if (h == -1)
{
std::cout <<" Матрица вырождена \n ";
}
return h;
}

void perestanovka(int i) // функция перестановки уравнений системы
{
double temp;
if (IM != i)
{
for (int j = i; j < sm; j++)
{
temp = chA[i][j] ;
chA[i][j] = chA[IM][j];
chA[IM][j] = temp;
}
temp = chB[i];
chB[i] = chB[IM];
chB[IM] = temp;
}
}

void rkoef(int i, int l) // функция пересчета коэффициентов
{
float Q;
Q=chA[l][i] / chA[i][i] ;
chA[l][i] = 0;
for (int j=i+1; j < sm; j++)
chA[l][j] = chA[l][j] - Q*chA[i][j];
chB[l] = chB[l] - Q*chB[i];
}

void prgauss() // функция прямого хода метода Гаусса
{
int i, l, IM;
float Q;
for (i=0;i {
IM = ved(i);
perestanovka(i);
for (l=i+1;l rkoef(i,l);
}
}

void obgauss(double* C) // функция обратного хода метода Гаусса
{
int k, j;
C[sm-1] = chB[sm-1] / chA[sm-1][sm-1];
for(k=sm - 2; k>=0; k--)
{
Sum = chB[k];
for (j=k+1; j Sum = Sum - chA[k][j]*C[j];
C[k] = Sum / chA[k][k];
}
}
~mGauss()
{
delete [] chB;
for (int i=0; i {
delete [] chA[i];
}
delete [] chA;
chA=nullptr;
}
};
void vvod (double *ax, double *ay, int fxn, int fyn)
{
std::cout << "\nВведите значения чисел массива x: ";
for (int i = 0; i < fxn; i++) {
std::cin >> ax[i];
}
std::cout << "\nВведите значения чисел массива y: ";
for (int i = 0; i < fyn; i++) {
std::cin >> ay[i];
}
std::cout << "\n";
}
void vivod (double *ax, double *ay, int fxn, int fyn)
{
std::cout << "Массив x: ";
for (int i = 0; i < fxn; i++) {
std::cout << ax[i] <<" ";
}
std::cout << "\n";
std::cout << "Массив y: ";
for (int i = 0; i < fyn; i++) {
std::cout << ay[i] <<" ";
}
std::cout << "\n";
}

double FI0()
{
return 1;
}

double FI1(double *ax, int i)
{
return ax[i];
}

double FI2(double *ax, int i)
{
return pow(ax[i],3);
}

float FI(double *ax1, int i, int k)
{
if (k == 0)
return FI0();

if (k == 1)
return FI1(ax1, i);

if (k==2)
return FI2(ax1, i);
}

void koeff (double **Ak, double *ax, double *Bk, double *ay, int mm, int nn)
{
int k,l;
std::cout<<" a= "< for (k = 0; k < mm; k++)
{
for (l = 0; l < mm; l++)
{
Ak[k][l]=0;
for (int i = 0; i < nn; i++)
{
Ak[k][l]=Ak[k][l]+FI(ax, i, k) * FI(ax, i, l);

}
std::cout << " " << Ak[k][l];
}

std::cout<<"\n";
}

std::cout << "b= ";
for (k = 0; k < mm; k++)
{
Bk[k]=0;
for (int i = 0; i < nn; i++)
{
Bk[k]=Bk[k]+ay[i]*FI(ax, i, k);
}
std::cout<<" "< }
}

/*void Y1_kr_d()
double kr=0,k=0;
for (int i=0; i {

}*/

int main()
{
int xn, yn, k, l, m ,n;
double x, y;
std::cout << "Введите количество x, которое вы хотите ввести: ";
std::cin >> xn;
std::cout << '\n';
std::cout << "Введите количество y, которое вы хотите ввести: ";
std::cin >> yn;
std::cout << '\n';
double *arrx = new double [xn];
double *arry = new double [yn];
std::cout<<"m = ";
std::cin >> m;
std::cout<<"n = ";
std::cin >> n;
double *B=new double[m];
double **A=new double* [m];
for (int i=0; i {
A[i]=new double [m];
}
vvod(arrx,arry,xn,yn);
vivod(arrx,arry,xn,yn);
koeff(A, arrx, B, arry, m, n);
delete [] arrx;
delete [] arry;
for (int i=0; i {
delete [] A[i];
}
delete [] A;
A=nullptr;
delete [] B;
//double *Y1 = new double [n];
//double *D = new double [n];
double *C= new double [n];
mGauss Obj(A, B, m);
Obj.prgauss();
Obj.obgauss(C);
return 0;
}
638d19008b9f2022709860.png
  • Вопрос задан
  • 69 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы