Click here to load reader
Upload
rog70
View
344
Download
7
Embed Size (px)
DESCRIPTION
A Java Nyelv Tanitasa Kozepiskolaban
Citation preview
1
Debreceni Egyetem Informatikai Kar
A JAVA NYELV TANTSA KZPISKOLBAN
Tmavezet: Ksztette:
Fenyvesi Tibor Ksa Mrk Szab Lszl egyetemi tanrsegd Informatika tanr szak
Debrecen 2010.
2
Tartalomjegyzk
Tartalomjegyzk...............................................................................................................2
1. Bevezets (F.T.) ...........................................................................................................4
2. A Java programozsi nyelv (Sz.L.) ...............................................................................6
2.1. A Java programozsi nyelv trtnete .....................................................................6
2.2. A Java programozsi nyelv bemutatsa .................................................................7
3. A programozsi nyelv tantsnak kvetelmnyei (F.T.).............................................10
3.1. A Nemzeti Alaptanterv elrsai..........................................................................10
3.2. Kerettantervi elrsok ........................................................................................10
3.3. Az emelt szint informatika rettsgi vizsga kvetelmnyei ................................11
4. A szmtgp jelentsge s felhasznlsa a tantsi-tanulsi folyamatban (Sz.L.)......12
4.1. A szmtgpes oktats elmlete .........................................................................12
4.2. A szmtgpek a tantsi-tanulsi folyamatban...................................................13
4.3. Az oktatprogramok hatsa az oktat-nevel munkra ........................................15
5. Az oktatprogram bemutatsa ....................................................................................16
5.1. Fejleszteszkzk (F.T.) .....................................................................................16
5.2. Rendszerterv (Sz.L.)............................................................................................16
5.3. Az oktatprogram rszletes bemutatsa ...............................................................19
5.3.1. A kezdetek (Sz.L.) ....................................................................................19
5.3.2. Nyelvi alapelemek (Sz.L.).........................................................................27
5.3.3. Nyelvi eszkzk (Sz.L.)............................................................................31
5.3.4. Numerikus- s egyb adattpusok (Sz.L.) ..................................................39
5.3.5. Karakteres adattpusok (Sz.L.) ..................................................................43
5.3.6. Elgaztat utastsok (Sz.L.) .....................................................................49
5.3.7. Ciklusszervez utastsok (Sz.L.)..............................................................55
5.3.8. Tmbk (Sz.L.).........................................................................................60
5.3.9. Input-output mveletek (F.T.) ...................................................................65
5.3.10. Emelt szint rettsgi feladatok megoldsa (F.T.) .....................................74
5.3.11. Az objektum-orientlt paradigma (F.T.) ....................................................84
5.3.12. Osztly s csomag (F.T.)...........................................................................88
3
5.3.13. rklds (F.T.) .......................................................................................97
5.3.14. Kivtelkezels (F.T.)...............................................................................104
5.3.15. Objektum-orientlt feladat megoldsa (F.T.) ...........................................113
5.4. Az oktatprogram hasznlata (F.T.)...................................................................119
6. A tovbbfejleszts lehetsgei (F.T.)........................................................................120
7. sszefoglals (Sz.L.)................................................................................................121
8. Irodalomjegyzk ......................................................................................................123
9. Fggelk ..................................................................................................................124
9.1. Feladatok ..........................................................................................................124
9.2. Fogalomtr (F.T.)..............................................................................................132
10. Ksznetnyilvnts .................................................................................................134
Szerzk:
F.T.: Fenyvesi Tibor Sz.L. Szab Lszl
4
1. Bevezets
Napjaink kzoktatsnak hangslyos rszv vlt az informatikai tuds. Mg korbban a
szmtstechnika majd ksbbi nevn informatika tantrgy csak szakmai trgyknt
szerepelt az iskolarendszer oktats palettjn, mra mr kzismereti trggy vlt.
Gyakorlatilag egyenrang lett az alaptantrgyakkal.
Ma a mindennapi let szinte minden terlete megkveteli az informatikai alaptudst.
Ez az alaptuds az informatikai eszkzk s alkalmazi szoftverek legalbb alapszint
hasznlatt jelenti, amelyet a mai ifjsg a kzoktats keretein bell elsajtthat. Van azonban
az informatikai oktatsnak egy msik ga is, amely a kezdeti idszak (80-as, 90-es vek)
egyeduralma utn gyakorlatilag httrbe szorult. Ez pedig a programozi tuds. A
trsadalomnak egyre tbb j programozra lenne szksge, mert az informatika trnyerse
tretlen. Nem elg a hardver, nem elg a kpzett felhasznl, ha nincsenek j szoftverek! Az
internet minden kpzeletet fellml trnyerse szintn programozk hadt ignyli, mert az
interaktv weboldalak nem msok, mint szmtgpes programok. Ezrt a leend
programozk kpzst rdemes minl elbb elkezdeni, de legksbb a kzpiskolai kpzs
keretn bell felttlenl.
Nhny ve lehetsg van arra, hogy kzpiskolban a hagyomnyos programozsi
nyelvek mellett (Pascal, Delphi, Visual Basic, C, C++) egy viszonylag j nyelv, a Java nyelv
is oktathat. Egyre inkbb trt hdt, az internet egyik alapnyelve, sok eszkz (pl. mosgp,
mobiltelefon) vezrlnyelve. jdonsga abban rejlik, hogy ellenben a korbbi eljrs-
orientlt programozsi nyelvekkel j szemlletet kpvisel: a tisztn objektumorientlt
programozst. Ez a paradigma az jrafelhasznlhatsg s a bezrtsg megvalstsval
korszer, biztonsgos eszkzt ad a programozk kezbe.
Szerztrsammal, Szab Lszlval egytt mint kzpiskolban tant pedaggusok
gy reztk, hogy lve a diplomamunka-kirs adta lehetsggel csoportmunka keretben
rdemes lenne foglalkozni ezzel a nyelvvel. Clul tztk ki egy olyan oktatprogram
elksztst, amelynek segtsgvel egy kzpiskols dik is knnyen elsajtthatja a Java
nyelv alapjait, s megismerkedhet az objektum-orientlt programozsi mdszerekkel is.
Tartalmt tekintve szem eltt tartottuk, hogy az tadni kvnt ismeretek krnek meg kell
felelnie a NAT, az informatikai kzponti kerettanterv s az emelt szint informatika rettsgi
vizsga programozsi feladata ltal tmasztott kvetelmnyeinek is.
5
Az elgondolst tett kvette, s a tmt kt rszre osztva a clkitzst megvalstottuk.
Formailag ltnk az internet adta lehetsgekkel, s a webes feldolgozst vlasztottuk. Az
oktatprogram els rszben amelyet a kollgm ksztett el a Java nyelv alapelemeirl
(adattpusok, adatszerkezetek, programozsi s vezrl szerkezetek) van sz, mg a msodik
rszben az I/O mveletek s a kivtelkezels ismertetse, valamint rettsgi programozsi
feladatok megoldsa mellett nagyrszt az objektum-orientlt programozs alapjait dolgoztam
fel.
Az elkszlt tananyagban az alapismeretek mellett igyekeztnk bemutatni minl tbb
letszer, rdekes pldt, valamint programozsi trkkket, fogsokat is. Minden
pldaprogramot rszletes magyarzattal lttunk el, kln kiemelve a lnyeges rszeket. Az
ismertetett programokhoz mellkeltk azok forrskdjt is. A fejezetek vgn az
nellenrzst szem eltt tartand azonnal kirtkeld tesztkrdseket s programozsi
feladatokat helyeztnk el. Termszetesen a feladatok megoldsa is megtallhat az oldalon.
Teht oktatprogramunk felptse a klasszikus j anyagot kzl-, gyakoroltat- s ellenrz
funkcikat kveti. A webes elrhetsg pedig mindenki szmra lehetv teszi, hogy akr
otthonrl, egyni temben is feldolgozhassa az anyagot.
A Java nyelvet alapveten knny elsajttani. Azonban irnyts nlkl knnyen
elveszhetnk a szmtalan utasts, metdus s azok opcii kztt. A nyelv rendkvl
kifinomult eszkzkkel rendelkezik szinte minden programozsi feladat elvgzsre, de ezen
eszkzk megtallsa s clszer felhasznlsa nem knny. Ezzel a projekttel megprbltuk
a Java nyelvet egy kzpiskolai tanul szmra is rthetv tenni gy, hogy a nyelvben
kell rutint szerezve minden tle elvrhat programozsi feladatot knnyedn megoldjon.
6
2. A Java programozsi nyelv
2.1. A Java programozsi nyelv trtnete
A kezdetek 1991-re nylnak vissza, a Sun Microsystem egy nll fejleszti csoportot hozott
ltre Green Team fantzia nven. Azt a feladatot kaptk, hogy olyan hztartsi eszkzket
ksztsenek, amelyek beptett mikrocsippel (mikrochip) rendelkeznek, s kpesek az egyms
kztti kommunikcira is. Ebben a csoportban dolgozott James Gosling, Patrick Naugthon
s Mike Sheridan. Kezdetben a C++ programozsi nyelvvel prblkoztak, de Gosling
felismerte, hogy ez a nyelv alkalmatlan erre a feladatra, s a csapat megtervezte a sajt
nyelvt, az Oak-ot (Tlgy). A nv lltlag gy jutott Gosling eszbe, hogy ppen egy
knyvtrat hozott ltre az j nyelvnek, s akkor az ablakon kinzve megltott egy tlgyft. A
nyelvvel szemben tmasztott alapvet elvrs az volt, hogy platformfggetlen legyen.
A kezdeti sikerek ellenre sem kaptak nagyobb megrendelseket, gy 1993 tavaszra a
projekt vgveszlybe kerlt. Ekkor dntttek gy a csoport vezeti, hogy meg kell
prblkozni az internettel.
A grafikus bngszk elterjedsvel az internet egyre nagyobb npszersgre tett
szert. Az Oak technolgia a platformfggetlensgnek ksznheten tkletesen megfelelt az
internet szmra, hiszen nem okozott gondot a hlzatba kapcsolt gpek inhomogenitsa.
1995 elejre a csapat kifejlesztett egy grafikus bngszt Webrunner nven. Ksbb ez a
bngsz lett az se a HotJava bngsznek, s itt jelent meg a Java kabalafigurja a Duke
figura. Az Oak nevet a Sun-nak nem sikerlt levdenie, mert kiderlt, hogy mr hasznljk
egy programozsi nyelv elnevezseknt. A programnyelv kifejlesztsnek ideje alatt
rengeteg kvt fogyasztottak a fejlesztk, gy a kv hazjnak emlket lltva kapta a
technolgia a Java nevet.
Az interneten lehetv tettk a forrsok ingyenes letlthetsgt, s gy brki szmra
kiprblhatv, tesztelhetv vlt. A letltsek szma rohamosan nvekedett, 1995
novemberben mr letlthet volt a nyelv bta verzijnak forrskdja s fejlesztkszlete.
Nhny v alatt a Java nyelv a programozk egyik legfontosabb eszkzv vlt. Ksznhet
mindez annak a lelkes kis csapatnak, amely megltta a platformfggetlensg irnti ignyt, s
az ebben rejl lehetsgeket.
7
2.2. A Java programozsi nyelv bemutatsa
[14] A Java nyelv fejleszti hivatalos kiadvnyban (white paper) tettk kzre tervezsi
cljaikat s eredmnyeiket. Ez a kiadvny az albbi szavakkal jellemzi a Java nyelvet:
Egyszer (simple): A Java nyelv a C++ leegyszerstett vltozata. Leegyszersdtt a
szintaktika (eltntek a mutatk, automatikus lett a memria felszabadtsa). Java
programot rni vagy olvasni sokkal egyszerbb, mint egy C++ programot.
Objektum orientlt (object-oriented): Majdnem tiszta OO nyelv, egy kevsb hibrid
nyelv. Egy Java programot osztlyok ksztsvel s jrafelhasznlsval ptnk
ssze.
Elosztott (distributed): Egy Java program kpes az internet brmely pontjn tallhat,
URL-lel azonostott objektumot elrni s feldolgozni.
Robusztos (robust): Mskppen hibatr, megbzhat. A nyelv tervezi nagy gondot
fordtottak a hibk korai felismersre, mg a fordts idejn trtn kiszrsre.
Biztonsgos (secure): A Java nyelvet elssorban internetes krnyezetben val
mkdsre terveztk, ezrt biztonsgi korltokat kellett bevezetni, nehogy egy ilyen
program krt tehessen a msik felhasznl szmtgpben.
Architektra semleges (architecture neutral): A fordtprogram gptpustl fggetlen
bjtkdot (.class fjl) generl, s ez a kd a klnbz gpek processzorain futtathat,
ha biztostva van a megfelel futtat krnyezet (Java Virtual Machine, JVM). Az adott
gp a bjtkdot futs kzben rtelmezi a virtulis gp segtsgvel. A JVM ltal
vglegesre fordtott kd a natv kd, ez a kd mr tnylegesen fut az adott gpen.
Hordozhat (portable): A nyelvnek nincsenek implementci fgg elemei, azaz nem
fordulhat el olyan eset, hogy egy nyelvi elem vagy osztly az egyik krnyezetben
mskpp legyen specifiklva, mint a msikban.
Interpretlt (interpreted): A clgpen fut natv kdot az rtelmez hozza ltre
utastsonknt a bjtkd (.class fjl) rtelmezsvel. Ha a clgpen installlnak egy
Java rtelmezt, akkor brmilyen Java kdot rtelmezhet.
Nagy teljestmny (high performance): Ez most mg egy elrend cl, a fejlesztk
azon munklkodnak, hogy a jelenlegi fordts s futtats sorn jelen lv jelents
idignyt lervidtsk.
8
Tbbszl (multithreaded): A tbbszl programozs lnyegben azt jelenti, hogy
ugyanabban az idben tbb programrsz fut egymssal prhuzamosan, tbb szlon. gy
jobban kihasznlhat a szmtgp kzponti egysge.
Dinamikus (dynamic): A Javt gy terveztk, hogy knnyedn tovbb lehessen
fejleszteni. Az osztlyknyvtrak szabadon bvthetk anlkl, hogy azok hatssal
lennnek az ket hasznl kliensekre.
A Java tartalmaz olyan eszkzket, amelyek nem objektumok, ezrt, majdnem tiszta OO
programnyelvnek tekintjk. (pl. a primitv adattpusok is ilyen eszkzk)
Nzzk meg, hogy mit is rtnk az objektumorientltsg kifejezs alatt?
Egy objektumorientlt program egyttmkd objektumok (object) sszessge. A program alap-ptkvei az objektumok. Ezek olyan, a krnyezetktl jl
elklnthet, viszonylag fggetlen sszetevk, amelyeknek sajt viselkedsk,
mkdsk s lehetleg rejtett, bels llapotuk van. Egy objektumra a krnyezetben
lv egyb objektumok hatnak, s ennek hatsra sajt llapotukat megvltoztathatjk.
Minden objektum valamilyen osztlyba (class) tartozik. Az osztlyok megfelelnek az absztrakt adattpusoknak, minden objektum valamely tpus pldnya, egyede
(instance). Az osztlyok definiljk az egyes objektumok llapott ler adatszerkezetet, s a rajtuk vgezhet mveleteket, az gy nevezett mdszereket
(method). Az egyes egyedek csak az llapotukat meghatroz adatszerkezet tnyleges rtkeiben klnbznek egymstl, a mdszerekkel definilt viselkedsk
kzs.
Az egyes osztlyokat az rklds hierarchiba rendezi. Az rklds az az eljrs,
amely segtsgvel egy osztly felhasznlhatja a hierarchiban felette ll
osztlyokban definilt llapotot (adatszerkezeteket) s viselkedst (mdszereket). gy
az ismtld elemeket elegend egyszer, a hierarchia megfelel szintjn definilni.
A Java programok osztlyokbl plnek fel. Java nyelven programot rni annyit jelent, mint
elkszteni az osztly programjt, illetve felhasznlni a rendelkezsre ll kszletbl (API1), a
feladat megoldshoz szksges osztlyt.
1 Application Programming Interface
9
A Java nyelv az elmlt nhny vben llandan fejldtt, talakult. Napjainkig az
albbi vltozatok jelentek meg:
1.0 Ez volt az els verzija a Java virtulis gpnek s az osztlyknyvtraknak. (1996)
1.1 Itt jelent meg elszr a bels osztly fogalom, ami lehetv teszi tbb osztly
egymsba gyazst. (1997)
1.2 Ez a verzi szmottev mrfldk volt a nyelv evolcijban. Hogy ezt
kihangslyozza, a Sun hivatalosan Java 2-nek nevezte el. (1998)
1.3 Csak nhny kisebb vltoztatst vgeztek el rajta. (2000)
1.4 Ez ma a legelterjedtebb vltozat. (2002)
5 Bels szmozs szerint 1.5, kdneve Tiger, jdonsga pldul a tovbbfejlesztett
ciklusmegoldsok, az adattpusok automatikus objektumm alaktsa (autoboxing), a
generic-ek. (2004)
6 Bels szmozs szerint 1.6.0, kdneve Mustang. Decemberben jelent meg a vgleges
vltozat kiterjesztett nyomkvetsi s felgyeleti megoldsokkal, szkriptnyelvek
integrcijval, grafikusfellet-tervezst tmogat kiegsztsekkel. (2006)
7 Kdneve Dolphin (?)
10
3. A programozsi nyelv tantsnak kvetelmnyei
3.1. A Nemzeti Alaptanterv elrsai
A kzpiskolai informatika tantrgy oktatsnak kvetelmnyeit legmagasabb szinten a
Nemzeti Alaptanterv (NAT) rgzti. Ebben az alapdokumentumban az informcis
trsadalom kihvsainak val megfelels kiemelt clknt szerepel. A tanulnak el kell
sajttania a megfelel informciszerzsi, -feldolgozsi, adattrolsi, -szervezsi s -tadsi
technikkat. [1] Kpess kell vlnia a vals vilg modellezsre, amelyhez az informatika
az egyik alapvet eszkzt biztostja. A fejlesztsi feladatok kztt megtallhat az
algoritmizls s az adatmodellezs, mint elsajttand tuds.
3.2. Kerettantervi elrsok
Kvetkez szintet kpvisel a kerettanterv, amely a NAT irnymutatsa alapjn konkretizlja a
clokat s a kvetelmnyeket. A kt f (kzpiskolai) iskolatpus lehetsgeit sszehasonltva
risi klnbsget tapasztalunk! Gyakorlatilag csak a szakkzpiskolai szakmacsoportos
alapoz oktats (11.-12. vfolyamok) keretn bell van md megfelel raszmban
informatikt tantani (heti 8 ra!), a gimnziumi raszm (heti 1-2 ra) mr nmagban is
tragikusan kevs, a programozsra pedig gyakorlatilag id sem jut [3]. Ez utbbi
iskolatpusban csak fakultci vagy szakkr keretn bell van lehetsg behatbban
foglalkozni a tmval. Nzzk, mit r el a szakkzpiskolai kerettanterv a programozssal
kapcsolatban [2]:
A szmtgp-programozs clja, hogy a tanulk megismerjk
az alapvet programozsi elveket s tteleket a programozsi elmlet alapjait a strukturlt programozs fogsait az egyszerbb programtervezsi mdszereket az objektum-orientlt programozs alapjait
Fontosabb programozssal kapcsolatos tmakrk:
11. vfolyam:
a programozs eszkzei o programkd, programnyelv, kdols o fejleszti krnyezet, fordts, szerkeszts o utastsok, adatok, fggvnyek, eljrsok s objektumok
11
programozs-technikai alapismeretek, programtervezs o modellezs o algoritmuskszts o kdols, tesztels
rtkads, vltozk, konstansok elgazsok s itercik szervezse, logikai felttelvizsglat alapfggvnyek, fggvnyhvsok, paramtertads egyszer s sszetett adatszerkezetek rendezsi algoritmusok alapvet I/O mveletek (konzol, fjl)
12. vfolyam:
az objektum-orientlt programozs elve s alapjai osztly s objektum, konstruktor objektumok felptse s tulajdonsgai (adattag, metdus) lthatsg, hatskr objektumok hierarchija, rklds hibakezelsi eljrsok
Ezeknek a tartalmaknak meg kell jelennik az iskolk helyi tantervben, majd az erre
pl tanmenetekben is.
3.3. Az emelt szint informatika rettsgi vizsga kvetelmnyei
A kzpfok oktats lezrst ad rettsgi vizsgnak vlaszthatan az informatika
tantrgy is rsze lehet. A programozs azonban csak az emelt szint rettsgi vizsgn
szerepel, ahol is pontszmban a gyakorlati feladatsor tbb mint egyharmad rszt adja. Az
rettsgi vizsga vizsgaszablyzata az informatika rettsgi vizsga rszeknt szintn rgzti
a programozsi ismeretek kvetelmnyrendszert [4]:
egy programozsi nyelv rszbeni (specialitsok nlkli) ismerete algoritmizls, adatmodellezs elemi s sszetett adatok adatstruktrk, fjlszervezs elemi algoritmusok (rendezsek, rekurzi) programkszts (tervezs, kdols, tesztels, hibakeress)
Mindezek az elrsok egyrtelmen meghatrozzk a programozsi nyelvek
kzpiskolai oktatsval kapcsolatos clokat s kvetelmnyeket, amelyeket az
oktatprogramunk kifejlesztsnl mindig szem eltt tartottunk.
12
4. A szmtgp jelentsge s felhasznlsa a tantsi-tanulsi folyamatban
1981-ben Ershov professzor az albbi megllaptst tette: a szmtgp-programozs
nhny ven bell olyan lesz, mint egy msodik bc, s ugyanolyan nlklzhetetlen lesz,
hogy tudjunk szmtgppel dolgozni, mint amilyen ma az, hogy tudjunk olvasni s rni.
4.1. A szmtgpes oktats elmlete
[15] A System Development Corporation az albbi szmtgpes oktatsi rendszert dolgozta
ki:
A rendszer egyszersge lehetv teszi az elmleti meggondolsok bemutatst.
A tananyagot (1) bemutatjuk a tanulnak (3) a tananyaghoz fzd krdssel vagy
problmval (2) egytt. A vlasz (4) rtkelse (5) s automatizlsa kzlt visszacsatolt
zenet (6) jelentik a kvetkez lpseket. Ezutn j anyagrsz kvetkezik (7). Az utols
vlasztl fggen az j anyagrsz vagy korrigl anyagot tartalmaz, vagy bonyolultabb
krdseket trgyal. Az egsz ciklust addig folytatjuk, amg a leckt be nem fejeztk.
Erre a rendszerre plve fejlesztettk ki a Computer-based Laboratory for Automated
School Systems-t (szmtgpes laboratrium automatizlt oktatsi rendszerek szmra) s
CLASS-nak neveztk.
Ez a rendszer egyidejleg 20 tanul szmra rendelkezett perifrival. A hszas
ltszmot elssorban a helyhiny s a perifrik szma szabta meg, nem pedig a szmtgp
kapacitsa.
(3)
TANUL
(4)
VLASZOK
(5)
VLASZ
(7)
SZELEKTOR
(1)
TROL
(2)
SZEMLLTET UTASTS
(6) VISSZACSATOLT
ZENET
13
A fejlds kvetkez lpse, a terminlhlzattal sszekapcsolt szmtgpes
oktatrendszer volt.
Az oktatrendszerek fejldse napjainkban is lankadatlanul folyik tovbb. Az internet
megjelense, trhdtsa jabb lendletet adott a fejlesztseknek (Megjelentek a web alap
oktatsi anyagok, e-learning rendszerek stb.).
4.2. A szmtgpek a tantsi-tanulsi folyamatban
A szmtgpeknek a tantsi-tanulsi folyamatban val felhasznlsi mdja alapjn az albbi
tpusok alakultak ki:
1. CAI (Computer Assisted Instruction) szmtgppel segtett oktats a tanul
kzvetlen kapcsolatban ll a szmtgppel. (1. bra)
2. CMI (Computer Managed Instuction) szmtgppel szervezett oktats. Itt a
szmtgp ltalban a tanr kzvettsvel szervezi, irnytja a tanulst.
3. CBI (Computer Based Instuctions) szmtgpre alapozott oktats. Az elz kt
mdszerre alapozva pti fel a tananyagokat.
A CAI programtpusok fbb csoportjai:
a) Begyakorl (drill and practike) programok
Ezek a programok fknt matematikai, fizikai, technikai s verblis fogalmak begyakorlst
szolgljk. A tanul addig kapja a begyakorland fogalmakkal, mveletekkel stb. kapcsolatos
feladatokat a szmtgptl, amg a kvnt begyakorlsi szintet el nem ri.
b) Konzultcis (tutorial) programok
A konzultcis programok diagnosztizl teszteket tartalmaznak. A tanul a program
feldolgozsa sorn igen sok irnyba mehet el, a krdsekre adott vlaszoktl fggen.
c) Problmamegoldsi (problem solving) programok
Amg az elz kt programtpusnl a feldolgozs algoritmusa elre meghatrozott, addig itt a
tanul feladata az, hogy adott problma megoldshoz algoritmust dolgozzon ki, s ezt
tesztelje. A feladat megoldsa sorn a szmtgpnek krdseket tehet fel, illetve szmtsokat
vgeztethet vele.
d) Szimulcis (simulation) programok
Ezek a programok abban segtik a tanult, hogy egy folyamat, mechanizmus stb. sszetevit
s ezek klnbz szitucikban mkd hatsait, azaz modelljt felfedezze. A tanul ltal
bevitt adatok alapjn a szmtgp szimullja a folyamatot s bemutatja, hogy mi lenne az
14
eredmnye. A tanul az eredmnyek ismeretben jra vlaszthat paramtereket, s jra
megismerheti dntsei kvetkezmnyeit.
ISKOLA TANTEREM SZMTGPKZPONT
TANR
TANUL
1. bra
Diafilm- vett
Billentyzet
Kperny
Billentyzet
Szmtgp
Tana
nyag
A
dat-
llo
mn
yok
Hal
lgat
i
Ada
t-l
lom
nyo
k
15
4.3. Az oktatprogramok hatsa az oktat-nevel munkra
Napjainkban egyre-msra rasztanak el bennnket a klnbz oktat-bemutat
(multimdis) programok. Egyes szmtgpes szoftverek egyre nagyobb hatssal vannak az
oktats folyamatra. A szmtgpek egyre inkbb tveszik a hagyomnyos oktatstechnikai
eszkzk szerept is, gy nem hagyhatjuk kiaknzatlanul a szmtgp nyjtotta
lehetsgeket. Br csodt sem vrhatunk felttlenl a szmtgptl (oktatprogramoktl),
hiszen a pedaggus emberi jelenltt, az oktatsban betlttt szerept soha nem ptolhatja,
valamint nem nlklzhet a tanul aktv kzremkdse sem a tantsi-tanulsi folyamatban.
Az oktatprogramok hasznlatval a tanrok knnyebben s szemlletesebben tudjk a
tananyagot tadni a tanulknak. A dikok amellett, hogy elsajttjk a szmtgp kezelst
aktvan rszt is vesznek a tantsi-tanulsi folyamatban. A programok segtsgvel egyszerre
tbb rzkszervre hatva trtnik az informcik tadsa, gy vlik hatkonyabb az ismeretek
tadsa-elsajttsa.
A szmtgp alkalmazsnak msik risi jelentsge abban ll, hogy az ismeretek
tadsa sorn alkalmazkodik a dikok egyni tempjhoz. Lehetsget biztost a
feladatmegoldsok sorn az azonnali rtkelsre, megmutatja a hibkat s tmutatst ad a
hibk kijavtshoz.
Az internet trhdtsval a klnbz oktatprogramok, segdanyagok, videk, stb.
otthonrl, a laksbl ki sem mozdulva is elrhetv vltak. Mindenki az rdekldsi krnek
megfelel informci birtokba juthat szempillants alatt. A vilghl nyjtotta
lehetsgeket kihasznlva a dikok kicserlhetik egymssal a tapasztalataikat, segtsget
krhetnek egymstl, frumokat hozhatnak ltre stb. Az internet teht egy kifogyhatatlan
informcis kincsesbnya, csak tudni kell a lehetsgeket hasznlni.
16
5. Az oktatprogram bemutatsa
5.1. Fejleszteszkzk
Az oktatprogram s a szakdolgozat elksztshez az albbi szoftvereket hasznltuk:
opercis rendszer: Microsoft Windows XP Professional SP3 HU (licenc: Tisztaszoftver Program)
weblapszerkeszt: Microsoft Office FrontPage 2003 SP3 HU (licenc: Tisztaszoftver Program)
szvegszerkeszt: Microsoft Office Word 2003 SP3 HU (licenc: Tisztaszoftver Program)
webbngsz: Mozilla Firefox v3.6.3 HU (licenc: Mozilla Public License, GNU)
Java futattrendszer: Java SE Development Kit v6u19 (licenc: GPL v2 + Classpath exception)
Java fejleszt: NetBeans IDE v6.8 (licenc: CDDL s GNU General Public License)
Tesztgenertor: eXe XHTML editor v1.04.1 (licenc: GNU General Public License)
5.2. Rendszerterv
Az oktatprogram ksztse sorn a bevezetben ismertetett megfontolsok vezettek
bennnket. Egy olyan segdeszkzt kvnunk a kzpiskols dikok kezbe adni, aminek a
hasznlatval elsajtthatjk a Java programok ksztsnek a menett, valamint kpesek
lesznek az emelt szint rettsgin a programozsi feladat megoldsra is.
A kvetelmnyek (3. fejezet) ttanulmnyozsa utn, valamint a korbbi vekben
szerzett szaktanri tapasztalatainkat (Pascal programozsi nyelv tantsa) figyelembe vve a
tananyagot 15 htre bontottuk, heti 4 tantsi ra keretben. gy ltjuk, hogy ez a megfelel
forma arra, hogy tadjuk az ismereteket, valamint kszsgszintre hozzuk az alapvet
programozstechnikai elemek elvgzst.
A tantsi egysgeket a kvetkezk szerint alaktottuk ki:
1. ht A kezdetek 2. ht Nyelvi alapelemek
3. ht Nyelvi eszkzk 4. ht Numerikus- s egyb adattpusok
17
5. ht Karakteres adattpusok
6. ht Elgaztat utastsok 7. ht Ciklusszervez utastsok
8. ht Tmbk 9. ht Input-output mveletek
10. ht rettsgi feladatok megoldsa 11. ht Az objektum-orientlt paradigma
12. ht Osztly s csomag 13. ht rklds
14. ht Kivtelkezels 15. ht Objektum-orientlt feladat megoldsa
Minden egyes tantsi egysg a kvetkez mdon pl fel:
1. Tartalom 2. Kidolgozs 3. Tesztkrdsek 4. Feladatok
Tartalom: A fejezetek elejn tallhat, tmutatt nyjt a dikok szmra az adott tantsi
egysg felptsrl, tananyag tartalmrl.
Minta:
Kidolgozs: Az adott tma rszletes, pldaprogramokkal szemlltetett bemutatsa tallhat itt.
18
Tesztkrdsek: A tananyag vgn ellenrz krdsek segtsgvel prbljuk az elsajttott
ismereteket feleleventeni. A tanulk vlaszt az oktatprogram azonnal
rtkeli.
Minta:
Feladatok: Az itt tallhat feladatok elksztsvel a tanulk, elmlytik a lecke ismereteit,
begyakoroljk az adott egysghez tartoz programozi fogsokat.
Minta:
A feladatok megoldsa is megtallhat a tananyagban, gy a dikok nllan kpesek
a munkjukat leellenrizni.
A tananyag elrhet az interneten, gy biztostjuk azt, hogy esetleges lemarads esetn
a dikok ptolni tudjk a kimaradt ismereteket, valamint gy a sajt egyni tempjukhoz
igazodva tudnak haladni a tananyag feldolgozsban.
A fent emltett szempontokat kvetve ksztettk el az oktatprogramot.
Az oktatprogram egy webhely, amely elrhet a http://java2.uw.hu cmen.
Tartalmazza a tananyagot, teszteket, feladatokat a feladatok megoldst, valamint
kiegsztettk egy fogalomtrral is.
19
A program nyitkpernyje:
5.3. Az oktatprogram rszletes bemutatsa
Az albbiakban bemutatjuk a fejezetekre bontott oktatprogramot, amelynl egy-egy fejezet
megfelel raszm esetn (kb. 4-6 ra) 1 ht alatt feldolgozand ismeretanyagot tartalmaz.
A szakdolgozat szkre szabott terjedelme miatt az egyes fejezetek vgn tallhat
tesztkrdsek, gyakorl feladatok s azok megoldsai nem kerltek a dolgozatba, de a
weboldalon termszetesen elrhetk.
5.3.1. A KEZDETEK
5.3.1.1. ltalban a Javrl [16] A Java egy objektum-orientlt programozsi nyelv, amelyet a C++ programnyelvbl
fejlesztettek ki. Elsdleges clja az volt, hogy legyen egy olyan programozsi nyelv, amelyet
az interneten keresztl is hasznlhatunk, biztonsgos s lehetleg platformfggetlen.
20
A platformfggetlensg azt jelenti, hogy nemcsak UNIX-on, PC-n, ... stb, lehet futtatni
az adott programot, hanem brmilyen gptpuson. Ez annyiban sntt csupn, hogy
brmilyen gptpuson futtathat egy Java program, amely rendelkezik Java futtatval, az
n. Java Virtual Machine-nal (JVM), azaz egy virtulis, Java programot futtatni kpes
krnyezettel.
Az interneten keresztl trtn hasznlat azt jelenti, hogy a Web-bngszben
megjelen Weblapjainkrl indulhatnak n. Java appletek, amelyek azonos mdon fognak
megjelenni s futni, minden platformon fut Web-bngszben. A Java appletek a Java
programoktl abban klnbznek, hogy az appletnek korltozottak a kpessgei. Pldul nem
rhatja, olvashatja a helyi fjljainkat, mg egy Java programbl ugyangy beolvashatom,
rhatom mintha azt egy msik programozsi nyelven tettem volna meg.
A Java programozsi nyelv jellemzi:
egyszer
objektumorientlt
elfordtott
rtelmezett
robusztus
biztonsgos
semleges architektrj
hordozhat
nagy teljestmny
tbbszl
dinamikus
A Java fordtprogramos programnyelv, de a fordts folyamata az albbiak alapjn trtnik:
Elszr a forrsprogramot a Java-fordt (compiler) egy kzbls nyelvre fordtja
> Java bjtkdot kapunk eredmnyl (ez a bjtkd hordozhat)
Ezt a kdot rtelmezi s futtatja a JVM. A JVM teht egy interpreternek
tekinthet.
A Java programok ksztshez az albbiakra lesz szksgnk:
21
Java integrlt fejlesztkrnyezet (Java SE + NetBeans).
Letlts: http://java.sun.com/javase/downloads/index.jsp
Telepts: A telepts a Windowsban megszokott egyszersggel trtnik,
ltalban elegend a Next gombra kattintani.
Java dokumentcik
A dokumentcik letlthetk a http://java.sun.com oldalrl.
5.3.1.2. Ismerkeds a fejlesztkrnyezettel (NetBeans)
A programok ksztsnl a Sun sajt fejlesztkrnyezett a NetBeanst fogjuk hasznlni. Ez
egy integrlt fejlesztkrnyezet (Integrated Development Environment, IDE). A NetBeans
lehetv teszi a programozk szmra a programok rst, fordtst, tesztelst, valamint
hibakeress vgezst, majd a programok profilozst s teleptst is.
Ismerkedjnk meg egy egyszer projekt ksztsnek a folyamatval! (Hogyan lehet
Java alkalmazst kszteni?)
5.3.1.2.1. Projekt ltrehozsa
A NetBeans indtsa utn File > New Project
A Java kategrin bell a Java Application projektet vlasszuk ki.
22
A kvetkez lpsben a projekt nevt kell megadnunk.
Kapcsoljuk be a Create Main Class, valamint a Set as Main Project opcit.
A Finish gomb lenyomsval indul a varzsl s elkszti a projektnket.
A varzsl futtatsnak eredmnye:
23
Az elz lpseket vgrehajtva elksztettnk egy Szerbusz_Vilg nev projektet,
amely tartalmaz egy szerbusz_vilag nev csomagot, valamint egy Main nev osztlyt. Ezekrl a ksbbiek sorn fogunk tanulni.
5.3.1.3. Az els program elksztse
Feladat: dvzl szveg kirsa a kpernyre. (Szerbusz kedves Idegen!)
Fontos tudnunk, hogy a Java nyelvben megklnbztetjk a kis- s nagybetket.
Ezenkvl a forrsprogram fjlneve s a benne definilt public tpus osztly neve azonos kell legyen, mg a betllst tekintve is.
Ksztsnk egy j projektet ElsoProgram nven.
A kszts menete az elz rszben lertak alapjn trtnik, azzal az eltrssel, hogy
most ne hagyjuk bekapcsolva a Create Main Class, valamint a Set as Main Project opcit.
Szrjunk be a projektbe egy res Java fjlt.
Az osztly neve egyezzen meg a projekt nevvel.
24
Elkszlt az ElsoProgram projektnk, egy ugyanolyan nev osztllyal.
Gpeljk be a forrsprogramot a fejlesztrendszerbe!
//Els program public class ElsoProgram{ public static void main(String[] args) { System.out.println("Szerbusz kedves Idegen!"); } }
Klnsen figyeljnk oda minden zrjelre, pontosvesszre, mert egy jel hinya is
szintaktikai hibt eredmnyez, s nem fogja a fordt elfogadni. A berskor a plda szerinti
25
tagolsban vigyk be a programot. Ez azrt fontos, mert gy knnyen ttekinthet lesz a
programunk, s a hibkat gyorsan felfedezhetjk.
A parancsok begpelsnl hasznlhatunk rvidtseket, ltalban a parancs els kt
karakternek a begpelse utn nyomjuk meg a TAB billentyt. pl.
pu + public cl + class
psvm + public static void main(String[] args{}) sout + System.out.println("");
Vizsgljuk meg soronknt a program felptst!
1. A // kezdet sorok megjegyzsek, s nem kerlnek feldolgozsra. Itt a program
rthetsgt nvel egyni megjegyzseket helyezhetnk el.
2. Ebben a sorban adjuk meg az osztly defincijt, amelyben meghatrozzuk a
lthatsgt (public), a nevt (ElsoProgram) s egyebeket, melyekrl a ksbbiekben lesz sz. Ezt kveti egy blokk, amelyet kapcsos zrjelek kz zrunk.
3. Programunk egy metdust tartalmaz, amelynek neve main, vagyis fmetdus. Az ves zrjelben egy karakterlnc-tmbt definilunk String args[], amelyben
26
a parancssori paramtereket kapjuk meg. A main metdus tartalmt is kapcsos zrjelek kz zrjuk.
4. A System.out.println az ves zrjelben megadott karakterlncot rja ki a kpernyre.
Fordts, hibakeress
Ha sikeresen begpeltk a forrsprogramunkat, mentsk el, s fordtsuk le.
Figyelem! Eltte lltsuk be a kvetkezt: Jobb egrgombbal kattintsunk a Projekt ablakban
tallhat ElsoProgram projektnkre. A megjelen menkbl vlasszuk ki a Set as Main Project opcit!
A fordtst a Run menben, vagy az eszkztron rhetjk el , ahol ktfle lehetsg kzl vlaszthatunk. (Build Main Project, Clean and Build Main Project)
Az Output ablakban kapunk tjkoztatst a fordts eredmnyrl, s az elfordul
hibkrl.
Futtats
A sikeresen lefordtott programot futtathatjuk.
A futs eredmnyt az Output ablakban tekinthetjk meg.
27
5.3.2. NYELVI ALAPELEMEK
5.3.2.1. Karakterkszlet
A program forrsszvegnek legkisebb alkotrszei a karakterek.
Az UNICODE 16 bites kdtblra pl, ahol bet minden nyelv betje lehet.
Tartalmazza az sszes nemzetkzi abc-t. Megklnbzteti a kis- s nagybett.
Kategrik:
betk (minden nyelv betje)
szmjegyek (0-9 decimlis szmjegy)
egyb karakterek (mveleti jelek, elhatrol jelek, rsjelek, specilis karakterek)
5.3.2.2. Szimbolikus nevek
5.3.2.2.1. Azonost
Olyan karaktersorozat, amely betvel kezddik, s betvel vagy szmjeggyel folytatdhat.
Arra hasznljuk, hogy a programozi eszkzeinket megnevezzk vele, s ezutn brhol a
program szvegben hivatkozhassunk r. Betnknt nem csak a nemzeti karaktereket, hanem
az _ s $ jelet is hasznlhatjuk.
Azonost kpzsi szablyok:
Az azonost brmilyen hossz Javban hasznlhat unikd karaktersorozat lehet.
Egy azonost nem kezddhet szmjeggyel, nem lehet kulcssz, s nem lehet a
nyelv egy elre definilt konstansa (true, false vagy null).
Kt azonost csak akkor egyezik meg, ha unikd karaktereik rendre
megegyeznek.
28
Pldk az azonostra:
Szablyos Java azonostk: Nem azonostk: x x+y r x*y+3
diak_kod 12 t Nhny gyakorlati hasznos tancs az azonostk ksztshez:
Prbljunk meg jl olvashat, beszdes azonostkat vlasztani. (minSebesseg,
karakterekSzama)
Az osztlyok azonostjt nagybetvel kezdjk. (Szemly, Alakzat)
A vltozk s metdusok azonostjt kisbetvel kezdjk. (sebessg, darab)
A konstansokat csupa nagybetvel rjuk. (ALAPAR, NYUGDIJKORHATAR)
Az azonostkat gy tagoljuk, hogy az sszetett szavak kezdbetit nagybetvel, a
tbbit kisbetvel rjuk. (maxSebessegHatar)
5.3.2.2.2. Kulcssz
Olyan karaktersorozat, amelynek az adott nyelv tulajdont jelentst, s ez a jelents a programoz ltal nem megvltoztathat.
A Java kulcsszavai a kvetkezk:
A const s a goto szintn foglalt sz, de nincs implementlva, egyik sem hasznlatos.
5.3.2.3. Cmke
A vgrehajthat utastsok megjellsre szolgl, brmely vgrehajthat utasts megcmkzhet. Azrt alkalmazzuk, hogy a program egy msik pontjrl hivatkozni tudjunk r. A cmke egy azonost, az utasts eltt ll kettsponttal elvlasztva.
Szintaktika: cimke: { }, vagy cimke: utasts
abstract default if package transient boolean do implements private try break double import protected void byte else instanceof public volatile case extends int return while catch final interface short synchronized char finally long static this class float native super throw continue for new switch throws
29
A cmkt a break vagy a continue paranccsal egytt hasznljuk gy, hogy megadjuk a parancs utn azt, hogy melyik egysgre vonatkozik.
Plda:
5.3.2.4. Megjegyzsek
A megjegyzs olyan programozsi eszkz, amely arra szolgl, hogy a program rja a kd olvasjnak valamilyen informcit szolgltasson.
A megjegyzst a forrsszvegben hromfle mdon helyezhetjk el:
//-tl sorvgig megjegyzs.
/* */ zrjelek kztt tetszleges hosszan.
/** */ dokumentcis megjegyzs. A fejlesztkrnyezet segtsgvel
automatikusan lehet generlni hypertext (HTML) dokumentcit, ami felhasznlja
a dokumentcis megjegyzseket is. (Run > Generate Javadoc (Projekt nv))
Plda a megjegyzsekre:
30
5.3.2.5. Literlok
A literl olyan programozsi eszkz, amelynek segtsgvel fix, explicit rtkek pthetk be
a program szvegbe. Kt komponense van: tpus s rtk.
Fajti: egsz: egy pozitv vagy negatv egsz szm, vagy nulla.(pl. +200, -3, 1256987)
vals: egy tizedesekkel lerhat szm. Kt formban adhat meg: tizedes forma s
lebegpontos forma (pl. 6.32, 100.0, 0.0006, 6.3E2, 5E-4)
logikai: kt logikai konstans ltezik, a true (igaz) s a false (hamis).
karakter: egy unicode karakter (szimpla aposztrfok kz tesszk). (pl. 'a', 'B')
szveg: akrmilyen hossz, unicode karakterekbl ll sorozat (idzjelek kz
tesszk). (pl. Szia)
null
5.3.2.6. Vltoz
A programok adatokon vgeznek klnfle manipulcikat, ezek az adatok a program futsa
alatt vltoztatjk rtkket. A kezdeti adatokat a program eltrolja a vltozkba, az rtkek az
algoritmusnak megfelelen mdosulnak a program futsa folyamn. Az algoritmus vgn a
vltoz a vgeredmny rtkvel rendelkezik. A vltoz olyan adatelem, amely azonostval
van elltva. Az egyik legfontosabb programozsi eszkznk.
A vltozkat hasznlat eltt deklarlni kell. Ez azt jelenti, hogy meg kell adni a
tpust, nevt, esetleg rtkt is. Amikor egy vltoznak kezdeti rtket adunk, akkor a
vltozt inicializljuk.
pl. byte a; int x = 0;
Egy vltozt a program tetszleges rszn deklarlhatunk.
A vltoz rvnyessgi tartomnya a programnak az a rsze, ahol a vltoz
hasznlhat. A vltozdeklarci helye hatrozza meg az rvnyessgi tartomnyt.
A vltoz lehet (a deklarls helytl fggen.):
31
tagvltoz: Az osztly vagy objektum rsze, az osztly egszben lthat
(alkalmazhat). Az osztlyvltozk deklarlsnl a static kulcsszt kell hasznlni.
loklis vltoz: Egy kdblokkon bell alkalmazzuk. A lthatsga a deklarci
helytl az t krlvev blokk vgig tart.
A metdusok formlis paramterei az egsz metduson bell lthatk.
A kivtelkezel paramterek hasonlk a formlis paramterekhez.
Plda a vltozkra:
A vltozt lehet vglegesen is deklarlni (konstans vltoz), a vgleges vltoz rtkt nem
lehet megvltoztatni az inicializls utn.
A vgleges vltozk deklarcinl a final kulcsszt kell hasznlni: pl. final int aKonstans = 0;
5.3.3. NYELVI ESZKZK
5.3.3.1. Kifejezsek (operandusok s opertorok)
A kifejezsek szintaktikai eszkzk, arra valk, hogy a program egy adott pontjn ismert
rtkekbl j rtkeket hatrozzunk meg. Kt komponense van: tpus s rtk.
Ktfle feladata van: vgrehajtani a szmtsokat, s visszaadni a szmts
vgeredmnyt.
sszetevk:
Operandusok: Az rtket kpviselik. Lehet literl, nevestett konstans, vltoz
vagy fggvnyhvs az operandus.
Opertorok: Mveleti jelek (pl. *, /, +, -). Kerek zrjelek: A mveletek vgrehajtsi sorrendjt befolysoljk.
32
Plda a kifejezsre:
a + sin(0)
Operandus Opertor Operandus
Attl fggen, hogy egy opertor hny operandussal vgez mveletet, beszlhetnk:
egyoperandus (unris pl. (+2)), ktoperandus (binris pl. (2+3)) vagy hromoperandus (ternris pl. (a*b*c)) opertorokrl.
5.3.3.1.1. Opertorok:
(Az operanduson hajtanak vgre egy mveletet.)
5.3.3.1.1.1. Aritmetikai opertorok: Alapvet matematikai mveletek vgzsre hasznljuk
ket.
+ (sszeads),
- (kivons),
* (szorzs),
/ (oszts),
% (maradkkpzs).
Plda az aritmetikai opertorok hasznlatra:
33
Implicit konverzi: Amikor egy aritmetikai opertor egyik operandusa egsz, a msik
pedig lebegpontos, akkor az eredmny is lebegpontos lesz. Az egsz rtk implicit mdon
lebegpontoss konvertldik, mieltt a mvelet vgrehajtdna.
Plda: Egy egsz szmot osztunk egy vals szmmal, a vgeredmny automatikusan
vals lesz.
A konverzit ki is knyszerthetjk explicit konverzival. A programoz ebben az
esetben a kifejezs rtkre rerltet egy tpust.
Szintaxis:
()
Plda:
6/4 >> eredmny: 1 (Itt kt egsz szmot osztottunk egymssal.)
(double) 6/4 >> eredmny: 1.5
5.3.3.1.1.2. Relcis opertorok: sszehasonltanak kt rtket, s meghatrozzk a kztk
lv kapcsolatot.
> (nagyobb),
>= (nagyobb vagy egyenl),
< (kisebb),
34
Plda a relcis opertorok hasznlatra:
5.3.3.1.1.3. Logikai opertorok:
&& (logikai s),
|| (logikai vagy),
! (logikai nem),
& (bitenknti s),
| (bitenknti vagy),
^ (bitenknti nem),
~ (Bitenknti tagads (negci)).
Plda a logikai opertorok hasznlatra:
35
5.3.3.1.1.4. Lptet opertorok: A lptet opertorok bitmveleteket vgeznek, a kifejezs
els operandusnak bitjeit jobbra vagy balra lptetik.
(op1 >> op2; op1 bitjeit op2 rtkvel jobbra lpteti, balrl a legnagyobb helyrtk
bitet tlt fel)
>>> (op1 >>> op2; op1 bitjeit op2 rtkvel jobbra lpteti, balrl nullkkal tlt fel)
5.3.3.1.1.5. rtkad opertorok
= Alap rtkad opertor, arra hasznljuk, hogy egy vltozhoz rtket rendeljnk.
Rvidtett rtkad opertorok: + =, - =, * =, / =, % =, & =, | =, ^ =, > =, >>> = (pl. i = i + 1; rvidtve: i + = 1;)
Plda az rtkad opertorok hasznlatra:
5.3.3.1.1.6. Egyb opertorok:
?: Feltteles opertor
[ ] Tmbkpz opertor
. Minstett hivatkozs
new j objektum ltrehozsa
A kifejezs alakja lehet:
prefix: Az opertor az operandusok eltt ll (* 2 5). infix: Az opertor az operandusok kztt ll (2 * 5). postfix: Az opertor az operandusok mgtt ll (2 5 *).
Azt a folyamatot, amikor a kifejezs rtke s tpusa meghatrozdik, a kifejezs
kirtkelsnek nevezzk. A kirtkels sorn adott sorrendben elvgezzk a mveleteket,
elll az rtk s hozzrendeldik a tpus.
36
A Javban a kvetkez mdon megy vgbe a kirtkels:
Zrjelezssel meghatrozhatjuk, hogy egy kifejezs hogyan rtkeldjn ki.
pl. (x + y) / 2 Elszr a zrjelben szerepl kifejezs hajtdik vgre. Ha nem jelezzk, hogy milyen sorrendben akarjuk az sszetett kifejezst
kirtkelni, akkor a sorrendet az opertorok precedencija fogja meghatrozni. A
magasabb precedencival rendelkez opertorok hajtdnak vgre elsknt.
Pl. x + y / 2 Ebben a kifejezsben, mivel az oszts precedencija magasabb, mint az sszeads, ezrt elszr ez hajtdik vgre, majd az sszeads kvetkezik. A
kvetkez kifejezs egyenrtk vele: x + (y / 2).
Opertor precedencia szintek:
postfix expr++ expr--
unris ++expr --expr +expr -expr ~ !
multiplikatv * / %
additv + -
lptets > >>>
relcis < > = instanceof
egyenlsg = = !=
bitenknti s &
bitenknti kizr vagy ^
bitenknti vagy |
logikai s & &
logikai vagy | |
feltteles ? :
rtkads = += -= *= /= %= &= ^= |= =
>>>=
37
A tblzat a Java platformon hasznlt opertorok precedencia szintjeit mutatja be. Az
opertorok precedencia szint szerint vannak rendezve, mgpedig gy, hogy legfell a
legnagyobb precedencij, legalul a legkisebb precedencij tallhat. Az azonos szinten
elhelyezked opertorok azonos precedencival rendelkeznek. Ha azonos precedencij
opertorok szerepelnek egy kifejezsben, akkor balrl jobbra trtnik a vgrehajts, kivve az
rtkad opertorokat, amelyek jobbrl balra hajtdnak vgre.
Azt a kifejezst, amelynek rtke fordtsi idben eldl, konstans kifejezsnek
nevezzk. Ltrehozsra a final mdostt hasznljuk, gy rjk el, hogy az adattag rtkt nem vltoztathatja meg senki.
pl. final double PI=3.14;: Pi rtkt jelenti.
5.3.3.2. Deklarcis s vgrehajthat utastsok
A deklarcis utastsok mgtt nem ll trgykd. A programoz a nvvel rendelkez sajt
programozsi eszkzeit tudja deklarlni.
pl. int i=10;
A vgrehajthat utastsokbl generlja a fordt a trgykdot.
Melyek ezek?
res utasts (pl. ;) Kifejezs utasts (pl. 8; a = b;) Vezrl utastsok (szekvencia, feltteles utasts, tbbszrs elgaztats,
ciklusok, vezrlstad utastsok)
Mdszerhvsok (metdushvsok)
Objektumot ltrehoz kifejezsek
5.3.3.3. Alprogramok
A programot clszer kisebb egysgekre (alprogram) bontani, melyeket a program bizonyos
pontjairl aktivizlhatunk. gy ttekinthetbb, olvashatbb vlik a forrsprogram, valamint
a tbbszr elfordul tevkenysgeket elegend egyszer megrni (elkszteni).
A Javban metdusnak nevezzk az alprogramot. A metdus utastsok sszessge,
melyet meghvhatunk a metdus nevre val hivatkozssal.
38
Egy metdus lehet eljrs vagy fggvny aszerint, hogy van-e visszatrsi rtke.
5.3.3.3.1. Eljrs
Az eljrsnl nincsen visszatrsi rtk, egyszeren vgrehajtdik az eljrs nevre val
hivatkozssal. A vgrehajts utn a program azzal az utastssal folytatdik, amelyik az
eljrst meghv utastst kveti. Az eljrs visszatrsi tpusa void (semleges), ami azt
jelenti, hogy a visszatrsi tpus nincs definilva.
Plda az eljrsra:
(Az eljrs egy vonalat rajzol a kpernyre.)
5.3.3.3.2. Fggvny
A fggvnynl van visszatrsi rtk. Fggvnyt is egyszeren a nevre val hivatkozssal
hvunk meg, de visszaad egy rtket, melyet a fggvny neve kpvisel.
Plda a fggvnyre:
(A fggvny megduplzza az x vltoz rtkt.)
39
5.3.3.4. Blokk
A blokk nulla vagy tbb utasts kapcsos zrjelek kztt, amely hasznlhat brhol, ahol az
nll utastsok megengedettek.
Jellemzi:
{ } zrjelek kztt szerepel.
Cmkzhet.
Tetszleges mlysgben egymsba skatulyzhat.
A vltoz a blokk loklis vltozjaknt deklarlhat.
A blokkon bell tetszleges a deklarcis s vgrehajthat utastsok sorrendje.
5.3.4. NUMERIKUS- S EGYB ADATTPUSOK
A Java nyelvben az adattpusoknak kt fajtja van: primitv s referencia tpusok. A primitv
adattpusok egy egyszer rtket kpesek trolni: szmot, karaktert vagy logikai rtket.
Primitv tpusok:
Egsz tpus Vals tpus Karakter tpus Logikai tpus
Referencia tpusok:
Tmb tpus Osztly tpus Interfsz tpus
5.3.4.1. Egsz s vals szmtpusok
5.3.4.1.1. Egszek
Tpus Lers Mret / formtum byte bjt mret egsz 8 bit kettes komplemens (-128 - 127) short rvid egsz 16 bit kettes komplemens (-32768 - 32767) int egsz 32 bit kettes komplemens (-2147483648 - 2147483647) long hossz egsz 64 bit kettes komplemens (-9223372036854775808 - 9223372036854775807)
5.3.4.1.2. Vals szmok
Tpus Lers Mret / formtum
float egyszeres pontossg lebegpontos 32 bit IEEE 754
double dupla pontossg lebegpontos 64 bit IEEE 754
40
5.3.4.2. Egyb tpusok
Tpus Lers Mret / formtum char karakterek 16 bit Unicod karakter boolean logikai rtk true vagy false
5.3.4.3. Szm s szveg kztti konvertlsok
5.3.4.3.1. Szvegbl szmm konvertls
Elfordulhat, hogy a sztringknt rendelkezsre ll adatot szmknt kell kezelnnk. pl. A
szveges llomnybl beolvasott adatok sztringknt llnak a rendelkezsnkre, s ha
szeretnnk velk valamilyen matematikai mveletet vgezni, akkor t kell alaktani szm
tpusv.
Az talaktst a valueOf metdussal tudjuk elvgezni.
Plda: (Kt szveg tpus vltoz szmknt trtn sszeadsa.)
5.3.4.3.2. Szmbl szvegg konvertls
Az a helyzet is elfordulhat, hogy a szmbl szvegbe konvertlsra van szksgnk. pl. A
program ltal szolgltatott szmrtkeket szeretnnk egy szveges llomnyba kirni.
Az talaktst a toString() metdussal tudjuk elvgezni.
Plda: (Egy egsz tpus szm szmjegyeinek megszmllsa.)
41
5.3.4.4. A Math osztly
Az alapvet aritmetikai szmtsokon (+, -, /, %) tl a Java nyelv biztostja szmunkra a Math osztlyt. Az osztly metdusai magasabb rend matematikai szmtsok elvgzst is
lehetv teszik. (pl. egy szg szinusznak a kiszmtsa.)
A Math osztly metdusai osztly metdusok, gy kzvetlenl az osztly nevvel kell
ket meghvni. pl. Math.abs(-32);
Nzzk meg a legfontosabb metdusokat!
5.3.4.4.1. Alapvet metdusok:
double abs(double) float abs(foat) int abs(int) long abs(long)
abszolt rtk
A kapott paramter abszolt rtkvel tr vissza.
double ceil(double) felfel kerekts
A legkisebb double rtkkel tr vissza, ami nagyobb vagy egyenl a megkapott paramterrel.
double floor(double) lefel kerekts
A legnagyobb double rtkkel tr vissza, ami kisebb vagy egyenl a megkapott paramterrel.
double rint(double) a legkzelebbi egszhez kerekt
A megkapott paramterhez legkzelebb ll double rtkkel tr vissza.
long round(double) int round(float)
kerekts
A legkzelebbi long vagy int rtket adja vissza. double min(double, double) float min(float, float) int min(int, int) long min(long, long)
A kt paramter kzl a kisebbel tr vissza.
double max(double, double) float max(float, float) int max(int, int) long max(long, long)
A kt paramter kzl a nagyobbal tr vissza.
A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:
42
5.3.4.4.2. Hatvnyozssal kapcsolatos metdusok:
double exp(double) A szm exponencilis rtkvel tr vissza. double log(double) A szm termszetes alap logaritmusval tr vissza. double pow(double, double)
Az els paramtert a msodik paramter rtkvel megadott hatvnyra emeli.
double sqrt(double) A megadott paramter ngyzetgykvel tr vissza. A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:
5.3.4.4.3. Trigonometrikus fggvnyek:
double sin(double) Egy szm szinuszval tr vissza. double cos(double) Egy szm koszinuszval tr vissza. double tan(double) Egy szm tangensvel tr vissza. double asin(double) Egy szm arc szinuszval tr vissza. double acos(double) Egy szm arc koszinuszval tr vissza. double atan(double) Egy szm arc tangensvel tr vissza. double toDegrees(double) A paramtert fokk konvertlja. double toRadians(double) A paramtert radinn konvertlja.
43
A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:
5.3.4.4.4. Vletlen szm kszts:
Gyakran szksgnk van vletlen szmok ellltsra, ezt a double random() metdussal tehetjk meg. A metdus egy vletlen szmot ad [0.0;1.0] intervallumban.
Plda:(Generljunk egy vletlen egsz szmot 1-tl 10-ig terjed intervallumban.)
Figyeljk meg a bekeretezett kifejezst!
A random() metdus 0 s 1 kztti double tpus szmot llt el gy, hogy a 0-t igen, de az 1-t soha nem veszi fel. Mi 1 s 10 kztti egsz szmot szeretnnk, ezrt a vletlen szmot
meg kell szorozni 10-el s mg hozz kell adni 1-t is. Azt, hogy a vgeredmny egsz tpus
legyen ki kell knyszertennk (int).
5.3.5. KARAKTERES ADATTPUSOK
Karaktereket definilhatunk egyszeren a char tpus segtsgvel, (pl. char a='a';) de ltrehozhatunk karakter objektumokat is.
5.3.5.1. A Character osztly
Az egyb tpusoknl ismertetett char tpus helyett van, amikor szksgnk van arra, hogy a
karaktert objektumknt hasznljuk, pl. amikor egy karakter rtket akarunk tadni egy
44
metdusnak, ami megvltoztatja ezt az rtket. A Character tpus objektum egyetlen karakter rtket tartalmaz.
Ksztsnk egy karakter objektumot! pl. Character a = new Character('a');
5.3.5.1.1. A Character osztly fontosabb konstruktorai, metdusai
Character(char) A Character osztly egyetlen konstruktora, amely ltrehoz egy Character objektumot.
compareTo(Character) sszehasonlt kt Character objektumban trolt rtket. Visszaad egy egsz szmot, ami jelzi, hogy az objektum rtke kisebb, egyenl, vagy nagyobb, mint a paramterben megadott rtk.
equals(Object) Kt karakter objektumot hasonlt ssze, true rtkkel tr vissza, ha a kt rtk egyenl. toString() Sztring konvertlja az objektumot. A sztring 1 karakter hossz lesz. charValue() Megadja az objektum rtkt egyszer char rtkknt. boolean isUpperCase(char) Meghatrozza, hogy az egyszer char rtk nagybet-e. boolean isLowerCase(char) Meghatrozza, hogy az egyszer char rtk kisbet-e. boolean isLetter(char) Meghatrozza, hogy az egyszer char rtk kezetes bet-e.boolean isDigit(char) Meghatrozza, hogy az egyszer char rtk szmjegy-e. boolean isSpaceChar(char) Meghatrozza, hogy az egyszer char rtk szkz-e.
A kvetkez program bemutatja a fenti tblzatban ismertetett metdusok hasznlatt:
45
A Java nyelvben hrom osztly ll rendelkezsnkre, amelyekkel trolhatunk, illetve
manipullhatunk sztringeket, ezek a String, a StringBuffer s a StringBuilder. A StringBuilder osztllyal nem foglalkozunk. A String osztlyban olyan sztringeket trolunk, amelyek rtke nem fog vltozni. A StringBuffer osztlyt akkor alkalmazzuk, ha a szvegen szeretnnk mdostani.
5.3.5.2. A String osztly
5.3.5.2.1. String objektumok ltrehozsa
A String objektumok ltrehozsa ktfle mdon trtnhet:
Kszthetjk a sztringet egy sztring konstansbl, egy karaktersorozatbl.
pl. String str1 = "Ez egy szveg"; Vagy mint minden ms objektumot, a new opertorral hozhatjuk ltre.
pl. String str2 = new String ("Ez is egy szveg");
5.3.5.2.2. A karakterlnc indexelse:
Figyeljk meg a kvetkez brt!
0 1 2 3 4 5 6 S z v e g ?
Az brn egy Szveg? objektum lthat, amely egy 7 karakter hossz szveg (String). Az
els bet az S indexe 0, a v bet indexe 3, a ? karakter pedig a 6.
Figyeljnk arra, hogy az indexels nullval kezddik!
5.3.5.2.3. A String osztly fontosabb konstruktorai, metdusai:
String() A ltrehozott objektum az res karakterlncot reprezentlja. String(String value) A ltrehozott objektum a paramterben megadott szveget tartalmazza. int length() Visszaadja a szveg hosszt. char charAt(int index) Visszaadja az index index karaktert.
String toLowerCase() Visszaad egy objektumot, amely az objektum szvegnek csupa kisbets vltozata.
String toUpperCase() Visszaad egy objektumot, amely az objektum szvegnek csupa nagybets vltozata.
46
String toString() Visszaadja sajt maga msolatt. String replace(char oldChar,char newChar)
A metdus visszaad egy karakterlnc-objektumot, amelyben minden oldChar karaktert newChar-ra cserl.
String substring(int beginIndex)
Visszaadja az objektum rszlnct beginIndex-tl a vgig.
String substring(int beginIndex,endIndex)
Visszaadja az objektum rszlnct beginIndex-tl endIndex-1-ig.
boolean equals(Object anObject) sszehasonltja az objektumot a paramterknt megadott msik objektummal.
boolean equalsIgnoreCase(String str)
sszehasonltja az objektumot a paramterl megadott msik String objektummal. A kis- s nagybet kztt nem tesz klnbsget.
int compareTo (String str)
sszehasonltja az objektumot a paramterl megkapott msik String objektummal. A visszaadott rtk 0, ha a kt objektum megegyezik. Ha a szveg nagyobb, mint a paramter, akkor pozitv, ellenkez esetben negatv.
String concat (String str) sszefzi a paramterl megadott sztringet az objektummal. (A + opertorral is el lehet vgezni ezt a mveletet.)
5.3.5.3. A StringBuffer osztly
A String osztllyal ellenttben a StringBuffer osztly szvege manipullhat.
A StringBuffer osztly fontosabb konstruktorai, metdusai:
StringBuffer() A ltrehozott objektum az res karakterlncot reprezentlja.
StringBuffer(int length) A ltrehozott objektum az res karakterlncot reprezentlja, kezdeti kapacitsa length karakter.
StringBuffer(String str) A ltrehozott objektum a paramterben megadott szveget tartalmazza.
int capacity() Megadja a kezdeti kapacitst, ennyi karakter fr az objektumba. int length() Megadja a szveg aktulis hosszt. char charAt(int index) Visszaadja az index index karaktert. StringBuffer append( value) Bvts, a Type itt egy osztlyt reprezentl.
47
StringBuffer append( value) Bvts, a type itt egy tetszleges primitv tpus. StringBuffer insert( in offszet, value) Beszrs offszet pozcitl kezdve. StringBuffer insert( in offszet, value) Beszrs offszet pozcitl kezdve. StringBuffer deleteCharAt(int index)
Adott index karakter trlse a szvegbl.
StringBuffer delete(int start, int end)
Rszlnc trlse a szvegbl, start indextl end index-1-ig.
StringBuffer replace(int start, int end, String str)
A start s end-1 kztti rszlnc cserje str-rel.
StringBuffer reverse() Megfordtja az objektum szvegt. String substring (int start, int end)
Visszaad egy start s end-1 index kztti rszlnc j String objektumot.
String substring (int start) Visszaad egy start indexel kezdd rszlnc j String objektumot.
5.3.5.4. Sztringekkel vgezhet mveletek
5.3.5.4.1. Szveg hossznak meghatrozsa, adott karakterek megjelentse:
int length() >> Szveg hossza
Plda: String str="Laci"; int hossz=str.length(); >> 4
char charAt(int index) >> Adott index karakter
Plda: String str="Laci"; char c=str.charAt(0); >> L
5.3.5.4.2. Manipulls a szveggel:
String toLowerCase() >> Kisbets talakts
Plda: String str="KICSI"; String kstr=str.toLowerCase(); >> kicsi
String toUpperCase() >> Nagybets talakts
48
Plda: String str="nagy"; String nstr=str.toUpperCase(); >> NAGY String replace(char oldChar,char newChar) >> Karakterek kicserlse
Plda: String str1="Remek eme Mekk Mester"; String str2=str1.replace(e, a); >> Ramak ama Makk Mastar
String substring(int beginIndex) >> Rszsztring kszts String substring(int beginIndex, int endIndex)
Plda: String str1="Plinka"; String str2=str1.substring(3); >> inka String str3=str1.substring(0,3); >> Pl
5.3.5.4.3. sszehasonlts (egyenlsgvizsglat):
boolean equals(Object anObject) >> Objektumok sszehasonltsa int compareTo(String str)
Plda: String str1="Laci"; String str2="Gizi"; str1.equals(str2); >> false str1.compareTo(str2) >> 5
Figyelem! Az = = opertor nem az egyenlsget, hanem az azonossgot vizsglja!
5.3.5.4.4. Keress:
int indexOf(int ch) >> Karakter keress int indexOf(int ch, int fromIndex) int indexOf(String str) >> Rszsztring keress int indexOf(String str, int fromIndex)
Plda: String str1="Laci"; char c = 'a'; String str2="ci";
49
str1.indexOf(a); >> 1 str1.indexOf(str2;0) >> 2
5.3.5.4.5. Konkatenci (sszefzs):
String concat(String str) >> Hozzfzs
Plda: String str1="La"; String str2="ci"; str1.concat(str2); >> Laci
5.3.5.4.6. Bvts:
StringBuffer append( value) >> Bvts a vgn
Plda: StringBuffer szoveg = new StringBuffer("rtk"); szoveg.append("12.3"); >> rtk12.3 StringBuffer insert(int offset, value) >> Bvts adott pozcitl. Plda: szoveg.insert(5, "="); >> rtk=12.3
5.3.5.4.7. Trls:
StringBuffer deleteCharAt(int index) >> Adott index karakter trlse. StringBuffer delete(int start, int end) >> Rszlnc trlse.
Plda: StringBuffer szoveg = new StringBuffer("Labdargs"); szoveg.delete(5,10); >> Labda szoveg.deleteCharAt(0) >> abda
5.3.6. ELGAZTAT UTASTSOK
A program ksztse sorn addnak olyan helyzetek, ahol a folyamatos utasts vgrehajts
menett meg kell trnnk, felttelektl fgg elgazsokat kell a programba beptennk. gy
tudjuk megoldani azt a feladatot, hogy ez a programrsz csak akkor kerljn vgrehajtsra, ha
arra szksg van.
50
5.3.6.1. Ktirny elgaztat (feltteles) utasts: if..else
Kt alakjban hasznlhatjuk: rvid alak, ha hinyzik az else g , egybknt hossz alakrl beszlnk.
Szintaktika:
if() : rvid alak [else ]: hossz alak, a teljes utasts
Mkdsi elv:
Elszr kirtkeldik a felttel.
Ha igaz, akkor vgrehajtdik a felttel utni tevkenysg s a program az if utastst kvet utastson folytatdik.
Ha a felttel nem igaz, akkor az else gban megadott tevkenysg hajtdik vgre, majd a program az if utastst kvet utastson folytatdik. Amennyiben nincs else g, akkor ezt egy res utastsnak vehetjk.
Plda:
5.3.6.2. Tbbirny elgaztat utasts
Ha olyan feladattal llunk szemben, hogy tbb tevkenysg kzl egyet kell kivlasztanunk,
akkor a tbbirny elgaztat utastst alkalmazzuk. A Javban ezt ktfle vezrlszerkezettel
tehetjk meg: switch..case s az else..if.
5.3.6.2.1. switch..case
Fleg akkor hasznljuk, ha egy kifejezs jl meghatrozott, klnbz rtkeire szeretnnk
bizonyos utastsokat vgrehajtani.
51
Szintaktika:
switch(){ case : [case : ] ... [default:] }
Mkdsi elv:
Elszr kirtkeldik a kifejezs.
A kifejezs rtke a felrs sorrendjben sszehasonltsra kerl a case gak rtkeivel. Ha van egyezs, akkor vgrehajtdik az adott gban megadott tevkenysg, majd
a program a kvetkez gakban megadott tevkenysgeket is vgrehajtja.
Ha nincs egyezs, akkor a default gban megadott tevkenysg hajtdik vgre.
Plda:
Output:
Ha rgtn ki szeretnnk lpni a switch utastsbl az adott tevkenysg vgrehajtsa utn, akkor kln utastst kell alkalmaznunk (break).
52
Plda:
Output:
5.3.6.2.2. else..if
Szintaktika:
if ()
else if () ...
else
A mkdsi elvet az albbi plda szemllteti:
53
A forrskd az elz pldban (Menu1) ismertetett vgeredmnyt szolgltatja. A kt kd
futtatsnak eredmnye egyenrtk egymssal. A programoztl fgg, hogy melyiket
hasznlja az adott feladat megoldsa sorn.
5.3.6.3. Elgaztat utastsok egymsba gyazsa
Az elgaztat utastsok tetszlegesen egymsba gyazhatk. A program ttekinthetsge
rdekben clszer a forrsprogram szerkezett jl strukturltan elkszteni. Figyeljnk a
cselleng else-re! Mit is jelent ez? Ha rvid if utastsokat runk, akkor az else utasts vajon melyik if-hez tartozik? A Java azt mondja, hogy a legutbbi if-hez, ha csak blokkok kpzsvel fell nem brljuk ezt. A problma msik megoldsa az, hogy mindig
hossz if utastsokat alkalmazunk.
Nzzk vgig pldkon keresztl a fent emltett eseteket!
(Azt vizsgljuk, hogy az adott szm bell van-e egy tartomnyon ([100;1000]), s ha ott van,
akkor pros vagy pratlan?)
Megtveszt kd: (Strukturlatlan, hova tartozik az else?)
A kd helyesen strukturlva:
Alaktsuk t gy, hogy az els if-hez tartozzon az else:
54
Blokk ksztsvel oldottuk meg ezt a feladatot.
Prbljuk meg hossz if-utastsokkal!
5.3.6.4. A billentyzetrl bevitt adatok vizsglata
A programok ksztse sorn gyakran kerlnk olyan feladat el, amikor a programnak a
tovbbhaladshoz szksge van a felhasznl beavatkozsra, adatokat vr a billentyzetrl.
pl. menrendszernl a felhasznl vlasztstl fggen fog a vezrls a megfelel
programrszre kerlni.
Hogyan olvassuk be az adatokat a billentyzetrl? Az adatok kezelsvel a 9. hten
fogunk foglalkozni rszletesen, most elgedjnk meg egy kis programrszlettel, aminek a
segtsgvel megoldhat a beolvass problmja.
A kdot msoljuk be a programunkba, a kvnt helyre!
Scanner sc=new Scanner(System.in); System.out.println("Krem a szmot!"); int a=sc.nextInt();
Ne feledkezznk meg a Scanner osztly importlsrl!
Kattintsunk bal gombbal a lmpcskra s vlasszuk az Add import for java.util.Scanner opcit:
55
Plda: (A program a felhasznl vlasztstl fgg darabszm csillagot jelent meg.)
5.3.7. CIKLUSSZERVEZ UTASTSOK
Ha egy bizonyos tevkenysget a programban egymsutn tbbszr vgre kell hajtani, akkor
ciklusokat alkalmazunk. A ciklusok vgrehajtst, vagy az abbl val kilpst felttelekhez
ktjk.
Egy ciklus ltalnos felptse:
fej
mag
vg
Az ismtlsre vonatkoz informcik vagy a fejben vagy a vgben tallhatk.
A magban helyezzk el azokat az utastsokat, amelyeket tbbszr vgre akarunk hajtani.
A ciklusok mkdse sorn kt szlssges esettel is tallkozhatunk:
56
res ciklus: A ciklusmag egyszer sem fut le.
Vgtelen ciklus: Az ismtlds soha nem ll le.
5.3.7.1. Elfeltteles ciklus: while Szintaktika:
while (felttel)
Mkdsi elv:
A program a ciklusba val belps eltt megvizsglja a felttelt (belpsi felttel), s ha ez
teljesl, akkor a ciklusmag vgrehajtsra kerl, egybknt nem. Ennl a ciklusfajtnl
kialakulhat res ciklus, abban az esetben, ha a belpsi felttel soha nem teljesl.
Plda: (rjunk ki a konzolra egyms mell 6 db csillagot!)
5.3.7.2. Elfeltteles ciklus: for
Szintaktika:
for (inicializls;felttel;nvekmny)
Mkdsi elv:
inicializls: Itt deklarljuk a ciklusvltozt, s adjuk meg annak kezdeti rtkt.
felttel: Belpsi felttel, minden ciklus elejn kirtkeldik, ha igaz, akkor a
ciklus vgrehajtsra kerl, egybknt a vezrls a for utni utastsra ugrik. nvekmny: Itt vltoztatjuk meg a ciklusvltoz rtkt.
Plda:
57
A for fejnek tagjai hagyhatk resen is, de a pontosvesszket ki kell tenni. pl. for(;;)...
5.3.7.3. Vgfeltteles ciklus: do..while Szintaktika:
do
while (felttel); Mkdsi elv:
A ciklus magja egyszer mindenkppen vgrehajtdik, majd a ciklus vgn, egy
felttelvizsglat kvetkezik, amely eldnti, hogy bent maradunk-e a ciklusban, vagy nem. Ha
a felttel igaz, akkor a ciklusmag jbl vgrehajtsra kerl. Ez a folyamat addig folytatdik,
amg a felttel hamiss nem vlik (bennmaradsi felttel).
res ciklus a vgfeltteles ciklusnl nem fordulhat el, hiszen a ciklus magja legalbb
egyszer lefut.
Plda:
Az elz hrom ciklus mindegyike ugyanazt a feladatot oldotta meg, kirajzolt 6 db csillagot a
kpernyre.
5.3.7.4. Ciklusok egymsba gyazsa A ciklusainkat egymsba is gyazhatjuk.
Nzznk meg egy egyszer pldt kt ciklus egymsba gyazsra!
Plda: (Jelentsk meg a konzolon kvetkez alakzatot: ********************
********************
********************)
58
Forrsprogram:
A program elemzse:
A csillagok egy 3 soros, 20 oszlopos tblzatot alkotnak. A kirajzolst gy tudjuk egyszeren
elkpzelni, mintha a tblzat celliba helyeznnk el a csillagokat.
A kls ciklusban megynk vgig a sorokon, a bels ciklusban pedig az oszlopokon.
Elszr az 1. sor elemeit jelentjk meg egyms utn, majd a 2. sor elemeit, s vgl a 3. sor
kvetkezik. Ha egy teljes sort megjelentettnk, akkor meg kell oldani a sorvlts
problmjt. Ezt egyszeren egy println("") utastssal is megtehetjk.
5.3.7.5. Alapvet algoritmusok
5.3.7.5.1. Megszmlls
Ezzel az algoritmussal egy sorozat, adott tulajdonsggal rendelkez elemeit szmoljuk meg.
Az algoritmus menete a kvetkez:
1. A szmllt nullra lltjuk.
2. Vgig lpkednk a sorozat elemein, s ha az aktulis elem tulajdonsga megegyezik az
adott tulajdonsggal, akkor a szmll rtkt eggyel megnveljk.
3. Megjelentjk a szmll rtkt, ez a szm adja az adott tulajdonsggal rendelkez
elemek szmt.
Plda: (Ma st a nap. sztringben megszmoljuk az 'a' karakterek szmt.)
59
5.3.7.5.2. sszegzs, tlagszmts Az olyan feladatokat, amelyekben a sorozat elemeit valamilyen mdon gyjtennk kell (pl.
gngylts), sszegzses feladatoknak nevezzk. Ebbe a feladatcsoportba sorolhat a
klnbsg-, illetve a szorzatkpzs is.
tlag kiszmtsakor egyszerre kt dolgot is vgznk: sszegznk, s kzben
szmllunk is. Vgl a kt rtk hnyadost vesszk.
Plda: (Addig olvassuk be a szmokat, amg 0-t nem tnk, majd rjuk ki a szmok sszegt
s tlagt!)
Figyelem: Az tlag szmtsakor vigyzni kell a 0-val val osztsra!
60
5.3.7.5.3. Minimum- s maximum kivlaszts Minimum kivlasztsa esetn a sorozat legkisebb, maximum kivlasztsa esetn a sorozat
legnagyobb elemt kell meghatroznunk.
Az algoritmus menete a kvetkez:
1. A sorozat els elemt elhelyezzk egy minimum (maximum) vltozba.
2. Sorban vgiglpkednk az elemeken s, ha az adott elem kisebb (nagyobb) a
minimum (maximum) vltozban lvnl, akkor a vltozban lv elemet kicserljk
vele.
3. Megjelentjk a vltozban tallhat elemet, ez az elem lesz a sorozat minimuma
(maximuma).
Plda: (A program bekr 5 db vals szmot, majd megjelenti a legkisebbet!)
5.3.8. TMBK
A tmb egy olyan vltoz, amely tbb azonos tpus adatot tartalmaz. A
tmb hossza a ltrehozskor dl el, s attl kezdve a tmb egy lland
mret adatszerkezet.
61
A tmbket egy fikos szekrnyhez lehetne hasonltani, amelyben az egyes fikokban egy-
egy adatot helyeznk el. A fikokra a sorszmukkal (a tmbben elfoglalt helye) hivatkozunk.
A sorszmozst nullval kezdjk! Ha valamelyik fik tartalmra szksgnk van, akkor
megadjuk, hogy hnyadik fikrl van sz, s kiolvassuk a tartalmt.
Plda: (Ha szksgnk van a 100-as szmra, akkor a 3-as index fikot kell kihzni!)
0 1 2 3 4 5 6 7 8 9 10 2 34 100 1 0 5 67 76 99
Lehetsgnk van arra is, hogy olyan tmbket hozzunk ltre, amelyek tmbket
tartalmaznak (tmbk tmbjei).
5.3.8.1. Tmbk deklarlsa, kezdrtkk belltsa
A tmb deklarlsa a tbbi vltozhoz hasonlan kt rszbl ll: meg kell adni a tmb
tpust s a tmb nevt.
Szintaktika:
[] ; pl. int[] szamok; A [ ] tmbkpz opertort a tmbAzonost utn is tehetjk.
[]; pl. int szamok[]; A deklarls sorn nem hoztuk mg ltre a tmbt, egyelre csak a referencinak
(memriacmnek) foglaltunk helyet. A tmbt a Javban kln ltre kell hozzuk a new opertorral!
Szintaktika:
new elemtpus[]; pl. new int [10];//Itt egy olyan integer tpus adatelemeket tartalmaz tmbt hoztunk ltre, amely 10 db elemet tartalmaz.
A deklarcit s a ltrehozst egy lpsben is elvgezhetjk.
Pldul:
int szamok[] = new int[10] ; A deklarls sorn (inicializl blokkal) a tmb elemeinek kezdeti rtkek is adhatk.
Szintaktika:
[] = {, , ...}; pl. Ksztsnk egy String tpus tmbt, amely a ht napjait tartalmazza!
62
String[] napok = {"Htf","Kedd","Szerda","Cstrtk","Pntek","Szombat", "Vasrnap"};
5.3.8.2. Tmbelemek elrse
A tmb egyes elemeire az indexkkel hivatkozhatunk.
Szintaktika:
[index]; pl. szamok[3] = 2; // A 4. fikba (3-as index) betettk a 2-es szmot.
5.3.8.3. Tmb mretnek meghatrozsa
Minden tmb objektumnak van egy length konstansa, amely megadja a tmb hosszt. (Egyszeren azt, hogy hny adat helyezhet el benne?)
tmbAzonost.length pl. (A napok tmbnl, amely a ht napjait tartalmazza.)
System.out.println(napok.length); >> 7
5.3.8.4. Objektumtmbk
A tmbkben trolhatunk referencia tpus elemeket is. A ltrehozsuk olyan, mint a primitv
tpus elemeket tartalmaz tmbk.
Nzznk meg egy egyszer pldt, ahol a tmbben hrom String objektumot trolunk:
A tmb elemeinek a bejrshoz hasznlhatunk egy specilis programozi eszkzt, az
n. for-each ciklust.
Szintaktika:
for( : )
63
Plda:
5.3.8.5. Tmbk tmbjei
A tmbk tartalmazhatnak tmbket, tetszleges mlysgben egymsba gyazva.
Szintaktika:
Deklarls: [][] ... [] ; Ltrehozs: new [mret0][mret1]...[mretn-1]; Tmb elemeinek elrse: index0][index1]...[indexn-1]
Plda: (Egy tmbben elhelyeznk msik 3 tmbt.)
Ezt gy kpzelhetjk el a legegyszerbben, mintha egy 3 soros 2 oszlopos tblzatban
helyeznnk el az adatokat:
Egy Megrett a meggy. Kett Csipkebokor vessz. Hrom Te leszel a prom.
rjuk ki a konzolra a tmbbl a Te leszel a prom szveget!
64
A megadott szveg a tblzat 3. sornak 2. oszlopban tallhat, az indexelse pedig a
kvetkez lesz [2] [1].
Figyelem: Ne felejtsk el, hogy az indexels 0-val kezddik!
65
5.3.9. INPUT-OUTPUT MVELETEK
5.3.9.1. Egyszer konzol I/O mveletek
Minden programozsi nyelv alapfeladatai kz tartozik a klvilggal val kommunikci,
amely a legtbb esetben az adatok olvasst jelenti egy bemeneti eszkzrl (pl. billentyzet),
ill. az adatok rst egy kimeneti eszkzre (pl. kperny, fjl). A Java nyelv az I/O
mveleteket adatfolyamokon (n. streameken) keresztl, egysgesen valstja meg. Egy
dologra kell csak figyelni, hogy bemeneti vagy kimeneti csatornt kezelnk-e. A csatornk
kezelse Java osztlyokon keresztl valsul meg, azonban ezek nem rszei a Java alap
eszkzkszletnek, ezrt importlni kell ket a java.io csomagbl [11], [12], [13].
A konzol kezelsre a Java hrom adatfolyamot biztost. Ezeket az adatfolyamokat
nem kell megnyitni vagy bezrni, e mveletek automatikusan trtnnek. A standard
adatfolyamok a kvetkezk:
standard bemenet: System.in standard kimenet: System.out standard hiba: System.err
A konzol I/O mveletek hasznlata esetn a java.util csomagbl importlnunk kell a megfelel osztlyokat.
Az albbi kis egyszer program a standard be- s kimeneti konzol hasznlatt mutatja
be. A program egy egsz szmot vr a billentyzetrl, amit utna megjelent a kpernyn:
Az sc nev objektum a Scanner osztly pldnya lesz, amely osztly a beolvasshoz a System.in (billentyzet input) paramtert hasznlja. Az egsz tpus a adattag az sc
66
pldny nextInt() metdusa ltal megkapja a bert szmot, a standard System.out.println() metdus pedig megjelenti a kpernyn.
Tbb szm bevitele esetn a szmok kz alapesetben szkzket kell beiktatni, amely
jel a Java-ban fellbrlhat. Az albbi program az elz tovbbfejlesztse. Tbb (akrhny!)
egsz szmot vr vesszvel elvlasztva a billentyzetrl, majd kirja a darabszmukat s
az sszegket:
Ebben az esetben a teljes input sort beolvassuk a sor nev stringbe, majd a osztly
segtsgvel a megadott hatroljel mentn adategysgekre (tokenekre) feldarabolva
feldolgozzuk azt. Nzznk egy programfutsi eredmnyt is:
5.3.9.2. Karakteres fjlok kezelse
A Java a fjlokat is streamknt kezeli, ezrt most is importlni kell a java.io csomag nhny osztlyt. Az I/O tpusok karakteresek (a Java az UTF-8-as Unicode
karakterkdolst hasznlja) s binrisak (8 bites bjtformtum) lehetnek. A karakteres
llomnyok kezelst hrom f rszre osztjuk:
megnyits
mveletek
lezrs
67
A megnyits mvelete sorn valamely stream osztly objektuma jn ltre
(pldnyostssal), amelyhez hozzrendeljk a megnyitand llomnyt. A fjlkezel
mveleteket try-catch-finally kivtelkezel blokkszerkezetbe kell foglalni, mert sok problma addhat hasznlatuk sorn (pl. nem ltez llomny, betelt httrtr, stb.). A
kvetkez pldaprogramok mindegyikben lesz ilyen szerkezet, de a jobb ttekinthetsg
miatt e forrskdok csak a minimlisan ktelez kivtelkezelst tartalmazzk. A
kivtelkezelsrl bvebben a 14. heti tananyagban lesz sz.
5.3.9.2.1. Karakteres fjlok olvassa
Karakteres llomnyok olvassra a FileReader osztly read() metdusa ll rendelkezsre. A metdus hasznlathoz implementlni kell a FileNotFoundException (a fjl nem tallhat) kivtelkezel osztlyt, s ennek st, az IOException (ltalnos I/O hiba) osztlyt is.
A kvetkez plda egy szveges llomnybl egyenknt beolvassa a karaktereket,
majd megjelenti ket a kpernyn. Ha nem jellnk ki pontos elrsi utat, akkor a fjlnak a
Java projekt fknyvtrban kell lennie. A fjl vgt a -1-es rtkkel rzkeli a read() metdus.
A forrsllomny (szveg.txt) az UTF-8-as Unicode kdols szveg mentst is lehetv tev Jegyzettmb programmal kszlt. A 2. s 3. sorban hasznlt kis- s nagybets
tesztszvegben (rvztr tkrfrgp) minden magyar kezetes bet szerepel, gy
knnyen ellenrizhet a fjlkezel metdusok bethelyes mkdse. A forrsllomny
Jegyzettmb ltal mutatott tartalma:
68
A kpernyn megjelen szveg:
5.3.9.2.2. Karakteres fjlok rsa
Karakteres llomnyok rsra a FileWriter osztly write() metdusa ll rendelkezsre. Ehhez a metdushoz az IOException (ltalnos I/O hiba) osztlyt ktelez implementlni.
Az albbi program egy string tpus vltozban trolt ktsoros szveget
karakterenknt feldolgozva r ki egy szveges llomnyba. Ha nem jellnk ki pontos
elrsi utat, akkor a fjl a Java projekt fknyvtrban jn ltre. Mivel knnyen lekrdezhet
a string hossza, a karakterek feldolgozsa nem okoz gondot.
Nzzk a ltrejtt llomny (ments.txt) tartalmt! Szerencsre a fjlba rs karakterkdolsval semmi gond, s a Jegyzettmb is helyesen jelenti meg:
69
5.3.9.3. Binris fjlok feldolgozsa
A binris adatokat tartalmaz llomnyok kezelst a FileInputStream s a FileOutputStream osztlyok biztostjk. Mindkt osztlyt importlni kell a java.io csomagbl. Metdusaik a szoksos read(), write() s close(). Hasznlatuk hasonl a karakteres llomnyoknl ltottakhoz.
Hozzunk ltre egy binary.dat nev binris llomnyt! Bjtjainak rtke decimlisan 65-tl 90-ig terjedjen!
Bvtsk elz programunk Main metdust! A keletkezett llomnyt olvassuk be, s
rjuk ki a bjtjai ltal reprezentlt karaktereket a kpernyre szkzzel elvlasztva! Ne
feledjk, hogy az importl utastsokat bvteni kell a java.io.FileInputStream osztllyal!
70
A kpernyn a vrt eredmny lthat:
5.3.9.4. Szveges llomnyok kezelse
Szveges llomnyok feldolgozsa gyakran nem karakterenknt, hanem nagyobb rszenknt,
pl. soronknt trtnik. Ehhez a Java n. pufferelt fjlkezelsi tmogatst nyjt. Kln
osztlyok tmogatjk a byte- s string-szint mveleteket:
Byte-szint osztlyok:
BufferedInputStream (olvass) BufferedOutputStream (rs) PrintStream (rs)
String-szint osztlyok:
BufferedReader (olvass) PrintWriter (rs)
Szmunkra most a stringek kezelse fontosabb, ezrt nzznk r egy egyszer pldt!
rjunk ki egy sima szveges llomnyba (text.txt) nhny UTF-8-as kdols sort, majd az llomnyt visszaolvasva jelentsk meg azokat a kpernyn is! rs a PrintWriter osztly println() metdusval:
71
Olvass a BufferedReader osztly readLine() metdusval:
Figyeljk meg, hogy a BufferedReader osztly nem tud egy fjlt kzvetlenl megnyitni, hanem csak a FileReader osztly egy pldnyt. Az eredmny meggyz:
5.3.9.5. llomnyok kzvetlen elrse
Az elz alfejezetek adatfolyam-kezel mveletei mind soros hozzfrsek voltak, teht az
llomnyok rsa ill. olvassa az elejktl a vgkig sorban trtnt. Azonban lehetsg van
arra is, hogy egy fjl tartalmhoz kzvetlenl is hozzfrhessnk. Ezt a java.io csomag RandomAccessFile osztlya biztostja. Ez az osztly egyszerre alkalmas olvassra s rsra is, csupn a pldnyosts sorn egy paramterrel jelezni kell, hogy milyen mveletet
kvnunk alkalmazni az objektumra:
csak olvass: RandomAccessFile("input.txt", "r") olvass+rs: RandomAccessFile("input.txt", "rw")
Az gy megnyitott llomnyokon hasznlhatk a szoksos read() s write() metdusok, valamint a kzvetlen elrst tmogat metdusok:
void seek(long pos): megadott pozcira ugrs a fjl elejtl int skipBytes(int n): aktulis pozci mozgatsa n bjttal long getFilePointer(): aktulis pozci lekrdezse
72
Fontos tudni, hogy a read() s write() metdusok meghvsa a fjlmutat (aktulis pozci a fjlon bell file pointer) rtket automatikusan megnveli 1 egysggel,
teht nem szksges manulisan lptetni. Ezek a metdusok s a close() (fjl bezrsa) is megkvetelik az IOException kivtelkezel osztly hasznlatt.
Hozzunk ltre egy llomnyt (random.txt), amely az angol ABC nagybetit tartalmazza!
Majd minden tdik karaktert a fjlban elfoglalt pozcijukkal egytt jelentsk
meg a kpernyn!
A raf.length() metdussal lehet lekrdezni a fjl mrett. Figyeljk meg, hogy a kirs sorn a getFilePointer() pozcilekrdez metdus megelzi az olvas metdust, gy a helyes rtket adja, de mgis meg kell nvelni az rtkt 1-gyel, mivel a
pozcik szmozsa 0-tl kezddik. Az eredmny:
73
A kimenet utols sort az albbi kiegszts lltja el. A fjl minden tdik karaktert
cserljk le annak kisbets vltozatra, majd jelentsk meg a fjl sszes karaktert!
A betcsert vgrehajt ciklus minden tdik betre pozcionl, majd az ott tallhat
bet kdjhoz 32-t adva ri el, hogy kisbet lesz belle. A kiolvass eltolja az aktulis
pozcit, ezrt szksges visszalpni egyet. A betk kpernyn val megjelentst megelzi a
fjl kezdpozcijba ugrs, majd egy sima (fjlvgjel-figyelses) feldolgoz ciklus kirja a
karaktereket.
74
5.3.10. RETTSGI FELADATOK MEGOLDSA
Az albbiakban kt emelt szint rettsgi feladatot fogunk megoldani. Az eddig tanultak
elegend nyelvi eszkzt biztostanak minden rszfeladat megoldshoz [6]. Nagyban
megknnyti a munknkat az a fontos krlmny, hogy sem az inputllomnyok, sem a
felhasznl ltal bevitt adatok helyessgt ill. rvnyessgt nem kell ellenrizni. gy
lnyegesen cskken a kdolsi id, de meg kell jegyezni, hogy a valsgban az ilyen
programok hasznlhatsga nagyban korltozott.
A feladatok megoldsa fjlmveleteket is ignyel, amelyek metdusai megkvetelik a
kivtelkezelst, ezrt a programok main metdusnak fejben a throws IOException zradkkal a kivteleket tovbbdobjuk a Java futtat rendszere fel [7].
5.3.10.1. Foci
Els rettsgi feladatunk lnyege a kvetkez: egy labdarg-bajnoksg mrkzseinek
adatait tartalmaz fjlt kell feldolgoznunk, s az adatok alapjn a megadott krdsekre
vlaszolnunk.
Mint majd ltjuk, a program sok metdusa ignyli a java.io s a java.util osztlyok alosztlyait, amelyek alaprtelmezsben nincsenek implementlva, ezrt a program
elejn importlnunk kell ket:
1. feladat:
Olvassuk be a meccs.txt fjlban tallhat adatokat! Trolsukra kt tmbt fogunk hasznlni, mivel az adatok egy rsze egsz szmokat, msik rsze szveget tartalmaz.
Alkalmazzuk a tmb a tmbben mdszert, mivel adategysgenknt (az inputfjl egy-egy
sora) 5 szm- s 2 szvegadat trolsrl kell gondoskodnunk. A tmbket statikus
osztlyvltozkknt definiljuk, mivel a ksbbiekben egy sajt metdussal MaxMin() fogunk hivatkozni rjuk.
75
A megolds a mrkzsek szmnak beolvassval kezddik, majd soronknt
feldolgozzuk az inputfjlt. Ez a StringTokenizer osztly metdusainak segtsgvel (a sort a szkzk mentn feldarabolva) knnyen megvalsthat. Figyeljk meg, hogy a
tmbk indexelse 0-tl kezddik!
A nextToken() metdus stringet ad vissza, ezrt a szmoknl a konvertlshoz ignybe kell venni az Integer osztly parseInt() metdust.
2. feladat:
Egy fordul sorszmt bekrve rjuk ki a kpernyre az adott fordul mrkzseinek adatait a
megadott formban.
76
A billentyzet inputhoz jl hasznlhat a Scanner osztly. A kirs formtumnak belltsa aprlkos munkt ignyel, de szerencsre a System.out.println() metdus tmogatja a szm- ill. szvegvltozk vegyes hasznlatt.
3. feladat:
Azokat a csapatokat (s a fordul sorszmt) kell kiratni a kpernyre, amelyek
megfordtottk a mrkzs llst, teht a flidben mg vesztsre llva a mrkzst a vgn
megnyertk.
Az sszetett felttelvizsglat oka az, hogy mind a hazai-, mind a vendgcsapat
szempontjbl meg kell vizsglnunk a mrkzsek flidei- s vgeredmnyt.
4. feladat:
Egy csapat nevt kell bekrni a felhasznltl, majd (ez esetben egy csn vltozban) eltrolva felhasznlni a kvetkez feladatok megoldshoz.
5. feladat:
Az adott csapat ltal ltt s kapott glokat kell sszestve megjelenteni, teht a lekrdezs
szrfelttele a csapat neve. Ne feledjk, hogy egy csapat hazaiknt s vendgknt is
szerepelhet egy mrkzsen, s csak a mrkzsek vgeredmnyt kell sszesteni!
77
Figyeljk meg a string matches() metdust! Nagyon jl hasznlhat
sszehasonltsokhoz.
6. feladat:
Feladatunk az adott csapatrl meghatrozni, hogy otthon melyik fordulban kapott ki elszr,
s ki volt a legyzje. Azt is jelezni kell, ha veretlen maradt.
A mrkzsek adatait tartalmaz tmbk feldolgozst vgz while ciklus csak
addig fut, amg nem tall egy otthoni veresget az adott csapatnl. Ezt a kikapott nev logikai
vltoz hasznlatval rjk el.
7. feladat:
Statisztikt kell ksztennk a bajnoksgban elfordul vgeredmnyekrl, amelyet egy
fjlban kell eltrolnunk. Fontos felttel, hogy a fordtott eredmnyeket egyezknek kell
tekinteni s a nagyobb szmot mindig elre kell rni.
78
A feladat megoldshoz rdemes rni egy sajt metdust, amely a vgeredmnyek
glszmbl egy olyan szmot llt el, amelynek tzes helyirtkt a nagyobb-, egyes
helyirtkt pedig a kisebb glszmok adjk. gy a vgeredmnyeket egysgestve sokkal
knnyebb a feldolgozsuk.
A vgeredmnyek szmnak trolsra a T1 tmb egy res oszlopa szolgl. A tmb az sszes vgeredmny-fajtt tartalmazza, teht kln adatstruktrt nem szksges ltrehozni
hozzjuk. Az algoritmus lnyege az, hogy az egyes vgeredmnyeket fggetlenl attl,
hogy