4.2.2009 [Zk]

Odeslat odpověď

Smajlíci
:D :) :( :o :shock: :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode je zapnutý
[img] je zapnutý
[flash] je vypnutý
[url] je zapnuté
Smajlíci jsou zapnutí

Přehled tématu
   

Rozšířit náhled Přehled tématu: 4.2.2009 [Zk]

Re: 4.2.2009 [Zk]

od Merlin » 15. 2. 2011 11:06

kaktus píše: takze struct A obsahoval iba parametricky konstruktor (bezparametricky ani obsahovat nemoze) ale volany bol z konstruktorom defaultnym bezparametrickym... to co u tried nefunguje, u structov zrejme funguje
U strutktur neplatí to pravidlo o tom, že defaultní konstruktor není doplněn, když napíšeme nějaký vlastní. Naopak je deafultní konstruktor překladačem doplněn vždy.

Re: 4.2.2009 [Zk]

od starecml » 9. 2. 2009 11:08

Zabiják píše:Tak přesně takhle by to nemělo vypadat, za tu rekurzi bych dával bod dolů. Při větším počtu hodnot ti to odletí s přetečením zásobníku. I když někteří by mohli namítat, že to kompilátor zoptimalizuje, protože je to tail-recursion, ale současný .NETí kompilátor to nedělá, přestože v MSIL je na takovou rekurzi zvláštní instrukce.
Díky za korekci

Re: 4.2.2009 [Zk]

od Zabiják » 9. 2. 2009 09:45

[quote="starecml"]Tady je jedna z možností, jak by mohla vypadat ta poslední otázka - vkládání do bin. stromu...

Kód: Vybrat vše

    private void Add2(BinTree<K, V>.Node n, ref BinTree<K, V>.Node root)
    {
      ...
      else if (root.key.CompareTo(n.key) > 0)
      {
          Add2(n,ref root.left);
      }
      else if (root.key.CompareTo(n.key) < 0)
      {
          Add2(n, ref root.right);
      }
      ...
    }
}
Tak přesně takhle by to nemělo vypadat, za tu rekurzi bych dával bod dolů. Při větším počtu hodnot ti to odletí s přetečením zásobníku. I když někteří by mohli namítat, že to kompilátor zoptimalizuje, protože je to tail-recursion, ale současný .NETí kompilátor to nedělá, přestože v MSIL je na takovou rekurzi zvláštní instrukce.

Re: 4.2.2009 [Zk]

od starecml » 8. 2. 2009 21:41

Tady je jedna z možností, jak by mohla vypadat ta poslední otázka - vkládání do bin. stromu...

Kód: Vybrat vše

public class BinTree<K, V> where K:IComparable<K>
{
    class Node 
    {
        public Node left, right;
        public K key;
        public V value;
        public Node(K k, V v) 
        {
            key = k;
            value = v;
        }
    }

    private Node root;

    private Object lockObject = new Object(); 


    public void Add(K key, V value) 
    {
        Node n = new Node(key,  value);
        lock (lockObject)
        {
            Add2(n, ref root);
        }
    }

    private void Add2(BinTree<K, V>.Node n, ref BinTree<K, V>.Node root)
    {
      if (root == null)
      {
          root = n;
      }
      else if (root.key.CompareTo(n.key) > 0)
      {
          Add2(n,ref root.left);
      }
      else if (root.key.CompareTo(n.key) < 0)
      {
          Add2(n, ref root.right);
      }
      else if (root.key.CompareTo(n.key) == 0)
      {
          throw new Exception("Nelze vlozit dva klice se stejnou hodnotou!");
      }
    }
}
Samotné použití by mohlo vypadat například...

Kód: Vybrat vše

BinTree<int, string> strom = new BinTree<int, string>();
strom.Add(5, "pet");
strom.Add(3, "tri");
strom.Add(6, "sest");
strom.Add(1, "jedna");
//strom.Add(1, "jedna");
Když se odkomentuje ten poslední řádek tak to hodí výjimku...

Re: 4.2.2009 [Zk]

od svick » 8. 2. 2009 20:53

Santhos píše:Otazka 3:

odpoved je zalezi na platforme? ... To je asi blbost, ne? Co v C# zalezi na platforme? Mozna tak promenna MoodOfBill, ktera je na windowsech true a jinde false...
Třeba zrovna velikost adresy záleží na platformě, jestli je systém 32 nebo 64-bitový.

Re: 4.2.2009 [Zk]

od Santhos » 8. 2. 2009 16:50

Otazka 3:

odpoved je zalezi na platforme? ... To je asi blbost, ne? Co v C# zalezi na platforme? Mozna tak promenna MoodOfBill, ktera je na windowsech true a jinde false...

Re: 4.2.2009 [Zk]

od kaktus » 4. 2. 2009 21:01

Manicka píše: 2. Co bude na konzoli? (2 3 3 4) - ano jde doopravdy jen o tu preinkrementaci
len o tu preinkrementaciu neslo... ten kod vyzeral skor takto:

Kód: Vybrat vše

