Zkouška 21.1.2009 (13:00)

Cílem semináře je seznámit posluchače s jazykem C#, prostředím platformy .NET a tvorbou aplikací s grafickým uživatelským rozhraním. Předpokládají se znalosti objektově orientovaného programování.
marxin
Matfyz(ák|ačka) level I
Příspěvky: 45
Registrován: 30. 1. 2008 13:24
Typ studia: Informatika Mgr.

Zkouška 21.1.2009 (13:00)

Příspěvek od marxin »

Zadání:
Test obsahuje v první části zaškrtávací možnosti, minimálně jedna možnost je vždy správně, za každé špatné zaškrtnutí jeden trestný bod( pokud otázka obsahuje 5 správných možností a žádnou nevyberu mám -5). Poslední příklad je na doplnění kódu (maximálně -4 body).

Hodnocení (# trestných bodů):
0-2 (výborně)
3-5 (velmi dobře)
6-8 (dobře)
9- (neprospěl)

Implicitně:
.NET 3.5

Test:
1) Určete výsledek int i = -8 >> 1; [-4]
2) Nějaká konstrukce, kde je třída C potomkem structu S, což nejle.
3) Velikost intu [4B]
4) Co bude na konzoli [26]

Kód: Vybrat vše

    class A {
        public static int a = 5;

        public A() {
            a *= 3;
            m();
        }

        public virtual void m() {
            a++;
        }
    }

    class B : A {
        public B() {
            a *= 2;
        }

        public override void m() {
            a -= 2;
        }
    }

    class Program {
        static void Main(string[] args)
        {
            B b = new B();
            Console.WriteLine(A.a);

        }
    }
5) Zaškrtněte hodnotové typy: int, Interface I {}, enum A {}, System.Int64, bool[] [1,3,4]
6) Co může být T? a
a) Referencční typ
b) Hodnotový typ
c) Číselné typy (int, float, double, ...)
d) Primární typy(bool, char, byte, int, ...)
e) T smí obsahovat jenom bezparametrický konstruktor
[b,c,d]
7) Jaký bude výstup následujícího programu

Kód: Vybrat vše

        static void Main() {
            try {
                Main();
            } catch { }
        }
a) Nepůjde zkompilovat
b) Program po spuštění skončí bez chyby
c) Program se zacyklí do nekonečna
d) Skončí s chybou
[d - Stack overflow, v 3.5 .NETu je tomu tak]
8) Napište jaké se budou volat metody. [A.m1(), D.I.m2(), D.m3()] Něco v tomto stylu

Kód: Vybrat vše

 interface I {
        void m1();
        void m2();
        void m3();
    }

    class A : I {
        public void m1() { Console.WriteLine("A::m1()"); }
        public virtual void m2() { Console.WriteLine("A::m2()"); }
        public virtual void m3() { Console.WriteLine("A::m3()"); }
    }


    class D : A, I {
        public override void m2() { Console.WriteLine("D::m2()"); }
        void I.m2() { Console.WriteLine("D::I.m2()"); }
        public new void m3() { Console.WriteLine("D::m3()"); }
    }

    class Program {
        static void Main(string[] args) {
            I d = new D();

            Console.Write("((A) d).m1() => "); d.m1();
            Console.Write("((A) d).m2() => "); d.m2();
            Console.Write("((A) d).m3() => "); d.m3();

        }
    }
9) Použití using(blok obsahující FileStream f = new FileStream(...) { blok kódu}), k čemu blok using
a) Uvolnění paměti alokované fs
b) Uvolnění systémových zdrojů
c) Když se nepovede připoj. k souboru v parametrech, pokračuje bez chyby
d) Něco jiného

10) Doplnění do kódu, aby byl vždy v konzistentním stavu (thread safe) a aby se choval správně za všech podmínek, popřípadě vyhodil výjimky !

Kód: Vybrat vše

class Stack<T> {
        class Item {
            public T value;
            public Item next;

            public Item(T v, Item n) {
                value = v;
                next = n;
            }
        }

        Item top;

        public void Push(T v) {
            top = new Item(v, top);
        }

        public T Pop() {
            T value = top.value;

            top = top.next;

            return value;
        }
    }
Moje řešení:

Kód: Vybrat vše

class Stack<T> {
        class Item {
            public T value;
            public Item next;

