You are on page 1of 3

Gregorics Tibor Tancsok egyszer programok ksztshez 1

Egyszer programon azt a konzolos (a felhasznlval egy konzol-ablakon keresztl


kommunikl) alkalmazst rtjk, amely utastsai egyetlen forrsllomnyban, egy vezrlsi
lncra vannak felfzve, kdja nincsen fggvnyekre, eljrsokra tagolva. Az albb ismertetett
implementcis tancsok termszetesen az ennl sszetettebb programokra is rvnyesek.

Program szerkesztse, fordtsa, tesztelse


Alkalmazsunkat minden esetben egy gynevezett projektbe gyazzuk. Eleinte, amg az
alkalmazsunk egyetlen forrs llomnybl ll, taln krlmnyesnek tnik ez a lps, de ha
megszokjuk, akkor ksbb, a tbb llomnyra trdelt alkalmazsok ksztse sem lesz nehz.

A bizonytottan helyes absztrakt program kdolsa tbbnyire nem eredmnyez mkd


programot. A kdols sorn ugyanis elkvethetnk alaki (szintaktikai) hibkat (ezt ellenrzi
fordtskor a fordt program) s tartalmi (szemantikai) hibkat. Ez utbbiak egy rszt a
kdolsi megllapodsok betartsval tudjuk kivdeni, ms rszt tesztelssel felfedezni, a
hiba okt pedig nyomkvetssel megtallni. A programok kdolsnl trekedjnk arra, hogy
a bert kdot olyan hamar ellenrizzk fordts s futtats segtsgvel, amilyen hamar csak
lehet. Ezrt ne a teljes kd bersa utn fordtsuk le elszr a programot, mert a hibazenetek
tnyleges okt ekkor mr sokkal nehezebb megtallni. Eleinte ne szgyelljk, ha
utastsonknt fordtunk, de ksbb se rjunk le egy program-blokknl tbbet fordts nlkl.
Ezzel a szerkeszts sorn elkvetett szintaktikai hibkat viszonylag knnyen ki tudjuk szrni,
hiszen egyszerre csak kis mennyisg kd javtsval kell szmolnunk.

A fordtsnl keletkezett hibazenetek rtelmezse nem knny. A fordtprogram annl a


sornl jelez hibt, ahol a hibt szlelte, de a hiba gyakran tbb sorral elbb tallhat vagy
ppen nem tallhat (pldul egy vltoz deklarlsnak hinya). rdemes a hibazeneteket
sorban rtelmezni s kijavtani, mert bizonyos hibk egy korbbi hibnak a kvetkezmnyei.
Fontos tudni, hogy a hibazenet nem felttlenl adja meg a hiba javtsnak mdjt s helyt.
Ezrt nem szabad a hibazenet ltal sugallt javtst azonnal vgrehajtani, hanem elszr r
kell jnnnk a hiba valdi okra, majd meg kell keresnnk, hol s mi mdon korriglhatjuk
azt. Ne csak a fordt hibazeneteit (error), hanem a figyelmeztetseit (warning) is olvassuk
el. A figyelmeztetsek rmutathatnak ms, nehezen rtelmezhet hibazenetek okaira, vagy
ksbb fellp rejtett hibkra.

rdemes a kdot gy elkszteni, hogy annak bizonyos rszei minl hamarabb kiprblhatk,
azaz futtathatk legyenek. gy a programot mr akkor ki tudjuk prblni, amikor a teljes
feladatot mg nem oldja meg.

Ne sajnljuk a tesztelsre sznt idt. Gondoljuk t milyen tesztesetekre (jellegzetes bemen


adatokra) rdemes kiprblni a programunkat. A fekete doboz teszteseteket a feladat
szempontjbl lnyeges vagy extrm bemen adatok adjk. A fehr doboz teszteseteket a
programkd ismeretben lltjuk el. Itt olyan adatok megadsa a cl, amelyekkel a program
minden egyes utastsa legalbb egyszer vgrehajtdik, tovbb az elgazsi s gyjt
pontjain mindenfle irnybl keresztl megy a vezrls. A tesztelst (akrcsak a fordtst,
futtatst) menet kzben, mr egy-egy rszprogramra rdemes vgrehajtani. Ha a programunk
egy tesztadatra rosszul mkdik, akkor a hiba kijavtsa utn jra az sszes tesztadatra meg
kell ismtelni a tesztelst, nemcsak a rossz mkdst elidzre.
A nyomkvets egy tartalmi hiba bekvetkezsnek pontos helyt segt kiderteni, noha ez
nem felttlenl az a hely, ahol programot javtani kell. A nyomkvets a program
lpsenknti vgrehajtsa, melynek sorn megvizsglhatjuk vltozink pillanatnyi rtkt.
Gregorics Tibor Tancsok egyszer programok ksztshez 2

