Pomozte s programováním v Javě
Re: Pomozte s programováním v Javě
Ř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)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
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... :)
Re: Pomozte s programováním v Javě
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
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):
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:
Do samotného kreslení přibyl jeden parametr, aby metoda věděla jestli má kreslit NAHORE nebo DOLE:
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:
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:
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().
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

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)
(pravil K. H. Borovský o cenzuře internetu)
- Funstorm007
- Level 5
- Příspěvky: 2029
- Registrován: říjen 08
- Pohlaví:
- Stav:
Offline
Re: Pomozte s programováním v Javě
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. 


Re: Pomozte s programováním v Javě
To jo, zjednodušuje se to tím docela dost, ale pomalu mi docházejí některé další souvislosti z tohohle článku
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.

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)
(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ů