Zkouškové zima 08/09 hlavně ve znamení C#
| 20.2.2009 | Software
Tak dobojováno. Sedm událostí ke splnění znamenalo zkoušky z Matematické analýzy 3, C++, C#, Algoritmů a datových struktur 2, Výrokové a predikátové logiky a praktické zápočtové testy z C++ a C#. Tentokráte jsem se potil v budově na Malostranském náměstí celkem desetkrát. Nejprve jsem vyhořel na VaPL, protože ústní předtermín se lehce zvrhnul v poměrně krutou písemku, na kterou v té hlavě prostě nebyl dostatek vědomostí. Co čert nechtěl, o pár týdnů později jsem dostal to samé zapeklité zadání, tentokráte už to ale na podpis …
do indexu bylo. Největším problémem byl paradoxně C#, a to jsem si myslel, že tuhle příčku urve s jasným přehledem C++. Zkoušku i zápočet z C++ jsem dal nakonec levou zadní (dávkový parser textových souborů) a na C# jsem se šel podívat dohromady pětkrát. Dvakrát na zkoušku, kde jsem musel prokázat ani ne znalosti toho, jak se C# používá, ale jak funguje. Různé chytáky jako statický konstruktor, nejrůznější příklady na trojkový var, “interface mania” a další veselosti. Taky thread-safe vkládání prvku do binárního stromu.
Třikrát jsem psal zápočtový program. Poprvé jsem měl n-ární strom s omezenou hloubkou a nepoužil rekurzi, no, kdo se má potom v tom obrovském while-cyklu vyznat. Podruhé jsem psal takový malý Excel a nakonec ztroskotal na tom, že jsem nepochopil kousíček zadání pro počítání vzorců z jiných listů. Potřetí jsem to vychytal, napsal jsem hru logik. Na tři hodiny je to tak akorát, program má své mouchy, ale funguje. Požadavky byly jasné – umět kreslit, vypisovat nekonečně dlouhou historii tahů, nafukovat okno podle toho, kolik políček bude uživatel hádat. Napsal jsem si vlastní Control, která na sebe uměla nakreslit kolečko a číslo, vyrobil si vlastní nástavbu na flowLayoutPanel a šlo se do boje.
Zásadní problém jsem měl ale s převáděním string na barvy. Barvy koleček totiž přišly na příkazové řádce jako parametry. Tak jsem zajásal, když jsem našel ColorConverter a metodu ConvertFromString a pak zjistil, že vracený object nelze přetypovat na Brush, ale pouze na Color, ze které jde zkonstruovat pouze barevné pero, nikoliv štětec, který potřebujete na nakreslení vyplněného kolečka (FillElipse vs. DrawElipse). V dokumentaci jsem našel záhadnou třídu BrushConverter v System.Windows.Media, kterou ale používá WPF a nikoliv WinForms. Takže jsem nějakou tu chvíli kreslil všechna kolečka bílá, než se mi omylem podařilo zakopnout o následující:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public MyFlow(List<string> colors, List<int> numbers) { Height = 40; Width = 50 * numbers.Count; foreach (int num in numbers) { ColorConverter c = new ColorConverter(); Color color = (Color)c.ConvertFromString(colors[num]); Pen p = new Pen(color); this.Controls.Add(new UserControl1(p.Brush, num+1)); } } |
Inu, pomocí ColorConverter jsem získal barvu, z té vyrobil pero a z něj si půjčil štětec. Zkoušející tušil, že tohle bude problém, protože to speciálně hledal ve zdrojáku, ale z toho, jak pokýval hlavou soudím, že existuje nějaké elegantnější řešení. Znáte ho? Sem s ním :-)
Update: Odpověď jsem si nakonec našel sám, nevědomost občas není tak sladká, zvlášť pokud člověk nezná věci jako SolidBrush… ale teď si to aspoň budu pamatovat ;-)
A já hurá do dalšího semestru, který začíná už v pondělí :-(.



