Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Metoda Bairstow
- #pragma warning(disable:4996)
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <iostream>
- #include <string>
- #include <math.h>
- #include <cmath>
- #include <algorithm>
- using namespace std;
- void grad1(long double a,long double b) {
- /*cout << "grad 1 a= " << a << endl;
- cout << "grad 1 b= " << b << endl;*/
- double x;
- if (a == 0 && b == 0) {
- cout << "x poate fi orice solutie";
- }
- else if (b == 0) {
- x = 0;
- cout << "x = " << x;
- }
- else if (a == 0) {
- cout << "x poate fi orice solutie";
- }
- else {
- x = -b / a;
- cout << "x = " << x;
- }
- }
- void grad2(long double a,long double b,long double c) {
- /*cout << "a= " << a<<endl;
- cout << "b= " << b<<endl;
- cout << "c= " << c<<endl;*/
- double x, delta, x1, x2;
- double re[2], im[2];
- if (a == 0)
- grad1(b, c);
- else
- {
- delta = pow(b, 2) - 4 * a*c;
- if (delta < 0) {//caz in care delta < 0
- re[0] = -b / 2 * a;
- im[0] = sqrt(-delta) / 2 * a;
- re[1] = -b / 2 * a;
- im[1] = -sqrt(-delta) / 2 * a;
- cout << "Ecuatia are solutii imaginare" << endl;
- cout << "x1=" << re[0] << " + i*(" << im[0] << ")" << endl;
- cout << "x2=" << re[1] << " + i*(" << im[1] << ")" << endl;
- }
- else
- if (delta == 0) // caz in care delta este 0
- {
- cout << "Ecuatia are solutii egale!";
- cout << "x1 = x2 = " << -b / (2 * a);
- }
- else // caz in care delta > 0
- {
- x1 = (-b + sqrt(delta)) / 2 * a;
- x2 = (-b - sqrt(delta)) / 2 * a;
- cout << "Ecuatia are solutii reale" << endl;
- cout << "x1=" << x1 << endl;
- cout << "x2=" << x2 << endl;
- }
- }
- //return 0;
- }
- void main() {
- //grad1(1.0/25.0, 1.0/2.0);
- //grad2(0,2,1);
- //_getche();
- int n;
- long double a[100], b[100], c[100],p,q,x,delta,epsilon,p_mare=0,q_mare=0;
- epsilon = 0.001;
- p = q = 0.1;
- x = 0;
- n = 3;
- /*a[0] = 1;
- a[1] = 1;
- a[2] = -10;
- a[3] = -34;
- a[4] = -26;*/
- a[0] = 1;
- a[1] = 0;
- a[2] = -3;
- a[3] = 1;
- while (n >= 3) {
- do {
- b[0] = a[0];
- b[1] = a[1] - p*b[0];
- for (int i = 2; i <= n; i++) {
- b[i] = a[i] - p*b[i - 1] - q*b[i - 2];
- }
- c[0] = b[0];
- c[1] = b[1] - p*c[0];
- for (int i = 2; i <= n-1; i++) {
- c[i] = b[i] - p*c[i - 1] - q*c[i - 2];
- }
- delta = pow(c[n - 2], 2) - c[n - 3] * c[n - 1] + c[n - 3] * b[n - 1];
- p_mare = -b[n - 1] * c[n - 2] + b[n] * c[n - 3];
- q_mare = -b[n] * c[n - 2] + b[n - 1] * c[n - 1] - pow(b[n - 1], 2);
- p = p - (p_mare / delta);
- q = q - (q_mare / delta);
- } while (max(abs(b[n - 1]), (abs(b[n] + p*b[n - 1]))) > epsilon);
- cout << "\nrezolva ecuatia: x^2 + "<<p<<"x + "<<q<<" = 0\n";
- grad2(1, p, q);
- n = n - 2;
- for (int i = 0;i <= n;i++) {
- a[i] = b[i];
- }
- }
- if (n == 2) {
- cout << "\nrezolva ecuatia: "<< a[0]<<"*x^2 +"<<a[1]<<"*x + "<<a[2] <<" = 0\n";
- grad2(a[0], a[1], a[2]);
- }
- else {
- cout << "\nrezolva ecutia: "<<a[0]<<"*x + "<<a[1] <<" = 0\n";
- grad1(a[0], a[1]);
- }
- _getche();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement