• úvod
  • témata
  • události
  • tržiště
  • diskuze
  • nástěnka
  • přihlásit
    registrace
    ztracené heslo?
    TENCOKACISTROMYProgramovani v C#, F# a dalsich jazycich pro .NET, Mono a ostatni CLI implementace
    SLUPKA
    SLUPKA --- ---
    ISUBA: hele, škola mne udržuje ve špatném rozpoložení už pět let... a stejně tu diplomku nějak budu muset dopsat... tak zkousni zuby a zvládni to... další věci pak půjdou o to snadněji...
    ISUBA
    ISUBA --- ---
    KEDRIGERN: Vzhledem k okolnostem, nejsem v nejlepším rozpoložení... Nějak si však poradím. Děkuji.
    KEDRIGERN
    KEDRIGERN --- ---
    ISUBA: http://www.algoritmy.net/article/65/Eratosthenovo-sito
    Bych ti to i napsal, ale nebylo by to moc seriozní vůči tvému vzdělání. I pokud neumíš skoro nic, tak jsou to max. 2-3h.
    ISUBA
    ISUBA --- ---
    PIGSTER: Děkuji za poučení, kultivovaný kolego.
    PIGSTER
    PIGSTER --- ---
    ISUBA: sry ale musim - tohle je tak debilne trivialni, ze se to da s pristupem na internet napsat za hodinu v pul paty rano a to pomijim fakt, ze si s tim vytapetoval hned nekolik klubu ....
    SLUPKA
    SLUPKA --- ---
    ISUBA: googli eratosthenovo síto...

    a mimochodem, sem by se to hodilo asi více
    [ Algoritmy všeho druhu :: podělte se, pochlubte se, diskutujte etc... ]
    ISUBA
    ISUBA --- ---
    Zdravím všechny. Nenašel by se někdo, kdo by mi pomohl s tímto zadáním v C:

    "Napište program, který po zadnání čísla vypíše:
    a) všechna prvočísla, až do hranice (včetně) zadané uživatelem (pozn. 1 není prvočíslo)
    b) zadaný počet prvočísel počínaje 2kou
    c) spojte obě zadání do jednoho programu – volbu co zadané číslo bude znamenat provede
    uživatel zadáním znaku 'a' nebo 'b' v úvodu běhu programu. Program musí být schopen
    reagovat i na špatně zadanou volbu. (např. 'c')"

    Nestíhám a nevím si s tím rady, což je smrtelná kombinace.
    SLUPKA
    SLUPKA --- ---
    SLUPKA: Jestli ten kód budeš psát v C nebo C# bude u QS docela minimální rozdíl...
    SLUPKA
    SLUPKA --- ---
    CERMINEK: to už není moc otázka v C#, ale QS funguje cca následujícím způsobem:

    - pokud je QS zavolán na pole o velikosti jedna, tak nedělá nic, vrací nezměněné pole (je již seřazené)

    - když je QS zavolán na delší pole, tak nejdříve zvolí nějakým způsobem pivot (třeba první prvek v poli) a rozdělíš pole na dvě pole - prvky které jsou <= než pivot a prvky > pivot... a pak zavoláš rekurzivně QS na první a na druhé pole... první i druhé pole se ti vrátí seřazené, když je dáš za sebe, tak máš seřazené celé původní pole a to vrátíš

    No a tohle byl teoretický popis, prakticky se to dělá tak, že se nevytváří žádný další pole, ale dělá se to v oblasti toho pole. Ten index odkud a kam ti určuje, s jakým polem pracuješ (to kolem jakoby neexistovalo). A ty uděláš to, že v rámci této oblasti vybereš pivot a přeuspořádáš prvky této části tak, aby jsi na začátku měl opět prvky <= pivot a pak zavoláš QS na tuto oblast a QS na zbylou oblast.

    Takže první zavolání QS musí být od začátku až do konce pole, aby to fungovalo :))
    CERMINEK
    CERMINEK --- ---
    SLUPKA: http://pastebin.com/tGAk2jtw Už to fachá, jen musím vyřešit samotný Quck sort... Kdy dumám nad nějakou vhodnou volbou hranic oblasti...
    SLUPKA
    SLUPKA --- ---
    CERMINEK: Co se týká quicksortu, tak se mi nechce studovat ten kód, pokud by byl opravdu blbě, tak to přepostni pořádně, rovnou z visualka do pastebinu.

    Ale řádek
    polequick = quick(pole,5,5);//srovná 'pole' metodou quick sort do pole 'polequick'
    podle mého dobře nebude :))

    Jdu spát, snad to uvidíš :))
    CERMINEK
    CERMINEK --- ---
    ESY:
    SLUPKA:
    Supér díky moc! Už to generuje jak má!

    Ještě doladím ten Quick Sort a hotovo... To by bylo abych se ten C# nenaučil.. ale pořád mám tendence psát assemblerovský a C příkazy... Ještě, že C je tomu blízské a VisuaStudio má tu vlezlou nápovědu :)
    SLUPKA
    SLUPKA --- ---
    CERMINEK:
    for (int i = 0; i < velikost; i++)
    {
    Random j = new Random();
    polecisel[i] = j.Next(-100, 100);
    }

    to je z tohoto důvodu... generátor náhodných čísel si vytvoř jeden a ten používej... když voláš new Random(), tak se ti do něj dá seed v závislosti na čase a Next pak pracuje deterministicky v závislosti na tom seedu, takže ze stejného seedu udělá stejné číslo...
    ESY
    ESY --- ---
    ESY: takze kdyz krokujes tak je ten cas jinej
    ESY
    ESY --- ---
    CERMINEK: nepouzivej new Random();
    ale .Next() ...
    Random se generuje z casu. ty vytvoris pokazdy stejnou vec v stejnej cas..
    CERMINEK
    CERMINEK --- ---
    MORMEGIL: Tak jsem to zkusil. Původní pole si v pohodě přenáším. Stále ale nevím proč, když to pustím "v plné rychlosti", tzn. nekrokuji, tak se mi pole naplní jedním stejným číslem do všech buňek...
    CERMINEK
    CERMINEK --- ---
    MORMEGIL: Super! Moc díky!

    SLUPKA: Příště už to použiji :)
    SLUPKA
    SLUPKA --- ---
    jen taková poznámka, když vkládáte takhle delší kus kódu, tak použijte například pastebin ( http://pastebin.com/ ). Má to výhodu, že je kód čitelnější, takže se pak i snadněji radí...
    MORMEGIL
    MORMEGIL --- ---
    CERMINEK: V tom kódu máš očividný nesmysl v tom, že nejdřív přiřadíš např. do polebubble novou instanci pole intů, načež do něj přiřadíš výsledek metody bubble, takže tu instanci zase zahodíš. Místo toho si po vyrobení té nové instance do ní původní pole okopíruj a pak do řadicí metody předej už tu kopii (a návratovou hodnotu změň na void, není k ničemu):

    int[] polebubble = new int[pole.Length];
    Array.Copy(pole, polebubble, pole.Length);
    bubble(polebubble);
    vypispole(polebubble);

    Anebo ještě jednodušeji:

    int[] polebubble = (int[])pole.Clone();
    bubble(polebubble);
    vypispole(polebubble);
    CERMINEK
    CERMINEK --- ---
    PIGSTER: Jak to obejít aby v tom původním poli bylo to původní a do těch dvou se to seřadilo těmi funkcemi?
    Kliknutím sem můžete změnit nastavení reklam