Matematické Fórum

Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.

Nástěnka
22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.

Nejste přihlášen(a). Přihlásit

#1 25. 08. 2013 16:38 — Editoval buff (25. 08. 2013 16:40)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Algoritmus pro výpis "matice"

Vlastně se nejedná o matici, ale o "šachovnici" (paletu), ale v principu je to jedno a to samé. Zkrátka jde o dva cykly, jeden vypisuje souřadnice pro osu x a druhý pro osu y. Polohuju čtverce, které na obrazovce budou vypadat podobně jako šachovnice. Ta šachovnice má mít pravidelné strany. Nejdříve zpracovávám y a pak v zanořeném cyklu x. Myslel jsem si že mi bude stačit obyčejný modulo na to, abych jen zjistil jestli po dělení strany palety číslem c zbude 0. Ale nefunguje.

Jazyk AHK
msgBox - okno které vrací zprávu
colors - pole obsahující 14 hodnot
mod - funkce mod dělí šířku palety céčkem a vrací zbytek
; komentář

x=0 ; souřadnice může být téměř libovolná v rámci obrazovky
y=0 ; souřadnice může být téměř libovolná v rámci obrazovky
palWidth=4

http://paste.ofcode.org/eZZx6a3KThY7TgtcepHui6

Problém je v tom že to prakticky vůbec nefunguje, prostě to nedává tu šachovnici.


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#2 25. 08. 2013 18:34 — Editoval buff (26. 08. 2013 09:18)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Edit: kód jsem o něco poupravil, ale ještě je v něm problém, viz příspěvek níže


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#3 26. 08. 2013 08:43

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Algoritmus pro výpis "matice"

↑ buff:
Ty opravdu umíš "perfektně" definovat problém.
Četl jsem to asi třikrát, ale o co ti jde jsem nepochopil.
Pokud v tom příkladu v příspěvku 2 má být pravda jenom když šířka se rovná c (a tak to tam máš), tak nemusíš dělat žádné cykly ani počítat modulo.
Jen taková poznámka: píšeš "4/3 je dělitelné jenže nechci aby výsledek byl pravda", ale 4/3 není dělitelné beze zbytku.

Offline

 

#4 26. 08. 2013 09:17 — Editoval buff (26. 08. 2013 10:39)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Zapomeň na to co jsem napsal (já to radši i smažu aby to nikdo další nečetl.

Část kódu jsem opravil, takže už to vypadá jako paleta, ale je tam ještě jedna chyba.

Takže aktuální stav:

http://paste.ofcode.org/328b9YHf39286yiqdUf5mRN

testovací hodnoty:
padding = 2
tileSize = 14
palleteSize = 4
xOrigin = 200
yOrigin = 200
colors = pole se 14 položkami

Pokouším se vytvořit paletu o 4x4 čtverečků. něco podobného:

http://wireframesketcher.com/blog/image … picker.png

Klíčová proměnná je cn a ta označuje kolik kroků jsem udělal během vytváření nového řádku.

Co to dělá? Po vypsání prvních čtyř čtverečků do první řady vypisuje:
A5
0
B1 ... a ukáže jeden čtvereček ale na nesprávném místě, totiž pod tím čtvrtým čtverečkem na konci první řady. Takže výsledný obrázek je:

x x x x
o o o x
(x znamená čtvereček, o je volné místo)

pak pokračuju
1
b2
a dále se opakuje vzorec popsaný výše, takže další čtvereček:

x x x x
x ... atd.

pak by to pokračovalo
x x x x
x x x x
a dále
x x x x
x x x x
o o o x
a dále
x x x x
x x x x
x x x x

a tím to hasne.
Kdyby to bylo správně tak by ve výsledku mělo být:

x x x x
x x x x
x x x x
x x

tj. 14 položek

Je jasné že ten čtvereček co se vytváří vpravo místo vlevo tam nemá být, jenže jsem nepřišel proč to tak je. Matematicky v tom žádnou chybu nenacházím a to si vypisuju i ten vzorec pro výpočet souřadnice x.

http://paste.ofcode.org/328b9YHf39286yiqdUf5mRN


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#5 26. 08. 2013 10:43 — Editoval buff (26. 08. 2013 10:45)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Nyní si můžete stáhnout pokus.exe je to ten algoritmus, co jsem zde odkazoval ale zkompilovaný pomocí AHK:

http://sourceforge.net/projects/autots/ … e/download

Po spuštění se vám hned začnou vypisovat hlášky a ty čtverečky přesně podle kódu níže:

Zdrojový kód:
http://paste.ofcode.org/328b9YHf39286yiqdUf5mRN


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#6 26. 08. 2013 11:24 — Editoval Honzc (26. 08. 2013 12:15)

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Algoritmus pro výpis "matice"

