JavaScript bevezetés

1. Kockadobást szimuláló program készítése.

Bemenet: 6 fáziskép egy dobókockáról. Felhasználhatók Juhász Tibor-Kiss Zsolt: Programozási ismeretek (MK-4462-3) tankönyv digitális mellékletének képei, ám az alábbi képek letöltésének sincs akadálya:

Kocka1.pngKocka2.pngKocka3.pngKocka4.pngKocka5.pngKocka6.png

Kimenet: Az előállított véletlen értéket ábrázoló kép.

Változók: Random szám 1 és 6 között, String típusú tömb 6 elemmel

Algoritmus: Feltöltjük az imgsrc tömböt a képek nevével, majd az előállított véletlenszám segítségével kiválasztjuk azt a tömbelemet, amellyel a HTML dokumentumban megjelenített kép lecserélhető. A sikeres megoldáshoz a DOM modell felépítését kell megismernünk.

Eseménykezelés: Az onclick esemény bekövetkezésekor végrehajtandó utasításokat a changeImage() függvényben rögzítjük.

Az alábbiakban rendszerezzük a megoldáshoz szükséges ismereteket. A platformfüggetlen megoldás elkészítéséhez gyakorlatilag egy böngésző programra, és esetleg egy egyszerűbb editorra van szükség. A lecke mintaprogramjai a böngészőben kipróbálhatók és módosíthatók a forráskód alatti "Próbáld ki! »" gombra kattintás után. Alea iacta est.

Kocka1.png

Hogyan épül fel egy HTML dokumentum?

Elöszőr gondoljuk át a programozási környezet jellemzőit. A böngészők HTML kódokat jelenítenek meg. A HTML nyelvet azonban még nem tekintjük programnyelvnek, mert csupán a tartalmi elemek megjelenítéséhez szükséges információkat írja le. Vizsgáljuk meg HTML dokumentum szerkezetét. Mindig <html> és a </html> tagek (HTML utasítások) között találhatók a tartalmi elemek. A <head> és a </head> között a dokumentum meta (leíró) információi szerepelnek. Az itt található adatok nem jelennek meg a böngészőben, mivel a dokumentum tulajdonságairól adnak információt a böngészőnek és a robotoknak. A dokumentum tartalmi része a <body> és a </body> tagek között található. Egy HTML dokumentumban szöveg, kép, hang és mozgókép jeleníthető meg. Készítéséhez használhatunk egyszerűbb texteditort (pl. notepad, notepad++), vagy HTML fejlesztő programot (pl. Adobe Dreamweaver, CoffeeCup).

Beküldhető feladatok:

  1. A fenti minta tanulmányozása után készítsetek egy bemutatkozó HTML dokumentumot, amelyben megjelenik a csapat neve, az iskolájának neve és címe, a csapattagok kedvenc időtöltésének listája, az iskola weblapjának linkje és egy kép a csapatról.

    1000|2 pont

  2. Készítsetek HTML dokumentumot a feladatok megoldása során feltárt hasznos linkek tematikus áttekintéséhez.

    100|2 pont

A HTML oldalon a <form> és a </form> tagek által közrefogott űrlapról tudunk adatokat beolvasni. Az adatok bekérésének leggyakrabban használt utasítása az <input> tag.

<Experts only!>
Pusztán az ügyfél-kiszolgáló architektúra megértésének kedvéért, szánjunk pár percet a szerver oldali adatfeldolgozást végző PHP kód áttekintésére is. Figyeljük meg, hogy az űrlap <form> tagja rendelkezik egy action attributummal, amelyben megadhatjuk, hogy milyen kódot hajtson végre a szerver az "Elküld" gomb lenyomását követően. Az űrlapmezők adatait a $_POST tömbben fogadja a szerver.

A fenti kód a szerveren fut, a böngésző csak a futtatás eredményét kapja vissza. Ugye észrevetted, hogy itt a <?php és ?> jelölések között jelentek meg a PHP utasítások. Ha szeretnéd kipróbáni a szerver oldali programozást, akkor telepíts a számítógépedre egy WAMP szervert vagy regisztrálj egy ingyenes webtárhelyet, ám a JavaScript programozáshoz erre egyenlőre nem lesz szükséged.
</Experts only!>

« Előző | Lap eleje

Kocka2.png

JavaScript utasítások a HTML dokumentumban

Ha a HTML kódban számításokat akarunk végezni, vagy néhány feltétel teljesülését szeretnénk megvizsgálni, vagy esetleg utasításokat többször végrahajtani, akkor bizony adat- és vezérlőszerkezetekre lesz szükségünk. Nos, a HTML ezen hiányosságát pótolhatjuk például JavaScript kódok beágyazásával. Ilyenkor a <script> és a </script> tagek közé írjuk a JavaScript utasításokat, melyeket a böngésző program fog értelmezni és végrehajtani.

Beküldhető feladatok:

  1. Hogyan lehetne kiíratni az évet, hónapot és napot önálló sorokban?

    10|2 pont

  2. Írassátok ki a csapatneveteket és az iskolátok honlapjának linkjét script-ben!

    10|2 pont

« Előző | Lap eleje

Kocka3.png

JavaScript változók használata

A változót névvel azonosított memóriaterületnek tekintjük, különböző értékek tárolásának illetve feldolgozásának az eszköze. A változókat a var kulcsszó után deklaráljuk. Értékadó kifejezésekben az egyenlőségjel bal oldalán álló változó veszi fel a jobb oldalon álló kifejezés értékét. A kifejezések kiértékelését a JavaScript értelmező végzi el. Az eredmény a kifejezésben használt változók és a kijelölt műveletek jellegétől függően leggyakrabban szám, szöveg vagy logikai típusú.

Ha megegyező típusú adatok sorozatát szeretnénk feldolgozni (pl. osztályzatok, hőmérséklet, bevételek, kiadások), akkor tömbösíthetünk, vagyis egy közös azonosítóval hivatkozhatunk az adatsorozatra, miközben annak elemeit sorszámmal jelöljük. Tömb deklarálása az Array() kulcsszóval történik.

Billentyűzetről a legegyszerűbben a prompt() metódussal kérhetünk be adatot:

Beküldhető feladatok:

  1. Készítsetek egy programot, amely bekér egy egész értéket. Egy tömbben tároljátok el a szám első 10 többszörösét, majd írassátok ki vesszővel elválasztva egy sorba. Például a 3-ra az eredmény: 3, 6, 9, 12, 15, 18, 21, 24, 27, 30.

    100|2 pont

  2. Kérjétek be egy háromszög oldalainak hosszát, majd írassátok ki, hogy tompa-, derék-, vagy hegyesszögű! Ha az c2-a2-b2 összefüggés egyenlő nullával akkor derékszögű, ha nagyobb nullánál, akkor tompaszögű, és ha kisebb nullánál, akkor hegyesszögű.

    1000|2 pont

« Előző | Lap eleje

Kocka4.png

JavaScript vezérlőszerkezetek

Meghatározott logikai feltételek teljesülése esetén a vezérlőszerkezetekkel tudjuk szabályozni az utasítások végrehajtásának sorrendjét. A struktúrált programban alapvetően három vezérlőszerkezet használatos: szekvencia, szelekció, iteráció. Figyeljük meg a mintapéldákban a vezérlőszerkezetek egymásba ágyazódását!

Szekvencia

Szekvencia (utasításblokk) esetén az utasítások a programba írt sorrendjük szerint hajtódnak végre.

Beküldhető feladatok:

  1. Egy dobozba 10 forintos érméket szeretnénk fektetve pakolni. Egy ilyen érme szélessége és hosszúsága 2 cm, magassága 2 mm. A program kérje be a doboz méreteit, és jelezze ki hogy mennyi érme fér bele ilyen módon.

    1000|2 pont

  2. Olvassuk be egy háromszög oldalainak hosszát, majd határozzuk meg a háromszög kerületét és a Heron képlet segítségével a területét: T=Math.sqrt(s*(s-a)*(s-b)*(s-c)), ahol s=0,5*(a+b+c).

    100|2 pont

  3. Egy egyszerűsített fizikai rendszerben a testekre csak a gravitáció hat, melynek mértéke 9.81 m/s2. Egy ilyen rendszerben egy eldobott labda röppályálya könnyen modellezhető. Készítsetek egy programot, ami bekéri a labda eldobását jelző ferde hajtás erősségét (v0, pozitív szám) és szögét (α, 0 és 90 fok között), és kiszámolja a dobás maximális magasságát, illetve távolságát.
    Ferde hajítás segítség Figyelem, Javascript-ben a sin és cos függvények radiánban várják a szöget, nem fokban!

    1 0000|2 pont

Szelekció

