Kimenet: Az eloá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 eloállított véletlenszám segítségével kiválasztjuk azt a tömbelemet, amellyel a HTML dokumentumban megjelenített kép lecserélheto. 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észo programra, és esetleg egy egyszerubb editorra van szükség. A lecke mintaprogramjai a böngészoben 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.
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:
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.
A honlapon jelenjen meg az is, hogy mikor készítettétek el a feladatot (dátum).
1000|2 pont
Keressetek pár olyan oldalt, ami webprogramozással foglalkozik. Készítsetek egy HTML dokumentumot, amely ezek linkjeit tartalmazza.
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!>
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.
Az alábbi program például az aktuális dátum megjelenítésére szolgál. További infó itt.
Beküldhető feladatok:
Jelenítsétek meg a dáumot úgy, hogy az időpont is megjelenjen (óra, perc, másodperc).
10|2 pont
Írassatok javascript segítségével egy tetszőleges linket.
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:
Készítsetek egy programot, amely bekér 5 egész értéket. Ezeket tároljátok el egy tömbben.
A program ezután jelenítse meg az értékek összegét és szorzatát.
100|2 pont
Kérjetek be egy számot, majd jelenítsétek meg a négyzetgyökét.
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:
Adott egy 40cm X 50cm-es papírlap.
A program kérjen be két kisebb méretet, és határozza meg, hogy hány darab ilyen kisebb méretű lapot lehet kivágni a nagy lapból.
Számoljátok ki ugyanezt, ha a kis lapot elforgatjátok (az oldalak megcserélésével).
Például 4X5-ös lapból 100-at lehet kivágni, de ha elforgatjuk 5X4-esre, akkor csak 96-ot.
1000|2 pont
Olvassátok be egy háromszög oldalainak hosszát, majd mindhárom oldalhoz határozzátok meg, hogy mennyivel kisebb a kerület felénél.
100|2 pont
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 hajítá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:
Olvassatok be egy evszá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
Készítsetek egy programot, amely 3 bekért szám közül meghatározza a legnagyobbat, a legkisebbet, valamint az átlagukat is.
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. Figyeljétek meg a véletlen egész értékek generálásának módját. Az eredmény lehet 1 is és 10 is.
Beküldhető feladatok:
Készítsetek egy programot, amely bekér egy számot, majd megjeleníti az összes osztóját.
1000|2 pont
Készítsetek egy programot, amely egy 20 elemű tömböt feltölt véletlen számokkal.
Jelenítsétek meg a generált számokat, majd az összegüket is.
100|2 pont
Egy számot tökéletesnek nevezünk, ha az összes, nála kisebb pozitív osztójának összege maga a szám.
Például az első 2 tökéletes szám a 6 és a 28. (6=1+2+3, 28=1+2+4+7+14).
Készítsetek egy programot, amely meghatározza a 10000-nél kisebb tökéletes számokat.
(Az egyszerű ellenőrzés céljából elmondjuk, hogy a 6-on és a 28-on kívül még további 2 van.)
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:
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
Két szót egymás anagrammáinak nevezünk, ha pontosan ugyanazokból a betűkből állnak, viszont a betűk sorrendje lehet teljesen más.
Például a "maradhat" és "hadartam" szavak egymás anagrammái.
Készítsetek egy programot, amely két bekért szóról eldönti, hogy egymás anagrammái-e.
(Tipp: hogy lehet úgy felsorolni egy szó betűit, hogy az anagrammák esetében ugyanaz legyen az eredmény?)
1 0000|2 pont
Készítsetek egy függvényt, amely a paraméterben megkapott tömbről (amiben pozitív egészek vannak) eldönti, hogy melyik helyén van a legnagyobb eleme.
Készítsetek egy programot, amely bekér egy 10 elemű tömböt.
Az előbbi függvény segítségével keressétek meg a legnagyobb elemet, jelenítsétek meg, majd állítsátok át -1-re.
Ezt addig ismételjétek, amíg a tömb tartalma csupa -1-es nem lesz. A megjelenített számok ekkor a tömb elemei lesznek, csökkenő sorrendben.
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:
Készítsetek egy képnézegető honlapot.
Az oldal tartalmazzon 4 képet, az oldal tetején, kicsi méretben megjelenítve.
A kis kép valamelyikére kattintva a neki megfelelő nagyobb méretű párja jelenjen meg a kis képek alatt. Mindig csak egy kép legyen nagy méretben látható.
1100|2 pont
Készítsetek programot, amely a csapatotok nevét és egy rövid mottót 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
Készítsetek egy számláló honlapot.
A holnapon legyen egy nagyobb szám, ami a honlap megnyitásakor 0, és minden másodpercben egyel nő.
A szám színe minden 10. növekedést követően változzon meg.
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
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:
Készítsetek egy honlapot, ami egy jármű műszerfalát utánozza. Az oldalon legyen néhány kijelző:
Egy, ami az aktuális sebességet jeleníti meg, egy ami a fordulatszámát, egy ami a sebességváltó fokozatát, és egy ami az üzemanyag szintjét.
Ezek lehetnek egyszerűen számok is.
Legyen két gomb, amik segítségével a jármű sebességét lehet csökkenteni vagy növelni (mondjuk 10km/h-val).
Legyen két gomb, amivel a sebességváltót lehet állítani egyel magasabb vagy alacsonyabb sebességbe.
A jármű fordulatszámát úgy kell megjeleníteni, hogy ugyanakkora járműsebesség mellett a váltó nagyobb fokozata kisebb fordulatszámot eredményezzen.
(A járműnek 3-as fokozatban nagyobb fordulatszám kell az 50km/h-hoz, mint 4-es fokozatban.)
Ugyanakkor ha a váltót nem állítjuk, akkor a sebesség növekedésével arányosan változzon a fordulatszám.
Az üzemanyag szintje az idő telésével fokozatosan csökkenjen. A csökkenés mértéke a fordulatszámtól függjön.
Legyen egy gomb, amivel tankolni tudunk. Ilyenkor az üzemanyag tartályt teletöltjük, és a program írja ki, hogy mennyi üzemanyagot tankoltunk.