2021. február 25., csütörtök

Pénzügyi tudasság


FELNŐTTKÉNT GONDOLKODNI ÉS GONDOSKODNI! 

A családi kasszához való hozzájárulás fontossága. Sokkal jobban megbecsüljük azt amiért megdolgozunk! 


FELELŐSSÉG!

Amikor a 15. életévét betölti gyermekünk, már hivatalosan is vállalhat diákmunkát a nyári szünetben. Ez egy nagyon jó lehetőség arra, hogy a nyarat hasznosan töltse, és egy újabb megerősítés lehet számára arra vonatkozóan is, hogy a pénzért bizony mindenkinek meg kell dolgozni.

DIÁKMUNKA NYÁRI MUNKA!

A saját munkájának gyümölcse a saját keresete, amelyről már ő döntheti el, hogy mire költi. Kiváló lecke lehet ez arra, hogy megtanulja, amit szeretne elérni, azért bizony tennie is kell.  

SAJÁT SZÁMLA!
Önálló életre nevelés fontossága.
Diákszámla a pénzügyi tudatosság erősítésére  

TUDATOSSÁG!
 
És ha már munka, akkor eljött az ideje annak is, hogy gyermekünk saját bankszámlával és hozzá tartozó bankkártyával rendelkezzen. Tanítsuk meg neki, hogyan használhatja helyesen a bankkártyát. Mutassuk meg neki a saját kártyáinkat is, és magyarázzuk el a különbséget az egyes fajták között annak megfelelően, hogy a saját pénzünket vagy a bank pénzét költjük, vagyis hogy betéti vagy hitelkártyáról van-e szó.

Minél később vezetjük őt be a pénzügyi rejtelmekbe, annál nehezebb lesz.  

PÉNZÜGYI TERVEZÉS!

A diákszámla megnyitását követően pedig akár utalhatjuk is neki a havi zsebpénzt. Tinédzserként ugyanis már akár heti több ezer forintot is adhatunk gyermekünknek.

Biztosra vehetjük azonban, hogy ő is legalább egyszer bele fog esni abba a hibába, hogy túl gyorsan elkölti a pénzét. 

Hagyjuk hibázni, hiszen ebből fog a legtöbbet tanulni. Ha ez bekövetkezik, akkor se adjunk neki többet arra a hónapra. A következetes pénzügyi nevelés ugyanis ebben a korban is nagyon fontos.

KÖZÖS TERVEZÉS!

Számoljuk ki együtt, hogy ha a zsebpénzének egy kis részét félreteszi, akkor akár 1-2 év alatt is a kis összegekből mennyi pénz lesz. Az összegyűlt pénzből pedig akár egy nagyobb értékű dolgot is vehet majd magának. Ezt az összeget egy külön megtakarítási számlán is kamatoztathatjuk neki.

DIÁKHITEL!

A középiskola vége felé pedig közösen megtervezhetjük a jövőjét. Mivel szeretne foglalkozni, hol szeretne továbbtanulni? Milyen anyagi lehetőségei vannak mindehhez? Érdemes kitérni a diákhitelre és a lakáshitelre is, hogy pontosan megismerje a lehetőségeit.

Ezzel pedig máris szóba hozhatjuk az egyéb hitelfajtákat is. Próbáljuk meg a saját életünkből vett példákkal bemutatni, hogy mi a különbség a hitelkártya, az áruhitel, a folyószámlahitel vagy a személyi kölcsön között. 

ÁLMOK ÉS VÁGYAK!

Magyarázzuk el ezeknek a termékeknek az előnyeit és a hátrányait is. Ne csak azt lássa maga előtt, hogy megvehet bármilyen nagyobb értékű dolgot, hanem legyen tisztában azzal is, hogy csak akkora törlesztőrészletet vállalhat, amekkorát biztonságosan fizetni is tud.

