• ú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
    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?
    PIGSTER
    PIGSTER --- ---
    CERMINEK: no to protoze to pole tam predavas odkazem - protoze vsechno v .NETu krome struktur a zakladnich datovejch typu se predava odkazem
    CERMINEK
    CERMINEK --- ---
    Ahoj. Mám otázečku k mému Dů do školy... Nějako mi to není jasné a to je to přitom úroveň C, kterou ještě zvládám.

    Oč jde... Tahle konzolovka má srovnat pole dvěma metodami - bubble sort a quick sort, algorytmi jsou OK. Ale není mi jasné proč po tom, co udělám bubble sort s jeho funkcí, kdy má být seřazení uloženo jen do pole 'polebubble'. Seřazení proběhne a v 'polebubble' jsou hodnoty seřazeny,ale v poli 'pole', kde mají zůstat jen původní náhodná čísla bez seřazení, se záhadně seřadí a nejsem schopen říct proč.

    Taky mě zaráží další fakt, že když pustím program naplno v plné rychlosti, tak jsou v poli stejná čísla... Čím to je?

    Všem moc díky za rady!

    class Program
    {
    static void Main(string[] args)
    {
    Console.WriteLine("Michal Čermák - Domácí úkol č.1 - PPR");

    int[] pole = novepole();//generuje pole náhosných čísel zvolené velikosti
    vypispole(pole);//vypíše pole

    int[] polebubble = new int[pole.Length];
    polebubble = bubble(pole);//srovná 'pole' metodou bubble sort do pole 'polebubble'
    vypispole(polebubble);//vypíše pole

    int[] polequick = new int[pole.Length];
    polequick = quick(pole,5,5);//srovná 'pole' metodou quick sort do pole 'polequick'
    vypispole(polequick);


    Console.ReadKey();
    }

    //Funkce pro generování pole o proměnné velikosti a jeho naplnění náhodnými čísly
    static int[] novepole()
    {

    // !!! při plném spuštění přes F5 vypíše stejná čísla
    //načtení požadované velikosti pole
    Console.Write("Zadejte velikost pole: ");
    int velikost = Convert.ToInt16(Console.ReadLine());
    int[] polecisel = new int[velikost];

    for (int i = 0; i < velikost; i++)
    {
    Random j = new Random();
    polecisel[i] = j.Next(-100, 100);
    }


    return polecisel;
    }

    //Funkce pro výpis jakéhokoliv pole do řádku
    static void vypispole(int[] poleprovypis)
    {
    foreach (int i in poleprovypis)
    {
    Console.Write("{0, 5}", i);
    }
    Console.WriteLine();
    }

    //Funkce BUBBLE sort metody ttřídění pole
    //optimalizace: dopředný i zpětný průchod
    //Vzestupný postup - opačně s přehozením znamének
    static int[] bubble(int[] polebubble)
    {

    for (int i = 0; i < polebubble.Length / 2; i++)
    {
    bool zamena = false;

    for (int j = i; j < polebubble.Length - i - 1; j++)
    {
    if (polebubble[j] > polebubble[j + 1])
    {
    int tempnum = polebubble[j];
    polebubble[j] = polebubble[j + 1];
    polebubble[j + 1] = tempnum;
    zamena = true;
    }
    }
    for (int j = polebubble.Length - 2 - i; j > i; j--)
    {
    if (polebubble[j] < polebubble[j - 1])
    {
    int tempnum = polebubble[j];
    polebubble[j] = polebubble[j - 1];
    polebubble[j - 1] = tempnum;
    zamena = true;
    }
    }
    if (!zamena) break;
    }
    return polebubble;
    }


    //Funkce QUICk sort metody třídění pole
    //při velikosti pole <=10 není zrovna výhodný
    //potíže jsou s volbou hranic
    static int[] quick(int[] polequick, int hraniceleva, int hraniceprava)
    {
    if (hraniceleva < hraniceprava){
    int boundary = hraniceleva;
    for (int i = hraniceleva + 1; i < hraniceprava; i++)
    {
    if (polequick[i] > polequick[hraniceleva])
    {
    prohozeni(polequick, i, ++boundary);
    }
    }
    prohozeni(polequick, hraniceleva, boundary);
    quick(polequick, hraniceleva, boundary);
    quick(polequick, boundary + 1, hraniceprava);
    }
    return polequick;
    }

    private static void prohozeni(int[] poleprohozeni, int hraniceleva, int hraniceprava) {
    int tempnum = poleprohozeni[hraniceprava];
    poleprohozeni[hraniceprava] = poleprohozeni[hraniceleva];
    poleprohozeni[hraniceleva] = tempnum;
    }
    }
    EDUDANT
    EDUDANT --- ---
    SLUPKA: No v livecycle to je vytvořený. Já když normálně v acrobatu použiju forms-manage...-import tak to funguje. Ale když to obsluhuju javascriptem přes VBA tak ne.

    Sub test()

    Dim AcroApp As New AcroApp
    Dim theForma As New AcroAVDoc
    Dim theform As AcroPDDoc
    Dim jso As Object


    theForma.Open "D:\zkouska.pdf", ""
    Set theform = theForma.GetPDDoc
    Set jso = theform.GetJSObject
    jso.xfa.host.importData "d:\a.xml", False


    chyba v debugeru je tahle

    NotAllowedError: Security settings prevent access to this property or method.
    Doc.importXFAData:-1:External undefined:Exec


    Ještě před tím než mi to hodí tohle tak při otevření dokumentu mi to hlásí že by bylo potřeba stáhnout novou verzi a pak mi to hodí chybu presign což taky nevim co je ale kažodpádně i přes tohle mi to jde manuálně importovat.



    Je to tam právě tak že tam neni přednastavenej počet ale přidávaj se tam pole až dle toho xml, Pak je tam rozdíl jelsti je fyzická osoba právnická osoba atd.
    SLUPKA
    SLUPKA --- ---
    EDUDANT: Tak ale řešení od Adobe na formuláře není Acrobat, ale LiveCycle...

    A to v tom formuláři máš nějaké dynamické prvky? Jakože třeba řádky, které se opakují, kolikrát je potřeba a podle toho si vezmou místo? A nebo je tam třeba 10 řádků, které se vyplní, jak je potřeba?
    EDUDANT
    EDUDANT --- ---
    SLUPKA: no představ si to tak že můžemš mít například několik účtú pod zákazníkem, který má několik faktur , z čehož jsou některé po splatnosti a tudíž mají úroky a některé ne. Takže v podstatě některé uzly se opakují některé jsou někdy prázdné, některé nejsou vůbec generované. To xml sem tvořil v PL/SQL a dalo to práci ale vyplňovat políčko po políčku respektive to nějak mapovat bych asi nedal.

    To je pravda to bude asi drahé. Proto sem předpokládal když vlasntníme ofiko licence na acrobat profesional že to půjde.

    Zkoušel jsem používat tu metodu jso.xfa.host.importData "d:\a.xml" ae dostávám chybu z předhcozího příspěvku.

    Pokud ta přidám ještě True nebo False (u čehož jsem se vůbec nedozvěěl co ten paramtr vypíná nebo zapíná) tak mi to háže general error. na různejch forech jsou různý odpovědi a jsou i dost protichůdný tak už fakt nevim :D
    SLUPKA
    SLUPKA --- ---
    EDUDANT: Vůbec nevím, co si představit pod dynamickým formulářem, já jsem zatím vždy pracoval se statickýma. Ale to bude asi hodně náročné, protože obecně těch knihoven na práci s formulářema v pdf moc není a těch dobrých už vůbec ne. A oficiální cesta bude zase asi drahá hádám :))
    EDUDANT
    EDUDANT --- ---
    SLUPKA: No právě že to není standardní formulář je hodně dynamickej a když v acrobatu použiju funkci import data tak to funguje v pohodě. Prostě tam načtu to xml a je to. Ale když volam xfa.host.import data přes VBA například tak to hlásí notallowedError:security settings prevent access to his property of method
    zkoušel jsem veškerý změny v security a nic. Tak jsem právě myslel že bych si udělal v C# nějakou knihovnu která by s tím třeba uměla pracovat lépe.


    SLUPKA
    SLUPKA --- ---
    EDUDANT: Je tam práce s formuláři, můžeš se dostat na seznam všech polí a na těch polích dávat SetValue. Ale C# verze (nevím jak Javovská) má spoustu nefungujících věcí, co si musíš dopsat sám (čárové kódy, obrázky, defaultní hodnoty ...)

    Ale na jednoduché vyplnění formuláře z XML by to mělo být použitelné snadno...
    EDUDANT
    EDUDANT --- ---

    SLUPKA:
    V itextsharpu jsem nenašel nějakou metodu pro import dat.
    SLUPKA
    SLUPKA --- ---
    EDUDANT: A co přesně ti chybí v itextsharpu? Nebo tedy úplně přesně nechápu, v čem je problém :))
    Kliknutím sem můžete změnit nastavení reklam