↑ buff:
Ten tvůj programovací jazyk neovládám (ani se v něm nevyznám)
Jestli to má vypadat nějakjako na obrázku níže, (barvy jsem si vymyslel) tak v eDelphi by program vypadal nějak takto: (přečti si komentáře za // .. a třeba to pochopíš)


Offline

 

#7 26. 08. 2013 12:14 — Editoval buff (26. 08. 2013 12:51)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Takhle to nejde, to musí být dynamické aby se daly změnit parametry

Spíš jsem očekával analýzu mého kódu než sepsání jiného kódu v jiném jazyce...

Ten ahk jazyk není těžký na analýzu, ani jsem nepoužil třídy, ale hold logika někde selhala


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#8 26. 08. 2013 12:21

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Algoritmus pro výpis "matice"

↑ buff:
A jaké (které) parametry se mají měnit?

Offline

 

#9 26. 08. 2013 12:52 — Editoval buff (26. 08. 2013 12:59)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Tam se mění všechno, počet barev v poli colors
šířka palety a šířka tileSize se vypočítává z počtu barev...


http://oi39.tinypic.com/102rwxg.jpg

při pátém kroku (pátý čtverec)
x := xOrigin + tileSize*xc + padding*xc
má vyjít:
x = 200 + 14*1 + 3*1
přitom zpráva ukazuje shodné hodnoty jako u prvního čtverce ale výsledek je jiný:

http://oi43.tinypic.com/spaicy.jpg
nahoře první čtverec, dole pátý čtverec

cn počítá kdy se má provést "zalomení" čini začít nový řádek.


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#10 26. 08. 2013 13:20 — Editoval buff (26. 08. 2013 13:25)

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Už jsem přišel na to kde je problém, teď to jen vyřešit.

První část opravy je tedy toto:

  if ( cn=palleteSize+1 )
    cn:=0
  if ( cn=0 )
     {
     msgBox, A %xc%
...

dokud cn:=0 bylo uvnitř toho hlavního if, tak se krok pět nezpracoval a jeden tile byl tedy přeskočen. Pětka se vytiskla znova vpravo jen na jinou y souřadnici a šestka ze pak zařadilo na místo pětky zleva.


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#11 26. 08. 2013 13:44

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

Konečně jsem se z toho vymotal!

Code:

colors := [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
padding:=2
xOrigin:=200
yOrigin:=200
palleteSize:=4
tileSize:=14

Gui, Toolbar:Show,

palWidth:=padding
if ( Mod(palWidth, 2) <> 0 )
   palWidth++ ; create odd palette width
c:=0 
xc:=0
yc:=0
x := xOrigin
y := yOrigin
cn:=0
for key, color in % colors
  {
  if ( key=="count" )
    continue

  c++
  cn++ 
  xc++
  if ( cn=palleteSize+1 )
    {
    cn:=1
    xc:=1
    yc++
    y := yOrigin + tileSize*yc + padding*yc
    }
  x := xOrigin + tileSize*xc + padding*xc

  if (!x) 
    x := "0"
  if (!y)
   y := "0"
  Gui, palette_%c%: -Caption +ToolWindow +AlwaysOnTop  +OwnerToolbar
  ;color:=colorsDb[color["colorName"]][color["colorKey"]]?colorsDb[color["colorName"]][color["colorKey"]]:color["colorName"]
  Gui, palette_%c%: Color, Black
  Gui, palette_%c%:Show, NA X%x% Y%y% W%tileSize% H%tileSize%
 } ; end of for key,color

Takže jsem úplně vypustil blok else, to byla hlavní příčina problémů. x přiřazovat vždy, plynule s navyšováním c. Potom bylo třeba dát cn:=1 místo cn:=0.


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

#12 26. 08. 2013 14:30

Honzc
Příspěvky: 4641
Reputace:   248 
 

Re: Algoritmus pro výpis "matice"

↑ buff:
Víš, že ti to kreslí čtverečky v ose x ne od 200, ale od 216.
Tedy by to chtělo xc++ dát až za x := xOrigin...  a do podmínky if ( cn=palleteSize+1 ) dát xc:=0

Offline

 

#13 26. 08. 2013 14:52

buff
Příspěvky: 213
Škola: ZŠ
Reputace:   
Web
 

Re: Algoritmus pro výpis "matice"

↑ Honzc:
To je detail, to mohu vyřešit později jestli to bude vadit. Hlavně že se mi tu paletu povedlo vytvořit. Sice na tom ještě musím něco dodělat, ale základ je hotov.


Dobré na ukládání dokumentů, aby byly přístupné ke čtené online *.doc, *.rtf aj. http://www.viewdocsonline.com

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson