Написать программу на си/си++, используя указатели

решить систему из двух линейных уравнений(частные случаи можно не рассматривать)

TigerForceCasual TigerForceCasual    1   16.11.2019 18:03    4

Ответы
Lizak11 Lizak11  17.08.2020 13:14

#include <iostream>

#include <cmath>

#include <algorithm>

int main() {

   const double eps = 1e-7; //для сравнения с нулём вещественных чисел

   /*Коэффициенты системы уравнений будем хранить в матрице 2*3

     Система уравнений вида

     a1*x1+b1*x2=c1,

     a2*x1+b2*x2=c2

     в двумерном массиве будет храниться так:

     {{a1, b1, c1},

      {a2, b2, c2}}

   */

   double **m = new double*[2];

   for(int i = 0; i < 2; i++){

       m[i] = new double[3];

   }

   for(int i = 0; i < 2; i++){

       std::cout << "Input a, b, c for " << i + 1 << " equation:\n";

       for(int j = 0; j < 3; j++){

           std::cin >> m[i][j];

       }

   }

   /*

   Решить систему можно методом Крамера:

   det = a1*b2-a2*b1

   det1 = c1*b2-c2*b1

   det2 = a1*c2-a2*c1

   x1 = det1/det

   x2 = det2 / det

   */

   double det = m[0][0] * m[1][1] - m[1][0] * m[0][1];

   double det1 = m[0][2] * m[1][1] - m[1][2] * m[0][1];

   double det2 = m[0][0] * m[1][2] - m[1][0] * m[0][2];

   if (std::abs(det) < 1e-7){

       if (std::abs(det1) < 1e-7){

           std::cout << "Infinity solutions\n";

       }

       else{

           std::cout << "No solution\n";

       }

   }

   else{

       double x1 = det1 / det;

       double x2 = det2 / det;

       std::cout << "x1 = " << x1 << std::endl;

       std::cout << "x2 = " << x2 << std::endl;

   }

   //Освобождение выделенной динамической памяти

   for(int i = 0; i < 2; i++){

       delete []m[i];

   }

   delete []m;

   return 0;

}

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика