MaLittlePwny

Untitled

Mar 20th, 2014
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.39 KB | None | 0 0
  1. //A04A_CramerscheRegel.cpp : Einsprungpunkt der KonsolenAnwendung
  2. //Cramersche Regel fuer 2x2-Matrix
  3.  
  4. #include <iostream>
  5. using namespace std;
  6. #include <iomanip>  //moeglichst genaue Anzeige erzeugen (nicht in Schoenheit sterben)
  7. #include <math.h>   //fuer abs, pow
  8. #include <stdlib.h> //fuer system
  9.  
  10. #define EPS 0.000001 //Grenzwert
  11. #define DELTA 1e-8   //Korrektur von a11
  12. #define SKALA 1e-8   //Skalenfaktor aller Koeffizienten, rechten Seiten
  13.  
  14. #define TEST
  15. #ifdef TEST //einen Test einkommentieren
  16.   //#define NORMAL
  17.   #define LINABHAENGIG
  18.   #ifdef LINABHAENGIG //einen oder keinen Test einkommentieren
  19.     //#define UNTERNULL
  20.     #define UEBERNULL
  21.   #endif
  22. #endif
  23.  
  24. int main() {
  25.   double nX1,nX2,nA11,nA12,nA21,nA22,nB1,nB2;
  26.   double nD,nD1,nD2;
  27.  
  28. #ifdef TEST
  29.   #ifdef NORMAL
  30.     //Testdaten
  31.     nA11=1*SKALA;
  32.     nA12=2*SKALA;
  33.     nA21=3*SKALA;
  34.     nA22=4*SKALA;
  35.     nB1=8*SKALA;
  36.     nB2=18*SKALA;
  37.     //Erwartungswerte
  38.     //nX1=2;
  39.     //nX2=3;
  40.   #endif
  41.   #ifdef LINABHAENGIG
  42.     //Testdaten
  43.     nA11=1;
  44.     #ifdef UNTERNULL
  45.       nA11=1-DELTA;
  46.     #endif
  47.     #ifdef UEBERNULL
  48.       nA11=1+DELTA;
  49.     #endif
  50.     nA11*=SKALA;
  51.     nA12=2*SKALA;
  52.     nA21=4*SKALA;
  53.     nA22=8*SKALA;
  54.     nB1=8*SKALA;
  55.     nB2=32*SKALA;
  56.     //Erwartungswerte
  57.     //nX1=2;
  58.     //nX2=3;
  59.   #endif
  60. #else
  61.   cout<<"Bitte Koeffizienten eingeben: "<<endl;
  62.   cout<<"a11: ";
  63.   cin>>nA11;
  64.   cout<<"a12: ";
  65.   cin>>nA12;
  66.   cout<<"a21: ";
  67.   cin>>nA21;
  68.   cout<<"a22: ";
  69.   cin>>nA22;
  70.   cout<<"b1: ";
  71.   cin>>nB1;
  72.   cout<<"b2: ";
  73.   cin>>nB2;
  74. #endif
  75.  
  76.   nD=nA11*nA22-nA12*nA21;
  77.   cout<<scientific<<setprecision(16);
  78.   cout<<"Eingegeben:"<<endl;
  79.   cout<<"|"<<nA11<<" "<<nA12<<"|  |"<<nB1<<"|"<<endl;
  80.   cout<<"|"<<nA21<<" "<<nA22<<"|  |"<<nB2<<"|"<<endl<<endl;
  81.   cout<<"Determinante= "<<nD<<endl<<endl;
  82.   //if (nD>EPS || nD<-EPS) { //doppelter Vergleich
  83.   //if (abs(nD)>EPS) { //abs loescht nur das Vorzeichenbit, versagt bei kleinen Koeffizienten
  84.   //cout<<(abs(nD)*pow(10.0,-((long)(log10(abs(nA11*nA22))))))<<endl; //Testanweisung
  85.   if ((abs(nD)*pow(10.0,-((long)(log10(abs(nA11*nA22))))))>EPS) { //Versuch einer Skalierung
  86.     nD1=nB1*nA22-nB2*nA12;
  87.     nD2=nA11*nB2-nA21*nB1;
  88.     nX1=nD1/nD;
  89.     nX2=nD2/nD;
  90.     cout<<"x1="<<nX1<<"  x2="<<nX2<<endl;
  91.   } else {
  92.     cout<<"Determinante "<<nD<<" zu klein, keine Loesung moeglich"<<endl<<endl;
  93.   } //if
  94.   system("Pause");
  95.   return 0;
  96. } //main
Advertisement
Add Comment
Please, Sign In to add comment