durato 0 Share Posted July 4, 2006 El is kezdeném a sort, a fibonacci-számsorral. A Fibonacci-számsort úgy képezzük, hogy: 0+1=1 1+1=2 2+1=3 2+3=5 3+5=8 5+8=13 stb., tehát a sor következő eleme az előtte álló két elem összege. Erre a megoldásom: <script language="javascript"> function elso (a, b) { c=a*1+b*1; alert (c); var a=b var b=c masodik (a, b) } </script> <script language="javascript"> function masodik(a, b) { c=a*1+b*1 if (c<=10000) { alert (c) var a=b var b=c elso (a, b) } } </script> <button onclick="elso(0,1)">kezdés</button> Remélem nem fog semmilyen formázás történni az üzeneten, azt a részt, hogy alert( c) át kell alakítani helyessé, alert után zárójel bal, utána szóköz nélkül c utána zárójel jobb. Link to comment Share on other sites More sharing options...
payskin 876 Share Posted July 4, 2006 Szia! Ez klassz meg minden, de: 1. Ha kódként formázod a programot, akkor nem történik rajta semmilyen változás és nem kell trükközni. 2. Van a JavaScriptnek saját témája a Websarok témacsoportban, ahova hamarosan át is helyezem a topicot. Kérlek, legyél körültekintőbb a témanyitásnál (és ne rövdítsd a "hogy"-ot, allergiásak vagyunk rá)! Köszi! ---------- Később: áthelyezést, szerkesztést megcsináltam, akkor most érdemben tennék fel kérdéseket: 1. Miért kell a két függvényhez két külön <script>? 2. Miért kell két függvény? Link to comment Share on other sites More sharing options...
payskin 876 Share Posted July 5, 2006 Az én megoldásom. Egy kicsit hosszabb, de csak azért, mert megcsináltam hozzá szépen a körítést is! <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" /> <meta name="message" content="IN VALID CODE WE TRUST" /> <title>Fibonacci</title> <script type="text/javascript"> function fibonacci () { var darab = window.document.fibo.darab.value; var a,b,s,i; a = 0; b = 1; s = ""; for (i=0; i<darab; i++) { b = a + b; a = b - a; s = s + (b + '<br />'); } document.getElementById("eredmeny").innerHTML = s; return true; } </script> </head> <body> <form action="" name="fibo" onSubmit="fibonacci(); return false;"> Hány számot kérsz? <input type="text" name="darab" size="5" /><br /> </form> <p id="eredmeny"></p> </body> </html> Kezdjük a -n belüli résszel: csinálunk egy fibo nevű kicsi űrlapot (), megkérdezzük, hány számot szeretne, bekérjük a számot egy szövegmezőben, és Enter megnyomásakor átdobjuk az egészet a fibonacci() című JavaScript függvénynek. A számokat nem csak úgy hűbelebalázs módjára belenyomjuk a képernyőbe, de nem is használunk alertet, mert nem szeretjük az Entert koptatni, hanem szépen előkészítünk egy eredmény id-jű bekezdést, amibe majd a JavaScript kód beleírja az eredményt. Elegáns ez, vagy mi? Na, akkor nézzük a függvényünket. Először is megcímezzük a fibo űrlap darab szövegmezőjének értékét, és ezt gondosan eltároljuk egy darab nevű változóban, aztán deklaráljuk és inicializáljuk a többi változót, amit használni akarunk. Elindítjuk a ciklust 0-tól, megyünk darabig, egyesével. A ciklusban nagyon furfangos módon kezeljük a-t és b-t. A b-ben tároljuk mindig az aktuális fibonacci számot, és az a kiszámításánál kihasználjuk csúnyán, hogy b-ben a kettejük összege van, tehát ha a-t kivonjuk a b-ből, akkor éppen a b korábbi értékét kapjuk eredményül. Szemléltetem: keressük a negyedik fibonacci számot, tudjuk, hogy az előző két szám a 2 (a) és a 3 (b) volt. Összeadjuk a két számot (b=5), majd ebből kivonjuk a-t: 5-2=3, és így valóban pont az az érték került bele, ami korábban b-ben volt. (Lásd még a klasszikus programozástechnikai feladatot: van két numerikus változód, cseréld meg a tartalmukat harmadik változó bevonása nélkül.) s stringhez minden körben "hozzáadjuk" (amolyan string módra, természetesen) az éppen aktuális eredményt. Mikor végeztünk a ciklussal, megcímezzük a gondosan előkészített eredmeny id-jű bekezdésünket, és megváltoztatjuk a tartalmát (innerHTML), pontosabban belevarázsoljuk azt, amit összegyűjtöttünk az s-ben. Ezután angolosan távozunk a függvényből. Remélem, tanulságos volt. Még lehetne egy fokkal szebben csinálni (a -ban levő onSubmit ugyanis nem szép megoldás, keverjük a JavaScriptet a HTML-lel, ami, ugye, ejnye-bejnye kategória), de nem akartam annyira túlbonyolítani. Ja, és csinálhattam volna rekurzívra is, de... azt hiszem túlbeszéltük! Link to comment Share on other sites More sharing options...
durato 0 Author Share Posted July 6, 2006 Hát, igen, én a saját kis béna megoldásomat raktam be... és az én megoldásomnál a document.write elképzelhetetlenül lassú, itt meg hipphopp elénk tárja a számokat Link to comment Share on other sites More sharing options...
payskin 876 Share Posted July 6, 2006 Semmi gond, mindannyian elkezdjük valahol. Egy hónapja valószínűleg még én is document.write-tal csináltam volna, és csodálkoztam volna, hogy miért nem jó úgy. Ezért írtam le ilyen részletesen, hogy lehessen belőle tanulni. A lényeg: a szkript ne direkt írjon bele a weboldalba, hanem módosítsa egy már ott levő elem tartalmát. Nem könnyű megérteni ezt az egész ez.az.amaz.micsoda jellegű dokumentum objektmodell-kezelést (DOM), de ha sikerül, fontos előrelépést jelent a JS-tudásodban. Link to comment Share on other sites More sharing options...
Giraffe1 0 Share Posted July 6, 2006 Ja, és csinálhattam volna rekurzívra is, de... azt hiszem túlbeszéltük! Én úgy emlékszem - és ebben legalábbis megerősített a wikipedia is -, hogy a Fibonacci számsor 0,1,1,2...-vel kezdődik. Ezért én inkább így csinálnám meg a JavaScript részt: function fibonacci () { var darab = window.document.fibo.darab.value; var tomb = (darab < 1) ? [] : ((darab == 1) ? [0] : [0, 1]); for (i=2; i<darab; i++) tomb.push(tomb[i-2]+tomb[i-1]) document.getElementById("eredmeny").innerText = tomb.toString(); } Az inicializálás a "kedves felhasználó" miatt kicsit összetettebb, hiszen megadhat 1-nél kisebb számot is, de onnantól kezdve egyszerűbb a dolog, hiszen csak nyomni kell a tömbbe az előző kettő összegét, a végén pedig kiíratni a tömböt stringként. És ha ragaszkodsz ahhoz, hogy nem vesszőkkel, hanem soremelésekkel kell elválasztani a számokat, akkor a kiíratást cseréld le erre: document.getElementById("eredmeny").innerHTML = (tomb.toString()).replace(/,/g, "<br />"); Link to comment Share on other sites More sharing options...
eremit 1 Share Posted July 6, 2006 A Fibonacci számsor két db. 1-essel kezdõdik. A Wikipedia nem mindig megbízható. u.i. http://boersenlexikon.faz.net/fibonacc.htm - Itt 1-gyel kezdõdik, de másutt több helyen tényleg 0-val. Én 1-gyel tudom. Link to comment Share on other sites More sharing options...
Giraffe1 0 Share Posted July 6, 2006 Hmmm, futottam egy gyors kört Fibonacci témában a google segítségével. Kb. két tucat oldal fele-fele arányban indul nulláról és egyről, ez utóbbiaknál pedig szintén van némi szórás, hogy egy vagy két 1-sel kezdődik a számsor. Ez esetben így módosul a program közepe: for (i=0; i<darab; i++) tomb.push(tomb[i]+tomb[i+1]); tomb.shift(); tomb.shift(); Vagyis kettővel tovább töltögetjük a tömböt, a végén pedig kiszedjük az első két elemet. Link to comment Share on other sites More sharing options...
arpsoft 12 Share Posted July 6, 2006 Az eredeti Fibonacci probléma, amibõl a számsor született: Hány pár nyúlra szaporodik egy év alatt a kezdeti pár, ha tudjuk, a nyulak két hónap alatt válnak ivaréretté, és ezután minden pár minden hónapban egy új párnak ad életet és mindegyikük életben marad?Ebbõl kifolyólag nem kezdõdhet nullával. Link to comment Share on other sites More sharing options...
eremit 1 Share Posted July 6, 2006 És még az is lényeges, hogy két db. 1-essel kezdõdik. Link to comment Share on other sites More sharing options...
durato 0 Author Share Posted July 6, 2006 Látom, sikerült felkelteni az érdeklõdésteket, jó lenne, ha elszakadnánk a fibonacci-témától, hiszen van érdekesebb téma is példák bemutatására :!: Link to comment Share on other sites More sharing options...
durato 0 Author Share Posted August 9, 2006 Most legyen a sor egy javascriptes pixelről pixelre rajzolgatós programon. Kikötés: onMouseover esemény legyen benne, és ki lehessen kapcsolni a rajzolást pl: onclick eseménnyel. Táblázattal érdemes csinálni, majd rakok ide forrást egy példáról. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now