Világítsunk rá a már ismert megtakarítási termékek mellett azokra is, amelyekről még nem hallott, vagy hallott ugyan, de nem tudja, mit is jelent pontosan. Ilyen lehet például a lekötött betét és az értékpapírok közötti különbség, vagy a megtakarítási számla és a tartós befektetési számla közötti eltérés.

FELELŐSSÉG ÉLETBIZTOSÍTÁS!

Ne felejtsük ki az életbiztosítások bemutatását sem, hiszen ezek megtakarítási és biztosítási résszel egyaránt rendelkeznek, ezért az egész családot védik egy nem várt esemény bekövetkezésekor.

A PÉNZÜGYI TUDATOSSÁGRA NEVELÉS LEGFONTOSABB ESZKÖZE A SZÜLŐI PÉLDA

Láthatjuk, hogy sokszor nekünk, szülőknek sem olyan egyszerű eligazodni a pénzügyi rengetegben. Éppen ezért érdemes minden tőlünk telhetőt megtenni a megfelelő pénzügyi szokások kialakítása érdekében.  Ahogy a mindennapi életben, úgy a pénzügyek terén is elengedhetetlen a példamutatás és a következetesség, hogy később, amikor majd gyermekünk felnő, megfelelően bánjon a pénzzel. Ha gyermekünk azt látja, hogy mi is takarékoskodunk, és nem költjük el minden hónapban teljesen a fizetésünket, akkor számára is ez lesz a követendő minta. 

TAKARÉKOSSÁG BEFEKTETÉS!

A tudatos pénzügyi nevelés és a példamutatás mellett a másik óriási segítség, amit gyermekünknek adhatunk nem más, mint az, ha megfelelő anyagi biztonságban indítjuk útjára a nagybetűs életben, vagyis nem a nulláról kell elindulnia.

SARKALATOS KÉRDÉSEK VÁZLATOSAN!

  1. Mennyi a bevétel?
  2. Mennyi a rezsi?
  3. Étkezésre?
  4. Utazásra?
  5. Szórakozásra?
  6. 30 napra elosztva?
  7. Takarékosság?
  8. Előrelátás?
  9. Lehetőségek?
  10. Célok?
  11. Megtakarítás befektetése?
  12. Hozam?
  13. Pénzügyi döntés?



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

(This is Generation Z.  Approach)


Teenagers are routinely described as being glued to their mobile phones, "We have done a lot of reading on the impact of mobile phone use. It concerns us, the anxiety, social isolation, loneliness, Pupils have reported feeling more able to focus during homework time and revision.
Implications for Our Youngest Citizens How does a life where technology is ever-present impact our children? Kids born in the most recent generation are truly being raised in the digital age. Never will there be a time in which the Internet did not exist. A time in which they did not know what a computer was. Generation Z (and the generations to follow) arrived after the Internet was already born and our corded telephones had largely been packed away. Generation Z will forever be unique in human history. For these individuals, life has always been digitised, with laptops, smartphones, and Wi-Fi being nearly constant elements in their lives since childhood. Since those belonging to Generation Z are just entering adulthood, it’s difficult to measure just what the effect of growing up in the digital age will have on their lives. Yet we can already observe the recognisable impacts this has had. As Gen Z joins the workforce, it’s becoming increasingly apparent that these ‘digital natives’ ---who are exceedingly comfortable with technology---have a lot to offer. They’ve grown up in a digital age. From career goals to personal life and social ramification, what will this digital youth ultimately mean for them? Growing Up in the Digital Age Today’s kids and teens know a world that has always been instantaneously connected. What sets apart each distinct generation? The influences of major events, cultural norms, social mores, and even politics can be seen in the differences amongst Baby Boomers, the Silent Generation, and Xennials, just to name a few. And of course, technology. It may be the impact of technology which has most distinguished our current young folks, those of Generation Z. Our kids and grandkids will never know a world without the efficiency and ubiquity of technology, and this changes everything. This means that there is a distinct divide between the worlds we knew in our youth and the world of Generation Z (and even Millennials). The advent of Internet technologies means different things for how people will live and work in the future. From birth, these young folks have a path which will diverge greatly from those of the older generations. It’s not just that Gen Z are tech savvy; technology is prevalent in today’s world which dramatically alters the trajectory of commerce and growth. With technology playing such an immense role in nearly every industry, Generation Z kids are learning the right skills for their particular type of future. At the same time, that very technology is making educational opportunities more available than ever before. Today’s young people are often planning careers predicated entirely on the innovations of the past few decades. Compared with the manual labour roles of the mid-century as well as other professional, non-digital careers, this is definitely a visible shift in the world of work. Different in-demand job skills and brand new career roles (not to mention the ability to become an entrepreneur in the online marketplace) cannot help but impact the lifestyles that Generation Z will choose.  More women are in the workforce than ever before, and many young girls are especially eager to jump into STEM careers. With so many ways to find job success in the modern world, we’re seeing Millennials and older Gen Z’s postponing marriage and children and prioritising building their own entrepreneurial empires. In fact, one study showed that 55% of Gen Z’ers are intent on starting their own business. What is often most apparent to us as the older generation is the tremendous difference in how young people perceive technology. For those who can remember their first television set (not to mention the first personal computer), there’s still something inherently miraculous about modern technology. Gen Z, and even Millennials, view mobile phones, Internet, and smart devices with far more complacency. These elements are a normal part of life; not subject to their incredulity.