            public Item(T v, Item n) {
                value = v;
                next = n;
            }
        }

        Item top;
        private object locker = new object();

        public void Push(T v) {
            lock (locker) {
                top = new Item(v, top);
            }
        }

        public T Pop() {
            lock (locker) {
                if (top == null)
                    throw new Exception("Empty stack !");

                T value = top.value;
                top = top.next;

                return value;
            }
        }
    }
Naposledy upravil(a) marxin dne 21. 1. 2009 17:37, celkem upraveno 2 x.
Návštěvník

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od Návštěvník »

marxin píše: ...
Explicitně:
.NET 3.5
...
snad implicitne, nie?
Him
Supermatfyz(ák|ačka)
Příspěvky: 400
Registrován: 25. 1. 2008 19:59
Typ studia: Informatika Bc.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od Him »

Pisemka byla přesně ve stylu pana profesora Ježka: "Proč dávat známku zadarmo, jen ať si ji zaslouží". Nicméně, kdo dával pozor na přednáškách a poctivě si prošel slidy, tak to musel na nějakou známku dát. Já si přečetl asi 200 stránek z knížky, kterou p. Ježek doporučoval a bylo tam vše, co je potřeba vědět na test. Nicméně i tak jsem měl v testu čtyři chyby, tj. výsledná 2.
Pracoval jsem na poměrně hodně materiálech pro různé předměty. Pokud Ti něco z toho ušetřilo čas, vyjádři svůj dík v podobě pár satoshi: 1H5JPTrsXie7epAQXbXhMjdgwyLbJ5NHBW ;)
Uživatelský avatar
R.U.R.
Matfyz(ák|ačka) level III
Příspěvky: 140
Registrován: 25. 5. 2008 18:46
Typ studia: Informatika Ph.D.
Bydliště: Beroun
Kontaktovat uživatele:

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od R.U.R. »

Dával jsem pozor na přednáškách a dopoledne před zkouškou jsem si pečlivě prošel slajdy a poznámky z přednášky - a nebylo tam úplně vše co jsem potřeboval vědět, ale na trojku to stačilo.
Uživatelský avatar
Donarus
Matfyz(ák|ačka) level III
Příspěvky: 194
Registrován: 30. 9. 2007 12:40
Typ studia: Informatika Mgr.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od Donarus »

Nemate nahodou nekdo nejake poznamky z c# - nejake ty nonslide veci ? .. Prochazel jsem si ted svoje ale popravde receno tam toho moc nenachazim ...
Him
Supermatfyz(ák|ačka)
Příspěvky: 400
Registrován: 25. 1. 2008 19:59
Typ studia: Informatika Bc.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od Him »

Donaurus: Ne, ale zkus si opatrit tistenou (mozna je i nekde ke stahnuti) verzi knizky Programujeme profesionalne v C# .. tam je opravdu vsechno, co potrebujes.. staci precist to, kde mas mezery. Navic je to psano jak pro lidi trpici vypadky pameti, neustale autor opakuje a ujistuje se, ze tomu rozumis, takze se to da cist rychle.
Pracoval jsem na poměrně hodně materiálech pro různé předměty. Pokud Ti něco z toho ušetřilo čas, vyjádři svůj dík v podobě pár satoshi: 1H5JPTrsXie7epAQXbXhMjdgwyLbJ5NHBW ;)
Šlupka
Matfyz(ák|ačka) level I
Příspěvky: 39
Registrován: 7. 11. 2007 22:12
Typ studia: Informatika Bc.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od Šlupka »

Donarus píše:Nemate nahodou nekdo nejake poznamky z c# - nejake ty nonslide veci ? .. Prochazel jsem si ted svoje ale popravde receno tam toho moc nenachazim ...
Stáhni si zdrojáky jak je naimplementován .NET a pořádně si prostuduj jak se .NET kompiluje... To jak se v C# programuje do zkoušky potřebovat takřka nebudeš...

Já jsem se C# učil z knížky "Pro C# 2008 and the .NET 3.5 Platform" a musím říct, že takové chujoviny co byly v testu v ní nejsou... A to je to opravdu hodně obsáhlá knížka...
cermi
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 31. 1. 2008 18:44
Typ studia: Informatika Bc.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od cermi »