public struct A
{
    public int x;
    public int y;
    public A(int x, int y) {
        this.x = x;
        this.y = y;
    }
    public void Fce()
    {
        Console.Writeline("x = {0}, y = {1}", ++x, ++y);
    }
}
public class Program
{
    public static Main(string[] args)
    {
        A a = new A();
        a.x = 1;
        a.y = 2;
        a.Fce();
        a.Fce();
    }
}
takze struct A obsahoval iba parametricky konstruktor (bezparametricky ani obsahovat nemoze) ale volany bol z konstruktorom defaultnym bezparametrickym... to co u tried nefunguje, u structov zrejme funguje
mikkke píše:Mohl by jste sem nekdo dat podrobnejsi zadani 9.otazky? Dekuji
no co viac k tomu povedat... bolo tam nieco taketo

Kód: Vybrat vše

public class BinTree<K, V>
{
  Node {
    public Node left, right;
    public K key;
    public V value;
    public Node(K k, V v) {
      key = k;
      value = v;
    }
  }
  
  private Node root;
  
  public void Add(K key, V value) {
    Node n = new Node(key, value);
    
  }
  // na konci nejaky nepodstatny kod, indexer abo co
}
a vsade bolo mnozstvo volneho miesta na dopisovanie. Co bolo treba doplnit?
  • 1. where K:IComparable<K> (uznalo sa aj IComparable) na konci hlavicky triedy BinTree
    2. class pred Node v hlavicke tejto triedy (to som si tiez sakra vobec nevsimol...)
    3. pomocny objekt o ako private member a potom cely kod metody Add v lock(o) {...}
    4. kod pridavania do stromu, ktory bolo nutne vymysliet (standardne kuknut ci je kluc mensi, vacsi a podla toho ist bud dolava alebo doprava). dolezite veci:
    • a. pre prax asi najdolezitejsia poznamka, ovela viac ako problemy ostanych uloh, z ktorymi sa bud v praxi nestretnem (a ak ano, tak tomu kolegovi, co to tak napisal, asi vykrutim hlavu) alebo mi pri nich pomoze kompilator: !!! pridavanie do stromu nepisat rekurziou ale while cyklom, pri rekurzii hrozi, ze program odleti kvoli plnemu zasobniku ak na vstupe bude napr. milion zotriedenych cisiel !!!
      b. ak narazim na uzol s rovnakym klucom ako chcem vkladat... vyhodim vynimku (najlepsie nejaku svoju)
      c. pri porovnavani klucov (ktore implementuju IComparable) pouzivat CompareTo (nie < > ==)
tak snad uz je ta odpoved vycerpavajuca...

Re: 4.2.2009 [Zk]

od mikkke » 4. 2. 2009 20:03

Mohl by jste sem nekdo dat podrobnejsi zadani 9.otazky? Dekuji

Re: 4.2.2009 [Zk]

od janoro » 4. 2. 2009 18:52

Jen bych něco dodal k té doplňovačce kódu, poslední otázce. V zadání stojí, že máte implementovat a patřičně ošetřit jistou metodu. V úvodu je nějaký kód - v našem případě to bylo klasické zavedení stromu - Node left, right, value a key. Já jsem to jen tak prolétl a začal programovat, to byla ovšem chyba - v tom předepsaném kódu totiž občas něco chybí, například nějaké klíčové slovo (v našem případě class nebo struct). Nevšiml jsem si toho a přišel o bod, což bylo téměř rozhodující...

4.2.2009 [Zk]

od Manicka » 4. 2. 2009 18:05

Nevim jestli to pamatuji vse a spravne, kdyztak me opravte a doplnte.
Urcete nezachovavam poradi jak byly otazky v pisemce.

1. Co bude v a? (4)

Kód: Vybrat vše

int a = 6 & (~3)
2. Co bude na konzoli? (2 3 3 4) - ano jde doopravdy jen o tu preinkrementaci

Kód: Vybrat vše

public struct A
{
    public int x;
    public int y;
    public void Fce()
    {
        Console.Writeline("x = {0}, y = {1}", ++x, ++y);
    }
}
public class Program
{
    public static Main(string[] args)
    {
        A a = new A();
        a.x = 1;
        a.y = 2;
        a.Fce();
        a.Fce();
    }
}
3. Jaka bude velikost nasledujiciho typu (zalezi na platforme) - je to jen adresa

Kód: Vybrat vše

U ? []
4. Urcit referencni typy (string, System.Object, object) - mozna jeste neco

Kód: Vybrat vše

string
System.Object
object
System.Int64
// mozna jeste neco
5. Ctyri vyroky o kusech kodu A a B a rict, ktere jsou pravdive. (A nejde prelozit)

Kód: Vybrat vše

// A
var x = "ahoj";
x = ((string)x).Length;
// B
object x = "ahoj";
x = ((string)x).Length;
6. Co muze vynucovat interface po tride aby implementovala? (properties, public metodu)

Kód: Vybrat vše

private metodu
protected metodu
public metodu
properties
// asi jeste neco
7. Ze slidu 7th Lecture, hned prvni 2 slajdy.

Kód: Vybrat vše

struct S {...}
...
List<S> list = new List<S>();
list.Add(new S());
list[0].x = 20;   // nejde prelozit, struct je hodnotovy typ -> list[0] je jen navratova hodnota na stacku
8. Humus s interfacama ze slidu - nebudu to sem opisovat, stejne si to uz poradne nepamatuju a spis bych matla, nez informovala
9. Doplnovacka - opet vyhledavaci stromecek a metoda Add (thread safe + vhodne vyjimky)

Pokud jsem neco napsala spatne, tak se omlouvam.

Nahoru