Programtervezési módszerek


Frontális feladatmegoldás

A feladatot egy egységként kezeli, egyszerre akarja megoldani minden előzetes
felmérés, részekre bontás, átgondolás nélkül. A kész programnak nincs szerkezete,
áttekinthetetlen, módosítani, javítani, fejleszteni szinte lehetetlen, nincs
dokumentációja, használata bizonytalan, teljes anarchia. Kis programoknál
használható jól.

Felülről lefelé (top-down) programozás

Legfontosabb megvalósítási elve a lépésenkénti finomítás elve: a feladat megoldását
el ször csak átfogóan végezzük el. Ezután az egészet rész-feladatokra bontjuk, és a
továbbiakban ezeket a részfeladatokat oldjuk meg. Így az egyes részeket egymástól
függetlenül (de illesztve egymáshoz) írhatjuk, tesztelhetjük, javíthatjuk. Az egyes
részeket tovább kell finomítani, amíg elemi részfeladatokig nem jutunk.

Lépések:

- bemenő adatok meghatározása
- szükséges műveletek elvégzése
- eredmények megjelenítése, kiírása, rögzítése

Alulról felfelé (bottom-up) programozás

Nagy előrelátás, gyakorlat szükséges hozzá. Először a legelemibb részeket és ezek
algoritmusát készítjük el, utána ezeknek a segítségével bonyolultabb részfeladatokat oldunk meg.

Párhuzamos finomítás elve

A finomítást az adott szint minden részfeladatára végezzük el: finomítjuk az adatokat,
az egyes részfeladatokat, meghatározzuk az adatok kapcsolatait, és ezeket rögzítjük
is.

Döntések elhalasztásának elve

Egyszerre csak kevés dologról, de azokról következetesen döntünk. A felbontás után
keletkez részek lehet leg egyenl súlyúak legyenek! Azokat a döntéseket, amelyek
az adott szinten nagyon bonyolultnak látszanak, próbáljuk kés bbre halasztani,
elképzelhet , hogy kés bb egyszer en megoldhatók lesznek.

Vissza az sokhoz elv

Ha zsákutcába jutottunk, nem elegend az adott szint újbóli végiggondolása, vissza
kell lépnünk az el z szintre, és azt végiggondolnunk, stb.

Nyílt rendszer felépítés