Přesně tak, jde spíš o detaily v .netu runtimu než o reálné věci (na to byl zas test zápočtový). Já kdybych od někoho dostal kód podobný tomu s tím voláním virtuální overridlé fce v konstruktoru (bezparametrickém navíc) předka, tak mu asi urazím pařátky. Ale zas na druhou stranu je asi dobré o nich aspoň vědět, chyby, kdy jsme si naprosto jistí, že je to takhle, a ono to tak není, se občas špatně hledají. Já jsem dostal těsně za jedna naštěstí, i když třeba u toho usingu jsem si nebyl jistý, přeci jen, v té metodě Dispose můžu uvolňovat i unmanaged paměť (obecně teda, FileStream si nic takového nealokuje, takže jsem nakonec zvolil dobře).
Čermi
Obrázek
dargor
Matfyz(ák|ačka) level I
Příspěvky: 31
Registrován: 15. 12. 2006 15:00

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od dargor »

9) Použití using(blok obsahující FileStream f = new FileStream(...) { blok kódu}), k čemu blok using
a) Uvolnění paměti alokované fs
b) Uvolnění systémových zdrojů
c) Když se nepovede připoj. k souboru v parametrech, pokračuje bez chyby
d) Něco jiného

Tak ze spravna odpoved je b) ?
cermi
Matfyz(ák|ačka) level I
Příspěvky: 15
Registrován: 31. 1. 2008 18:44
Typ studia: Informatika Bc.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od cermi »

dargor píše:9) Použití using(blok obsahující FileStream f = new FileStream(...) { blok kódu}), k čemu blok using
a) Uvolnění paměti alokované fs
b) Uvolnění systémových zdrojů
c) Když se nepovede připoj. k souboru v parametrech, pokračuje bez chyby
d) Něco jiného

Tak ze spravna odpoved je b) ?
Jo
Čermi
Obrázek
Návštěvník

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od Návštěvník »

cermi píše:
dargor píše:9) Použití using(blok obsahující FileStream f = new FileStream(...) { blok kódu}), k čemu blok using
a) Uvolnění paměti alokované fs
b) Uvolnění systémových zdrojů
c) Když se nepovede připoj. k souboru v parametrech, pokračuje bez chyby
d) Něco jiného

Tak ze spravna odpoved je b) ?
Jo
Povedal by som, ze skor a)

podla http://msdn.microsoft.com/en-us/library ... S.80).aspx

"Defines a scope, outside of which an object or objects will be disposed."
svick
Matfyz(ák|ačka) level I
Příspěvky: 18
Registrován: 22. 2. 2008 19:19
Typ studia: Informatika Mgr.
Bydliště: 17. listopad

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od svick »

Návštěvník píše:
cermi píše:
dargor píše:9) Použití using(blok obsahující FileStream f = new FileStream(...) { blok kódu}), k čemu blok using
a) Uvolnění paměti alokované fs
b) Uvolnění systémových zdrojů
c) Když se nepovede připoj. k souboru v parametrech, pokračuje bez chyby
d) Něco jiného

Tak ze spravna odpoved je b) ?
Jo
Povedal by som, ze skor a)

podla http://msdn.microsoft.com/en-us/library ... S.80).aspx

"Defines a scope, outside of which an object or objects will be disposed."
Jenže "dispose" znamená zavolat metodu IDisposable.Dispose(), u které je napsané
Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources.
Takže správně je opravdu b). Samozřejmě takový objekt pak (nejspíš) není dosažitelný, takže podléhá GC, ale to není podstatou using.
flavius_

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od flavius_ »

Ad ta 8) - jaktože to napotřetí vypíše D.m3? Vzhledem k tomu, že je ta m3 new, tak by snad neměla být z pohledu A vidět, i když v A je m3 virtuální... Viz příklad s Beagly ve slidech.
1.John
Matfyz(ák|ačka) level I
Příspěvky: 10
Registrován: 18. 2. 2010 16:10
Typ studia: Informatika Bc.

Re: Zkouška 21.1.2009 (13:00)

Příspěvek od 1.John »

protože v kódu to není přetypované
viz

Kód: Vybrat vše

Console.Write("((A) d).m1() => "); ((A)d).m1();
Console.Write("((A) d).m2() => "); ((A)d).m2();
Console.Write("((A) d).m3() => "); ((A)d).m3();
Odpovědět

Zpět na „NPRG035 Jazyk C# a platforma .NET“