Zk 23.1.2012

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í.
Drozi
Matfyz(ák|ačka) level I
Příspěvky: 17
Registrován: 25. 1. 2010 11:59
Typ studia: Informatika Bc.

Zk 23.1.2012

Příspěvek od Drozi »

Příklady si přesně nepamatuju, ale tak aspoň nástin dnešní zkoušky. Zařadil bych ji tak možná do těžšího průměru.

1. klasika - velikost int [4B]

2.

Kód: Vybrat vše

    // misto 1
    public class A
    {
        // misto 2
        public int ia;
        public void m(B b)
        {
            b.ib = 42;
            ib = 42;
        }

        public class B : I
        {
            //misto 3
            public int ib;
            public void m(A a)
            {
                a.ia = 42;
                ia = 42;
            }
        }
    }
Tady bylo potřeba označit řádky, který sou špatně [ib = 42; a ia = 42;] + další otázka byla, kam a jak se má dopsat definice interfacu I, tak aby "tvořila privátní kontrakt mezi A a B" (nebo jak to tam bylo napsaný). Z možností sem vybral, že má být private a na miste 2. Myslim, že to bylo dobře, ale jistej si nejsem.

3. klasická otázka, co platí a neplatí pro user-defined třídy.

4. (4|2)^(1024^6)

5. příklad na enumerátor. Něco ve smyslu:

Kód: Vybrat vše

using System;
using System.Collections.Generic;

static class Program
{
    static IEnumerable<int> GetLenghts(this string[] list)
    {
        if (list == null)
        {
            throw new ArgumentException();
            
        }

        foreach (string s in list)
        {
            Console.Write("x ");
            yield return s.Length;
        }
    }

    static void Main()
    {
        string[] x = { "a", "aa", "aaa" };
        foreach (int i in x.GetLenghts())
        {
            Console.WriteLine(i);
            break;
        }
    }
}
A co tohle vypíše.
Možnosti byly něco jako, že to vyhodí runtime chybu, pak že je to závislý na platformě a .NETu, že to vypíše x x 1, x x x 1.... správná odpověď byla x 1.

Další otázka byla na vlákna. Snad ji někdo doplní. Šlo tam přibližně o tohle:

Kód: Vybrat vše

class X
{
    public static volatile int a;
    public static long b;
    public static volatile int c;

    public void T2()
    {
        b = -1;
        System.Console.WriteLine(b);
    }

    public void T1()
    {
        a = 1;
        b = 2;
        c = 3;
    }
}
Když pustíme T1 a T2 ve dvou vláknech, tak co se bude dít. Možnosti byly typu "a se vždy zapíše před c, b se vždy zapíše po a, atd..."

Poslední otázka byla na virt. metody.

Kód: Vybrat vše

using System;

class A
{
    public virtual void m()
    {
        Console.WriteLine("A");
    }
}

class B : A
{
    public override void m()
    {
        Console.WriteLine("B");
    }
}

class C :B
{
    public override void m()
    {
        Console.WriteLine("C");
        ((A)this).m();
    }
}

class Program
{
    static void Main()
    {
        A x = new C();
        x.m();
    }
}
Co se vypíše? Možnosti něco jako: Jen A, Jen C, Jen A C, Jen A A, Něco jiného. //Něco jiného - bude se vypisovat C v nekonečné rekurzi až do zdechnutí na stackoverflow.

Kdyžtak mě někdo doplňte. Vše samozřejmě bez záruky :)
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: Zk 23.1.2012

Příspěvek od svick »

Drozi píše: Další otázka byla na vlákna. Snad ji někdo doplní. Šlo tam přibližně o tohle:

Kód: Vybrat vše

class X
{
    public static volatile int a;
    public static long b;
    public static volatile int c;

    public void T2()
    {
        b = -1;
        System.Console.WriteLine(b);
    }

    public void T1()
    {
        a = 1;
        b = 2;
        c = 3;
    }
}
Když pustíme T1 a T2 ve dvou vláknech, tak co se bude dít. Možnosti byly typu "a se vždy zapíše před c, b se vždy zapíše po a, atd..."
Myslím, že ty fieldy nebyly static, ale to na otázce nic nemění. A taky tam byly možnosti „T2 může vypsat -1/2/0/něco jiného“.
Odpovědět

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