- Mennyi a bevétel?
- Mennyi a rezsi?
- Étkezésre?
- Utazásra?
- Szórakozásra?
- 30 napra elosztva?
- Takarékosság?
- Előrelátás?
- Lehetőségek?
- Célok?
- Megtakarítás befektetése?
- Hozam?
- Pénzügyi döntés?
Közművelődés, kultúra, oktatás, könyvtár, pedagógia, műszaki informatika, számítástechnika
2021. február 25., csütörtök
Pénzügyi tudasság
2021. február 24., szerda
Sérült pendrive kapacitásának helyreállítása
Ha sérül a pendrive és formázás után nem a gyári kapacitását írta ki.
Visszaállítható lemezkezelővel, Rufussal, DOS parancsok segítségével!
Nézzük DOS parancsokkal
1.) Parancssorba írd be a "DISKPART" parancsot ekkor ezt kell, hogy lásd: DISKPART>
2.) Írd be, hogy "LIST DISK" hogy kiderítsd az USB eszközöd kötetszámát.
3.) Írd be, hogy "SELECT DISK 2" (ha az USB eszközöd a 2-es; értelemszerűen helyettesítsd a megfelelő számmal, amelyik nálad az aktuális USB meghajtó); A Diskpart megerősíti, hogy mostantól ez a kiválasztott meghajtó: "Disk 2 is the selected disk."
4.) Írd be, hogy "SELECT PARTITION 1" (ez a parancs kiválasztja, hogy az első legyen az egyedüli partíció, a kisebb pedig törlődni fog, hogy visszakapd az eredeti méretet, tehát a teljes partíció méretet). A Diskpart megerősíti, hogy az első partíció a kiválasztott: "Partition 1 is now the selected partition."
5.) Írd be, hogy "DELETE PARTITION". Ez törli a régi partíciót. Vigyázat! Itt akkor sincsenek figyelmeztető ablakok, ha volt létező adatod rajta - győződj meg róla, hogy előzőleg lementettél minden adatot!
6.) Írd be, hogy "CLEAN". Felugrik a formázóablak egyelőre ismeretlen kötetmérettel. Nyomj egy formázást.
7.) Visszatérve az előző ablakhoz: Írd be, hogy "CREATE PARTITION PRIMARY" hogy létrehozz egy új, teljes méretű partíciót. A Diskpart megerősíti, hogy a partíció létrehozása sikeres volt: "Diskpart succeeded in creating the specified partition." Most beírhatod újra, hogy "LIST PARTITION" és íme a pendrive eredeti mérete.
8.) Írd be, hogy "EXIT" hogy kilépj a programból. Most már formázhatod a pendrive-odat a szokásos módon Sajátgépben, hogy újra használatba vehesd a régi-új eszközöd.
2021. február 21., vasárnap
The impact of the digital age on growing youth
Programtervezési módszerek
2021. február 19., péntek
Anyáknapjára
A JavaScript algoritmussal
Nézzünk meg egy összehasonlító táblázatot arra vonatkozóan, hogy mik a fõbb hasonlóságok és különbségek a JavaScript és a Java appletek között:
JavaScript | Java applet |
A kliens értelmezi (interpretálja). | A szerveren fordított - letöltés után - kliensen futó. |
Objektum-alapú. Beépített, kiterjeszthetõ objektumokat használ, de nincsennek osztályok és öröklõdés. | Objektum-orientált. Az appletekben vannak osztályok és öröklõdés. |
A program beágyazódik a HTML dokumentumba. | Az appletek a HTML lapból hívhatók meg, de azoktól elkülönülnek. |
A változók típusát nem kell deklarálni. (Nem típusos nyelv.) | A változókat deklarálni kell. (Erõsen típusos nyelv.) |
Dinamikus kötés. Az objektum-hivatkozások ellenõrzése futásidõben történik. | Statikus kötés. Az objektum-hivatkozásoknak már fordításkor létezniük kell. |
Nem tud önállóan a merevlemezre írni. | Nem tud önállóan a merevlemezre írni. |
A JavaScript-et azért fejlesztették ki, hogy az egyébként statikus lapokba dinamizmust vigyenek. Egyrészt látványosabbá tehetjük vele azokat (dinamikusan, futásidõben generálhatunk HTML lapokat), másrészt számos praktikus dologra használhatjuk fel (pl. jelszót kérhetünk a lapunk megtekintéséhez, vagy pl. ellenõrizhetjük az elküldendõ adatok helyességét még a kliens oldalon - hálózati erõforrásokat spórolva meg, stb).
A továbbiakban bemutatom a JavaScript mûködését, felépítését és az általa használt, beépített objektumokat.
JavaScript a HTML dokumentumban
A JavaScript utasításoknak a SCRIPT elemben kell lenniük az alábbi módon:
<SCRIPT>
JavaScript-utasítások
</SCRIPT>
A tag-ek között akárhány JavaScript-utasítás lehet, ill. a JavaScript bárhol elhelyezhetõ a dokumentumban. A <SCRIPT> tag-ekbõl is bármennyi lehet.
A SCRIPT elem opcionális attribútuma LANGUAGE (a nyelv), melyben a script nyelv és ennek a verziószáma specifikálható.
Pl.:
- <SCRIPT LANGUAGE="JavaScript">
Ez egy Netscape 2.0-ás JavaScript - <SCRIPT LANGUAGE="JavaScript1.1">
Ez pedig egy Netscape 3.0-ás JavaScript
A 3.0-ás Navigator mindkét típusú JavaScript-et futtatja, a 2.0-ás csak az elsõt.
Egy hasznos példa a LANGUAGE használatára:
<SCRIPT LANGUAGE="JavaScript">
// 1.0-ás függvények
</SCRIPT>
<SCRIPT LANGUAGE="JavaScript1.1">
// Újradefiniált függvények melyek 1.1-es JavaScript utasításokat is tartalmaznak
// 1.1-függvények definíciója
</SCRIPT>
A JavaScript elrejtése a megjegyzés tag-ek közé
Ha egy böngészõ nem ismeri a JavaScript-et, akkor a <SCRIPT> tag-ek közötti utasításokat kiírja a képernyõre - ami nagyon elcsúnyíthatja a megjelenítést. A probléma megoldása az, hogy elrejtjük az utasításokat a korábbi (Netscape Navigator 2.0 alatti) böngészõk elõl, az alábbi módon:
<SCRIPT>
<!-- Az elrejtés itt indul
JavaScript utasítások
// A rejtésnek vége -->
</SCRIPT>
Egy nem JavaScript kompatibilis böngészõ nem érti a <SCRIPT> tag-et - ezért figyelmen kívûl hagyja azt -, így az összes utasítás egy megjegyzésbe kerül. Ezzel szemben pl. egy Netscape Navigator 2.0-ás böngészõ a <SCRIPT> tag-et követõ sort ignorálja, az utasításokat pedig végrehajtja.
Egy másik hasznos tag a <NOSCRIPT>, melynek segítségével kijelölhetõ a dokumentumnak egy olyan része, melyet csak azok látnak, akiknek a böngészõje nem JavaScript kompatibilis, vagy a böngészõben nincs engedélyezve a JavaScript-ek futtatása.
Mibõl épül fel a JavaScript nyelv?
A JavaScript nyelv nagyon hasonlít a C++ nyelvre (a Java nyelv megalkotásakor a C++ nyelvbõl indultak ki). Sok hasonlóság mutatkozik mind a szintaktikát (utasítások formája, operandusok), mind a szemantikát illetõen. Aki ismeri a C, ill. a C++ nyelvet, sok ismerõs dolgot talál majd a következõ részben.
Értékek, változók és literálok
Értékek
Az alábbi típusú értékeket fogadja el a JavaScript:
- Számok, melyek lehetnek egészek vagy valós számok. (Pl.: 23 vagy 6.452)
- Logikai értékek, true vagy false
- Stringek, pl. "Szia!" vagy 'Hello!'
- null, null érték
Változók
A JavaScript-ben a változókat nem kell deklarálni, és az egész típuskezelés nagyon flexibilis. A szükséges konvertálások automatikusan történnek.
A változó létrehozásánál - hogy biztosak legyünk abban, hogy egy új változót hozunk létre, nem egy már meglévõt módosítunk - ajánlott a var alapszó használata.
Pl.:
var valtozo=28;
valtozo="Ez most nem szam, hanem szöveg.";
A fenti két sor hibátlanul mûködik, a JavaScript megfelelõen konvertál, a valtozo-ban a szöveg lesz.
Néhány hasznos konvertáló függvény:
- Az eval megkísérel kiértékelni egy szöveget, mint egy kifejezést.
- A parseInt egy szöveget egész számmá konvertál.
- A parseFloat egy szöveget lebegõpontos számmá kovertál, ha lehetséges.
A változónevek betûvel vagy "_" -jellel kezdõdnek és ezekkel vagy számokkal folytatódnak. A JavaScript megkülönbözteti a kis és nagybetûket, erre figyeljünk oda!
A függvényeken kívül létrehozott változók globálisak, az aktuális dokumentumon belül mindenhonnan elérhetõk. Ha függvényen belül definiálunk egy változót, akkor az lokális, csak a függvényen belül látható. Olyan lokális változó definiálásakor, amely globálisként már szerepel, a var alapszót kell használni.
Literálok
A literálok értékeket reprezentálnak a JavaScript-ben.
Típusaik:
- Egész számok
- Decimális
- Oktális (0-val kezdõdnek, a számjegyek 0-7-ig lehetnek)
- Hexadecimális (0x-el vagy 0X-el kezdõdnek, a számok számjegyekbõl (0-9-ig), és betûkbõl állhatnak(a-f ill. A-F)).
- Lebegõpontos számok
A következõ részekbõl állhatnak: decimális egészbõl, decimális pontból, törtrészbõl és kitevõbõl.
Pl.: 16.423, 16.423E-1 - Logikai literálok
A Boolean típusnak két literálja van: true és false - Szöveg literálok
Egy szöveg(string) literál vagy nem tartalmaz karaktert, vagy akárhány karaktert tartalmaz két ' vagy " jelek között.
Speciális karaktereket is tartalmazhat egy string:
Karakter | Jelentés |
\b | backspace visszatörlés |
\f | form feed lapdobás |
\n | \new line új sor |
\r | carrige return kocsi vissza, sor elejére |
\t | tab tabulátor-pozíció |
\\ \" \' | backslash backslash karakter,ill. más speciális karakterek írása |
Kifejezések és operátorok
Kifejezések
Egy kifejezés literálok, változók, operátorok és kifejezések halmaza, melyek egy értéket határoznak meg. Ez az érték lehet szám, szöveg vagy logikai érték. Az alábbi típusú kifejezéseket ismeri a JavaScript:
- Aritmetikai - az értéke szám
- Szöveg - szöveget vesz fel értékül
- Logikai - értéke true vagy false
Feltételes kifejezés
Szintaxisa: (feltétel) ? érték1 : érték2
Értéke a feltételtõl függõen vagy az érték1 (ha igaz), vagy az érték2 (ha hamis).
Operátorok
Vannak hozzárendelõ, aritmetikai, összehasonlító, bitenkénti, logikai, szöveges és speciális operátorok. Ezeket is feloszthatjuk egy vagy kétoperandusú operátorokra.
Egy oprendusú operátor használata:
operátor operandus
vagy
operandus operátor
pl.: i++, ++i
Két operandusú operátorhoz két operandus szükséges:
operandus1 operátor operandus2
pl.: x + y
A hozzárendelõ operátorok pl.: =,+=,*=,/=, stb.
pl.: x+=2 (x-et növeli 2-vel)
Összehasonlító operátorok pl.: = =, !=, <, <=, >, >=
pl.: x!=y (x nem egyenlõ y-al)
Aritmetikai operátorok pl.: +, -, *, /, %(modulusz), ++
pl.: x++ (x értékét növeli eggyel - inkrementáló operátor)
Logikai operátorok: && (logikai és),|| (logikai vagy)
String operátor: +
pl.: nev=vezeteknev+' '+keresztnev
Az objektumok a JavaScript-ben
A JavaScript-ben az objektumok más objektumokból és változókból épülnek fel. Az objektumoknak - hozzájuk rendelt - függvényeik, más néven metódusaik vannak. Vannak elõre definiált objektumok (beépített objektumok), de mi is tudunk objektumokat létrehozni.
Általánosan egy objektum jellemzõjéhez a következõképpen férhetünk hozzá:
objektumNév.tulajdonságNév
Az objektum-neveknél és a tulajdonság-neveknél figyeljünk arra, hogy a JavaScript kis- és nagy betûre érzékeny. Egy tulajdonságot úgy definiálhatunk, ha egyszerûen értéket rendelünk hozzá. Példaként tegyük fel, hogy van már egy Szemely nevû objektum. Ekkor ehhez nev és kor jellemzõket az alábbi módon rendelhetünk:
Szemely.nev = "János"
Szemely.kor = 23
Az objektumok olyanok, mint egy-egy asszociatív tömb, (egy tömb, melyben az elemeknek saját nevük van, így nem kell tudnom, hogy egy elem a tömben pontosan hanyadik; az értékéhez így is hozzáférhetek).
Tehát egy elemhez így is hozzáférhetünk:
Szemely["nev"] = "János"
Fontos szabály, hogy a Netscape 2.0-ban egy tulajdonságot megcímezhetünk egyrészt a tulajdonság nevével, másrészt a "tömb"-ön belüli sorszámával is. A 3.0-ás böngészõben azonban, ha névvel inicializáltunk egy tulajdonságot, akkor arra mindig névvel kell hivatkozni. Hasonlóképpen kell eljárnunk, ha index-el inicializálunk. Ez alól a szabály alól csak a formok képeznek kivételt, mivel itt minkét módon címezhetük (névvel természetesen csak akkor, ha adtunk a formnak nevet).
Objektumokat mi is készíthetünk, ehhez azonban tudnunk kell, hogyan hozhatunk létre függvényeket.
Függvények
A JavaScriptek írásához meg kell vizsgálnunk azt, hogy hogyan lehet függvényeket létrehozni ill. hogyan lehet azokat meghívni.
(A függvény-utasításoknak van egy csoportja, mely önálló feladatot lát el.) Egy függvényt a function kulcsszóval definiálhatunk, amit a függvény neve követ, ezután kerekzárójelek között, vesszõvel elválasztva az argumentumok, majd kapcsoszárójelek között utasítások következnek. Az így definiált mûveletsor a függvény meghívásakor hajtódik végre. A függvényt a függvény nevével és az ezt követõ - kerekzárójelek között felsorolt, vesszõvel elválasztott - paraméterekkel lehet meghívni. A függvényeket ajánlatos a fejben definiálni, mivel a dokumentum csak a fej letöltõdése után jelenik meg, így elkerülhetõ, hogy a felhasználó olyan függvényt aktivizáljon, ami még definiálatlan.
Nézzünk egy példát az elmondottakra:
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- Elrejtés indul
function udvozlet(valaki)
{
document.write("Üdvözöllek a lapomon "+valaki+"!");
}
// Elrejtés vége-->
</SCRIPT>
</HEAD>
<BODY>
<SCRIPT>
udvozlet("látogató");
</SCRIPT>
</BODY>
Itt tehát definiáltam egy udvozlet nevû függvényt - a fejben, ami a valaki paraméterben kapott szöveget (stringet) - az "Üdvözöllek a lapomon " mögé illesztve - kiírja. Látható a függvény definíció és a függvényhívás módja is. A szövegeket vagy " jelek, vagy ' jelek közé kell zárni.
A függvények visszadhatnak egy értéket return utasítással, az alábbi formában: return érték; vagy return kifejezés;
A függvényben szerepel egy utasítás, mely jól szemlélteti a JavaScript objektum-orientáltságát.
A document.write("..."); utasítás nem tesz mást mint meghívja a JavaScript egy beépített objektumának, a document-nek a write ún. elemfüggvényét, metódusát (az objektumon végrehajtható mûvelet).
A JavaScript ismeri a rekurziót, függvények meghívhatják saját magukat.
A függvények az átadott értékeket vagy a függvény definícióban szereplõ (formális) paramétereken keresztül, vagy az alábbi módon érhetik el:
függvénynév.arguments[i]
ahol a függvénynév az adott függvény neve, az i pedig a paraméter sorszáma (a számozás 0-tól indul). Az argumentumok száma az arguments.length változóból megtudható.
Új objektumok készítése
Egy új objektum elkészítéséhez két dologra van szükség:
1. Egy ún. konstruktor-függvényt kell írni, amely megadja az objektum-típus nevét, tulajdonságait és metódusait.
2. El kell készíteni az objektum egy példányát a new operátorral.
Készítsük el a szemely nevû objektum típusunkat a következõ módon:
function szemely(nev, kor, szulhely){
this.nev=nev
this.kor=kor
this.szulhely=szulhely
}
A fent definiált objektum-típusból a new utasítással készíthetünk konkrét objektumot.
Pl.: peti=new szemely("Kis Péter",16,"Debrecen")
A this objektum a függvényben nem más, mint egy hivatkozás arra a konkrét objektumra, amelyet a new-val éppen most hozunk létre. Jelen pillanatban a this peti-t jelenti, így Péter megfelelõ jellemzõi eltárolódnak.
Egy objektum tulajdonsága lehet egy másik objektum is. Nézzünk erre is egy példát! Készítsünk egy szamla nevû objektumot, melynek a tulajdonosa egy szemely lesz.
function szamla(azonosito,tulajdonos){
this.azonosito=azonosito
this.tulajdonos=tulajdonos
}
Most hozzuk létre Péter számláját az alábbi módon:
szamla1= new szamla(2012,peti)
Figyeljük meg, hogy itt a peti egy objektum neve! Ezután a szamla1 tulajdonosát a következõ képp olvashatjuk ki:
szamla1.tulajdonos.nev (= Kis Péter)
Metódusok
A metódusok olyan függvények, amelyek objektumokhoz tartoznak. Egy metódus általában egy adott objektum-típusú objektummal dolgozik. A metódusok a megfelelõ objektumokhoz vannak hozzárendelve.
Egy metódus készítéséhez tehát definiálnunk kell egy függvényt, majd hozzá kell rendelnünk a megfelelõ objektumunkhoz. A hozzárendelés szintaxisa a következõ:
objektum.metódusnév = függvénynév.
Ezt az objektum definíciójánál, annak függvényében kell megtennünk.
A metódus meghívása magától értetõdõen:
objektum.metódusnév(paraméterek)
Az elõbbi példához visszatérve készítsünk egy olyan metódust, melynek megadva egy szemely-t, kiírja annak a nevét.
function neve(){
document.write("A számla tulajdonosa: "+this.nev)
}
Módosítani kell a szemely objektum típust:
function szemely(){
...
this.neve=neve
}
Ezek után következhet a metódus meghívása:
peti.neve()
Ez kiírja a böngészõbe, hogy "A számla tulajdonosa: Kis Péter".
Objektumok törlése
A 2.0-ás böngészõben minden objektum addig él, amíg az õt tartalmazó lap él. Az 1.1-es JavaScript-ben úgy lehet objektumot törölni, hogy az objektum-referenciát null-ra kell állítani.
Az utasítások
A JavaScript utasítások - ahogyan azt már korábban mondtam - nagyon hasonlítanak a C++ utasításaira. Ezeket az utasításokat felsorolás szintjén bemutatom, hogy azok is, akik kevésbé ismerik a C-t - de már programoztak valamilyen nyelven -, el tudják készíteni a saját kis scriptjeiket. Az utasítások után nem kell - de lehet - pontosvesszõt tenni (;) - egy kivétel van, amikor stringben vannak az utasítások (lsd. eseménykezelõknél).
A { } jeleket csak akkor kell használni, ha nem egy utasítást, hanem többet akarunk végrehajtani (utasítás blokk) A [ ] jelek közötti rész opcionális, elhagyható.
Feltételes utasítás
if (feltétel) { utasítások1 [} else { utasítások2 ]}
Ha igaz a feltétel, akkor az utasitások1 fut le; ha hamis a feltétel és van else, akkor az utasítások2 fut le, és ha hamis a feltétel és nincs else, akkor nem történik semmi.
Ciklusok
for ([inicializáló kifejezés] ; [feltétel] ; [ciklusváltozó módosítása])
{ utasítások }
Végrehajtódik az inicializáló kifejezés; kiértékelõdik a feltétel, ha igaz, végrehajtódnak az utasítások; ha hamis a feltétel, akkor vége a ciklusnak; végrehajtódik a ciklusváltozó módosítása; újból kezdõdik a folyamat a feltétel kiértékelésétõl.
for (változó in objektum) { utasítások }
A változó sorra felveszi az objektum jellemzõit és ezekre az értékekre hajtódnak végre az utasítások.
while (feltétel) { utasítások }
Amíg a feltétel igaz, addig végrehajtódnak az utasítások.
continue és break
A continue utasítást ciklusokban lehet kiadni és hatására a for és a while 'ciklusa' megkezdi a következõ ciklust (mintha a ciklus utolsó utasítása után ugrana a vezérlés).
with
Hatáskörében alapértelmezett objektumot definiál.
with (objektum) { utasítások }
Az utasításokban ha nem egyértelmû egy objektumhivatkozás, akkor az objektum (with-beli objektum) egy tulajdonságának értelmezi a böngészõ az adott objektumothivatkozást.
Megjegyzések
A megjegyzéseket - mint a C++-ban - két féle képpen írhatunk.
// Így egy sort
/* Így pedig
több sort
lehet megjegyzésbe tenni.*/
Események kezelése
A JavaScript-re az eseményvezéreltség jellemzõ. Ez azt jelenti, hogy a kis programjaink a felhasználó bizonyos tevékenységeire válaszolva indulnak el. Esemény lehet az, ha felhasználó megnyom egy gombot, vagy ráviszi az egér mutatóját egy linkre, vagy betöltõdik a lapunk a böngészõbe és még sorolhatnám. A Netscape az egyes HTML elemeket újabb attribútumokkal bõvítette ki, mint pl. a név-vel (name), így mintegy objektumokká alakította õket, melyekre így a scriptekbõl hivatkozni lehet. A mi feladatunk, hogy ezekhez az elemekhez/objektumokhoz hozzárendeljük a megfelelõ eseményt, ill. az azt lekezelõ utasításokat. Így egy ún. eseménykezelõ-t definiálunk. Ezt könnyen meg is tehetjük a kibõvített eszközrendszer segítségével.
Az eseményeknek neveik vannak, mely nevek úgy keletkeznek, hogy az esemény angol neve elé odaírjuk az on szót. Így tehát van - csak, hogy néhányat kiemeljek - onClick (kattintottak), onChange (megváltozott), onLoad (letöltõdött) nevû eseménykezelõ. Ezekhez kell a megfelelõ utasításokat, vagy függvényt hozzárendelni.
Pl.:
<form>
<input type="button" value="OK" onClick="alert('Megnyomta a gombot!')">
</form>
A fenti példában tehát utasítottam a böngészõt, hogy ha valaki rákattint a gombra, akkor hozzon létre egy alert (figyelmeztetõ) ablakot a megadott felirattal. Az alert függvény egy elõre elkészített, beépített függvény, melyekrõl késõbb részletesen beszélek, most csak a példa kedvéért használtam. Figyeljük meg az idézõjelek és az aposztrófok használatát!
Természetesen egy-egy esemény nem alkalmazható minden objektumhoz. (Egy képet nem lehet kiválasztani úgy, mint egy legördülõ menü valamely elemét.) Az alábbi táblázatban megtalálhatóak az események és azok az objektumok, amelyekre alkalmazhatók:
Esemény | Mire alkalmazható | Ekkor következik be | Eseménykezelõ |
abort | képek | A felhasználó megszakítja a kép letöltését | onAbort |
blur | ablakok, frame-ek, és minden form elem | A felhasználó elviszi a fókuszt az ablakból, a frame-bõl, vagy a form elemekrõl | onBlur |
click | gombok, radio gombok, check gombok, submit gombok, reset gombok, link-ek | A felhasználó rákattint valamilyen form-elemre vagy linkre | onClick |
change | szövegmezõk, szöveg box, legördülõ menü | A felhasználó megváltoztatja az elem értékét | onChange |
error | képek, ablakok | A dokumentum vagy kép betöltése hibát okoz | onError |
focus | ablakok, frame-ek és minden form elem | A felhasználó ráviszi a fókuszt az ablakra, a frame-re, vagy a form építõelemeire | onFocus |
load | a dokumentum body-ja | A felhasználó letölti a dokumentumot | onLoad |
mouseout | szöveg box, kép, linkek | A felhasználó lehúzza az egérmutatót az adott objektumról | onMouseout |
mouseover | linkek | A felhasználó a link felett mozog az egérmutatóval | onMouseover |
reset | formok | A felhasználó reset-eli a formot | onReset |
select | szövegmezõk, szövegboxok | A felhasználó kiválaszt egy mezõt | onSelect |
submit | submit gomb | A felhasználó megnyomja a submit gombot | onSubmit |
unload | dokumentum body-ja | A felhasználó elhagyja a lapot | onUnload |
Nézzünk ezek használatára néhány példát! Próbáljuk ki ezeket!
<a href="#Nézzük" onMouseover="alert('Ez az onMouseover!')">Ez itt megmutatja, mit csinál az onMouseover.</a>
Ez itt megmutatja, mit csinál az onMouseover.
<form><center>
<select name="kereso" onChange="alert('Jó választás!')">
<option value=infoseek>InfoSeek
<option value=webcrawler>Webcrawler
</select>
</center></form>
Ha a másik elemet választjuk ki, bekövetkezik az change esemény.
Egyéb
A JavaScriptekben és a HTML dokumentumokban ékezetes betûket az ISO Latin-I karakterek kódjaival írhatunk. A szövegbe egy karakter helyet egy speciális karakersorozatot kell írni.
Pl.:
á = á
Á= Á
é = é
í = í
ö = ö
õ = õ
stb.
Figyeljük meg a kódok felépítését!
2021. február 18., csütörtök
Hogy lettem író!
2021. február 16., kedd
Rendezések algoritmusa
A rendezés a legalapvetőbb programozási probléma. Van néhány adatunk és ezeket valamilyen szempont szerint nagyság szerinti sorrendbe kell rendeznünk.
Buborék
Az algoritmus alkalmazásának feltétele hogy a sorozat elemeihez létezzen egy rendezési reláció.
Az algoritmus újra és újra végigiterál a listán, összehasonlítja a lista szomszédos elemeit, és ha azok az elvárt rendezéshez képest fordítva vannak, akkor megcseréli őket. Első menetben a lista elejéről indul és a végéig megy. Ennek az első menetnek az eredményeként a legnagyobb elem (mint egy buborék) felszáll a lista végére. Így a következő menetben már elegendő az utolsó előtti elemig elvégezni a szomszédos elemek összehasonlítását és cseréjét. Az ezután következő menetben a lista utolsó két eleme lesz a helyén és így tovább...
Az algoritmus két egymásba ágyazott ciklusból áll. A tömb első elemének indexe az 1, elemeinek száma pedig n. Az elemek itt számok, és a reláció a > (nagyobb).
CIKLUS i = n TŐL i > 0 IG {
CIKLUS j = 0 TÓL i-1 IG {
HA TOMB[j] > TOMB[j+1] AKKOR {
CSERÉLD FEL ŐKET: TOMB[j], TOMB[j+1]
}
}
}
A futás befejezése után a tömb 1-es indexű eleme lesz a legkisebb és az n indexű a legnagyobb.
A buborékrendezés illusztrálása. Az (x, y) pont jelentése: az y érték a tömb x-edik eleme.
Az algoritmus onnan kapta a nevét, hogy először a legnagyobb elem „száll fel” a tömb utolsó helyére, utána a második legnagyobb az azt követő helyre, és így tovább, mint ahogy a buborékok szállnak felfelé egy pohárban.
Ebben a pontban csak olyan rendezésekkel foglalkozunk ahol a rendezendő adatok elférnek a központi memóriában. Feltesszük tehát, hogy az adatok egy a[ ] tömbben vannak. Az algoritmusokat lehetőség szerint függetleníteni szeretnénk a programozási nyelvektől, ezért bevezetünk két jelölést: a tömb első elemének indexe E, utolsó elemének indexe pedig U lesz.
A rendezést általában összetett objektumokon hajtjuk végre, ilyenkor a sorrendet valamelyik mező adja meg, amit szokás rendezési kulcsnak hívni. Az algoritmusainkban elrejtjük ezt a részletet és úgy fogalmazzuk meg a módszereket, hogy mindenhol az a[i] < a[j] összehasonlítást használjuk. Egy külön pontban vizsgáljuk azt, hogy hogyan lehet típus- és objektumfüggetlen rendezést írni.
Algoritmus
Ciklus i := E-től (U-1)-ig
min := i
Ciklus j := (i+1)-től U-ig
Ha a[j] < a[min] akkor min := j Elágazás vége
Ciklus vége
Csere(i, min)
Ciklus vége
A rendezés után az első helyre a legkisebb elem kerül. Tehát ha megtaláljuk a minimális elemet, becserélhetjük az első helyre. Ezután a második elemtől kezdődő résztömbben kell megkeresnünk a minimális elemet, és azt érdemes a második helyre cserélni....
A rendezés tehát futamokból fog állni. Egy futamban az i. indexű elemtől az utolsó elemig tartó rész minimumát keressük meg, és ezt az i. pozícióra cseréljük.
A tömbre úgy gondolunk, mintha két részből állna: az első i elem már rendezett résztömböt alkot, a többi elemet pedig még nem vizsgáltuk. Most következik az (i+1)-dik elem. Őt szeretnénk beilleszteni az első i közé úgy, hogy most már az első i+1 elemből álló résztömb is rendezett legyen. Ez ahhoz hasonló, mint amikor a kártyás kézben sorba teszi lapjait: balról indul és a következő lapot mindig beszúrja a helyére az addig rendezett lapok közé.
A beszúrás úgy történik, hogy amíg a vizsgált elem kisebb, mint a tőle balra álló, addig felcseréljük vele. Figyelni kell arra is, hogy nem értünk-e ki a tömb bal szélére, mert ott leáll a cserélgetés.
Algoritmus
Ciklus i:= (E+1)-től U-ig
j := i - 1
Ciklus amíg j >= E és a[j] > a[j+1]
Csere(j, j+1)
j := j - 1
Ciklus vége
Ciklus vége
Összefésülés
A tömböt két részre vágjuk (lehetőleg fele-fele arányban), a részeket külön-külön rendezzük (rekurzió!), majd a rendezett részeket összefésüljük.
Összefésülés
A rendezett tömbök első elemire állunk, és minden lépésben a két aktuális elem közül a kisebbet tesszük az eredmény tömbbe, majd annak mutatóját növeljük. Ha valamelyik részt végigolvastuk már, akkor egyszerűen a másik részből másolgatjuk az elemeket.
Algoritmus
rendez(E, U):
Ha E < U akkor
K := (E+U) / 2
rendez(E,K)
rendez(K+1,U)
összefésül(E,K,U)
Elágazás vége
összefésül(E,K,U):
tmp[E..U] : = a[E..U] // tömb másolása átmeneti tárolóhelyre
i := E; j := K+1
Ciklus id := E-től U-ig
Ha i > K akkor
a[id] := tmp[j]
j := j+1
különben Ha j > U akkor
a[id] := tmp[i]
i := i+1
különben Ha tmp[i] < tmp[j] akkor
a[id] := tmp[i]
i := i+1
különben
a[id] := tmp[j]
j := j+1
Elágazás vége
Ciklus vége
Gyorsrendezés
A gyorsrendezés az összefésülő rendezés egy lehetséges továbbfejlesztett változata. Előnye az összefésülő rendezéshez képest az, hogy nem szükséges egy második tömb az összefésülésekhez, vagyis feleakkora a memóriaigénye. Általában rekurzív módon szokás megfogalmazni.
Gondolat
A tömböt az első eleme szerint (helyben) szétválogatjuk. Ha az első elem értéke X, akkor a tömb elejére kerülnek az X-nél nem nagyobb, a végére pedig az X-nél nem kisebb elemek, és "középre" X. Ezután az X-nél kisebb és az X-nél nagyobb elemeket rekurzív rendezzük. Ez a megközelítés akkor rendez gyorsan, ha a szétválogatások "nagyjából" egyenlő részekre vágják az aktuális tömböket. A "rossz" bemeneteket úgy szokás kiküszöbölni, hogy a gyorsrendezés előtt összekeverjük a tömböt (ez lineáris algoritmussal megtehető.)
Algoritmus
Gyorsrendezés
gyorsrendez(a, E, U):
kever(a, E, U)
rendez(a, E, U)
eljárás vége
rendez(a, E, U):
Ha E < U akkor
K = szétválogat(a, E, U)
rendez(a, E, K-1)
rendez(a, K+1, U)
Elágazás vége
eljárás vége
Kupacrendezés
A kupac adatszerkezet használatával O(N log N)-es rendezés készíthető.
kupacrendez(T,N):
//kezdeti kupac felépítése
Ciklus i := N/2-től 1-ig
süllyeszt(i)
Ciklus vége
//maximális elemek helyretétele egymás után
Ciklus i:=1-től (N-1)-ig
csere(T,1,N-i+1)
süllyeszt(1)
Ciklus vége
eljárás vége
Kupac
A kupac adatszerkezet - többek között - rendezésre, illetve prioritási sorok megvalósítására használható. Ereje, hogy időben dinamikusan változó adatszerkezetben hatékonyan tudja megadni az aktuális legnagyobb (vagy legkisebb) elemet.
A kupac definíciója
A kupac egy olyan bináris fa, amely
majdnem teljesen kiegyensúlyozott, vagyis a legalsó szint kivételével minden csomópontnak van bal és jobb gyermeke, vagy nincs se bal se jobb gyermeke;
bármely csomópontban lévő elem kulcsa nagyobb (kisebb) a csomópont gyermekeiben tárolt elemek kulcsánál.
A fentiekből következik, hogy a kupac tetején (a bináris fa gyökerében) lévő elem maximális (minimális), és ez a tulajdonság rekurzívan igaz bármely rész-kupacra (a fa egy csomópontjából induló részfára).
A következő ábrán egy maximum-kupac látható, tehát egy olyan kupac, amelyben bármely elem kulcsa nagyobb vagy egyenlő, mint gyermekeinek kulcsa.
2021. február 2., kedd
Python parancsok
{} – egy nyitó és egy záró kapcsos zárójel, szótárat lehet vele megadni.
abs() – megadja a zárójelben lévő szám abszolút értékét.
and – if vagy elif után, illetve a while-ciklus feltételei között szerepelhet, és azt lehet vele kikötni, hogy a két oldalán megadott két feltételnek egyszerre kell teljesülnie. Magyarul: és. append() – nem önálló parancs, hanem a lista adattípus tagfüggvénye. Magyarul: hozzáfűz. Listához tudunk vele új elemet hozzáfűzni. bool, bool() – Az első szó egy adattípus, a Boolean neve a Pythonban. A szó jelentése Bool-i, de magyarra “logikai” változóként fordítjuk. Értéke True (igaz), vagy False (hamis) lehet. A második egy függvény, ami logikai értékké alakítja azt, ami a zárójelben van. Ha lehet. A Boolean szó kiejtéséhez kattints!
break – arra való, hogy kilépjünk egy ciklusból, még mielőtt az végigfutna. Magyarul: megszakítás. close() – nem önálló parancs, hanem a fájl típus tagfüggvénye. Megnyitott fájl bezárására való. Magyarul: bezár.
count() – nem önálló parancs, hanem a lista adattípus tagfüggvénye. Magyarul: megszámol. Megmondja, hogy a zárójelben szereplő elem hányszor fordul elő a listában.
dict() – szótár létrehozására szolgál. A dictionary szóból származik, ami szótárat jelent. A dictionary szó kiejtéséhez kattints!
enumerate – a for-ciklusokban használható, ha egyszerre akarunk számlálós és bejárós ciklust. Magyarul körülbelül: számozott listába szed, felsorol.
def – függvényt lehet vele megadni, azaz definiálni. Nem is azt jelenti, hogy deaf, azaz süket, sem azt, hogy def, azaz klassz, hanem a define, magyarul: definiál szó rövidítése. Így ejtjük (mint a süketet), de valójában erről a szóról van szó.
elif – elágazáskor a további (az if-ág nem-teljesülése esetén még megvizsgálandó) feltételeket vezeti be. Az else és az if szó összevonásából született meg, ilyen angol szó nincs. Ha programkódot olvasol, akkor az elif olvasása “különben, ha”
else – elágazáskor az utolsó ágat vezeti be, amely akkor fut le, ha egyik korábbi ág feltétele sem teljesült. Magyarul: különben.
extend() – nem önálló parancs, hanem a lista adattípus tagfüggvénye. Magyarul: bővít. Egy listával bővíti az eredeti listát: az új listát a régi végére biggyeszti.
False – a bool adattípus egyik lehetséges értéke. Magyarul: hamis. Mindig nagy betűvel kezdjük.
float, float() – Az első szó egy adattípus, a floating point number, magyarul lebegőpontos szám típust jelzi. A második egy függvény, ami lebegőpontos számmá alakítja azt, ami a zárójelben van. Ha lehet.
get() – nem önálló parancs, hanem a szótár adattípus tagfüggvénye. Magyarul: megszerez, megkap. A szótár kulcsához tartozó értéket lehet vele megtudni, de beállítható arra is, hogyha nincs ilyen kulcs, akkor adjon vissza általunk megadott értéket a kulcshoz tartozó érték helyett.
IDE – ez nem parancs, az integrált fejlesztői környezet (Integrated Development Environment) rövidítése. Tulajdonképpen egy kódszerkesztőprogram, pár egyéb képességgel. A Python saját IDE-je az IDLE, de sok más IDE is használható hozzá.
IDLE – ez nem parancs, hanem a Python fejlesztői környezetének neve. Van jelentése is, mert a készítők vicces kedvükben voltak. Magyarul: tétlen.
if – a programban a elágazás első feltételét vezeti be. Magyarul: ha.
index() – nem önálló parancs, hanem a lista adattípus tagfüggvénye. Visszaadja a zárójelben megadott elem első előfordulásának indexét a listában.
input() – választ vár a felhasználótól. A zárójelben elhelyezhetsz kérdést, hogy a felhasználó tudja, hogy mire kell válaszolnia. A választ érdemes változóban tárolni. Magyarul: bemenet, bemenő jel.
insert(hova, elem) – nem önálló parancs, hanem a lista adattípus tagfüggvénye. Magyarul: beszúr. Két paramétere van, a listába az új elem-et a lista “hova” helyére szúrja be.
int, int() – Az első szó egy adattípus, az integer, magyarul egész szám típust jelzi. A második egy függvény, ami egész számmá alakítja azt, ami a zárójelben van. Ha lehet. Az integer szó kiejtéséhez kattints!
import – modult tölthetünk be vele. Illik a program elején szerepeltetni.
items() – nem önálló parancs, hanem a szótár adattípus tagfüggvénye. Magyarul: dolgok, egy felsorolás elemei. A szótár kulcs-érték párjait adja vissza, hogy for-ral bejárhassuk őket.
list() – lista létrehozására szolgál. Magyarul: lista.
lower() – nem önálló parancs, hanem a string adattípus tagfüggvénye. A stringet kisbetűssé alakítja. Ha eddig is kisbetűs volt, nos, annyi baj legyen! A lower case magyarul kisbetűt jelent.
join() – nem önálló parancs, hanem a string adattípus tagfüggvénye. A zárójelben egy olyan bejárható objektumot, például listát adhatunk meg, ami további stringeket tartalmaz. A zárójelben lévő objektum stringejit úgy fűzi eggyé (azaz konkatenálja) a join, hogy közéjük az előtte szereplő stringet teszi. Például az ‘X’.join([‘alma’, ‘körte’, ‘szilva’]) eredménye almaXkörteXszilva. Magyarul: illeszt, összeforr, egybeköt, egyesít.
keys() – nem önálló parancs, hanem a szótár adattípus tagfüggvénye. Magyarul: kulcsok. A szótár kulcsait adja vissza, hogy for-ral bejárhassuk őket.
len() – megmondja, hogy hány elemű a zárójelben lévő lista, vagy azt, hogy hány karakteres a zárójelben lévő karakterlánc. A length, azaz hossz szóból származik, de ilyen angol szó nincs. A length szó kiejtéséhez kattints!
map, map() -Az első szó a map (magyarul: leképez) objektumtípust jelzi, a másik egy függvény, amivel map típusú objektumok elő. A függvény két paramétert vár: az első egy másik függvény neve, a második egy bejárható objektum, például lista. A map() függvény a megadott függvényt a lista minden elemére alkalmazza. Például a map(str, [1, 2, 3]) parancs az [1, 2, 3] lista minden egyes tagjára lefuttatja az str() függvényt.
max() – A zárójelben egy bejárható objektumot, például listát, vagy range-t adunk meg. A max() függvény megadja a bejárható objektumban lévő számok közül a legnagyobbat, ha karakterláncokat vizsgálunk, akkor az ábécérendben a leghátul állót.
min() – A zárójelben egy bejárható objektumot, például listát, vagy range-t adunk meg. A min() függvény megadja a bejárható objektumban lévő számok közül a legkisebbet, ha karakterláncokat vizsgálunk, akkor az ábécérendben a legelöl állót.
None – változónak adható értékül, ha semmilyen konkrét értéket nem akarunk a változóban tárolni, vagy az eddig benne tároltat óhajtjuk “kidobni”. Magyarul: semmi. Mindig nagy betűvel kezdjük.
open() – nem önálló parancs, hanem a fájl típus tagfüggvénye. Fájl megnyitására való. Magyarul: nyit.
or – if vagy elif után következhet, és azt lehet vele kikötni, hogy a megadott két feltétel közül elég, ha az egyik teljesül. Magyarul: vagy.
pop() -nem önálló parancs, hanem a lista és a szótár adattípus tagfüggvénye. Kiveszi a listából (szótárból) és visszaadja azt, ami a zárójelben van. Ha nem írunk semmit a listába, akkor a lista utolsó elemével teszi ugyanezt. Magyarul: kipattint, itt inkább kiugraszt.
print() – kiírja, ami a zárójelben van. Magyarul: nyomtasd.
random – ez nem parancs, hanem a véletlenszámok kezeléséhez szükséges modul neve.
random.choice() – a zárójelben megadott bejárható objektumból választ egyet. A choice szó jelentése magyarul: választás.
random.randint() – véletlen egész számot állíthatunk elő vele. Az alsó és a felső határt a zárójelben, vesszővel elválasztva adod meg.
random.sample() – a zárójelben megadott bejárható objektumból választ annyit, amennyit kérünk. A kiválasztottak között nem lesz ismétlődés. A sample szó jelentése magyarul: minta.
range, range() – Az első szó a range (magyarul: sorozat, konkrétan számsorozat) objektumtípust jelzi, a másik egy függvény, amivel range típusú objektumok, azaz számsorozatok állíthatók elő. Leggyakrabban for akármi in range(100) jellegű utasításban használjuk, a számlálós ciklus szimulálására.
read() – nem önálló parancs, hanem a fájl típus tagfüggvénye. Fájl tartalmának egyszerre, vagy pár karakterenként történő beolvasására való. Magyarul: olvas.
readline() – nem önálló parancs, hanem a fájl típus tagfüggvénye. Szövegfájl egy sorának beolvasására való. Magyarul: olvas sort.
readlines() – nem önálló parancs, hanem a fájl típus tagfüggvénye. Szövegfájl sorait olvashatod be egy listába, a lista egyes elemei a szövegfájl sorai lesznek. Magyarul: olvas sortokat.
remove() – nem önálló parancs, hanem a lista adattípus tagfüggvénye. Magyarul: eltávolít. A zárójelben megadott elem első előfordulását kiveszi a listából.
reversed() – a zárójelben megadott listát vagy karakterláncot megfordítva adja vissza. Magyarul: megfordítva, megfordítottan. A reverse szó kiejtéséhez kattints!
round(szám, tizedesjegy) – tizedesjegy pontosságra kerekíti a megadott számot. Magyarul: kerekít.
return – függvény visszatérési értékét lehet vele megadni. Magyarul: visszatér.
time.sleep() – a zárójelben megadott másodpercet vár a programod. Magyarul: alszik.
set() – halmaz létrahozására szolgál. Magyarul: halmaz.
sort() – nem önálló parancs, hanem a lista adattípus tagfüggvénye, és arra jó, hogy a listát helyben rendezze – azaz az a lista, amelyikre meghívod, rendezett lesz. Magyarul: rendez. Paraméterezését lásd a sorted() függvénynél.
sorted() – a zárójelben megadott listát rendezi, és új listát ad vissza, az eredetit nem bántja. A reverse=True megadásával lehetőséged van csökkenő sorrendet kérni, és kulcsfüggvényt is adhatsz meg, amivel úgy rendezel, ahogy jól esik – részletekért lásd a rendezős postot. Magyarul: rendezett, rendezve.
split() – nem önálló parancs, hanem a karakterlánc adattípus tagfüggvénye, és arra jó, hogy a zárójelben megadott határolókarakternél szétszedi a karakterláncot listává. Ha nem adunk meg semmit, akkor a whitespace karaktereknél hasít. Magyarul: hasít.
str, str() – Az első szó a string típust jelzi. A string szónak jó sok jelentése van, például madzagot is jelent, de nekünk jobb a füzér, informatikai szövegekben pedig karakterláncnak fordítandó. A legtöbb esetben jó, ha stringet olvasol, és szöveget gondolsz. A második szó egy függvény, ami szöveggé, karakterlánccá alakítja azt, ami a zárójelben van, ha lehet. A string szó kiejtéséhez kattints!
strip() – nem önálló parancs, hanem a karakterlánc adattípus tagfüggvénye. A karakterlánc elejéről és végéről lepusztítja a zárójelben megadott karaktereket. Ha nem adunk meg semmit, akkor a whitespace-karaktereket takarítja le, azaz a szóközt, tabulátort, soremelést, kocsivisszát. Magyarul: megfoszt, lemeztelenít. A whitespace magyarul fehér helyet jelent, de soha nem szoktuk lefordítani.
sum() – A zárójelben egy bejárható objektumot, például listát, vagy range-t adunk meg. A sum() függvény megadja a bejárható objektumban lévő számok összegét. Magyarul: összeg.
True – a bool adattípus egyik lehetséges értéke. Magyarul: igaz. Mindig nagy betűvel kezdjük.
update() – nem önálló parancs, hanem a szótár adattípus tagfüggvénye. Magyarul: frissít. Létező szótár értékeit frissíthetjük vele.
upper() – nem önálló parancs, hanem a karakterlánc adattípus tagfüggvénye. A karakterlánc NAGYBETŰS változatát adja vissza. Az upper case szó jelentése magyarul: nagybetű.
values() – nem önálló parancs, hanem a szótár adattípus tagfüggvénye. Magyarul: értékek. A szótár értékeit adja vissza, hogy for-ral bejárhassuk őket.
while – a róla elnevezett while-ciklus első szava. Addig ismétlődik a ciklus, amíg a while után megfogalmazott feltétel teljesül.