Általánosan fogalmazzuk meg a feladatot, általános algoritmust és programot
készítsünk, így az szélesebb körben, hosszú ideig alkalmazható lesz. A konkrét
feladat megfogalmazását kell általánosítani, az adatait pedig paraméterként kezelni.

Döntések kimondásának (dokumentálásának) elve

A kimondott, de nem leírt döntések rengeteg bajt okozhatnak. Általában arról
feledkezünk meg, hogy egy adat nem lehet nulla. Az algoritmus készítésénél ez még
nyilvánvaló, de ha nem mondjuk ki, nem rögzítjük, akkor a kódolásnál már el is
felejtjük ezt ellen rizni!

Adatok elszigetelésének elve

Az egyes programrészekhez tartozó adatokat ki kell jelölni, és szigorúan el kell
különíteni más programrészekt l. Beszélhetünk globális adatokról, melyekhez a
program összes részegysége hozzáférhet, módosíthat; illetve lokális (helyi)
adatokról, amelyeket nem minden programrész módosíthat, érhet el. A bemen
adatokat input adatoknak, a kimeneti adatokat output adatoknak nevezzük.

Moduláris programozás

A modul önálló, névvel rendelkez , önmagában értelmezhet programegység.
Önállóan tervezhet , kódolható, tesztelhet . A programot nagyobb egységekre,
modulokra bontjuk, a kész program a modulok összeillesztéséb l jön létre. Ezáltal
áttekinthet vé válik a program. Meg kell határozni, hogy az adott modul milyen
módon tart kapcsolatot a többi modullal, milyen bemen és kimen adatai vannak.
(eljárások, függvények, unitok).
A modulok fajtái
- adatmodulok
- eljárásmodulok
- vezérl modulok
- I/O modulok

Strukturált programozás

Felülr l lefelé elv. Bármilyen algoritmus felépíthet elágazásokból, ciklusokból és
részlépések egymásutánjából (szekvenciákból).

A strukturált programozás lényege

- Felülr l lefelé történ lépésenkénti problémamegoldás.
- Minden szinten csak a közvetlenül odatartozó döntések folyamata.
- Kevés, de jól meghatározott vezérlési és adatszerkezeti elemek használata.
- Tiltott a feltételes vagy feltétel nélküli vezérlésátadás (GOTO).

A strukturált programozás elveinek meghatározása

- A feladat meghatározását modellsorozattal végezzük.
- A modell olyan program, amely a célprogram m ködését egy magasabb
intelligenciájú " absztrakt " gépen szimulálja.
- Az utolsó változat utasításai egybeesnek egy létez gép vagy nyelv
utasításkészletével. A modell elemei hierarchikus viszonyban állnak egymással.
- Alapelv a lépésenkénti finomítás elve, amely az egyes absztrakciós szintek
kialakítására ad módszert.
- A megoldandó feladatokat több, kevésbé összetett részfeladatra bontjuk, de a
rész-feladatok megfelel illesztése adja az összprogramot; egyes részei
általánosak, de jól körülhatárolt, önálló feladatokat oldanak meg.

Objektumorientált programozás

Az objektumorientált megközelítés az objektumok mint programegységek
bevezetésével megszünteti a program kódjának és adatainak szétválasztását.

Objektumok használatával egyszer szerkezet , jól kézben tartható programok
készíthet k. Az objektumorientált programozás középpontjában az egymással
kapcsolatban álló programegységek hierarchiájának megtervezése áll.

Az objektumosztályok felépítése

Az adatokat és az adatokon végrehajtható m veleteket egyenrangúan, zárt
egységben kezeljük. Ezeket az egységeket objektumoknak nevezzük, mely nem
más, mint az adatok és az adatokat kezel alprogramok (metódusok)
egységbezárása. Az objektum felhasználói típusként (class, osztály) jelenik meg,
mellyel változókat, objektumpéldányokat (instance) hozhatunk létre. Maga az
osztály nem más, mint egy ún. sobjektum, mely az adatmez iben nem kötelez en
tartalmaz adatokat, de az adattípus definíciókat már igen.

