Lösungsvorschläge zu den Klausur ”Informatik für Physiker” im SS07 von Dr. Herbert Süße Author: Simon Stützer Stand: 22. Juli 2008 Aufgabe 1: 129.875 = 129 + 0.875 ∧ 129 = 10000001 0.875 · 2 = 1.75 0.75 · 2 = 1.5 0.5 · 2 = 1 0·2=0 ... 1.75 ≥ 1 ⇒ 1.75 − 1 = 0.75 Merke: 1 1.5 ≥ 1 ⇒ 1.5 − 1 = 0.5 Merke: 1 ∧ 1≥1⇒1−1=0 Merke: 1 ⇒ 0.875 = 0.111 0<1 Merke: 0 Merke: 0y ∧ ⇒ 129.875 = 10000001.111 Aufgabe 2: ∧ 20 = 10100 in 17-bit Darstellung: 00000000000010100 komplementiern: 111111111101011 ∧ 1 addieren: ⇒ −20 = 111111111101100 Aufgabe 3: Mit 18 Bit sind Zahlen von −217 bis 217 − 1 darstellbar. Aufgabe 4: z = 0.11101 ⇒ z · 25 = 11101.11101 ∧ ⇒ z(25 − 20 ) = 11101 wobei 11101 = 29 29 ⇒z= 31 Aufgabe 5: ... float fl; cin >> fl; int*a=(int*)&fl;// Wandlung des Floatspeicherbereiches auf int. /*auch moeglich a=int(fl);*/ for(j=0;j<7;j=+2) { *a=*a&~(1<< j); // ~Komplementoperator, & multiplizieren der Bitwerte, << rightshift } 1 Aufgabe 6: z.z.: H(S 3 ) = 3H(S) Wegen Unabhängigkeit der pi gilt pijk = pi · pj · pk . Damit: P H(S 3 ) = pijk log2 pijk ijk P = pi · pj · pk log2 pi · pj · pk ijk P = pi · pj · pk · (log2 pi + log2 pj + log2 pk ) ijk P P P = pi · pj Hk + pi · pk Hj + pj · pk Hi ij = Mit P ij pi · pj = P i pi · P j ik 3H(S) pj = 1 · 1 = 1 Aufgabe 7: #include<iostream> #include<string> using namespace std; int c2i(char p) { return (int(p)-48); } int str2int (char p[], int &erg) { int fehler=0; for(int i=1;i<unsigned int(strlen(p));i++) { if(p[i]<58 and p[i]>=48) {erg=c2i(p[i])+10*erg;} else fehler=1; } if(p[0]==’-’) erg=(-1)*erg; return fehler; } Aufgabe 8: #include<iostream> using namespace std; float minimum(float array[], int n, float m, int i) { if(i<n) { if(m>array[i+1])m=array[i+1]; return maximum(array,n,m,i+1); } else return m; } Aufgabe 9: 2 jk n f (n) = 2 · f ( ) + cn , c > 0, f (1) =: α 2 n n = 2 · 2 · f ( ) + cn + c 4 2 n n n = 2 · 2 · 2 · f ( ) + cn + c + c 8 2 4 = ... = f (1) · 2log2 n + (n − 1) · cn n 2 = α · (2log2 2 )log2 n + 2c(n − 1) = α · n + 2c(n − 1) = (α + 2c) · n − 2 ∈ Ω(n) Aufgabe 10: typedef class rational { public: rational();// kontructor rational(int z;int n); // ueberladener Konstruktor bzw typwandlungskonstructor ~rational();//Destructor rational(const rational& r);//Copykonstructor operator float(); //Typwandlung rational potenz(rational& r1,int potenz);//Memberfunktion rational& operator = (const rational& r);//Zuweisung rational& operator + (const rational& r1);//Addition private: int z; int n; friend ostream& operator << (&ostream& o1,rational r);//Ueberladung cout } RATIONAL 3