Сочинения
Биографии
Краткие содержания
Анализ
Критика
Как писать слова
Словари
Рефераты
Вопросы
Написать программу для решения СЛУ методом Жордана-Гаусса. Программа на вход получает N - количество уравнений, затем сами уравнения, каждое - в формате строки. Пример: Входные данные: 3 2x+y+z=7 x+2y+z=8 x+y+2z=9 Выходные данн...
Экономика
Написать программу для решения СЛУ методом Жордана-Гаусса. Программа на вход получает N - количество уравнений, затем сами уравнения, каждое - в формате строки. Пример: Входные данные: 3 2x+y+z=7 x+2y+z=8 x+y+2z=9 Выходные данные: x=1 y=2 z=3 Язык C++
Гость
Ответ(ы) на вопрос:
Гость
Код написан ниже. Пример ввода: 4 x100+12mamba+11=barry-3 7x100-4barry=4 barry=x100-2mamba 4=2+2 Пример вывода: barry=6 mamba=-1 x100=4 #include
#include
#include
#include
#include
#define abs(x) ((x)<0 ? -(x) : (x)) using namespace std; typedef map
equation; equation parseLine(const string &str, set
&vars) { map
eqn; bool left_part = true; size_t i = 0; while (i < str.length()) { double n = 0; bool isNeg = !left_part; bool isCoeffOmitted = true; string var = ""; if (str[i] == '='){ left_part = false; i++; continue; } if ((str[i] == '-') || (str[i] == '+')) { if (str[i] == '-') isNeg = !isNeg; i += 1; } while ((i < str.length()) && (str[i] >= '0') && (str[i] <= '9')) { n = 10 * n + (str[i] - '0'); isCoeffOmitted = false; i++; } if ((i < str.length()) && (str[i] == '.')) { int exp = 0; i++; while ((i < str.length()) && (str[i] >= '0') && (str[i] <= '9')){ n = 10 * n + (str[i] - '0'); exp++; i++; } for (int j = 0; j < exp; n /= 10., j++); } while ((i < str.length()) && (str[i] != '+') && (str[i] != '=') && (str[i] != '-')){ var += str[i]; i++; } if (isCoeffOmitted) n = 1; if (isNeg) n = -n; eqn[var] += n; vars.insert(var); } return eqn; } void GaussJordan(vector
&eqns, const vector
&vars) { for (size_t i = 0; i < vars.size(); i++) { size_t j = i; while ((j < eqns.size()) && (eqns[j][vars[i]] == 0)) j++; if (j == eqns.size()) throw "Underdetermined system"; if (j != i) swap(eqns[i], eqns[j]); double elem = eqns[i][vars[i]]; for (equation::iterator it = eqns[i].begin(); it != eqns[i].end(); it++) it->second /= elem; for (j = i + 1; j < eqns.size(); j++){ elem = eqns[j][vars[i]]; for (equation::iterator it = eqns[i].begin(); it != eqns[i].end(); it++) eqns[j][it->first] -= elem * eqns[i][it->first]; } } for (size_t i = vars.size(); i < eqns.size(); i++) for (equation::iterator it = eqns[i].begin(); it != eqns[i].end(); it++) if (abs(it->second) > 1e-12) throw "No solutions"; for (size_t i = vars.size() - 1; i > 0; i--) { for (size_t j = 0; j < i; j++) { eqns[j][""] -= eqns[j][vars[i]] * eqns[i][""]; eqns[j][vars[i]] = 0; } } } void printAnswer(vector
&eqns, vector
&vars) { for (size_t i = 0; i < vars.size(); i++) cout << vars[i] << "=" << -eqns[i][""] << endl; } int main() { set
vars; vector
eqns; size_t n = 0; cin >> n; for (size_t i = 0; i < n; i++) { string t; cin >> t; eqns.push_back(parseLine(t, vars)); } vars.erase(""); vector
vars_list(vars.begin(), vars.end()); try { GaussJordan(eqns, vars_list); } catch (char const *e) { cout << e; return 1; } printAnswer(eqns, vars_list); return 0; }
Не нашли ответ?
Найди
Ответить на вопрос
Отправить
Похожие вопросы
Математика
Составь 5 верных равенств,используя следущие значения площади: 25 см2=__мм2,потому что в 1 см2 __ мм2 500м2=__ соток,потому что в 1 а __ м2 4м2=...
Ответить
Математика
сумма трех последовательных нечетных чисел равна 81.найдите эти числа Надо с решением
Ответить
Математика
на боковых сторонах АВ и ВС равнобедренного треугольника АВС отметили соответственно точки E и F так что АЕ =CF.Докажите что угол ACE=углуCAF
Ответить
Физика
Бетонная плита размером 4*1,5*0,2 м погруженна в воду на половину своего обьёма.Определите выталкивающую силу, действующую на плиту
Ответить
Математика
6,2-(a+b) =? a=2,25 b=3,8 помогите и без объяснения и сокращений заранее спасибо
Ответить
Меню
Сочинения
Биографии
Краткие содержания
Анализ
Критика
Характеристики
Как писать слова
Рефераты
Вопросы
Поиск