Az objektumok lehetnek önálló (nem származtatott) és statikus helyfoglalású
objektumok is, a class típus példányai azonban dinamikusan jönnek létre és minden
új típusnak van el dje. Az örökl dés az jelenti, hogy már meglév osztályból
kiindulva újabb osztályokat építhetünk fel, amelyek öröklik a felhasznált osztály
minden tulajdonságait. Az objektum tulajdonságait és metódusait is lehet örökíteni.

Minden osztály adatmez ket, metódusokat és jellemzőket tartalmaz.

Az adatmezők olyan adatelemek, amelyek az osztály minden objektumpéldányában
megtalálhatóak. A metódusok az objektumon elvégzend m veleteket definiáló
eljárások és függvények. A konstruktor egy olyan metódus, mely segítségével
megadhatjuk az objektum létrehozásával és inicializálásával kapcsolatos
m veleteket. A destruktor egy olyan metódus, mellyel az objektum
megszüntetésével kapcsolatos m veleteket gy jthetjük egy csoportba. Meghívásakor
a destruktor felszabadítja az objektumpéldány számára dinamikusan lefoglalt
memóriaterületet. Azokat a metódusokat, amelyek az objektumpéldány helyett
magán az osztályon fejtik ki hatásukat osztálymetódusnak nevezzük.

Az objektumorientáltság három főismérve

- Egységbezárás (encapsulation)

- Azt takarja, hogy az adatstruktúrákat és az adott struktúrájú adatokat kezel
függvényeket (metódusokat) egy egységként kezelve, az alapelemeket
elzárjuk a világ el l. Az így kapott egységek az objektumok.

- Öröklődés (inheritance)

- Azt jelenti, hogy az adott meglév osztályokból levezetett újabb osztályok
öröklik a definiálásukhoz használt alaposztályok már létez adatstruktúráit és
metódusait.

- Többrétűség (polimorfizmus)

- Azt értjük ezalatt, hogy egy örökölt metódus az adott objektumpéldányban
felüldefiniálódik.

Az adatrejtés elve az objektumorientált programozásban

Az objektum adatmez i és metódusai alaphelyzetben korlátozás nélkül elérhet ek.
Az objektum adatmez it csak metódusok felhasználásával érjük el. Kulcsszavak (pl.
public és private) segítségével kijelölhetjük az objektum bels és kívülr l is elérhet
részeit. A védetten deklarált része az objektumnak bels elérés a külvilág számára.
A publikált részben elhelyezked adatmez khöz és jellemz khöz futási idej típusinformációkat kapcsol a rendszer. Ezzel a megoldással ismeretlen típusú osztály
adatmez i és jellemz i is elérhet k.

Objektumok közti kapcsolat

- semmi kapcsolat nincs a két objektum között.
- Első lehetőség vagyis az egyik objektumtípus leszármazottja a másik
objektumtípusnak, tehát örökli annak tulajdonságait és metódusait, illetve ezeket
b vítheti is.
- Második lehetőség vagyis a két objektum között birtokos viszony van.

A polimorfizmus megvalósítása

A metódusok átdefiniálása a virtuális metódusok segítségével történik Ez valójában
azt jelenti, hogy azonos hivatkozás esetén más-más m velet (metódus) kerül
végrehajtásra. A program futása közben d l el, hogy végül is melyik metódust kell
aktivizálni. Ezt a jelenséget kés i kötésnek (late binding) nevezzük.

https://infoc.eet.bme.hu/jegyzet/c_jegyzet.pdf
dtk.tankonyvtar.hu › tamop425 › Simon_A_progr_alapjaiPDF


2021. február 19., péntek

Anyáknapjára

Édesanyám haza vár!

A tornácon vár már engem!
Szótlanul némán csendben.
Haza kéne végre mennem, 
Otthon, finomakat ennem,