Szelekcióhoz (elágazás) már olyan utasításokat használunk, amelyek valamilyen logikai kifejezés értékétől függően eltérő utasításblokkot hajtanak végre. Megvalósításához használhatjuk az if (logikai kifejezés){ } utasítást.

Beküldhető feladatok:

  1. Olvassunk be egy évszámot. A program írja ki, hogy az adott év szökőév-e. Egy év szökőév, ha az évszám osztható 4-gyel. Nem szökőév azonban ha osztható 100-zal, kivéve ha osztható 400-zal is. Pl. szökőév: 1864, 1200, 2000, 2016; nem szökőév: 1943, 1900, 1300, 2014.

    100|2 pont

  2. Készítsetek egy programot, amely bekér 4 számot, és meghatározza közölük a legnagyobbat.

    100|2 pont

Iteráció

Az iteráció (ismétlődés, ciklus) teszi lehetővé bizonyos feltételek teljesülése esetén egy utasításblokk többszöri végrehajtását. Ilyenkor a ciklusmagban használt változók értéke feladattól függően folyamatosan változhat. Az while (logikai kifejezés){ } elöltesztelő ciklusnál az ismétlési feltételeket a ciklus mag előtt allítjuk be, míg a do { } while (logikai kifejezés) hátultesztelő ciklus esetén a ciklusmag utasításblokkját követően. Létezik még az úgynevezett növeknényes ciklusszervező utasítás a for (ismétlések) { }. Itt az ismétlések tényleges számát már a ciklus indulásakor meg kell adnunk. Figyeljük meg az alábbi mintaprogramban az iterációk felépítését.

Gondoltam egy számot: A program kigondol egy számot egy és tíz között, majd megkérdezi tőlünk, hogy vajon melyikre gondolt. Ezt addig teszi, amíg ki nem találjuk. A probléma megoldására while ciklust és if elágazást használunk.

Beküldhető feladatok:

  1. Döntsétek el egy beolvasott számról, hogy prímszám-e!

    100|2 pont

  2. Készítsetek programot, amely véletlenszerűen generál 20 egész számot 1 és 1000 között, majd ezeket megjeleníti.

    100|2 pont

  3. Készítsetek egy egyszerű lottó programot. A program generáljon 5 számot 1 és 20 között. Ezután kérjen be a játékostól 5 értéket. Végül írja ki, hogy a játékos hány számot talált el az 5-ből.

    1000|2 pont

« Előző | Lap eleje

Kocka5.png

JavaScript függvények és az eseménykezelés

Függvényhívások

A függvény névvel azonosított utasításcsoport. Általában akkor alkalmazzuk, amikor ugyanazokat a műveleteket kell a program különböző részein elvégezni, esetleg más-más adattal. A function kulcsszó után az általunk magadott néven lesznek elérhetőek az utasítás zárójelek { } között megadott utasítások. Ha a függvény utasításainak adatot szeretnénk átadni, akkor a függvény neve után zárójelben megadott úgynevezett attribútumokkal tehetjük meg. A függvény hívása nevének és attribútumainak megadásával történik.

Beküldhető feladatok:

  1. A tükörszavak olyan szavak, amelyek visszafelé olvasva is ugyanúgy néznek ki (pl.: görög, kerek). Készítsetek egy programot, amely egy bekért szóról eldönti, hogy az tükörszó-e.

    1000|2 pont

  2. A tükörmondatok olyan mondatok, amelyek visszafelé olvasva is ugyanúgy néznek ki. Készítsetek egy programot, amely egy bekért mondatról eldönti, hogy az tükörmondat-e. A vizsgálat során az írásjeleket és szóközöket figyelmen kívül kell hagyni, valamint a kis és nagy betűk között se tegyetek különbséget (utóbbiban a javascript nyújt segítséget). Pl. tükörmondat: "Óda: Igás! Sok a lakossági adó!"

    1 0000|2 pont

  3. Titkosítsunk egy szöveget a Caesar-kódolás segítségével. A program kérjen be egy szöveget, és egy számot. A szöveg minden karakterét, ami az angol abc kis-, vagy nagybetűje, tolja el a megadott mennyiséggel. A betűket körkörösen kell kezelni. Pl. az 'e' betűt hárommal eltolva a 'h'-t kapjuk, míg az 'Y'-t hárommal eltolva a 'B'-t kapjuk. Példa: eredeti szöveg: "This is a test. A message for you!"; eltolás: 5; eredmény: "Ymnx nx f yjxy. F rjxxflj ktw dtz!".

    1 0000|2 pont

Eseménykezelés

