Jump to content
GSForum - Segélyvonal

Javascript példák, megoldások


Recommended Posts

Posted

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.

Posted

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? :)

Posted

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! :alszik:

Posted

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

Posted

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.

Posted
Ja, és csinálhattam volna rekurzívra is, de... azt hiszem túlbeszéltük! :alszik:

É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: :démonikacaj:

 

document.getElementById("eredmeny").innerHTML = (tomb.toString()).replace(/,/g, "<br />");

Posted

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.

Posted

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.

 

Posted

És még az is lényeges, hogy két db. 1-essel kezdõdik.

Posted

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 :!: :)

  • 1 month later...
Posted

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.

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...