Megint gyermeknek lennem. 
Fejemet kötőjébe tennem,
Míg pihenne a karosszékbe,
Békesség lenne a lelkébe.

Árok partján, neki virágot szedni,
Szelíd csókjaimmal megölelni.
Örülni a forró levesnek,
Az illatos kenyérnek,

A hideg víznek,
A szőlő levének.
Az otthon melegének,
Édesanyám, csillogó szemének.

-----------------------------


 Édesanyám, emlékére

A halál az élted tőlem elrabolta, 
Nincs, már ki védőn átkarolna. 
Fáradt tested is a porba vész,
Nem érti ezt már a józan ész.

Mennyi mosolyt kaptam tőled,
De mégis könnyet adok főleg.
A szerető csókért most cserébe,
Csak virágot hozok cserépbe.

Itt állok a sírnál némán tétlenül
Miért büntetsz engem vétlenül
Még hallom óvó féltő szavad,
Fájó szívem majd meg szakad.
------------

A JavaScript algoritmussal

A JavaScript, mint neve is mutatja, egy script nyelv, amit legelõször a Netscape Navigator 2.0 támogatott. A JavaScript-eket HTML lapokba lehet beágyazni, a lappal együtt töltõdnek le, majd a böngészõ értelmezi és futtatja azokat. Hasonlít a Java-ra, de ugyanakkor sokkal kisebb, egyszerûbb, korlátozottabb mûködésû is annál.

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:

JavaScriptJava 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.
  • parseInt egy szöveget egész számmá konvertál.
  • 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:

  • KarakterJelentés
    \bbackspace
    visszatörlés
    \fform feed
    lapdobás
    \n\new line
    új sor
    \rcarrige return
    kocsi vissza, sor elejére
    \ttab
    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.
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 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")

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 }

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

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ényMire alkalmazhatóEkkor következik beEseménykezelõ
abortképekA felhasználó megszakítja a kép letöltésétonAbort
blurablakok, frame-ek, és minden form elemA felhasználó elviszi a fókuszt az ablakból, a frame-bõl, vagy a form elemekrõlonBlur
clickgombok, radio gombok, check gombok, submit gombok, reset gombok, link-ekA felhasználó rákattint valamilyen form-elemre vagy linkreonClick
changeszövegmezõk, szöveg box, legördülõ menüA felhasználó megváltoztatja az elem értékétonChange
errorképek, ablakokA dokumentum vagy kép betöltése hibát okozonError
focusablakok, frame-ek és minden form elemA felhasználó ráviszi a fókuszt az ablakra, a frame-re, vagy a form építõelemeireonFocus
loada dokumentum body-jaA felhasználó letölti a dokumentumotonLoad
mouseoutszöveg box, kép, linkekA felhasználó lehúzza az egérmutatót az adott objektumrólonMouseout
mouseoverlinkekA felhasználó a link felett mozog az egérmutatóvalonMouseover
resetformokA felhasználó reset-eli a formotonReset
selectszövegmezõk, szövegboxokA felhasználó kiválaszt egy mezõtonSelect
submitsubmit gombA felhasználó megnyomja a submit gombotonSubmit
unloaddokumentum body-jaA felhasználó elhagyja a lapotonUnload

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.:

    &aacute; = á
    &Aacute;= Á
    &eacute; = é
    &iacute;  = í
    &ouml;   = ö
    &otilde;  = õ
    stb.

Figyeljük meg a kódok felépítését!


2021. február 18., csütörtök

Hogy lettem író!