A program működése közben a kezelőfelületről illetve a kommunikációs felületről érkező események üzeneteit folyamatosan dolgozza fel, így a külső (egérről vagy billentyűzetről érkező) és a belső (timertől vagy más működő folyamatoktól érkező) események befolyásolják a futását.

A külső események érzékelésekor az operációs rendszer üzenetet küld annak az ablaknak, amelyen az esemény bekövetkezett. Az alkalmazás fogadja az üzenetet, és végrehajtja az eseményhez rendelt utasításokat. Ilyen események lehetnek az egérkattintás, az egérkurzor valamelyik dokumentumelem feletti állapota stb.

Szintén külső események vezérlik az űrlapmezők kitöltését, vagy az alábbi kő-papír-olló játékot is.

Gondoltad volna, hogy a timer bekapcsolását követően, akár egy négy soros függvénnyel már digitális órát lehet megjeleníteni? Ezt a belső időzítést a továbbiakban természetesen más rendszeresen ismétlődő tevékenységek elvégzéséhez is használhatjuk.

Beküldhető feladatok:

  1. Készítsetek egy színkiválasztó honlapot. A felületen legyen legalább 16 féle szín listában vagy táblázatban, valamint egy teszt szöveg. A színekre kattintáskor az oldalon lévő teszt szöveg színe változzon az adott színre.

    1 0000|2 pont

  2. Készítsetek programot, amely a "Bakonyi Bitfaragó Bajnokság 2016" szöveget 10 karakter széles helyen, fényreklámszerűen a képernyő közepén mozgatja. A felirat színe is változzon az idő múlásával.

    1000|2 pont

  3. Hogyan oldanátok meg egy weboldal elején képek 3 másodpercenkénti váltását? Készítsetek egy egyszerűbb slider-t 4 képpel!

    1 0000|2 pont

« Előző | Lap eleje

Kocka6.png

A kockadobás feladat lehetséges megoldásai

A leckében tárgyaltak összefoglalásaként nézzük meg az eredeti feladat néhány lehetséges megoldását.

Kockadobás szelekció használatával

Kockadobás tömb használatával

Kockadobás iteráció használatával

Kocka5.png

Egy kis kiegészítés

Egyéb beviteli mezők, és kezelésük

A HTML-ben több lehetőség is rendekezésre áll felhasználói bemenetre. A különböző fajta beviteli mezők között szereplnek szöveget, számot kezelőek, jelölőnégyzetek.

Az alábbi mintaprogram bemutatja egy pár ilyen mezőnek a kezelését javascript segítségével.

Kedves Bakonyi Bitfaragók!

Elérkeztünk az első kirándulásunk végére. Nagy utat tettünk meg a bitek birodalmában, de reméljük a bemutatott minták felhasználásával már érdekes megoldásokat tudtok adni az első forduló feladványaira. Tökéletes program ugyan nem létezik, de nagyon jó megközelítéssel érhetünk el egy kifogástalannak tartott állapotot.

Beküldhető feladat:

  1. Egy oldalon olyan jelszavakat használnak, ami csak az angol abc kisbetűit tartalmazhatja. A jelszavakat titkosítva tárolják. Tudjuk, hogy a titkosítás módja a következő:
    • A jelszót először caesar-kód szerint eltoják hárommal (lásd korábbi feladat).
    • Ezután minden karakterből egy számot képeznek az abc-ben elfoglalt helyük alapján (a=1, b=2, c=3, d=4, ..., z=26).
    • A számok közül minden szomszédos párt összeszoroznak.
    • Végül az így kapott értékeket összeadják.
    • PL: A jelszó "almafa". Ekkor a caesar-kód eredménye: "dopdid". Ebből a számm értékek: 4, 15, 16, 4, 9, 4. A szoszédsok szorzatai: 4*15=60, 15*16=240, 16*4=64, 4*9=36, 9*4=36. Az így kapott 5 érték összege 436.
    A feladat az, hogy egy beviteli mezőben meg lehessen adni a jelszó kódolását, és a program kiírja az összes lehetséges jelszót, aminek az eredménye az adott szám. Tudjuk, hogy a felhasználók nagy része maximum 4 betűből álló jelszót ad meg, így számunkra csak 4 karakteres vagy rövidebb jelszavak érdekesek, csak ezekre kell keresni.

    10 0000|2 pont

Kocka5.png

Segítség a végfeladathoz

Ez most talán nem kell.....

« Előző | Lap eleje