Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //A04A_CramerscheRegel.cpp : Einsprungpunkt der KonsolenAnwendung
- //Cramersche Regel fuer 2x2-Matrix
- #include <iostream>
- using namespace std;
- #include <iomanip> //moeglichst genaue Anzeige erzeugen (nicht in Schoenheit sterben)
- #include <math.h> //fuer abs, pow
- #include <stdlib.h> //fuer system
- #define EPS 0.000001 //Grenzwert
- #define DELTA 1e-8 //Korrektur von a11
- #define SKALA 1e-8 //Skalenfaktor aller Koeffizienten, rechten Seiten
- #define TEST
- #ifdef TEST //einen Test einkommentieren
- //#define NORMAL
- #define LINABHAENGIG
- #ifdef LINABHAENGIG //einen oder keinen Test einkommentieren
- //#define UNTERNULL
- #define UEBERNULL
- #endif
- #endif
- int main() {
- double nX1,nX2,nA11,nA12,nA21,nA22,nB1,nB2;
- double nD,nD1,nD2;
- #ifdef TEST
- #ifdef NORMAL
- //Testdaten
- nA11=1*SKALA;
- nA12=2*SKALA;
- nA21=3*SKALA;
- nA22=4*SKALA;
- nB1=8*SKALA;
- nB2=18*SKALA;
- //Erwartungswerte
- //nX1=2;
- //nX2=3;
- #endif
- #ifdef LINABHAENGIG
- //Testdaten
- nA11=1;
- #ifdef UNTERNULL
- nA11=1-DELTA;
- #endif
- #ifdef UEBERNULL
- nA11=1+DELTA;
- #endif
- nA11*=SKALA;
- nA12=2*SKALA;
- nA21=4*SKALA;
- nA22=8*SKALA;
- nB1=8*SKALA;
- nB2=32*SKALA;
- //Erwartungswerte
- //nX1=2;
- //nX2=3;
- #endif
- #else
- cout<<"Bitte Koeffizienten eingeben: "<<endl;
- cout<<"a11: ";
- cin>>nA11;
- cout<<"a12: ";
- cin>>nA12;
- cout<<"a21: ";
- cin>>nA21;
- cout<<"a22: ";
- cin>>nA22;
- cout<<"b1: ";
- cin>>nB1;
- cout<<"b2: ";
- cin>>nB2;
- #endif
- nD=nA11*nA22-nA12*nA21;
- cout<<scientific<<setprecision(16);
- cout<<"Eingegeben:"<<endl;
- cout<<"|"<<nA11<<" "<<nA12<<"| |"<<nB1<<"|"<<endl;
- cout<<"|"<<nA21<<" "<<nA22<<"| |"<<nB2<<"|"<<endl<<endl;
- cout<<"Determinante= "<<nD<<endl<<endl;
- //if (nD>EPS || nD<-EPS) { //doppelter Vergleich
- //if (abs(nD)>EPS) { //abs loescht nur das Vorzeichenbit, versagt bei kleinen Koeffizienten
- //cout<<(abs(nD)*pow(10.0,-((long)(log10(abs(nA11*nA22))))))<<endl; //Testanweisung
- if ((abs(nD)*pow(10.0,-((long)(log10(abs(nA11*nA22))))))>EPS) { //Versuch einer Skalierung
- nD1=nB1*nA22-nB2*nA12;
- nD2=nA11*nB2-nA21*nB1;
- nX1=nD1/nD;
- nX2=nD2/nD;
- cout<<"x1="<<nX1<<" x2="<<nX2<<endl;
- } else {
- cout<<"Determinante "<<nD<<" zu klein, keine Loesung moeglich"<<endl<<endl;
- } //if
- system("Pause");
- return 0;
- } //main
Advertisement
Add Comment
Please, Sign In to add comment