Pomozte s programováním v Javě

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 16 pro 2011 18:38

Řeším teď jeden vlastní problém, takže jsem neměl čas se ten DrawingTool učit, ale měl bych cvičný dotaz. Dají se tím kreslit ty grafy postupně, nebo je to musí vytvořit oba najednou? To bys potom musel mít dvě pole, jedno původní a druhé seřazené...
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Reklama
Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 17 pro 2011 12:51

Na DrawingTool se není co učit. Jediné, co program dělá a dokáže je nakreslení čáry z bodu A do bodu B. Ale to je jedno. Ten graf už jsem vyřešil sám ve čtvrtek... Ale teoreticky vzato, ten samý úkon bych mohl rozkrájet do tří metod. První by kreslila podélné linky, druhá a třetí by kreslily jednotlivé grafy, které by se pak volali do té první... Takhle to ale bylo jednodušší, vytvořil jsem další pole s kopií toho původního neseřazeného a hotovo... :)

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 27 pro 2011 11:54

Vždycky je co se učit, třeba jak obejít různá omezení, například tohle...

Co to jako má být ten DrawingTool? Na 1,2GHz dvaatřicetibitovém procesoru mi to dělá čáry stejně rychle (nebo spíš pomalu) jako BASIC na osmibitovém Didaktiku, který jel na 3,5MHz!
Teda já si rád zavzpomínám na staré časy, ale když jsem tohle viděl, tak jsem měl málem pěnu u huby :evil:
Pokusil jsem se tam minimalizovat počítání v cyklech, jenže to mělo vliv téměř neznatelný, naštěstí jsem nakonec při pročítání zdrojáku DT našel metody stopUpdate() a startUpdate(), díky kterým jsem se dostal zpátky do příčetného stavu.
Stejná funkce se používala už u Sinclairu ZX81, ten měl v roce 1981 pouhý 1KiB RAM a byl to nejlevnější osobní počítač jaký tehdy existoval, dal se pořídit i jako stavebnice, zaletovat do desky patice pro pět integrovaných obvodů a pár rezistorů dokázal každý, kdo udržel páječku v ruce:



Takže to vezmeme od začátku. Do deklarace třídy jsem přidal pár položek, navíc některé z nich tentokrát jako konstanty (ať je vidět že tu knížku fakt čtu):

Kód: Vybrat vše

class sekvence
      {
      final static int TEXT=0,GRAF=1;
      final static int DOLE=1,NAHORE=2;
      static int VYSKA=600,SIRKA;
      static FileInputStream fis;
      static FileOutputStream fos;
      static PrintStream ps;
      static DrawingTool dt;

...


Vytvoření grafické plochy jsem oddělil do samostatné metody, aby se samotné kreslení grafu mohlo volat víckrát. Jinak jsem to nechal tak jak jsi to měl ty:

Kód: Vybrat vše

      /* inicializuje kreslicí plochu */
      public static void inicializovat(int pocet)
             {
             SIRKA = pocet*35;
             dt = new DrawingTool(SIRKA, VYSKA, Color.WHITE, true);
             dt.setColor(Color.BLACK);
             int mezeraMeziRadky = VYSKA / 20;
             for (int y = 0; y < 20; y++)
                 {
                 dt.line(0, mezeraMeziRadky * y, SIRKA, mezeraMeziRadky * y);
                 dt.line(0,VYSKA-1,SIRKA,VYSKA-1);
                 }
             }


Do samotného kreslení přibyl jeden parametr, aby metoda věděla jestli má kreslit NAHORE nebo DOLE:

Kód: Vybrat vše

      /* nakreslí graf */
      public static void kreslit(int[] pole,int pocet,int pozice)
             {
             int i,j,x,x1,x2,y1,y2;

             if (pozice==NAHORE)
                dt.setColor(Color.BLUE);
             else
                dt.setColor(Color.RED);

             y1=VYSKA/pozice;
             dt.stopUpdate();
             for (j=0;j<pocet;++j)
                 {
                 x1=j*34+4;
                 x2=j*34+37;
                 y2=VYSKA/pozice-3*pole[j];
                 for (x=x1;x<x2;++x)
                     dt.line(x, y1, x, y2);
                 }
             dt.startUpdate();
             }


Vykreslení grafu vcelku je téměř okamžité, ale pokud bys potřeboval vidět jak se kreslí jednotlivé sloupce, stačí upravit jádro metody takhle:

Kód: Vybrat vše

             y1=VYSKA/pozice;
             for (j=0;j<pocet;++j)
                 {
                 x1=j*34+4;
                 x2=j*34+37;
                 y2=VYSKA/pozice-3*pole[j];
                 dt.stopUpdate();
                 for (x=x1;x<x2;++x)
                     dt.line(x, y1, x, y2);
                 dt.startUpdate();
                 }


No a samozřejmě jak to všechno použít, v metodě zpracuj() stačilo doplnit inicializaci a první volání před setříděním, do obou volání potom příslušný parametr pozice:

Kód: Vybrat vše

             if (graf>0)
                {
                inicializovat(pocet);
                kreslit(pole,pocet,NAHORE);
                seradit(pole,pocet);
                kreslit(pole,pocet,DOLE);
                }


A k té kosmetice ve výpisu do souboru stačilo přemístit řádek ps.println(); z metody vypsat() do metody zpracuj(), až za druhé volání té vypsat().
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

Uživatelský avatar
Funstorm007
Level 5
Level 5
Příspěvky: 2029
Registrován: říjen 08
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod Funstorm007 » 27 pro 2011 17:07

Jo jo, vím, vždiť už to mám stejně nějaký ten pátek hotové... ;) Tu ulitu používáme ve škole. Nejde tu sřejmě o rychlost jako spíš o účel a jednoduchost. ;)

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 7397
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

Re: Pomozte s programováním v Javě

Příspěvekod faraon » 27 pro 2011 17:35

To jo, zjednodušuje se to tím docela dost, ale pomalu mi docházejí některé další souvislosti z tohohle článku :huh:
Tenkrát na osmibitech byl hacker skoro každý kdo pro ně něco dělal, dneska je skoro každý lepič kódu...

Já vím že už to máš hotové, ale můžeš porovnat svoje a moje řešení.
O rychlost jde v každém případě, zkus si představit že takových programů ti na tom počítači současně poběží deset!
A také rychlost úprav, když program dostatečně rozkouskuješ, tak stačí změnit jeden modul a nehrozí zanesení chyb někam, kde bys je fakt nečekal.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)


Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 6 hostů