Egyszer programok implementlsa


Egy program kdolsa eltt ismernnk kell az ltala megoldand feladatot, annak adatait, az
adatok tpust, vltozik nevt, azt, hogy melyek a bemen illetve eredmnyt hordoz adatok,
s ezek milyen feltteleknek tesznek eleget, tovbb a megold program absztrakt vzt, azaz
rendelkeznnk kell a program tervvel.
A terv ltalban nem tr ki arra, hogy a bemen vltozk hogyan veszik fel a kezdrtkeiket,
illetve az eredmny vltozk rtkeit hogyan tudjuk a felhasznl fel lthatv tenni. Ezrt
egy mkd program elksztse nem pusztn a tervezs sorn elllt absztrakt program
kdolsbl ll, hiszen szmottev kdot kell ksztennk egyrszt az adatok beolvassnak
megvalstshoz, msrszt az eredmny megjelentshez. Ezrt nevezzk ezt a folyamatot a
terv kdolsa helyett a terv implementcijnak (megvalstsnak).

Az implementls menete
1. A program kerete
Ezen azokat a ktelezen megadand kdsorokat rtjk, amelyek kz kell majd a
feladat megoldsnak kdjt rni. Lnyeges rsze ennek a keretnek az a pont, ahonnan a
program vezrlse futtatskor elindul. Ez azt jelenti, hogy a szmtgp e pont utn
elhelyezett utastsokat kezdi el egyms utn vgrehajtani.
2. Bemen adatok beolvassa s ellenrzse
A beolvassi szakaszban gondoskodnunk kell arrl, hogy a bemen vltozk megfelel
kezdrtket kapjanak. A feladat tervbl kiderl, hogy programunknak melyek a
bemen vltozi, s azok kezd rtkeire milyen felttelnek kell teljeslnie. A bemen
adatok kezdrtkeihez tbbnyire a szabvnyos bemenetrl vagy egy szveges
llomnybl nyerjk. A beolvasott adatokra meg kell vizsglni, teljestik-e a szksges
elfeltteleket. Ha nem, akkor hiba-jelzst kell adni, s vagy lelltani a programot,
vagy jra meg kell ksrelni a beolvasst. (Ezt a kdrszt bizonyos esetekben
sszevonhatjuk a programnak a szmtst vgz rszvel. Ilyenkor az adatokat a
szmts menethez igazodva, a szmtssal egy idben olvassuk be.)
3. Az absztrakt program kdolsa
A program msodik rsze az absztrakt programnak megfelel kd. Amennyiben ez
strukturlt, akkor annak szerkezete alapjn kvlrl befel halad kzi fordtssal
lltjuk el a kdot. Mindig az adott szerkezeti elemnek (szekvencia, elgazs, ciklus)
megfelel utastst kdoljuk. Az elemi utastsokat kzvetlenl kdoljuk. A
programkdban tabullssal is jelezzk a program szerkezett.
4. Eredmny megjelentse
Az eredmny vltozk rtknek megjelentse (a szabvnyos kimeneten vagy egy
szveges llomnyban) alkotja a programkdunk harmadik, egyben befejez rszt.
Nha ezt a kdrszt sszevonhatjuk az elz, szmtst vgz rsszel, s az eredmnyt a
szmtssal prhuzamosan rjuk ki.
5. Az alkalmazott vltozk deklarlsa
A programkdban hasznlt vltozk tpust meg kell adni, azaz a vltozkat deklarlni
kell. Az llapottr vltozit a kd elejn deklarljuk, a segdvltozkat elg abban a
blokkban, ahol hasznljuk ket, termszetesen mg az els hivatkozs eltt. (Blokknak
tekintjk a teljes kdot, de az egyes programszerkezetek ltal befoglalt kdrszeket is.
Gregorics Tibor Tancsok egyszer programok ksztshez 3

Kdolsi megllapodsok

1. A kdot gy kell elkszteni, hogy annak trdelse jl tkrzze a program szerkezett. Az


utastsokat tbbnyire kln sorba rjuk.
2. Szimultn rtkadsokat egyazon sorba rt egyszer rtkadsokkal helyettestjk.
3. A logikailag sszetartoz, pldul ugyanazon vezrlsi szerkezetbe tartoz utasts-
csoportokat (elgazs gai, ciklusmagja) kln utasts-blokkba helyezzk. Ez csak akkor
mellzhet, ha az g vagy a mag egyetlen utastsbl ll. Ilyenkor a teljes vezrlsi
szerkezet egyetlen sorban lljon. Javasolt megolds: az elgazs gait s a ciklusmagot
akkor is tegyk utastsblokkba, ha az csak egy utastsbl ll, gy ha jabb utastsokat
fznk hozz, nem feledkezhetnk meg a blokk kijellsrl.
4. A vezrlsi szerkezeteket egymstl jl megklnbztetve kell lerni.
5. A tbbg elgazsokat nem tbb kt-g elgazs (ahol az else g res)
szekvencijval, hanem egymsba gyazott kt-g elgazsokkal kdoljuk. A sok-g
elgazs (swtich, case) csak specilis esetben hasznlhat.
6. Ciklusok kdolsra az ell-tesztels ciklus-utastst hasznlunk. Az ltalnos ell-
tesztels ciklus (while) mellett gyakran hasznljuk az gynevezett szmllsos (for)
ciklust is, ami specilis ell-tesztels ciklusnak szmt. A htul tesztels ciklus-utastst
kizrlag az ellenrztt adatbevitelhez vagy a program ismtelt vgrehajtsnak
biztostshoz hasznljuk.
7. Az adatok beolvassa ktflekppen trtnhet. lesen elklnthetjk azt a szmtsokat
vgz rsztl, vagy a szmtsok kzben vgznk folyamatos beolvasst. Ez utbbi akkor
indokolt, ha tbb azonos tpus rtk feldolgozsa a feladat, amelyeket nem akarunk egy
tmbben trolni.
8. Egy adat ellenrzst kzvetlenl a beolvass utn kell elvgezni. Ha az adat rtke
helytelen, akkor hiba-zenetet generlunk. Ezt kveten ktfle lehetsgnk van: vagy
azonnal meglltjuk a program futst, vagy addig olvassuk az ellenrizend adatot jra
s jra, amg az helyes nem lesz.
9. A legtbb fejleszt krnyezet automatikusan gondoskodik arrl, hogy a program
befejezdse utn csak egy kln <enter> letsre sznjn meg a konzol-ablak. Ha
azonban nem egy ilyen fejleszt krnyezetben indtjuk a programunkat, akkor annak
befejezdsekor a program konzol-ablaka azonnal megsznik, gy nincs lehetsgnk
arra, hogy elolvassuk a program futsi eredmnyt. Ennek megakadlyozsra a program
sszes megllsi pontjra egy vrakoz utasts kell elhelyezni. Az elegns opercis
rendszertl fggetlen vrakoz utasts (pl. <enter> letsig vrakozik) nem mindig van.
Univerzlis megolds viszont br nem annyira elegns egy karakter beolvassra val
vrakozs.
10. A tmb azonos tpus rtkek sorozatnak trolsra szolgl. Hasznlata eltt meg kell
tudnunk mondani, legfeljebb hny eleme lesz, azaz mekkora memria helyet foglaljunk le
szmra. Knyelmes hasznlatot biztost a dinamikus helyfoglals tmb, amelynek
mrett futsi idben, de mg a hasznlata eltt elg megadni. Tallkozhatunk dinamikus
(dinamikusan nyjtzkod) tmbbel is, de ennek hasznlatnl krltekinten kell
eljrni, mrlegelve a hasznlatbl add futsi id nvekedst.
11. Szveges llomnyok kezelse lehetsget ad arra, hogy a program bemen adatait ne
kzvetlenl a billentyzetrl olvassa, kimen adatait ne a konzol ablakba rja. A berand
rtkeket elre elhelyezhetjk egy olvassra sznt szveges llomnyba, eredmnyeket
pedig egy msik szveges llomnyba rhatjuk. Ilyenkor az elbbi szekvencilis
inputfjlknt, az utbbi szekvencilis outputfjlknt viselkedik.

You might also like