Alx09

sda

Jan 7th, 2021
750
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include<iostream>
  2. #include<stdio.h>
  3. #include<math.h>
  4. #include<conio.h>
  5. using namespace std;
  6. float u, v, w, t;
  7. float a, b, x, s, r, epsx, epsf, fx, fr, fs, z;
  8. int k, itermax, ok;
  9. char st;
  10. //selectie
  11. float f(float x){
  12.     return sqrt(w/(x+u+v*t));
  13. }
  14.  
  15. int main()
  16. {
  17.     cout << "Solutionarea ecuatiei de stare a LEA prin metoda selcetei\n-----------------\n";
  18.    
  19.         cout << "\nCoeficientii u,v si w ai ecuatiei de stare\n";
  20.     cout << "u="; cin >> u;
  21.     cout << "v="; cin >> v;
  22.     cout << "w="; cin >> w;
  23.     cout << "\nLimitele intervalului [a,b] in care a fost separata solutia\n";
  24.     cout << "a="; cin >> a;
  25.     cout << "b="; cin >> b;
  26.     cout << "\nErorile maxim admise\n";
  27.     cout << "epsx="; cin >> epsx;
  28.     cout << "epsf="; cin >> epsf;
  29.     cout << "\nNumarul maxim de iteratii\n";
  30.     cout << "itermax="; cin >> itermax;
  31.     if (f(a) * f(b) >= 0) {
  32.         cout << "\nNu s-a separat o solutie in prearabil";
  33.     }
  34.     ok = 1;
  35.     do
  36.     {
  37.         cout << "\nDoriti solutionarea pentru alte temperaturi (d/n)?\n";
  38.         st = getch();
  39.         if (st == 'd' || st == 'D')
  40.         {
  41.             cout << "\nValoarea temperaturii:\n";
  42.             cout << "t="; cin >> t;
  43.            
  44.             fr = f(a);
  45.             fs = f(b);
  46.             z = fr * fs;
  47.             if (z > 0)
  48.             {
  49.                 cout << "EROARE:solutia nu a fost separata corect: f(a)*f(b)>0 !";
  50.                 ok = 0;
  51.                 break;
  52.             }
  53.            
  54.             r = a;
  55.             s = b;
  56.             k = 0;
  57.            
  58.                 if (fabs(fr) <= epsf)
  59.                 {
  60.                     cout << "Solutia exacta este a=" << a << " deoarece f(a)=0";
  61.                     ok = 0;
  62.                     break;
  63.                 }
  64.             if (fabs(fs) <= epsf)
  65.             {
  66.                 cout << "Solutia exacta este b=" << b << " deoarece f(b)=0";
  67.                 ok = 0;
  68.                 break;
  69.             }
  70.            
  71.             cout << "***Dupa afisarea rezultatelor unei iteratii apasa ENTER\n\n";
  72.             cout << "k x f(x) r s |r-s|\n---------------------------\n";
  73.             printf("%d ----- ----- %1.4f %1.4f %.4f ", k, r, s, fabs(r - s));
  74.             cout << endl;
  75.        
  76.             do
  77.             {
  78.                 k++;
  79.                 x = (r + s) / 2; //punctul curent, xk
  80.                 fx = f(x);
  81.                 fr = f(r);
  82.                 z = fr * fx;
  83.                 if (z == 0) //alculul este incheiat, x este solutia exacta
  84.                 {
  85.                     r = x;
  86.                     s = x;
  87.                 }
  88.                 else if (z > 0) r = x; //s:=s nu este necesara
  89.                 else s = x; //r:=r nu este necesara
  90.                 cout << endl;
  91.                 printf("%d %1.4f %.4f %.4f %.4f %.4f \n", k, x, fx, r, s, fabs(r - s));
  92.                 if (k > itermax)
  93.                 {
  94.                     cout << "\nDepasire numar maxim de iteratii !";
  95.                     ok = 0;
  96.                     break;
  97.                 }
  98.                
  99.                     while (getchar() != '\n');
  100.             } while ((fabs(s - r) >= epsx) && (fabs(fx) >= epsf));
  101.             if (ok)
  102.             {
  103.                 cout << "\nRezultat final pentru temperatura t=" << t << " grade";
  104.                 cout << endl;
  105.                 cout << "\nSolutia ecuatiei este x=" << x;
  106.                 cout << endl;
  107.             }
  108.         }
  109.     } while (st == 'd' || st == 'D');
  110.     return 0;
  111. }
  112.  
RAW Paste Data