Prüfung Informatik D-MATH/D-PHYS 26. 01. 2012 09:00 11:00 Öº ÖÒ Đ ÖØÒ Ö ÈÖÓ º ÂÙÖ ÀÖÓÑ ÓÚ Kandidat/in: Æ Ñ ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº ÎÓÖÒ Ñ ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº ËØÙ º¹ÆÖº ºººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº Á Þ Ù Ñ Ø Ñ Ò Ö ÍÒØ Ö Ö Ø ÈÖĐÙ ÙÒ ÙÒØ Ö Ö ÙÐĐ Ö Ò Ò ÙÒ Ò Ð Ò ÓÒÒØ ÙÒ ÐÐ Ñ Ò Ò Ñ Ö ÙÒ Ò Ð Ò ÙÒ Ú Ö Ø Ò Ò º ÍÒØ Ö Ö Ø ººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººººº Allgemeine Bemerkungen und Hinweise: ½º ĐÍ ÖÔÖĐÙ Ò Ë ÎÓÐÐ ØĐ Ò Ø Ö Ù Ø ÐØ Ò ÈÖĐÙ ÙÒ ÙÒØ ÖÐ Ò Ö ÐĐ ØØ Ö Ø Ò Ù ½ Ø Ù Ò Ø Ò Ñ Ø Ò ÑØ Ù Ò ÙÒ Ò Ð Ö Ë Ø µ ¾º ÐÐ Ë ÛĐ Ö Ò Ö ÈÖĐÙ ÙÒ ÙÖ Ö Ò Ò Ò ÖÙÒ Ó Ö ËØĐÓÖÙÒ Ò¹ ØÖĐ Ø Ø Û Ö Ò Ñ Ð Ò Ë ØØ Ó ÓÖØ Ö Ù Ø Ô Ö ÓÒ ËÔĐ Ø Ö ÃÐ Ò ĐÓÒÒ Ò Ò Ø Þ ÔØ ÖØ Û Ö Òº º ÖÐ Ù Ø À Ð Ñ ØØ Ð keine. Einzige Ausnahme sind Wörterbücherº º ØÖÙ Ú Ö Ù ĐÙ Ö Ò ÞÙ Ó ÓÖØ Ñ Ù ÐÙ ÙÒ ĐÓÒÒ Ò Ö ØÐ ÓÐ Ò Òº º ÈÖÓ Ù Ø ĐÓ Ø Ò Ò ĐÙÐØ Î Ö ÓÒ Ò ÄĐÓ ÙÒ Ú Ö Ù ÞÙÐĐ º ËØÖ Ò Ë ÙÒ ĐÙÐØ ÄĐÓ ÙÒ Ú Ö Ù Ð Ö ÙÖ Ë Ö Ò Ë Ù Ô Ö Ø ÐĐ ØØ Ö Ò Ø Ù Ù Ò ÐĐ ØØ Ö º Ë ĐÙÖ Ò Ù Ò Ò Ð Ö Ê Ò ÓÐ ÐĐÓ Òº ÃÓÒÞ ÒØÖ Ö Ò Ë Û Ð Ù Ò Ù Ö Ø Ð Ò Ë Á Ö Ø Ò º Æ Ð Ù Ö ÈÖĐÙ ÙÒ Þ Ø Ó Ö Û ÒÒ Ë ÖĐÙ Þ Ø Ò ÑĐÓ Ø Ò ĐÙ Ö ¹ Ò Ë Á Ö ÄĐÓ ÙÒ Ò ØØ Ò Ö Ù Ø Ô Ö ÓÒ ÙÒ Ú ÖÐ Ò ÞĐÙ Ò Ê ÙѺ Jedes Ihrer Lösungsblätter muss mit Ihrem Namen beschriftet sein. Die Prüfungsblätter sind mit abzugeben! º ÈÖĐÙ ÙÒ Ø Ø Ò Ò Û ÒÒ Ë ¼ ÚÓÒ ½¾¼ ÖÖ Ö Ò ÈÙÒ Ø Ò ÖÞ Ð Òº ½ ¾
Aufgabe 1. (21 Punkte) Ò Ë ÞÙ Ò ÓÐ Ò Ò Ù ÖĐÙ Ò Û Ð Ò ÌÝÔ ½ ÈÙÒ Øµ ÙÒ Ò Ï ÖØ ¾ ÈÙÒ Ø µ Òº Ø Ò ÈÙÒ Ø ĐÙÖ Ì Ð Ö ØØ Ö Ù Û ÖØÙÒ º Ë Ö Ù Ò Ò Ø ÒÞÙ Ö Òº Ù ÒÒ Ö Ö Ì Ð Ù Ò ÐØ Î Ö Ð x Ø ÚÓÑ ÌÝÔ int ÙÒ Ø Ò Ï ÖØ 8º Î Ö Ð b Ø ÚÓÑ ÌÝÔ bool ÙÒ Ø Ò Ï ÖØ trueº µ 6 / 3 / 4 + 1.5 µ x!= 0 && 7 / x == 0 && x / 7.0 > 1 µ 7.2f - 4 > 4 &&!b b µ b == false && ++x >= 9 µ 2.0f + x++ - 2.5 * 3 µ x % 2 % 2 - x µ x-- % 4 == 2 && 128 % 2 == 0 Aufgabe 2. (12 Punkte) Ò Ë ĐÙÖ ÓÐ Ò Ò Ö Ë Ð Ò ÓÒ ØÖÙ Ø Û Ð ÓÐ Ö Ù Ò Ò Ð Ò Ò µ for (int i=1023; i>0; i/=2) std::cout << (i%2) << " "; µ int n=13; while (n>1) std::cout << n << " "; if (n%2==0) n/=2; else n=3*n+1; µ int i=1; int j=1; while (i<=100) std::cout << i << " "; j+=2; i+=j;
Aufgabe 3. (20 Punkte) ÒĐ Ö Ö Ø ÐÐÙÒ Ò Ö Ò ØĐÙÖÐ Ò Ð n 0 Ø Ò¹ ÙØ Ø ÓÐ (b 0, b 1,...) Ñ Ø b i ¾ 0, 1 ĐÙÖ ÐÐ i Ó b i 2 i = n. i=0 ÆÙÖ Ò Ð Ú Ð Ø Ò Ò Ï ÖØ 1º ÁÒ Ö ÒĐ Ö Ö Ø ÐÐÙÒ ÚÓÒ n Ø Ø i ØÞØ ÐÐ b i = 1 Ðغ Ò Ë Ò Ò Ø ÓÒ Ö ÓÐ Ò Ò ÙÒ Ø ÓÒ Òº // POST: gibt genau dann true zurueck, wenn in der Binaerdarstellung // von n das Bit i gesetzt ist. bool has_bit (unsigned int n, unsigned int i); Aufgabe 4. (8 / 15 Punkte) µ Ò Ò ÙÒ Ò Ë Ú Ö Ð Ö Ò ÓÐ Ò Ñ ÈÖÓ Ö ÑÑ Ò Å ØÖ Ü M Ö ÖĐÓ dim dim ÖÞ Ù Ø ÙÒ Ñ Ø Ö Ò Ø Ñ ØÖ Ü Ò Ø Ð Öغ Ë m ij Ö ÒØÖ ÚÓÒ M Ò Ð i ÙÒ ÃÓÐÓÒÒ j ĐÙÖ Ò Ø Ñ ØÖ Ü ÐØ m ij = 1 ÐÐ i = j ÙÒ m ij = 0 Ò ÖÒ ÐÐ ºµ int main() unsigned int dim = 10; double M[dim][dim]; // initialisiere M mit der Einheitsmatrix for (int i=1; i<=dim; ++i) for (int j=1; j<=dim; ++j) if (i=j) M[i][j]=1.0; else M[i][j]=0.0; // mache irgendetwas mit M return 0; µ ÖÛ Ø ÖÒ Ë ÓÖÖ ÖØ ÈÖÓ Ö ÑÑ ÙÑ Ò Ò Ò ØØ Ö Å ØÖ Ü M ØÖ Ò ÔÓÒ ÖØ º º ÒØÖ m ij Ñ Ø ÒØÖ m ji Ú ÖØ Ù Ø ĐÙÖ ÐÐ i, j // mache irgendetwas mit M // transponiere M // hier Ihre Erweiterung
Aufgabe 5. (25 Punkte) ØÖ Ø Ò Ë ÓÐ Ò Ö ÙÖ Ú ÙÒ Ø ÓÒ ÈÖÓ Ð Ñ Ö ÌĐÙÖÑ ÚÓÒ À ÒÓ ÐĐÓ Øº // PRE: von, nach, ueber sind verschieden // POST: gibt Zuege aus, mit denen die obersten n // Scheiben vom Stab "von" zum Stab "nach" gebracht // werden koennen, unter Benutzung des Stabs "ueber" void hanoi (unsigned int n, int von, int nach, int ueber) if (n == 0) // nichts zu tun return; else // 1. Die obersten n-1 Scheiben vom Start- zum Hilfsstab bringen hanoi (n-1, von, ueber, nach); // 2. Die oberste Scheibe vom Start- zum Zielstab bringen std::cout << "(" << von << "," << nach << ")"; // 3. Die obersten n-1 Scheiben vom Hilfs- zum Zielstab bringen hanoi (n-1, ueber, nach, von); Ï ÖÓ Ø ÒÞ Ð Ö ĐÙ = ÒÞ Ð Ö std::cout¹ ÒÛ ÙÒ Òµ Ò Ñ Ù ÖÙ ÚÓÒ hanoi(n, von, nach, ueber) Ò Đ Ò Ø ÚÓÒ n Hinweis: Ò Ö Ò Ë T(n) Ð Ù Ø ÒÞ Ð Ö ĐÙ n Ë Ò ÙÒ Ð Ø Ò Ë Ò Ê ÙÖ ÓÒ Ð ÙÒ ĐÙÖ T(n) Ö Ê Ø Ò Ë T(n) Ò Ñ Ë Ð Ò Đ ÐÐ Ó Ö Ê ÙÖ ÓÒ Ð ÙÒ Ò Ù Ò ÙÒ Ú ÖÛ Ò Ò Ë ÒÒ ÚÓÐÐ ØĐ Ò ÁÒ Ù Ø ÓÒ ÙÑ Ò Ö Ø Ò Ò Ï ÖØ ĐÙÖ T(n) ÞÙ Û Òº
Aufgabe 6. (10 / 10 Punkte) ØÖ Ø Ò Ë ÙÒØ Ò Ø Ò ÈÖÓ Ö ÑÑ ÙÒ Òع ÛÓÖØ Ò Ë ÓÐ Ò Ò Ò Ö Ò ÞÙº µ Ö Ò Ë Ò ÏÓÖØ Ò ÙÒ Ø ÓÒ Ð ØĐ Ø Ö ÃÐ A µ Ï Ø Ù ÈÖÓ Ö ÑÑ ÖĐÙÒ Ò Ë ÙÖÞ Û Ù Ù ÖÙÒ Ö ÙÒ Ø ÓÒ Ð ØĐ Ø Ù Ì Ð µ Ö Ø #include<cassert> #include<iostream> class A private: double s; unsigned int n; public: A() : s(0), n(0) void i (const double d) s+=d; ++n; double a() const assert(n>0); return s/n; ; int main() A x; x.i(3); x.i(4); std::cout << x.a(); return 0;