Inkább vagyok tollforgató mint író, nincs pénzem arra, hogy könyveimet kiadjam. Egy irodalmi estén, azt kérdezték tőlem hogy lettem író, és miért írok? Talán a magam örömére, vagy talán mert ez az a kifejezési forma, ami által a legjobban, a leghitelesebben tudok megnyilvánulni. Zavartan hebegtem valamit, hiszen az ember nem születik írónak, a múló idő avanzsálja íróvá és az olvasói, persze aki ír az közölni akar valamit a többiekkel. Elősször csak olvasó vagy évtizedeken keresztül, majd nyitsz egy blogot ahol magadnak írsz kiírod magadból a bánatot, később már akkor is írsz ha jó kedvű vagy. Aztán megosztod másokkal a gondolataidat az érzéseidet, majd látod hogy 219.000 olvasód van és hirtelen megdöbbensz ettől a nagy számtól.  Egyszer csak kapsz egy levelet valamelyik napilaptól vagy folyóirattól, amiben "Tisztelt Író Úrnak" szólítanak és arra kérnek engedd meg hogy leközöljék egy karcolatodat, majd felkérnek írjál nekik egy témában. Aztán az egyik kötetbemutatón leültem az utolsó sorba és a pulpituson lévő elismert írónő felállt és közölte szertne bemutatni valakit akinek írói munkásságát már régen figyelemmel kíséri, és megtörtént a csoda elhangzott a nevem és állva tapsoltak. Egy könny szökött a szemembe mert azt hittem még mindig csak magamnak írok, voltak visszacsatolások, de nem akartam elhinni, nem volt szignifikáns, és most szembesültem vele milyen sokan olvassák verseimet novelláimat. Csodálatos érzés és ösztönző, erőt ad ahhoz hogy folytassam.

2021. február 16., kedd

Rendezések algoritmusa

Rendezések

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


A Python kódok készítéséhez, futtatásához két lehetőség áll előttünk:
· Telepíthetjük a Pythont a számítógépünkre. Ehhez látogassunk el a
https://www.python.org/downloads/ oldalra és válasszuk ki a számunkra megfelelő platformot és verziót. A tananyagban a Python 3.6. verzióját használjuk. (Megjegyzés: A 3.0
alatti verziók jelentős szintakszisbeli eltéréseket tartalmaznak.) Kódszerkesztőként használhatjuk
az Idle-t vagy akár a professzionális Visual Studio 2017-t is.
· Használhatunk on-line Python környezetet is pl. http://repl.it, amelynek sok előnye van,
hiszen regisztrált felhasználóként bármikor, bárhonnan elérhetjük az elkészített munkáinkat vagy akár meg is oszthatjuk azokat másokkal. Figyeljünk arra, hogy a repl.it oldalon a projekt létrehozásánál a Python (with turtle) lehetőséget válasszuk! A tananyagban olvasható kódok megtalálhatóak ezen az oldalon, a feladatok mellett megadott
linkeken.
Megjegyzés: Az online rendszerben az ékezetes betűk használata nem javallott, ezért a minta kódokban kerültük ezeket!
Applikáció
NetBeans – olyan környezetet a szoftverfejlesztés nyílt forráskódú. A szoftver támogatja a következő programozási nyelvek: Java, C, C + +, PHP, Python, JavaScript, stb NetBeans funkciókat tartalmazza az újraírás, profilalkotás, automatikus kiegészítést, színes szintaxis kiemelés és a meghatározott kód sablonokat. Szintén NetBeans egy fejlesztő számára a szükséges eszközöket, hogy professzionális, vállalati és mobil alkalmazások.
 -------------------------   
[] – egy nyitó és egy záró szögletes zárójel, listát lehet vele megadni.
    {} – 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.






    

















for – a bejárós, vagy más néven for-ciklus első szava. Nem tudom jól lefordítani. 
    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.


A munkakörnyezet kialakítása















A bal felső ablakban a python.exe futó környezete
Mellette jegyzettömbben a program
Az alsó ablakban pedig futtatjuk a programot parancssorban
Ha linux alatt akarjuk futtatni ki kell egészíteni az első sorral, a #! a megjegyzés

Algoritmus megtervezése
Kódolás
Próba


Példák
-------------

#!/usr/bin/env python3
print('Valami')

---------

words = ['macska', 'kutya', 'pirosalma']
for w in words:
    print(w, len(w))

---------------
for i in range(5):
    print(i)
----------------

a = ['Mary', 'had', 'a', 'little', 'lamb']
for i in range(len(a)):
    print(i, a[i])

--------------------

type = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]
for x in type:
  for y in fruits:
    print(x, y)

-------------

mylist = ["apple", "banana", "cherry"]
for x in mylist:
  print(x)

---------------

mylist = [13, 22, 44, 55, 65, 92]
for x in range(2,5):
  print(mylist[x])

--------------

def hello():
    print("Hello, World!")
hello()

----------------

def triangle(a,b,c):
    print("kerulet: ",a+b+c)
triangle(3,4,5)

-------------------

def triangle(a,b,c):
    print("ker: ",a+b+c)
a = input("a oldal: ")
b = input("b oldal: ")
c = input("c oldal: ")
triangle(a,b,c)

----------------
---------------------
def absolute_value(num):
  """This function returns the absolute
  value of the entered number"""
  if num >= 0:
    return num
  else:
    return -num
num = float(input("enter a number: "))
print(absolute_value(num))

---------------------
http://www.malnasuli.hu/alapok/a-python-programozasi-nyelv-6-a-python-turtle-teknos-konyvtar/

------------------
Nézzünk egy példát init metódusra pythonban!
Az __init__() metódus

Ez a példa bemutatja a Fib osztály inicializálását az __init__ metódus használatával.

class Fib:
    '''a Fibonacci sorozat számait eredményező iterátor'''  ①

    def __init__(self, max):                                      ②

Az osztályok rendelkezhetnek (és kell is rendelkezniük) docstring-ekkel is, mint a modulok és függvények.
Az __init__() metódus az osztály minden példányának létrehozása után azonnal meghívásra kerül. Csábító  – de technikailag helytelen –  lenne ezt az osztály „konstruktorának” nevezni. Csábító, mert úgy néz ki, mint egy C++ konstruktor (megállapodás szerint az osztályhoz először az __init__() metódus kerül definiálásra), úgy is működik (az osztály új példányában ez az elsőként lefutó kód), és még úgy is hangzik. De ez tévedés, mert az objektum már kész van, amikor az __init__() metódus meghívásra kerül, és már rendelkezel érvényes hivatkozással az osztály új példányára.
Minden osztálymetódus első argumentuma, beleértve az __init__() metódust is, mindig egy hivatkozás az osztály aktuális példányára. Megállapodás szerint ennek az argumentumnak a neve self. Ez az argumentum tölti ki a c++ vagy Java this foglalt szavának szerepét, de a self nem foglalt szó a Pythonban, csupán elnevezési megállapodás. Ezzel együtt ne nevezd másnak, csak self-nek; ez egy nagyon erős megállapodás.

Minden osztálymetódusban, a self arra a példányra vonatkozik, amelynek metódusa meghívásra került. De az __init__() metódus egyedi esetében az a példány, amelynek metódusa meghívásra került, egyben az újonnan létrehozott objektum is. Noha a metódus definiálásakor explicit módon meg kell adnod a self-et, a metódus hívásakor nem kell megadnod: a Python automatikusan felveszi helyetted.

Oktató videóban: https://www.youtube.com/watch?v=o68iBiE4HyE 

Nézzük meg a forrást;
-------------------------
class Szemely;
def_init ( nev, kor, neme, nemzetiseg, vallas,')
self.nev* nev
self.kor* kor
self.neme*neme
self.nemzetiseg* nemzetiseg
self.vallas* vallas •
self.hello() 
def hello(self);
 print('hello'+ self.nev) 
Ildi * Szemely('Ildiko', 32,'no'.'magyar','kerszteny'
Laci * Szemely('Laszlo', 42,'ferfi'.'torok','muzulman'

---------------------------


https://gyires.inf.unideb.hu/EFOP344/PythonHTML/classes_and_objects_I.html