Você está na página 1de 97

Programozsi alapismeretek

Tth Zsolt

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Programozsi alapismeretek
Tth Zsolt
KSZLT A TMOP-4.1.2.A/1-11/1-2011-0096 TMJ, FELSFOK SZAKKPZSEK FEJLESZTSE
AZ NYME TTK-N PROJEKT KERETBEN
Szerzi jog 2012 Nyugat-magyarorszgi egyetem
Ez a M a Creative Commons Nevezd meg! - Ne add el! - gy add tovbb! 3.0 Unported Licenc feltteleinek megfelelen
szabadon felhasznlhat [http://creativecommons.org/licenses/by-nc-sa/3.0/deed.hu].

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tartalom
1. Bevezets .................................................................................................................. 1
2. A Small Basic s a BASIC ........................................................................................... 3
3. Ismerkeds a Small Basic-kel s a programozssal ............................................................ 4
A fejlesztkrnyezet letltse ................................................................................... 4
A fejlesztkrnyezet felptse s els programunk ...................................................... 4
Programszerkezet ................................................................................................... 6
Msodik programunk .............................................................................................. 6
4. A vltozk hasznlata .................................................................................................. 8
Nvbekr program ................................................................................................ 8
A vltozkra vonatkoz szablyok ............................................................................ 9
Szmtrol program ........................................................................................... 10
5. Feltteles elgazs ..................................................................................................... 11
Algoritmus-tervezs .............................................................................................. 11
Szorzprogram feltteles elgazssal ........................................................................ 12
6. Ugrutasts ............................................................................................................. 14
Hatvnyprogram .................................................................................................. 15
7. Ciklusok .................................................................................................................. 16
Szmlls ciklus .................................................................................................. 16
Elltesztel ciklus ................................................................................................ 17
8. A grafikus ablak hasznlata ......................................................................................... 19
Grafikus elemek megjelentse ................................................................................ 20
Sznek, vonalszlessg, ngyzetrajzols .................................................................... 21
Kitlts .............................................................................................................. 22
Nhny grafikai alkalmazs .................................................................................... 23
Szvegmegjelents .............................................................................................. 25
9. Tekncgrafika .......................................................................................................... 27
A kezdetek .......................................................................................................... 27
A teknc hasznlata .............................................................................................. 27
sszetettebb brk rajzolsa teknccel ..................................................................... 29
10. Szubrutinok ............................................................................................................ 32
Faktorilis kiszmtsa szubrutinnal ......................................................................... 32
11. Tmbk ................................................................................................................. 33
Fordtott sorrend tmbbel ....................................................................................... 33
Indexels szveggel .............................................................................................. 33
Tbbdimenzis tmbk ......................................................................................... 34
Tmbre pl grafikus alkalmazs ........................................................................... 36
12. Esemnyek s vezrlk ............................................................................................. 38
Tbb esemny ..................................................................................................... 39
13. Flickr .................................................................................................................... 41
14. Jtkprogramok Small Basic programozsi nyelven ....................................................... 42
tgets program .............................................................................................. 42
15. Kiegsztsek a Small Basichez .................................................................................. 44
LitDev kiegszts ................................................................................................ 44
Statisztikai alkalmazs LitDevvel ............................................................................ 44
Teaching kiegszts ............................................................................................. 45
Data kiegszts ................................................................................................... 45
Program importlsa ............................................................................................. 46
16. Adatbzis-kezels a Small Basicben ............................................................................ 47
Adatok szvegfjlban ............................................................................................ 47
Adatok Excel-tblban .......................................................................................... 47
17. Small Basic-pldk .................................................................................................. 50
Helyesrs ........................................................................................................... 50
Jslat .............................................................................................................. 51
Morzebc ......................................................................................................... 52
K-papr-oll jtk egysoros programmal .................................................................. 53

iii

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Programozsi alapismeretek

A Zld hullm alkalmazs ...................................................................................


Koch-grbk .......................................................................................................
Op-art rzsa ........................................................................................................
Landols .............................................................................................................
Retrolghaj .....................................................................................................
18. Nhny ltalnos programozsi feladat ........................................................................
Keress ..............................................................................................................
Minimlis s maximlis elem kivlasztsa .........................................................
Lineris s binris keress ..............................................................................
Rendezs ....................................................................................................
Euler-problmk ..................................................................................................
1. problma .................................................................................................
2. problma .................................................................................................
3. problma .................................................................................................
4. problma .................................................................................................
5. problma .................................................................................................
6. problma .................................................................................................
7. problma .................................................................................................
Mtrixalgebra ......................................................................................................
Statisztikai szmtsok ...........................................................................................
Animcis alapproblmk ......................................................................................
Pattog labda ...............................................................................................
Felfggesztett doboz .....................................................................................
Tbb alakzat mozgsa-tkzse ......................................................................
Mozgs s tkzs sk felleten .......................................................................
Mozg ballonra felfggesztett mozg trgy .......................................................
A hatr a csillagos g .................................................................................
19. Zrsz ...................................................................................................................
Irodalom .....................................................................................................................

iv

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

54
55
58
59
61
65
65
65
65
68
73
73
74
74
75
76
76
77
78
81
82
82
83
84
85
86
88
90
91

1. fejezet - Bevezets
Tapasztalataink szerint a programozsi ismeretek oktatsa az informatikai szakkzpiskolai s
mrnki kpzseket leszmtva meglehetsen mostohagyereknek szmt mind a kz-, mind a
felsoktatsban. Az oktatsban rszvevk tbbsge a programozst felesleges, nehz, specilis
terleteken alkalmazhat trgynak rzi.
A programozstl val idegenkeds lnyegben mind az oktatk, mint a dikok rszrl rthet. A
dikok tbbsge taln a tanulmnyok befejezse utn sohasem fog lesben, ltalnos programozsi
nyelveken programokat rni, a ksbbi munkhoz kapcsold alkalmazsok szerepe pedig rendkvl
megntt, ezrt a kevs informatikai rt a kzkelet felfogs szerint rdemesebb inkbb ezekre sznni.
A programozsi alapok elsajttsa azonban meggyzdsnk szerint mltatlanul mellztt diszciplna,
s ltalban vve minden kpzsi szinten s szakterleten helye lehet az oktatsban. Mirt tartjuk
fontosnak, hogy a nem programoznak kszl dikok programozst tanuljanak?
1. A legtbb felhasznli program szemlyes s szervezeti ignyekhez szabsa vagy akr professzionlis
hasznlata alapvet algoritmizlsi alapismeretek nlkl gyakran elkpzelhetetlen. Programozsi
alapismeretek birtokban pldul sokkal knnyebb a tblzatkezelk feltteles elgazsainak vagy
egymsba gyazott fggvnyeinek hasznlata, egy sszetett makr rsa pedig eleve ignyli a makr
programnyelvnek ismerett.
2. Szinte nincs olyan szakterlet, ahol ne hasznlnnak n. nagyon magas szint, specilis clra
ltrehozott programozsi nyelveket. Szmos ipari, szimulcis, gazdasgi vagy statisztikai szoftver,
de bizonyos megkzeltsben lnyegben a legtbb felhasznli szoftver is ebbe a kategriba
tartozik. A magas szint programozsi nyelvek elsajttst a programozsi alapismeretek elsajttsa
nagyban megknnyti.
3. A klnbz online tartalommenedzsment rendszerek (CMS) hasznlata rendkvl elterjedt az
utbbi idben, hasznlatuk tbbnyire nem ignyel programozsi elismereteket. Azonban szmos
esetben felmerlhetnek olyan problmk, amelyek a programkd kisebb talaktst ignylik.
Alapvet programozsi ismeretek birtokban pl. egy PHP-kd sokkal kevsb tnik idegennek,
mint anlkl.
A fenti, programozsoktats melletti rvek ellen termszetesen fel lehet hozni ellenrvknt, hogy
mindegyikre alkalmazhat kpzett programoz. Ez rszben taln igaz, azonban az adott szakterlet
specialistja vagy a szervezeti viszonyok ismerje hatkonyabban ellthatja ezeket a feladatokat.
Radsul naprl napra felmerl aprbb problmkra klnsen kisebb szervezetekben nem lehet
folyamatosan professzionlis programozkat ignybe venni, az idkorltok s a kltsghatkonysgi
szempontok ezt nem engedik meg. Ezenkvl egyltaln nem biztos, hogy az adott, nagyon magas
szint programozsi nyelvet a legtbb, ltalnos informatikai kpzettsggel rendelkez, s esetleg ms
szakterleten tevkenyked programoz behatan ismeri.
Clzottan nem soroltuk fel azokat a programozsi feladatokat, amelyeket vlemnynk szerint alapveten
professzionlis programozk lthatnak el. Azonban tapasztalataink szerint megfelel elszntsg s
nmi logikai rzk birtokban brki programozv vlhat, s akr nagyon magas szinten mvelheti ezt
a terletet.
A programozsoktats mellett termszetesen szmos egyb propedeutikai rv felhozhat, a programozsi
guruk taln az egsz informatikai oktatst kizrlag programozsra ptenk. Azonban a realitsok
talajn maradva is biztosak vagyunk abban, hogy a programozs akr csak jtkknt, agytornaknt,
a logikai kszsgek fejlesztseknt mindenki szmra hasznos lehet.
A jegyzetet elssorban olyan leend jelenleg elssorban a felsfok-felsoktatsi szakkpzsben
tanul szakembereknek sznjuk, akiknek munkjuk sorn informatikai, statisztikai s gazdasgi
ismereteikre kell majd hagyatkozniuk. A jegyzet nyelvezett s felptst ezrt az informatikaiprogramozi kpzsekhez kpest leegyszerstettk. Az alapozshoz hasznlt programozsi nyelvet

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Bevezets

is a clcsoport vrhat ignyeihez szabtuk, de trekedtnk a minl jtkosabb alkalmazsok


bemutatsra.
Az ltalnos, alapoz cl programozsi nyelv s programfejleszti krnyezet kivlasztsa sorn el
akartuk kerlni a programozsi kpzsekben gyakran tapasztalt csapdkat. Nem akartunk a rgi, jl
bevlt (gyakran szinte vtizedek ta hasznlt) programozsi nyelvek s programozsi krnyezetek
kzl vlogatni, mert ezek tbbnyire mr az els percektl elidegentik a nem kimondottan
programoznak kszl dikokat. A divatos s sszetett programozsi nyelvek s programozsi
krnyezetek kzl pedig azrt nem akartunk kivlasztani egyet, mert gyakran mr a nyelv sszetettsge
s a fejlesztkrnyezet lenygz, funkcionlis gazdagsgnak bemutatsa meghaladja egy alapoz
kurzus kereteit.
Hosszas mrlegels utn ezrt elnzst krve a szabad szoftverek hveitl, akikkel minden szempontbl
rokonszenveznk a Microsoft Small Basic programozsi krnyezetre esett a vlasztsunk. A Small
Basic ltal hasznlt BASIC nyelv egyszer, kimondottan kezd programozknak kszlt, a
programfejleszti krnyezet pedig letisztult, eszttikus, bartsgos. A Small Basic radsul ingyenes
br nem nylt forrskd alkalmazs.
A jegyzet sokkal inkbb emlkeztet egy felhasznli kziknyvre, mint egy hagyomnyos programozsi
jegyzetre. gy gondoltuk, hogy igazodva a kezd programozk szmra emszthetbb
mdszertanhoz, amelyet a Microsoft ltal kzztett Small Basic-lersok is kvetnek helyesebb, ha
a felhasznlk minl hamarabb programokat tudnak rni, mint hogy elbb tisztban legyenek a
programozs teljes elmleti httervel. A programozselmletet amgy is csak a szksges s elgsges
mrtkben kvnjuk rinteni.

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

2. fejezet - A Small Basic s a BASIC


A Small Basic kialaktsa sorn arra trekedtek, hogy a programozs inkbb rm, mint terhes ktelessg
legyen a kezd felhasznl szmra.
A Small Basic fejlesztkrnyezet a BASIC nyelv egy alapveten 15 kulcsszra pl egyszerstett
vltozatra s Microsoft .NET platformjra pl, els vltozata 2008-ban jelent meg. Szmos
programknyvtrral kiegszthet, gy a fejlesztkrnyezet nemcsak a kezd, hanem a professzionlis
programozk szmra is tartogat lehetsgeket.
A BASIC Beginners All-purpose Symbolic Instruction Code, azaz a kezdk brmely clra hasznlhat
szimbolikus utastsi kd nyelvet az amerikai magyar Kemny Jnos Gyrgy s Thomas Eugene
Kurtz fejlesztette ki 1964-ben.
A 70-es, 80-as vek Commodore, ZX, HT s egyb tvkomputereinek felhasznli szmra az
adott gphez szabott s tbbnyire a tbbivel inkompatibilis BASIC-vltozat nem egy volt a
programozsi nyelvek kzl, hanem maga volt A programozsi nyelv. A klnbz alkalmazsok
gyakran jtkok tbbsge BASIC-ben kszlt.
A 90-es vek elejtl kibontakoz PC-forradalom nmileg httrbe szortotta a BASIC-et, br az
oktatsban DOS alatt futtathat QBasic (QuickBasic) sokig npszer maradt. Az 1991-ben kialaktott,
az n. objektumorientltsg (szmunkra ez a fogalom csak a ksbbiekben vlhat rdekess) fel
elmozdul Microsoft Visual Basic, majd a 2002-ben megjelent, s azta is folyamatosan fejlesztett,
mr teljesen objektumorientlt, a .NET keretrendszerbe integrlt Visual Basic .NET pedig beemeltevisszahozta a BASIC-et a professzionlis programozs vilgba. A klnbz Microsoft-alkalmazsokba
(Excel, Word, Access stb.) beptett VBA (Visual Basic for Applications) makrnyelv s a Windows
opercis nyelv scriptnyelveknt funkcionl Visual Basic Script szintn nvelte a BASIC
npszersgt. Emellett szmos egyb, ltalnos vagy specilis clra hasznlt BASIC-kln ltezik
a tulajdonosi s a szabad szoftverek vilgban.
BASIC-et tanulni teht nemcsak pedaggiai okokbl rdemes, a BASIC nyelv alapjai kzvetlenl
szmos krnyezetben felhasznlhatak.

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

3. fejezet - Ismerkeds a Small


Basic-kel s a programozssal
A fejlesztkrnyezet letltse
Els lps, hogy hozzjussunk a Small Basic fejlesztkrnyezethez. A szoftver e sorok rsakor
legfrissebb v1.0 vltozatt legegyszerbben a http://smallbasic.com oldal Download pontjra kattintva
lehet letlteni. A letlttt SmallBasic.msi fjl kzvetlenl futtathat. Windows XP, Windows Vista,
Windows 7 s (vlelmezheten) Windows 8 opercis rendszer alatt telepthet, ha a .NET keretrendszer
legalbb 3.5-s verzija is fut az adott gpen.
A telepts sorn ltalban csak a Next gombra kell kattintani, de a msodik oldalon ne felejtsnk az
I accept the terms in the License Agreement eltti jellngyzetbe kattintani (s ezzel a felhasznls
feltteleit elfogadni). A harmadik oldalon elvileg klnbz nyelvi kiegsztsek kzl is vlogathatunk,
de jelenleg a magyar nyelv nem vlaszthat (ez termszetesen a ksbbiekben vltozhat).
Telepts utn a Start menben elrhet a Small Basic angol nyelv fejlesztkrnyezet, nyissuk meg!
(A fejlesztkrnyezet angol nyelv, azonban olyan kevs menpontot s kulcsszt tartalmaz, hogy
nyelvtuds nlkl is elboldogulunk vele, nhny angol mondat megtanulsa pedig brkinek hasznos
lehet. Termszetesen ms nyelv is vlaszthat.)

A fejlesztkrnyezet felptse s els


programunk
A fejlesztkrnyezet letisztultsga els rnzsre is szembetn. Az Eszkztr a New (j), Open
(Megnyits), Save (Ments), Save As (Ments msknt), Import (Importls), Publish (Kzzttel),
Cut (Kivgs), Copy (Msols), Paste (Beilleszts), Undo (Vissza), Redo (Elre), Run (Futtats) s a
Visual Basic-kdd trtn tkonvertlst vgz Graduate menpontokat tartalmazza.
Ksztsk el els programunkat! A programozsi kurzusokban mr szinte hagyomnny vlt, hogy
els lpsben mindig a Hell, vilg! cm elms szveget ratjuk ki, mi sem szaktjuk meg ezt a
nemes hagyomnyt.
A Szerkesztbe, a fejlesztkrnyezet baloldali-kzps rszbe a valsznleg megjelen Untitled*
felirat alatt, az 1-es sorszmmal kezdd rszbe az els sorba rjuk be a kvetkez szveget:

TextWindow.WriteLine("Hell, vilg!")

Taln mr a gpels alatt feltnt, hogy berskor egy felugr ablakbl vlogathatunk az egyes elemek
kzl, amelyekrl mr az ablakban kapunk nmi lerst, illetve a vlaszthat elemek (ksbb ezt a
fogalmat mg finomtjuk) tovbbiakkal egszthetk ki a jobb szls Informcis svban.

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Ismerkeds a Small Basic-kel s a


programozssal

1. bra: A Small Basic futtatkrnyezet els programunkkal


Ha bertuk Szerkesztbe els programkdunkat, futtassuk! Kattintsuk az eszkztron tallhat Run
gombra vagy nyomjunk az F5 funkcibillentyre! Ha mindent jl rtunk be, egy j ablakban ltjuk
programunk futs utni eredmnyt. (2. bra)

2. bra: Els futtatott programunk


Mentsk el a programkdot a Save gombra kattintva vagy a CTRL+S billentykombincival!
(Klnsen sszetettebb programokat rdemes rendszeres idkznknt menteni, kzhely, de tnyleg
rdemes erre odafigyelni.) Ha a programkdot elso nven mentjk, a Szerkeszt felett lthatjuk,
hogy a kd .sb kiterjesztst kapott.
Ha fjlkezelvel megvizsgljuk a knyvtrat, ahov az .sb kiterjeszts fjlt mentettk, megllapthatjuk,
hogy a ments utn hrom msik fjl is lthat a knyvtrban:
elso.exe: a kd lefordtott s futtathat verzija,
elso.pdb: a program megfelel mkdshez tartoz adatbzis,
SmallBasicLibrary.dll: a Small Basic futsidej programknyvtra, olyan elemeket/fggvnyeket
tartalmaz, amelyek nlklzhetetlenek a megfelel futshoz.
Br az els program trvnyszeren nem tnik tl izmosnak, a legfontosabb lpsen tl vagyunk,
s mr ez az egyszer programocska is rdemes a tanulmnyozsra.

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Ismerkeds a Small Basic-kel s a


programozssal

Programszerkezet
Technikailag a ksbbiekben is nagyon hasonl csak sszetettebb s tbb lpsbl llnak majd
ssze programjaink. Valamilyen ton-mdon instrukcikat (vgrehajtand feladatokat) fogalmazunk
meg BASIC nyelven s ezek a szksges logikai rendbe szervezve a megfelel eredmnyt adjk.
Az egyes instrukcik a BASIC programozsi nyelvben utastsoknak feleltethetk meg. A program
minden egyes sora egy-egy utasts. Ha futtatjuk a programkdot, a Small Basic vgrehajtja azokat
egszen a program vgig. Pontosabban: a program fordtja (fordtprogramja, compilerje) ltrehoz
egy .exe kiterjeszts fjlt, amelyet futtat.
Ha megvizsgljuk az els programkdunkat, az els utastsunk alapveten hrom rszbl ll:
TextWindow
WriteLine
Hell, vilg!
Termszetesen a klnbz egyb elemek pontok, zrjelek is fontosak, s megvltoztatsuk
kihatssal van a program mkdsre, de a logikailag elklnl elemek a fentiek.
A TextWindow (az angol szveg s ablak szavakbl) az els programunk futsa sorn felugr,
fekete htter ablaknak felel meg, amelyet szoks konzolnak is hvni.
Ms megkzeltsben a TextWindow az els objektumunk, amit hasznltunk. A Small Basicben mint
ltalban minden programozsi nyelvben, nemcsak a szigoran objektum-orientltakban (errl ksbbi
stdiumaikban mg lehet sz) szmos objektum van. Br az objektum megragadsa egzakt mdon
nem is olyan knny, taln kezd szinten elgsges s korntsem tkletes definci, hogy az
objektum tulajdonsgokkal (paramterekkel) s mveletekkel-viselkedsekkel-eljrsokkal felruhzott
egysg.
A Small Basicben az egyes objektumoknak lehetnek tulajdonsgai (Property), ill. mveletei (Operation).
A mveletek egy rsze a magyar informatikai szaknyelvben metdusknt, eljrsknt, msok inkbb
fggvnyknt kzelthetk meg. Mi azonban nem trnk el a Microsoft szhasznlattl, ezrt a
ksbbiekben egysgesen tulajdonsgokrl s mveletekrl beszlnk.
A TextWindow utn ponttal elvlasztva a WriteLine(data) az angol r sor s adat szavakbl
elemet ltjuk. A WriteLine a TextWindow objektum egyik mvelete, s taln nem okoz meglepetst,
hogy egy olyan mveletet takar, amely kir egy sort (egy szveget) a konzolra. A Hell, vilg! pedig
az az input (bemeneti rtk, jel), amely az adott sorban megjelenik.

Msodik programunk
Msodik programkdunk alig bonyolultabb az elsnl, de mr hrom sorbl ll. rjuk be a Szerkesztbe
a kvetkezt, majd futtassuk:

TextWindow.ForegroundColor = "Yellow"
TextWindow.BackgroundColor = "Red"
TextWindow.WriteLine("Hell, vilg!")

A program futtatsa sorn azt tapasztaljuk, hogy a kpernyn feltn szveg piros httrrel s srga
betkkel jelenik meg. Ezt a TextWindow objektum ForegroundColor (az angol eltr s szn
szavakbl) s BackgroundColor (az angol httr s szn szavakbl) tulajdonsgok megadsval
rtk el. A Yellow srgra vltoztatta betsznt, a Red vrsre festette a szveg httert. Hasonl mdon

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Ismerkeds a Small Basic-kel s a


programozssal
a Black, Blue, Cyan, Gray, Green, Magenta, Red, White, Yellow, DarkBlue, DarkCyan, DarkGray,
DarkGreen, DarkMagenta, DarkRed, DarkYellow szneket is hasznlhattuk volna.
A mvelet s a tulajdonsg hatrait esetenknt nem is olyan knny definilni, hiszen mindkett az
objektumra irnyul. Formailag azonban a Small Basicben egyszer a megklnbztets. A mveletek
inputjai zrjelben vannak, mg a tulajdonsgok rtkeit egyenlsgjel segtsgvel adjuk meg.

3. bra: A Small Basic futtatkrnyezet msodik programunkkal

4. bra: A msodik program futsi eredmnye


Ahhoz hogy a programjaink vltozatos feladatok megoldsra legyenek alkalmasak, kicsit jobban bele
kell snunk magunkat a programozselmletbe s a BASIC nyelv szablyaiba, elemeibe.

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

4. fejezet - A vltozk hasznlata


Nvbekr program
Fejlesszk tovbb az els programunkat! A program krje be a vezetknevnket s keresztnevnket,
majd kszntsn bennnket teljes nevnkn!
rjuk be a Szerkesztbe a kvetkez programkdot:

TextWindow.Write("Adja meg a vezetknevt: ")


vezeteknev = TextWindow.Read()
TextWindow.Write("Adja meg a keresztnevt: ")
keresztnev = TextWindow.Read()
TextWindow.WriteLine(
"dvzlm nt, Tisztelt " + vezeteknev + " " + keresztnev+ "!")

Ha a fenti kdot futtatjuk, programfuts kzben nmi interakcira is lehetsgnk nylik. Ehhez azonban
vltozkat kellett hasznlnunk.

5. bra: Nvbekr programunk

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A vltozk hasznlata

6. bra: Nvbekr programunk futsi eredmnye


Vizsgljuk meg a program j elemeit!
A program futsa kzben tapasztalhattuk, hogy az Adja meg vezetknevt: s az Adja meg
keresztnevt: szveg megjelentse utn egy villog kurzor jelent meg, amely jelezte, hogy a program
egy rtk megadst a vezetknv s a keresztnv berst vrja a felhasznltl. Ezt a

vezeteknev = TextWindow.Read()

s a

keresztnev = TextWindow.Read()

sorokkal rtk el.


A Read() (az angol olvas szbl) a TextWindow objektum egyik mvelete. A mvelet a program
futsa sorn bekr egy karaktersort (egy sztringet, egy szveget) a felhasznltl, s amg a bevitt
karaktersort a felhasznl az Enter billentyre kattintva le nem zrja, a program nem lp a kvetkez
sorra.
A kt egymssal szembelltott zrjel arra utal, hogy mveletrl van sz, de mivel kzttk semmi
sincs, azt is jelzi, hogy az inputot esetnkben nem a programkd tartalmazza, hanem a felhasznltl
a program futsa kzben krjk be.
A Read() mvelettel bekrt-beolvasott szveg azonban egyben egy vltoz rtkadst is elvgzi. A
keresztnev s vezeteknev vltozk elraktrozzk a bevitt rtket, s a program futsnak vgig
ha kzben az rtket meg nem vltoztatjk meg is rzik.
A fent vzolt tulajdonsg alapjn lnyegben definilhatjuk a vltoz jelentst: A vltoz nvvel
elltott adattrol.
A programkd utols sorban a WriteLine mvelet inputjnak sszetett megadsra ltunk pldt:

TextWindow.WriteLine(
"dvzlm nt, Tisztelt " + vezeteknev + " " + keresztnev+ "!")

A program a vltozk rtkeit az idzjelek kz rakott szveges konstansok kz rja ki.


Az input a kdrs kzben megadott szvegdarabokbl s a program futsa kzben bekrt vltozk
rtkeibl ll ssze, ez jelenik meg kszntsknt a kpernyn.

A vltozkra vonatkoz szablyok


A vltozkra szmos programnyelvben szigor szablyok vonatkoznak, s ltalban a vltoz tpust
a vltozban trolhat adatok jellegt (szm, szveg, dtum stb.) is definilni kell. Ennek
knyelmetlen jellege ellenre szmos elnye van. Pldul a megfelelen kialaktott vltoztpusokkal
jelentsen cskkenhet a program erforrsignye.
A Small Basicben ms programnyelvekkel sszehasonltva viszonylag kevs szably vonatkozik a
vltozkra:
A vltoz nevnek betvel kell kezddnie, s a nv nem tartalmazhat foglalt kulcsszavakat (ksbb
lesz rluk sz), mint pldul az if, a for vagy a then.

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A vltozk hasznlata

A vltoz nevben a betk, a szmok, s alhzsjelek (_) szabadon kombinlhatk.


rdemes a vltozk nevt gy megfogalmazni, hogy utaljanak a bennk trolt tartalomra.
A vltoznv nem lehet hosszabb 40 karakternl.
Br a programozk kztt szinte hagyomnny vlt, hogy a vltozk s a klnbz cmkket,
feliratokat leszmtva minden ltaluk definilt elem nevt szinte kizrlag az ASCII-kdtbla (az
angol nyelvben hasznlt alapkarakter-kszlet) karaktereibl lltjk ssze, elvileg a vltozk nevben
is hasznlhatk a magyar kezetes betk. Teht a vezetknv s a keresztnv vltoz hasznlata sem
vezetett volna hibhoz. Azonban a programozi tapasztalat szerint mg a mai napig a karakterkdolsi
problmk vezetnek a legtbb hibhoz, ezrt a hagyomny tovbb l. A jegyzetben ezrt mi is csak
kivteles esetben hasznlunk kezetes betket a vltoznevekben.
Szmos programozsi nyelvben a vltozk rvnyessgi kre alapjn pl. globlis s loklis vagy pl.
modulszint vltozkat is megklnbztetnk. A globlis vltozk a program egszben, a tbbi
tpus csak egyes programrszekben (modulokban, szubrutinokban, a programoz ltal definilt
fggvnyekben, eljrsokban stb.) rtelmezett.
A Small Basicben azonban minden vltoz globlis vltoz!
(Rszben ebbl fakad, hogy Small Basicben a szmos programozsi nyelvben ismert argumentumtads
is hinyzik.)

Szmtrol program
A kvetkez egyszer pldaprogram a szmok trolsra ad pldt:

TextWindow.Write("Adjon meg egy szmot: ")


szam1 = TextWindow.ReadNumber()
TextWindow.Write("Adjon meg mg egy szmot: ")
szam2 = TextWindow.ReadNumber()
TextWindow.WriteLine("A kt szm szorzata: " + szam1 * szam2)

A TextWindow objektum Read() mvelete helyett a ReadNumber (az angol szm s (be)olvas
szavakbl) mveletet hasznltuk a szmok bekrsre. Ennek segtsgvel elkerlhetjk, hogy a
felhasznl pl. vletlenl bett ssn a szmok kz, s ez hibs eredmnyhez vezessen.
Br a fenti programkd helyes eredmnyt ad, rdemesebb a kt szm szorzatt kln vltozknt
definilni, a s a programkdot a kvetkezre mdostani:

TextWindow.Write("Adjon meg egy szmot: ")


szam1 = TextWindow.ReadNumber()
TextWindow.Write("Adjon meg mg egy szmot: ")
szam2 = TextWindow.ReadNumber()
szam3 = szam1 * szam2
TextWindow.WriteLine("A kt szm szorzata: " + szam3)

Programozstechnikai okbl elssorban azrt rdemes vltozkat hasznlni ott, ahol csak lehet, mert
a vltoz rtke a program futsa kzben mdosulhat, s a vltozk hasznlata rugalmasabb teszi a
programozst. (Ennl az egyszer pldnl bonyolultabb lett a programkd viszont a program
esetleges bvtse esetn a szam3 vltoz rendelkezsre ll egyb jelleg felhasznlsra, amire az
els vltozatnl nem lenne lehetsg. A ksbbiekben majd mlyebben is megrtjk a vltozk
hasznlatnak fontossgt.)

10

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

5. fejezet - Feltteles elgazs


Az ltalnos cl programozsi nyelvek hrom f ismrve, hogy a programok szekvencikra (egyms
utni lpsekre taln ezt az eddigiek alapjn nem kell kln elmagyarzni), feltteles elgazsokra
s ciklusokra oszlanak. Ebben a fejezetben a feltteles elgazsokkal ismerkednk meg. A feltteles
elgazsok hasznlata brmely algoritmus megfogalmazsa sorn az algoritmus egy adott cl elrse
rdekben vgrehajtott lpssorozatot jelent hasznos lehet, lnyegben a logikus gondolkods egyik
alapja.

Algoritmus-tervezs
Az elz fejezetben kt szm sszeszorzsra hasznlt pldt feltteles elgazs segtsgvel egy kicsit
tovbbfejlesztjk. Nemcsak az sszeszorzand kt szmot krjk be a felhasznltl, hanem egy
tippet is a megoldsra. Ha a tipp megegyezik a szmtott megoldssal, a program kirja, hogy a
felhasznl helyes megoldst adott, ha nem, akkor jelzi a hibt.
A megolds eltt rdemes a program algoritmust vzolni.
A programozsban szmos vizulis eszkz ltezik az algoritmusok lersra. A legegyszerbb, amikor
n. pszeudokddal szvegesen lerjuk az algoritmust. Tbbnyire azonban folyamatbrval,
blokkdiagrammal, struktogrammal vagy Jackson-brval dolgozunk.

7. bra: Folyamatbra (i igaz, h hamis)


Kezd programozk szmra vlemnynk szerint ezek egy rsze kevsb fontos (a bonyolultabb
algoritmusoknl lehet rjuk szksg), de a ksbbi stdiumok sorn rdemes ezekkel megismerkedni,
s minden programkd kdrszlet megrsa eltt-sorn hasznlni. Tapasztalataink szerint a
programozk egy rsze elszeretettel hasznlja a vizulis algoritmusler eszkzket, msok sajt
rendszert hasznlnak, de elg npes azoknak a tbora, akik nem hasznlnak ilyen eszkzket.
A 7. brn a fentiekben vzolt algoritmusunk egy lehetsges folyamatbrjt ltjuk (a szokssal
ellenttben nem teljesen fgglegesen rendezve, ezzel is rzkeltetve, hogy a sajt algoritmusvzlataink
sosem lesznek mrnki pontossgak). A jegyzet htralv rszben nem kzlnk ilyen brkat, de a
tananyag feldolgozsa sorn rdemes az egyes programok megrsa eltt vzlatokat kszteni.

11

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Feltteles elgazs

Taln mr a 7. bra rombuszba illesztett felttelbl ltszik, hogy a feltteles elgazs az alapjn, hogy
a megfogalmazott logikai felttel teljeslt vagy sem, kt rszre osztotta az algoritmus addig lineris
tjt. Ms rtk kerlt kirsra, ha a felttel teljeslt, s ms, ha nem. A feltteles elgazsok segtsgvel
a programok teht nagyon sok gra bonthatk.

Szorzprogram feltteles elgazssal


rjuk be a Szerkesztbe az albbi programkdot:

TextWindow.Write("Adjon meg egy szmot: ")


szam1 = TextWindow.ReadNumber()
TextWindow.Write("Adjon meg mg egy szmot: ")
szam2 = TextWindow.ReadNumber()
TextWindow.WriteLine("Mennyi a kt szm szorzata? ")
tipp = TextWindow.ReadNumber()
szorzat = szam1 * szam2
If (tipp = szorzat) Then
TextWindow.WriteLine("Helyes!")
Else
TextWindow.WriteLine("Ezt mg gyakorolni kell! A helyes megolds: " + szorza
EndIf

A fenti programban a feltteles elgazst az If, Then, Else s EndIf kulcsszavak jellik ki. Az If kulcssz
(az angol ha szbl) utn zrjelben mindig valamilyen logikai kifejezs ll. (A zrjel hasznlata
nem ktelez.) A logikai kifejezsek sokflk lehetnek, de ha a lnyegi vonsukat akarjuk megragadni,
j kzeltssel minden eldntend (igennel vagy nemmel megvlaszolhat krds) logikai kifejezsnek
tekinthet.

8. bra: Szorzsi plda a feltteles elgazsra


Logikai kifejezsekben gyakran valamilyen relcis (kisebb, nagyobb, egyenl) jellel sszehasonltunk
kt elemet. (Ksbbi programozi feladatokban bonyolultabb, trivilis prhuzamokkal nehezebben

12

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Feltteles elgazs

lerhat logikai kifejezsek is felmerlhetnek, azonban az sszetettebb logikai defincikat egyelre


a jegyzet rjnak megknnyebblsre is nyugodtan elhagyhatjuk.)

9. bra: A szorzsi plda futsi eredmnye helyes vlasz esetn

10. bra: A szorzsi plda futsi eredmnye helytelen vlasz esetn


Ha az If utn megadott logikai kifejezs teljesl (a visszatrsi rtk igaz), akkor a program a Then
(az angol akkor szbl) utn tallhat sort vagy sorokat hajtja vgre.
Ha a logikai kifejezs nem teljesl (a visszatrsi rtk hamis), akkor az rtelmezprogram figyelmen
kvl hagyja a Then kulcssz utn rt utastst vagy utastsokat s az Else (az angol klnben szbl)
kulcssz utni utastst vagy utastsokat hajtja vgre.
A feltteles szerkezetet az EndIf (az angol vge s ha szavakbl) kulcssz zrja le.
A feltteles elgazs kulcsszavai kzl az Else amennyiben a hamis visszatrsi rtket kln nem
akarjuk kezelni s a hamisrsz kapcsold utastsai nem ktelezek.

13

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

6. fejezet - Ugrutasts
A 80-as vek Basic programozi elszeretettel hasznltk a Goto kulcsszval (az angol Menj ide:
kifejezsbl) kpzett utastsokat. A Goto a Small Basicnek is rsze, azonban az ilyen tpus ugrutasts
magasabb szinten inkbb kerlend. Szmos programozsi nyelv ma mr nem is tmogatja. Ellenzi
szerint pongyola kdokhoz vezet. Tny, hogy rvid tv, knyelmi szempontok miatti hasznlata
jelents rszben rombolja egy programkd ttekinthetsgt, s emellett ms programozstechnikai
szablyokat is srthet. Hibs hasznlata pedig vgtelen ciklusokhoz vezethet ( a program ugyanazon
utastsokon megy vgig jra s jra, ms szval lefagy ). Br ez a szabvnyos ciklusutastsok
helytelen hasznlatkor is elfordulhat.
Tanulsi fzisban azonban a Goto-t esetenknt nyugodtan hasznlhatjuk, (s tmenetileg a vgtelen
ciklusok tudatos hasznlata is bocsnatos bn).
Pldul a szorzsi pldnkat kiegszthetjk gy, hogy helytelen vlasz esetn a felhasznlnak jabb
vlaszt kelljen adnia.

start:
TextWindow.Write("Adjon meg egy szmot: ")
szam1 = TextWindow.ReadNumber()
TextWindow.Write("Adjon meg mg egy szmot: ")
szam2 = TextWindow.ReadNumber()
TextWindow.WriteLine("Mennyi a kt szm szorzata? ")
tipp = TextWindow.ReadNumber()
szorzat = szam1 * szam2
If (tipp = szorzat) Then
TextWindow.WriteLine("Helyes!")
Else
TextWindow.WriteLine("Ezt mg gyakorolni kell! A helyes megolds: " + szorza
TextWindow.WriteLine("Prbld jra!")
Goto start>EndIf

A fenti programkdban kt j elemre szeretnnk felhvni a figyelmet. A programba brhov


elhelyezhetnk n. cmkket, amelyekre a ksbbiekben vissza/tirnythatjuk a programot. Esetnkben
a start: cmkhez Goto start utastssal lpnk vissza, de csak akkor, ha a Mennyi a kt szm
szorzata? krdsre a felhasznl rossz vlaszt adott.

11. bra: A Goto-val kiegsztett szorzsi plda futsi eredmnye tbb helytelen vlasz esetn

14

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Ugrutasts

Hatvnyprogram
Az albbi program bekr a felhasznltl egy hatvnyalapot s egy hatvnykitevt, s az els hatvnytl
kezdve kisebb (nem teljes) kzbls ellenrzs utn a megadott hatvnykitevig kirja a szm
hatvnyait:

kezdes:
TextWindow.WriteLine("Adjon meg egy tetszleges szmot: ")
alap = TextWindow.ReadNumber()
TextWindow.WriteLine ("Hnyadik egsz hatvnyig rjuk fel az rtkeket: ")
maxkitevo = TextWindow.ReadNumber()
korlat = maxkitevo
If (maxkitevo < 2) Then
TextWindow.WriteLine("A kitev legalbb kett legyen!")
Goto kezdes
EndIf
kitevo = 0
kiiras:
kitevo = kitevo + 1
ertek = Math.Power(alap,kitevo)
TextWindow.WriteLine(ertek)
If (kitevo < korlat) Then
Goto kiiras
EndIf

Az els, feltteles elgazsba gyazott Goto kulcsszval kpzett utasts a kezdes cmkhez lpteti
vissza a programot, amennyiben a felhasznl ltal megadott kitev kettnl kisebb. (Nem lnyeges
felttel, a Goto utasts mkdsnek szemlltetse vgett kerlt a programkdba.)

12. bra: A hatvnykir program egyik futsi eredmnye


A msodik Goto kulcsszval kpzett utasts mikzben a kitevo vltoz rtke folyamatosan n
egszen addig a kiiras cmkig lpteti vissza a programot, amg a kitevo vltoz rtke meg nem
haladja a maxkitevo vltoz rtkt.
Felhvjuk mg figyelmet a programban tallhat Math (az angol matematika szbl) objektumra,
amelyhez szmos matematikai mvelet tartozik. Esetnkben a Math objektum Power(baseNumber,
exponent) az angol hatvny, hatvnyalap, hatvnykitev szavakbl mvelett hvtuk meg a
megfelel argumentumok/paramterek helyn az ltalunk definilt vltozkat szerepeltetve.

15

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

7. fejezet - Ciklusok
A ciklus vagy iterci ismtld tevkenysgek vgrehajtsra szolgl. Egy megadott mveletsort
valamely darabszmszor (szmlls ciklus), vagy valamely felttel teljeslse esetn, mg a felttel
igaz, jra s jra megismtlnk (ell-, vagy htultesztel ciklus). Az elltesztel ciklus mr a ciklus
elejn megvizsglja az adott felttelt, s ha nem teljesl, nem hajtja vgre a mveletsort. A htultesztel
ciklus legalbb egyszer lefut, a felttel vizsglata a mveletsor vgrehajtsa utn trtnik meg.

Szmlls ciklus
Az elz fejezetben ksztett hatvnykir program msodik Goto szerkezete kivlthat s
egyszersthet egy ciklussal:

kezdes:
TextWindow.WriteLine("Adjon meg egy tetszleges szmot: ")
alap = TextWindow.ReadNumber()
TextWindow.WriteLine("Hnyadik egsz hatvnyig rjuk fel az rtkeket: ")
maxkitevo = TextWindow.ReadNumber()
If (maxkitevo < 2) Then
TextWindow.WriteLine("A kitev legalbb kett legyen!")
Goto kezdes
EndIf
For kitevo = 1 To maxkitevo
TextWindow.WriteLine(Math.Power(alap,kitevo))
EndFor

A fenti programkdban tallhat ciklust szmlls ciklusnak hvjuk. A For (az angol tl -bl)
kulcsszval kpzett utasts utn kezdrtket adunk a ciklusvltoznak (kitevo = 1).

13. bra: A For ciklussal kiegsztett hatvnykir program egyik futsi eredmnye
A ciklus els futsakor a ciklusvltoz kezdrtke mellett a program kirja a megfelel hatvnyt, azaz
vgrehajtja a ciklusmagban tallhat utastsokat (TextWindow.WriteLine(Math.Power(alap,kitevo))).
Ezutn a ciklusfej els rszben tallhat ciklusvltoz rtke 1-gyel nveli az rtkt egszen addig,
amg a To kulcssz utn megadott vgrtket (maxkitevo) el nem ri.
(Felhvjuk mg a figyelmet a Math.Power mvelet TextWindow.WriteLine mveletbe gyazsra.)

16

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Ciklusok

A kdot kiegszthettk volna egy Step kulcsszval kpzett lpskzrtkkel is:

For kitevo = 1 To maxkitevo Step 1


TextWindow.WriteLine(Math.Power(alap,kitevo))
EndFor

Ha azonban a lpskz egy, a Step elhagyhat.

Elltesztel ciklus
A ciklusok (vagy itercik) mint mr korbban emltettk a szekvencival s a feltteles elgazssal
egytt kpezik az ltalnos programozsi nyelvek vzt. E hrom alapelem segtsgvel az adott
programnyelv lehetsgeit kihasznlva lnyegben minden programozsi feladat megoldhat.
A szmlls ciklus mellett mg elltesztel s htultesztel ciklusokat klnbztethetnk meg. A
Small Basicben a szmlls ciklus mellett jellemzen elltesztel ciklusokat szoktunk hasznlni.
Nzznk erre is egy pldt!

bekeres:
TextWindow.WriteLine("Krem, adjon meg egy egsz, nemnegatv szmot:")
szam = TextWindow.ReadNumber()
If szam <> Math.Floor(szam) Or szam < 0 Then
TextWindow.WriteLine("Egsz, nemnegatv szmrl volt sz!")
Goto bekeres
EndIf
szorzat = 1
While (szam > 1)
szorzat = szorzat * szam
szam = szam - 1
EndWhile
TextWindow.WriteLine("A szm faktorilisa: " + szorzat)

A fenti program bekr a felhasznltl egy egsz szmot, majd kiszmolja annak faktorilist. (Az n
nemnegatv, egsz szm faktorilisnak az n-nl kisebb vagy egyenl pozitv egsz szmok szorzatt
nevezzk. Pldul 3! = 3*2*1 = 6, de 0! = 1). A program mieltt kiszmtan a faktorilis rtkt
megvizsglja, hogy a felhasznl olyan szmot adott-e meg, amelybl szmolhat faktorilis. Ha nem,
akkor hibazenettel visszalp a szm bekrsig.
A vizsglat sorn felhasznltuk a Math objektum Floor (esetnkben: egszrsz) mvelett. A nem
egyenl relcit pedig az <> opertorral fogalmaztuk meg.
Ha a szm megfelel, a program 1-es kezdrtkkel definilja a szorzat vltozt, majd tovbblp az
elltesztel ciklusunkra.
Az elltesztel ciklus vgrehajtsa sorn a program elszr megvizsglja, hogy a ciklusfejben a While
(az angol amg szbl) utn megfogalmazott felttel (szam > 1) teljesl-e. Ha igen, akkor a
ciklusmagban lv utastsok (szorzat = szorzat * szam illetve szam = szam 1) lefutnak, s a ciklus
vgrehajtsa jbl elkezddik; ha nem, akkor a program a ciklus utni sorban folytatdik, azaz a
ciklusmagban lv utastsokat az rtelmezprogram nem veszi figyelembe. Lehetsges, hogy az
elltesztel ciklus egyszer sem fog lefutni, esetnkben ez n = 0 rtknl kvetkezik be. Teht a program
a nulla rtknl (melynek a faktorilisa definci szerint 1) is helyes eredmnnyel fog visszatrni.)

17

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Ciklusok

14. bra: A faktorilist szmt program egyik futsi eredmnye

18

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

8. fejezet - A grafikus ablak hasznlata


A konzol azaz a TextWindow ablak/objektum hasznlata meglehetsen korltozott grafikai
lehetsget nyjt a felhasznlnak, vizulisan is eszttikus programok ksztsre nem alkalmas.
A Small Basic azonban rendelkezik egy GraphicsWindow (az angol grafika s ablak szavakbl)
nev grafikus ablakkal/objektummal is, amely mr sokkal ltvnyosabb alkalmazsok rst teszi
lehetv.
Ha a lenti programkdot lefuttatjuk, a 15. brn tallhat, res, grafikus ablakhoz jutunk:

GraphicsWindow.Show()

Termszetesen a grafikus ablak tulajdonsgai megvltoztathatk.

GraphicsWindow.BackgroundColor = "Red"
GraphicsWindow.Title = "Grafikus ablakom"
GraphicsWindow.Width = 400
GraphicsWindow.Height = 200
GraphicsWindow.CanResize = "True"
GraphicsWindow.Show()

A fenti programkdban a BackgroundColor, Title, Width, Height s CanResize (rendre: httrszn,


cm, szlessg, magassg, tmretezhetsg) tulajdonsgok rtkeit lltottuk be, majd a
Show() (mutat) mvelettel megjelentettk az ablakot. A CanResize tulajdonsg rtkt True-ra
(igaz) lltottuk be, ezrt a megjelentett ablak mrete megvltoztathat. Ha az rtk False lenne,
az ablakot nem lehetne a futs alatt rmretezni (a 16. brn ezrt hinyoznak az tmretezst segt
ikonok ).

19

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

15. bra: A GraphicsWindow res ablaka

16. bra: Formzott grafikus ablak


Az egyes sznek esetnkben a httrszn belltsakor nemcsak a korbban felsorolt alapsznekbl
vlogathatunk, hanem hexadecimlis RGB-rtkeket is felvehetnk. Az RGB-rtkeknl, egyenknt
kt-kt hexadecimlis (16-os szmrendszerben rt) szmmal hatrozzuk meg a Red (vrs), a Green
(zld) s a Blue (kk) rtkt.
A

GraphicsWindow.BackgroundColor = "Red"

utasts helyett teht a

GraphicsWindow.BackgroundColor = "#FF0000"

utastst is hasznlhattuk volna.

Grafikus elemek megjelentse


A grafikus ablak termszetesen azrt grafikus ablak, hogy a program futsa kzben szvegek mellett
klnbz grafikus elemeket is megjelenthessnk.
A kvetkez program erre ad egyszer pldt:

GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.DrawLine(10, 10, 10, 100)
GraphicsWindow.DrawLine(10, 10, 100, 10)
GraphicsWindow.DrawLine(10, 100, 100, 100)
GraphicsWindow.DrawLine(100, 10, 100, 100)

A program a GraphicsWindow objektum DrawLine(x1, y1, x2, y2) vonalhzs mvelete


segtsgvel egy ngyzetet rajzolt a grafikus ablakba. A ngyzet ngy vonal megrajzolsbl llt ssze.
A DrawLine mvelethez ngy inputot kellett megadnunk: a vonal kiindulpontjnak x s y koordintjt,
illetve vgpontjnak x s y koordintjt. A koordintarendszer origja azonban a matematikai
tanulmnyok sorn megszokottl eltren a bal fels sarokban helyezkedik el! Teht az x tengely

20

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

rtkei az origbl kiindulva, jobbra haladva nnek (ebben nincs eltrs a matematikhoz kpest),
viszont az y tengely rtkei az origbl kiindulva, lefel haladva nvelik az rtkket.

17. bra: Grafikus ablak ngyzettel

Sznek, vonalszlessg, ngyzetrajzols


A kvetkez program a PenColor (tintaszn) s a PenWidth (vonalszlessg) tulajdonsgok
megadsval s a DrawLine mvelet inputjainak mdostsval kiss ms megjelens ngyzetet rajzol
a grafikus ablakba. (18. bra)

GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
GraphicsWindow.PenColor = "Red"
GraphicsWindow.PenWidth = "50"
GraphicsWindow.DrawLine(30, 30, 30, 150)
GraphicsWindow.PenColor = "Green"
GraphicsWindow.PenWidth = "40"
GraphicsWindow.DrawLine(30, 30, 150, 30)
GraphicsWindow.PenColor = "Blue"
GraphicsWindow.PenWidth = "30"
GraphicsWindow.DrawLine(30, 150, 150, 150)
GraphicsWindow.PenColor = "Yellow"
GraphicsWindow.PenWidth = "20"
GraphicsWindow.DrawLine(150, 30, 150, 150)

18. bra: A mdostott ngyzet


A kvetkez program egy szmlls ciklus segtsgvel tlti fel nvekv vastagsg vonalakkal a
grafikus ablakot:

21

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.Width = 400
GraphicsWindow.Height = 160
GraphicsWindow.PenColor = "Red"
For i = 1 To 10
GraphicsWindow.PenWidth = i
GraphicsWindow.DrawLine(20, i * 15, 380, i * 15)
EndFor

19. bra: Vonalrajzols szmlls ciklussal

Kitlts
A korbbi ngyzetnk egyszerbb mdon is elkszthet, s a felrajzolt skidom sznnel kitlttt vltozata
is knnyen felrajzolhat:

GraphicsWindow.Width = 250
GraphicsWindow.Height = 150
GraphicsWindow.PenColor = "Red"
GraphicsWindow.DrawRectangle(10, 10, 90, 90)
GraphicsWindow.BrushColor = "Red"
GraphicsWindow.FillRectangle(110, 10, 90, 90)

A kitlts nlkli ngyzetet a DrawRectangle (x, y, width, height) Rajzolj tglalapot!, szlessg,
magassg mvelettel ksztettk el. (Termszetesen ngyzet helyett ltalnos tglalapot is
rajzolhattunk volna.) A DrawRectangle mvelet inputjnak els kt attribtuma a tglalap (ngyzet)
bal fels sarknak (kezdpontjnak) x s y koordintjt, a harmadik a szlessgt, a negyedik a
magassgt hatrozza meg.
A FillRectangle(x, y, width, height) Tlts ki sznnel egy tglalapot!, x, y, szlessg, magassg
mvelet attribtumszerkezete azonos a DrawRectangle mveletvel. A kitltsi sznt a BrushColor
tulajdonsg hatrozza meg.

20. bra: Ngyzetrajzols s -kitlts

22

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

Az elzekhez nagyon hasonl mdon krt s ellipszist is rajzolhatunk, illetve kitlthetnk sznnel:

GraphicsWindow.Width = 250
GraphicsWindow.Height = 150
GraphicsWindow.PenColor = "Red"
GraphicsWindow.DrawEllipse(10, 10, 90, 90)
GraphicsWindow.BrushColor = "Red"
GraphicsWindow.FillEllipse(110, 35, 90, 30)

A DrawElipse s a FillEllipse mveletek inputjnak attribtumai rendre megfeleltethetk a


DrawRectangle s a FillRectangle mveletekivel .

21. bra: Ellipszisrajzols s kitlts

Nhny grafikai alkalmazs


A kvetkezkben nhny egyszer elemekre pl, de mgis ltvnyos, tisztn grafikai elemekre pl
alkalmazs kdjt kzljk.

'Op-art-ngyzetek
'Az albbi program ngyzetekre pl op-art-alkalmazst kszt
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "Red"
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
For i = 1 To 100 Step 5
GraphicsWindow.DrawRectangle(100 - i, 100 - i, i * 2, i * 2)
EndFor

Az alkalmazs lelke egy szmlls ciklus, tanulmnyozzuk a mkdst!

22. bra: Op-art ngyzetek

23

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

Az Op-art ngyzetek alkalmazsban j elem, hogy a programkdba megjegyzseket illesztettnk


egy fels aposztrf () segtsgvel. Klnsen sszetettebb programkdjainkat rdemes mindig a
megfelel szm megjegyzssel elltni. A megjegyzsek nvelik a programkd olvashatsgt, ezzel
ksbbi munknkat, a csoportmunkt, s programkd tadst is megknnytik. Kezd programozk
minl tbb megjegyzssel lssk el a programkdot!
A fels aposztrffal bizonytalan, vagy egyelre nem alkalmazand kdrszleteket is megjegyzss
alakthatunk, ez programrs kzben nagyon hasznos lehet.
Az Op-art krk alkalmazs felptse nagyon hasonlt az elzhz.

'Op-art krk
'Az albbi program krkre pl op-art alkalmazst kszt
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.PenColor = "Red"
GraphicsWindow.Width = 200
GraphicsWindow.Height = 200
For i = 1 To 100 Step 5
GraphicsWindow.DrawEllipse(100 - i, 100 - i, i * 2, i * 2)
EndFor

23. bra: Op-art krk

'Vletlenszer krk
GraphicsWindow.BackgroundColor = "Black"
For i = 1 To 1000
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
x = Math.GetRandomNumber(640)
y = Math.GetRandomNumber(480)
GraphicsWindow.FillEllipse(x, y, 10, 10)
EndFor

A vletlenszer krk alkalmazs a GraphicsWindow GetRandomColor() mveletnek segtsgvel


a ciklus minden futsa sorn vletlen sznrtket rendel a GraphicsWindow BrushColor tulajdonsghoz.
A Math objektum GetRandomNumber(maxNumber) vletlenszm s maximlis rtke mvelete
segtsgvel ellltott vletlenszmok maximlis rtkei igazodnak az ablak mreteihez. A ciklus
utols futsa utn ezer vletlenszeren elhelyezked s szn krcske lesz lthat a grafikus ablakban.

24

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

24. bra: Vletlenszer krk

Szvegmegjelents
A grafikus ablak termszetesen szvegek megjelentsre is alkalmas, gy megfelel algoritmusok s
programozsi eljrsok segtsgvel valban sszetett alkalmazsok kszthetk.
Egy egyszer plda a szvegmegjelentsre:

'Szveg megjelentse a grafikus ablakban


GraphicsWindow.Show()
GraphicsWindow.Width = 270
GraphicsWindow.Height = 150
GraphicsWindow.BackgroundColor = "Black"
GraphicsWindow.FontSize = 36
GraphicsWindow.FontBold = "True"
GraphicsWindow.FontItalic = "True"
GraphicsWindow.BrushColor = "Red"
GraphicsWindow.DrawText(20, 40, "dvzljk!")

A GraphicsWindow objektum FontSize (betmret), FontBold (flkvr bet) s FontItalic (dlt


bet) ez utbbi kett True vagy False rtket vehet fel , illetve BrushColor tulajdonsgaival
belltottuk a szveg tulajdonsgait, a DrawText(x, y, text) szveg kirsa, x, y, szveg mvelettel
kirattuk a kvnt szveget.

25

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

A grafikus ablak hasznlata

25. bra: Szvegkirs a grafikus ablakban

26

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

9. fejezet - Tekncgrafika
A kezdetek
A 70-es s 80-as vekben de lnyegben ma is a kezd programozk krben klnsen npszer
volt a LOGO programozsi nyelv n. teknce (Turtle), amely tbb-kevsb egy apr teknsre hasonlt
objektumknt parancsokra vagy utastsokra mozgott a kpernyn, s kzben klnbz mveleteket
vgzett. Egy magyar programoznak taln illik tudnia, hogy a teknc se s ihletje a Kalmr Lszl
felgyelete alatt Muszka Dniel ltal a szegedi egyetemen 1957-ben megptett kibernetikus katicabogr
(egy mechanikus gp) volt.

26. bra: Muszka Dniel a kibernetikus katicabogrral (forrs: Sulinet)

A teknc hasznlata
Br az ltalnos cl programozsi nyelvek dnt tbbsge ilyen elemet nem hasznl, rdemes vele
megismerkedni, mert a programozst kicsit kzelebb hozza a kezd programozhoz. A teknc egyszer
utastssal megjelenthet a kperny kzepn:

Turtle.Show()

A megjelen teknc (27. bra) szmos mvelet elvgzsre hasznlhat.

27

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tekncgrafika

27. bra: A teknc


A teknc hasznlhat egyszerbb brk rajzolsra:

'Hzik rajzolsa
Turtle.Speed = 7
For i=1 To 4
Turtle.TurnRight()
Turtle.Move(100)
EndFor
Turtle.Turn(30)
Turtle.Move(100)
Turtle.Turn(120)
Turtle.Move(100)

A programkd els felben egy szmlls ciklus segtsgvel ngyszer elvgezzk a kvetkez
mveletet: A Turtle objektum TurnRight() jobbra fordul mveletvel a teknct jobbra fordtjuk
, majd a Move(distance) mozog, tvolsg) mvelettel egy 100 kppont hossz egyenest
rajzoltatunk.
A tet megrajzolsa sorn a Turtle objektum Turn(angle) fordul, szg mveletvel a teknct
mozgs eltt 30, majd 120 fokkal fordtjuk el az pp aktulis helyzethez kpest.

28

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tekncgrafika

28. bra: Hzikt rajzol teknc

sszetettebb brk rajzolsa teknccel


Termszetesen a teknc sszetettebb brk rajzolsra is hasznlhat. A kvetkez kd programozsi
szempontbl is rdekes:

'A teknc krei


lepesek = 50
hossz = 400 / lepesek
szog = 360 / lepesek
Turtle.Speed = 9
For j = 1 To 20
For i = 1 To lepesek
Turtle.Move(hossz)
Turtle.Turn(szog)
EndFor
Turtle.Turn(18)
EndFor

A bevezetett vltozinkat felhasznlva a 29. brn lthat alakzatot a teknc egymsba gyazott ciklusok
segtsgvel rajzolta fel.
A kr tven apr lpsre bontott a teknc minden lps sorn egy apr fordul felrajzolsrl a
bels ciklus gondoskodik:

(kls ciklus feje)


For i = 1 To lepesek
Turtle.Move(hossz)

29

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tekncgrafika

Turtle.Turn(szog)
EndFor
(kls ciklus magjnak msodik fele s lezrsa)

A kls ciklus sszesen hsszor futtatja vgig a bels ciklust gy, hogy minden krfelrajzols utn 18
fokkal elfordtja a teknct:

For j = 1 To 20
(bels ciklus)
Turtle.Turn(18)
EndFor

29. bra: A teknc krei


A teknc termszetesen gy is tud mozogni, hogy ekzben nem rajzol. A kvetkez alkalmazs ezt
hasznlja fel:

'Hatszg szaggatott vonallal


lepesek = 6
hossz = 400 / lepesek
szog = 360 / lepesek
For i = 1 To lepesek
For j = 1 To 6
Turtle.Move(hossz / 12)
Turtle.PenUp()
Turtle.Move(szog / 12)
Turtle.PenDown()
EndFor
Turtle.Turn(szog)

30

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tekncgrafika

EndFor

A fenti program szerkezete sok hasonlsgot mutat az elzvel. Itt is ciklusok egymsba gyazsval
oldottuk meg a feladatot. A vonal szaggatott jellegt a Turtle objektum PenUp() (tollat felemel) s
PenDown() (tollat lenyom) mveletvel biztostottuk.

30. bra: Hatszg felrajzolsa szaggatott vonallal

31

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

10. fejezet - Szubrutinok


sszetettebb programokat rdemesebb kisebb programrszekre, programszegmensekre, n.
szubrutinokra bontani. A szubrutinok hasznlatval ttekinthetbb s rvidebb tehetjk a
programkdunkat. Az sszetett feladatok rszfeladatokra bontsa ltalban a programrst is
megknnyti. A szubrutin egy programban tbb helyrl is behvhat a fprogramba, hasznlatval a
felesleges ismtldsek kikszblhetk.
A legtbb professzionlis clokra kialaktott programozsi nyelvtl eltren a Small Basic szubrutinjai
nem fogadnak paramtereket s nem adnak visszatrsi rtket, teht nem tekinthetk fggvnynek.

Faktorilis kiszmtsa szubrutinnal


A kvetkez plda korbbi, faktorilist kiszmt pldnk talaktott vltozata:

bekeres:
TextWindow.WriteLine("Krem, adjon meg egy egsz, nemnegatv szmot:")
szam = TextWindow.ReadNumber()
If szam <> Math.Floor(szam) Or szam < 0 Then
TextWindow.WriteLine("Egsz, nemnegatv szmrl volt sz!")
Goto bekeres
EndIf
Fakt() 'Faktorilist szmt szubrutin behvsa
TextWindow.WriteLine("A szm faktorilisa: " + szorzat)
Sub Fakt 'Faktorilist szmt szubrutin
szorzat = 1
While (szam > 1)
szorzat = szorzat * szam
szam = szam - 1
EndWhile
EndSub

A Fakt szubrutint a Sub kulcssz segtsgvel definiltuk, a szubrutinhoz tartoz kdrszletet az EndSub
kulcsszval zrtuk le. A szubrutint a programbl a Fakt() utastssal (mvelettel) hvtuk be. A program
pldt ad arra is, hogy a megjegyzseket nemcsak nll sorokba, hanem az utastsaink utn is
berhatjuk.

32

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

11. fejezet - Tmbk


A szmtstechnikban a tmb olyan adatszerkezet, amelyben minden egyes adatra azok sorszmval,
indexvel lehet hivatkozni. Az egydimenzis tmbket vektoroknak, a tbbdimenzis tmbket
mtrixoknak is nevezhetjk.

Fordtott sorrend tmbbel


A tmbk hasznlata nlkl nagyobb adatllomnyok, adatszerkezetek kezelse szinte lehetetlen. A
kvetkez, egyszer plda bekr hat szmot, majd fordtott sorrendben kirja azokat:

'Fordtott sorrendbe llts


For i = 1 To 6
TextWindow.WriteLine("Krem a(z) " + i + ". szmot:")
szam[i] = TextWindow.ReadNumber()
EndFor
TextWindow.WriteLine("A szmok fordtott sorrendben:")
For i = 6 To 1 Step -1
TextWindow.WriteLine("A(z) " + i + ". szm: " + szam[i])
EndFor

A bekrt t darab szmot a program a szam[i] tmbben trolta. Teht elszr a szam[1], majd a szam[2],
szam[3], szam[4], szam[5] vltozknak adtunk rtket. Mindezt az els szmlls ciklusunk biztostotta.
A fordtott sorrendben trtn kirskor azt hasznltuk ki, hogy a bekrt vltozrtkeket a program
a tmbben sorszmmal elltva (indexelve) trolta, gy a msodik ciklusunk segtsgvel a sorszmra
hivatkozva a fordtott sorrendben trtn kirs lehetv vlt.

31. bra: Szmok bekrse majd kirsa fordtott sorrendben

Indexels szveggel
Az elz programban a tmbt szmokkal indexeltk, azonban az indexels nemcsak szmokkal
trtnhet:

'Indexels szveggel

33

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tmbk

Adatbekrs()
Adatkirs()
Sub Adatbekrs
TextWindow.WriteLine("Adatok bekrse")
TextWindow.Write("Nv: ")
felh["nv"] = TextWindow.Read()
TextWindow.Write("Kor: ")
felh["kor"] = TextWindow.ReadNumber()
TextWindow.Write("Telepls: ")
felh["telepls"] = TextWindow.Read()
TextWindow.Write("Irnytszm: ")
felh["irnytszm"] = TextWindow.Read()
EndSub
Sub Adatkirs
TextWindow.WriteLine("Adatok kirsa")
TextWindow.Write("Melyik adatot rjuk ki? (nv, kor, telepls, irnytszm)")
index = TextWindow.Read()
TextWindow.WriteLine(index + " = " + felh[index])
EndSub

A fenti program kt szubrutinra oszlik, az egyik bekr a felhasznltl nhny adatot, s az indexelst
mr szvegek segtsgvel elvgezve, eltrolja azokat egy tmbben, a msik pedig a felhasznl
vlasztsa alapjn kir egy rtket a tmbbl. A programban a TextWindow objektum Write(data)
(r, adat) mvelett is felhasznltuk. A Write a WriteLine-tl eltren nem kezd j sort a kirs
utn.
Az irnytszmot azrt krtk be szvegknt (Read()) s nem szmknt (ReadNumber()), mert
valjban szmjegyekbl ll szvegrl van sz, matematikai mveleteket irnytszmokkal nem
vgezhetnk.
A pldaprogram sorn clzottan mindenhol nemcsak a feliratoknl magyar kezetes betket
hasznltunk, hogy a hibs adatmegads (a kirats sorn) ne vezessen felesleges hibhoz.

32. bra: Szveggel indexelt tmb plda futsi eredmnye

Tbbdimenzis tmbk
Az elz program viszonylag knnyen talakthat tbb felhasznl adatait bekr s kir programm:

34

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tmbk

'Kttdimenzis tmb
TextWindow.WriteLine("Felhasznlk szma?")
szam = TextWindow.ReadNumber()
Adatbekrs()
Adatkirs()
Sub Adatbekrs
For i=1 To szam
TextWindow.WriteLine(i + ". felhasznl adatainak bekrse")
TextWindow.Write("Nv: ")
felh[i]["nv"] = TextWindow.Read()
TextWindow.Write("Kor: ")
felh[i]["kor"] = TextWindow.ReadNumber()
TextWindow.Write("Telepls: ")
felh[i]["telepls"] = TextWindow.Read()
TextWindow.Write("Irnytszm: ")
felh[i]["irnytszm"] = TextWindow.Read()
EndFor
EndSub

Sub Adatkirs
TextWindow.WriteLine("Adatok kirsa")
TextWindow.Write("Melyik felhasznl adatt rjuk ki? (1, 2, ... n)")
index1 = TextWindow.Read()
TextWindow.Write("Melyik adatot rjuk ki? (nv, kor, telepls, irnytszm)")
index2 = TextWindow.Read()
TextWindow.WriteLine(index1 + ". fehasznl " + index2 + " adata = " + felh[inde
EndSub

A fenti program a bekrt adatokat egy ktdimenzis mtrixban trolja, az albbi sma szerint:
Nv

Kor

Telepls

Irnytszm

1. felh. [1][nv] = Pisti [1][kor] = 25 [1][telepls] = Budapest [1][irnytszm] = 1134


2. felh. [2][nv] = Juli

[2][kor] = 29 [2][telepls] = Sopron

[2][irnytszm] = 9400

n. felh. [n][nv] = gi

[n][kor] = 18 [n][telepls] = Gyr

[n][irnytszm] = 9025

1. tblzat: Ktdimenzis tmb adatszerkezete


Ktdimenzis tmb adatszerkezete]
Taln rdemes megjegyezni, hogy a tmbk 3,4,5 vagy akr tbb dimenzisak is lehetnek, mg ha
hrom dimenzinl tbbet a vals trben nehezen is tudunk elkpzelni.
A fenti program sok hibalehetsget rejt magban (ez rszben a korbbi programokra is igaz), hiszen
rossz adatbevitellel a felhasznl helytelen eredmnyhez jut. Az ilyen problmkat valamilyen tonmdon professzionlis szinten kezelni kell.
Az is jl lthat korlt (ezernyi ms problma mellett), hogy az adatokat a program csak futsi idben
trolja. lesben ez nem lenne kielgt, de az ilyen tpus problmk tvezetnek bennnket az
adatbzis-kezels tmakrbe.

35

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tmbk

Taln ennl a pldnl rdemes hangslyozni, hogy a jegyzetben lv alkalmazsok alapveten apr
pldaprogramok, az egyes felmerl problmk teljes kr tisztzsa gyakran ksbbi stdiumokra
marad.

33. bra: A nvbekr-kir programunk egyik futsi eredmnye

Tmbre pl grafikus alkalmazs


A tmbk alkalmazsnak egy grafikus pldja:

'Kisz krk
sorok = 6
oszlopok = 6
meret = 40
For r = 1 To sorok
For c = 1 To oszlopok
GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
kor[r][c] = Shapes.AddEllipse(meret, meret)
Shapes.Move(kor[r][c], c * meret, r * meret)
EndFor
EndFor
For r = 1 To sorok
For c = 1 To oszlopok
Shapes.Animate(kor[r][c], 0, 0, 1000)
Program.Delay(200)
EndFor
EndFor

rdemes a fenti programot az eddigiek alapjn nllan kielemezni. Tallunk benne a krket 6 sorba
s 6 oszlopba felr, majd onnan egyenknt a bal fels sarokba visszamozgat, egymsba gyazott
ciklusokat, s szmos j elemet.
A Shapes (alakzatok) objektum egyes mveletei segtsgvel klnbz alakzatokat tudunk
megjelenteni, mozgatni, elforgatni.
Esetnkben a Shapes.AddEllipse(width, height) ellipszis (kr) hozzadsa, szlessg, magassg
mvelet segtsgvel 48 darab kis sznes krrel tltjk fel a kor[r][c] ktdimenzis tmbt. A
Shapes.AddEllipse(meret, meret) mvelet a ciklusok lefutsa sorn a bal fels sarokban el is helyezi

36

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Tmbk

a 48 darab krt, amelyek egyms fltt termszetesen csak egynek ltszannak a tovbbi utastsok
nlkl.
Az alakzatok pozciba rendezsrl a Move(shapeName, x, y) mvelet mozgat, alakzat neve,
az j x s y koordintk gondoskodik. A krket hatszor hatos tblba rendez
Shapes.Move(nkor[r][c], c * meret, r * meret) mveletnl rdemes tudatostani, hogy a tmbben trolt
grafikus elemek kerlnek az adott pozciba.
A Shapes.Animate(shapeName, x, y, duration) animlt mozgats , alakzat, j x s y koordinta,
idtartam (milliszekundumban) adott idtartam alatt j pozciba mozgat egy elemet. Esetnkben
a Shapes.Animate(negyzet[r][c], 0, 0, 1000) ciklusok segtsgvel, egyms utn a bal fels sarokba
mozgatja vissza a krket, egyenknt 1000 milliszekundum alatt.
A Program objektum Delay(milliSeconds) ksleltets, milliszekundum mvelete a megadott
milliszekundumokkal kslelteti a kvetkez sorra ugrst, azaz a program futst. Esetnkben a 200
milliszekundumnyi ksleltets nlkl a krk vizulisan szinte egyszerre (egyms utn, de szemmel
kvethetetlen ideltrssel) sznnak ki a bal fels sarokba.

34. bra: Pillanatfelvtel a Kisz krk program futsrl

37

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

12. fejezet - Esemnyek s vezrlk


Az albbi Tekncrajzol program az esemnyek s a vezrlk hasznlatra ad pldt:

'Tekncrajzol
GraphicsWindow.Title = "Tekncrajzol"
GraphicsWindow.ShowMessage("Szia! Kellemes rajzolst!", "Ksznts")
gomb[1] = Controls.AddButton("Balra", 10, 230)
gomb[2] = Controls.AddButton("Jobbra", 565, 230)
gomb[3] = Controls.AddButton("Menj!", 290, 10)
gomb[4] = Controls.AddButton("Rajzol", 10, 10)
gomb[5] = Controls.AddButton("Nem rajzol", 540, 10)
Turtle.Show()
Controls.ButtonClicked = Kattintas
Sub Kattintas
n = Controls.LastClickedButton
If n = gomb [1] Then
Turtle.Turn(-10)
EndIf
If n = gomb [2] Then
Turtle.Turn(10)
EndIf
If n = gomb [3] Then
Turtle.Move(5)
EndIf
If n = gomb [4] Then
Turtle.PenDown()
EndIf
If n = gomb [5] Then
Turtle.PenUp()
EndIf
EndSub

A program az els fzisban belltja a grafikus ablak fejlcben lv cmet (GraphicsWindow.Title =


"Tekncrajzol"), majd a GraphicsWindow.ShowMessage("Szia! Kellemes rajzolst!", "Ksznts")
sorral ksznti a felhasznlt.
A GraphicsWindow ShowMessage(text, title) zenet megjelentse, szveg, cm mvelet
segtsgvel egy szvegdobozt jelentnk meg.
A szvegdobozban megjelen OK gombra kattints utn a Controls (vezrlk) objektum
AddButton(caption, left, top) gombot megjelent, cm, bal (x koordinta), fels (y koordinta)
eljrsa segtsgvel megjelentnk t nyomgombot (vezrlt), s egyttal feltltjk velk a gomb
tmbt.
A vezrlk segtsgvel nmi interaktivitst vihetnk a programunkba. A vezrlk klnbz
felhasznli tevkenysgeket rzkelnek futsi idben (kattints, szvegbers), amelyek lnyegben
inputknt szolglhatnak a program szmra. A felhasznl (de tgabb rtelemben, ms
fejlesztkrnyezetben nemcsak a felhasznl) vezrlkn s ms elemeken vgzett tevkenysgeit
esemnyeknek nevezzk, s termszetesen lteznek felhasznli akarat nlkl bekvetkez, s kezelhet
esemnyek is. A klnbz esemnyek kezelsre pl programozsi technikt esemnyvezrelt
programozsnak hvjuk.

38

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Esemnyek s vezrlk

Kifinomult programfejleszti krnyezetek gyakran nagyon gazdag vezrlkszletet biztostanak a


fejlesztshez. A Small Basic csak nhny vezrl hasznlatt teszi lehetv, de a hasznlatuk
rdekesebb s rugalmasabb teheti a programjainkat. A Small Basic az esemnyvezrelt programozs
lehetsgeiben sem kzelti meg a nagyobb testvreit (Microsoft Visual Basic, Visual Basic .NET,
Java, Python stb.), de az esemnyvezrelt programozs logikjnak elsajttsra nagyon is alkalmas.

35. bra: A Tekncrajzol program egy lehetsges futsa


A Tekncrajzol program egy darab esemnyt kezel. Ha a felhasznl a grafikus ablakban tallhat
gombok egyikre kattint, akkor a Controls objektum ButtonClicked (gombra kattintottak)
esemnykezelje meghvja az ltalunk definilt Kattintas szubrutint.
Formailag a Controls.ButtonClicked = Kattintas utasts ksrtetiesen emlkeztet egy vltoz
rtkadsra, ne keverjk ssze az rtkadst a szubrutin behvsval!
A szubrutinunk minden gombra kattints (brmelyik gombra kattinthatunk) utn az n vltozba tlti
a Controls objektum LastClickedButton (az utoljra kattintott gomb) rtkt (az rtk esetnkben
button1, button2 button5 lehet), majd t If Then szerkezettel megvizsglja, hogy az rtk a
korbban feltlttt gomb[] tmbnk melyik rtkvel azonos. Ha a vizsglt felttel teljesl, a
program vgrehajtja a szksges tekncmveleteket.

Tbb esemny
A program futsa kzben termszetesen tbb esemny is kezelhet.

GraphicsWindow.Show()
GraphicsWindow.MouseDown = Egerle
GraphicsWindow.MouseMove = Egermozog
GraphicsWindow.KeyDown = Gomble
Sub Egerle
If Mouse.IsLeftButtonDown Then

39

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Esemnyek s vezrlk

GraphicsWindow.Title = "A baloldali egrgombra kattintottl."


ElseIf Mouse.IsRightButtonDown Then
GraphicsWindow.Title = "A jobboldali egrgombra kattintottl."
EndIf
EndSub
Sub Egermozog
GraphicsWindow.Title = "Egrpozci: " + Mouse.MouseX + ", " + Mouse.MouseY
EndSub

Sub Gomble
If GraphicsWindow.LastKey = "I" Then
Mouse.ShowCursor()
GraphicsWindow.Title = "A kurzor lthat. Nyomd le az N bett, ha el aka
ElseIf GraphicsWindow.LastKey = "N" Then
Mouse.HideCursor()
GraphicsWindow.Title = "A kurzor rejtett. Nyomd le az I bett, ha meg ak
EndIf
EndSub

A fenti program hrom klnbz esemnyt kezel. Brmelyik egrgomb lenyomsa, az egr mozgatsa
s a billentyzeten egy gomb lenyomsa meghv egy-egy esemnykezel szubrutint.
A GraphicsWindow MouseDown (egrgomb lenyomsa), MouseMove (egr mozgatsa) s KeyDown
(billenty lenyomsa) esemnykezeli hvjk meg az egyes esemnykezel szubrutinokat. A
szubrutinokon bell eddig nem trgyalt elemeket hvunk segtsgl a programozsi feladat megoldsra.
Az Egerle szubrutinban tallhat feltteles elgazsok a Mouse objektum IsLeftButtonDown
(lenyomtk az egr baloldali kapcsoljt) s az IsRightButtonDown (lenyomtk az egr jobboldali
kapcsoljt) tulajdonsgaira plnek. Ha valamelyik tulajdonsg rtke igaz, akkor a grafikus ablak
fejlcben lv felirat megvltozik.
A korbbiakban az ElseIf klnben-ha kulcsszval nem tallkoztunk, mkdse az If kulcsszval
formlt utastsval azonos, azonban az ElseIfben tallhat felttelt a program csak akkor vizsglja
meg, ha a kls If Then szerkezetnk hamis (Else, pontosabban: ElseIf) gra kerlnk.
Az Egermozog szubrutin a Mouse objektum MouseX (egr x pozcija) s MouseY (egr y
pozcija) tulajdonsgainak rtkeit hasznlja fel.
A Gomble szubrutin az utols lenyomott billenty rtkt vizsglja meg a GraphicsWindow LastKey
(utols lenyomott gomb) tulajdonsga segtsgvel. Az egrmutat megjelentse s eltntetse (az
I, illetve N gombok lenyomsa esetn) a Mouse objektum ShowCursor() s HideCursor() mveleteivel
trtnik.
Az esemnykezel szubrutinok meghvsakor a tbbi szubrutintl eltren nem hasznlunk zrjelet.

40

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

13. fejezet - Flickr


A Small Basicbe tbb olyan elemet is beptettek, amelyeknek gyakorlati haszna ugyan kevs, de
segtsgkkel a programozs kzelebb hozhat a fiatal korosztlyokhoz. Az albbi alkalmazs a
npszer Flickr kpmegosztrl olvas be egy kpet httrknt, az ablak mreteihez igazodva:

GraphicsWindow.Show()
kep = Flickr.GetRandomPicture("kutya")
szelesseg = GraphicsWindow.Width
magassag = GraphicsWindow.Height
GraphicsWindow.DrawResizedImage(kep, 0, 0, szelesseg, magassag)

A vletlen kp kivlasztsa a Flickr objektum GetRandomPicture(tag) vletlen kp betltse,


cmke mveletvel trtnik. A kp megjelentshez a DrawResizedImage(imageName, x, y, width,
height) tmretezett kpet rajzol, x s y koordinta, szlessg, magassg mveletet hvjuk
segtsgl. A Flickrbe feltlttt kpekbl a keressi algoritmus olyan kpeket vlogat ki, amelyek
cmki kztt szerepel az ltalunk megadott cmke.

36. bra: A kpbetlt program egyik futsi eredmnye

41

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

14. fejezet - Jtkprogramok Small


Basic programozsi nyelven
Az interneten szmos program rhet el, amelyek fejleszti nagyon kevs utastssal komoly
programokat ksztettek. Kzlk a kezd programozk szmra taln a jtkprogramok a
legrdekesebbek. Small Basic programozsi nyelven nem kszthetnk olyan kifinomult
jtkprogramokat s ltalban vve brmilyen alkalmazst mint a professzionlis programozsi
nyelveken, de sokkal elbb sikerlmnyhez jutunk egy-egy program megrsval.

tgets program
Az albbi jtkprogram taln a lehet legegyszerbb. Elemezzk a programkdot nllan! (A
programkd rszletes magyarzatt elhagyjuk.)

GraphicsWindow.BackgroundColor = "White"
GraphicsWindow.BrushColor = "Red"
uto = Shapes.AddRectangle(120, 12)
GraphicsWindow.BrushColor = "Orange"
labda = Shapes.AddEllipse(16, 16)
GraphicsWindow.MouseMove = OnMouseMove
x = 0
y = 0
dx = 1
dy = 1
Ismetlodes:
x = x + dx
y = y + dy
szelesseg = GraphicsWindow.Width
hossz = GraphicsWindow.Height
If (x >= szelesseg - 16 or x <= 0) Then
dx = -dx
EndIf
If (y <= 0) Then
dy = -dy
EndIf
hx = Shapes.GetLeft (uto)
If (y = hossz - 28 and x >= hx and x <= hx + 120) Then
dy = -dy
EndIf
Shapes.Move(labda, x, y)
Program.Delay(5)
If (y < hossz) Then
Goto Ismetlodes
EndIf
GraphicsWindow.ShowMessage("Sajnos,vesztettl.", "Jtk vge")
Sub OnMouseMove
paddleX = GraphicsWindow.MouseX
Shapes.Move(uto, paddleX - 60, GraphicsWindow.Height - 12)
EndSub

42

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Jtkprogramok Small Basic


programozsi nyelven

37. bra: tgets jtkprogramunk


A fenti program mint ltalban az sszes program elssorban akkor vlhat rdekess, ha egyni
ignyeket kielgtve tovbbfejlesztik. A jegyzet vgn mg felhvjuk a figyelmet nhny
jtkprogramra.

43

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

15. fejezet - Kiegsztsek a Small


Basichez
A Small Basic eredeti formjban elssorban a jtkos tanulst szolglja, azonban a nyelv tmogatja,
hogy a fejlesztk olyan kiegsztseket rjanak, amelyek segtsgvel az alapcsomag korltozott
lehetsgein tllpve professzionlis alkalmazsok ksztsre nylik lehetsg. A kiegsztsek
elemeihez kln magyarzatot ltalban nem adunk.

LitDev kiegszts
Az internetrl letlthet az ingyenes LitDev extension (jelenleg pl. a http://litdev.hostoi.com/ oldalrl,
de ez a ksbbiekben vltozhat), amely valban professzionlis elemeket visz az alapverziba.
A fejlesztk szmra rdekes LitDev_Source.zip fjlra egyelre nincs szksgnk, ezrt tltsk le az
oldalrl az alapveten minden szksges .dll s .xml fjlt tartalmaz LitDev_v1.0.zip fjlt.
Kicsomagols utn a LitDev_v1.0 knyvtrban lv a LitDev.xml s a LitDev.dll fjlokat opercis
rendszertl fggen msoljuk t a C:\Program Files\Microsoft\Small Basic\lib vagy a C:\Program
Files (x86)\Microsoft\Small Basic\lib knyvtrba.
A LitDev fejleszti a Small Basic 20 alapobjektumt 22 tovbbi objektummal egsztettk ki a szksges
mveletekkel, tulajdonsgokkal s esemnyekkel egytt. rdemes kiprblni s elemezni a kicsomagolt
knyvtr alknyvtraiban tallhat alkalmazsok mindegyikt, tletesek s ltvnyosak. A
pldaalkalmazsok azonban korntsem mertik ki a kiegsztsben rejl lehetsgeket, radsul a
kiegszts nyjtotta lehetsgeket folyamatosan bvtik.
A kiegsztsek hozzadsa utn a kiegszts programnyelvi elemeinek lersa ppgy lthat, mint
az alapvltozat. Hasznlatukhoz ennek ellenre mindig rdemes ttanulmnyozni a fejleszti
dokumentcit.

Statisztikai alkalmazs LitDevvel


Az albbi graph-shapes.sb alkalmazs pl. bepillantst enged a Small Basic LitDev kiegsztsben
rejl statisztikai-fizikai-modellezsi lehetsgekbe:

gw = 1200
gh = 600
GraphicsWindow.Width = gw
GraphicsWindow.Height = gh
GraphicsWindow.BackgroundColor = LDColours.WhiteSmoke
LDGraph.BorderColour = "#00000000"
LDGraph.InteriorColour = "#00000000"
For i = 0 To 200
x = i/5
y = x*Math.Sin(x)
data1[x] = y
EndFor
For i = -100 To 100
x = i/5
y = x*Math.Sin(x)*Math.Sin(x*x/7)
data2[x] = y
EndFor
LDGraph.ExportCSV(data1,Program.Directory+"\Graphing.csv")

44

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Kiegsztsek a Small Basichez

graph1 = LDGraph.AddGraph(10,10,gw/2-20,gh-20,"Modified Sine Wave","X (Radians)"


LDGraph.AddSeriesLine(graph1,"Series 1",data1,"Red")
LDGraph.AddSeriesLine(graph1,"Series 2",data2,"Blue")
LDGraph.DeleteSeries(graph1,"Series 1")
LDGraph.AddSeriesLine(graph1,"Series 1",data1,"Red")
Shapes.Zoom(graph1,0.7,0.7)
Shapes.Rotate(graph1,30)
Shapes.SetOpacity(graph1,80)
LDShapes.ZIndex(graph1,1)
graph2 = LDGraph.AddGraph(610,10,gw/2-20,gh-20,"Modified Sine Wave","X (Radians)
LDGraph.AddSeriesHitogram(graph2,"Series 1",data1,"Green")
LDGraph.StopEvents()

A program elssorban az LitDev kiegszts LDGraph, LDShapes s LDEvents objektumainak


lehetsgeit hasznlja ki.

38. bra: Szinuszhullmok felrajzolsa a LitDev kiegszts segtsgvel

Teaching kiegszts
A Small Basic npszer kiegsztseit tartalmaz csomag a Teaching extensions. A
http://extendsmallbasic.codeplex.com/downloads/get/261276 cmrl (a link vltozhat) letlthet
csomagban lv, gyerekeknek s kezd programozknak sznt kiegsztst a LitDev kiegsztsnl
megismert mdon adhatjuk hozz a fejlesztkrnyezethez. A letlttt SmallBasicFun.zip llomny
kicsomagolsa utn a SmallBasicFun.dll s a SmallBasicFun.xml llomnyokat kell tmsolnunk a lib
knyvtrba.
Telepts utn a http://www.teachingkidsprogramming.com/ oldalon lv egyszer alkalmazsokat is
tanulmnyozhatjuk s tesztelhetjk a Small Basic fejlesztkrnyezet segtsgvel.

Data kiegszts
Hasonlan npszer kiegszts szmos j objektummal, tulajdonsggal, mvelettel, esemnnyel
a
Data
extension,
amely
jelenleg
a
http://social.msdn.microsoft.com/Forums/enUS/smallbasic/thread/c8a5d124-b02d-44dd-982e-abf18d60f4b7
s
a
http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/94015515-5579-4463-b8859d77ec11b2cb threadrl tlthet le. A letlttt .exe fjl futtatsa utn nem kell manulisan a megfelel
helyre msolnunk a kiegszts elrshez szksges .dll s .xml llomnyt.

45

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Kiegsztsek a Small Basichez

A Data kiegszts az egyik legizgalmasabb kiterjeszts, de egyes hibi miatt a letlthetsge nem
folyamatos, e sorok rsakor is ppen fejlesztik.
Termszetesen a kiegsztk szma sokkal magasabb, az egyes kiegsztsekben rejl lehetsgek
megismerse tovbbi akr nll tanulst ignyel. rdemes folyamatosan bngszni a klnbz
Small Basic-frumokat pl. a http://social.msdn.microsoft.com/Forums/en-US/smallbasic/ frumot
, programozsi tancsok mellett a kiegsztsekben rejl lehetsgekrl is hasznos informcikhoz
juthatunk.

Program importlsa
Szmos alkalmazs programkdjt a fejlesztkrnyezet Import gombjra kattintva az ID megadsa
utn importlhatjuk.
Klnbz fejleszti frumokon a programozk gyakran csak a program azonostjt (ID-jt) adjk
meg, st, hosszabb programkdoknl a http://smallbasic.com/ oldal is inkbb csak az ID-t kzli.
Pl. a TETRIS ID-vel a npszer, azonos nev jtkprogramot hvhatjuk be a fejlesztkrnyezet
szerkesztjbe.

40. bra: Small Basic Tetris

46

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

16. fejezet - Adatbzis-kezels a Small


Basicben
Br nem zrhat ki, hogy a jvben a fejlesztk relcis adatbzisok kezelsre alkalmas kiegsztst
rnak a Small Basichez, jelenleg ilyen, ltalnosan hasznlhat kiegszts nincs, br van nhny biztat
prblkozs. Az adatbzis-kapcsolatos alkalmazsok rsa amgy is mlyebb programozsi s adatbziskezelsi (SQL) ismereteket ignyel, gy egy alapveten tanulst s szrakozst szolgl programozsi
nyelvben taln ez szksgtelen.
Ennek ellenre egyszerbb adatszerkezetek tarts a futsi idn tli trolsra esetenknt szksgnk
lehet.

Adatok szvegfjlban
A Small Basic lehetv teszi az egyes adatok fjlokba val kirst s beolvasst.

A["a"] = "Golden"
A["b"] = "alma"
A["c"] = "zld"
A["d"] = "elfogyott"
File.WriteContents("D:\small basic\adatbazis\db.txt", A)

A fenti program pldul - amennyiben a megadott meghajt, knyvtr s alknyvtr ltezik, a db.text
fjlba menti az A tmb rtkeit. A program a File objektum WriteContents(filePath, contents)
tartalmak kirsa, elrsi t, tartalmak mveletre pl.

Adatok Excel-tblban
Szvegfjlokkal azonban egy kicsit nehzkes az adatkezels, ezrt hasznljuk inkbb a jval knnyebben
kezelhet Microsoft Excelt az adataink trolsra! (Termszetesen az Excel sem adatbzis-kezel, de
egyszerbb adatstruktrk kezelsre kivlan alkalmas.)
Ehhez elszr is teleptennk kell az Excel Library for Small Basic kiegsztst a
http://excel4smallbasic.codeplex.com/ oldalrl. A telept automatikusan a lib alknyvtrba telepti a
szksges fjlokat. (A kiegszts a .NET 3.5 vagy magasabb verziszm keretrendszer mellett
legalbb Excel 2007-es verzij tblzatkezelt is ignyel.)
Hozzunk ltre egy elso. xlsx nev fjlt egy tetszleges knyvtrban! (Mi ezt a sajt gpnkn a D:\small
basic\adatbazis knyvtrban tesszk.)
Az albbi kd egyszer adatfeltltst tesz lehetv:

n = 0
ertek = "kezdrtk"
While ertek <> ""
n = n + 1
ertek = Excel.ReadCell("D:\small basic\adatbazis\proba.xlsx","Munka1", n, 1)
EndWhile
Excel.CloseBook("D:\small basic\adatbazis\proba.xlsx")
TextWindow.Write("Nv?")
Adat[1] = TextWindow.Read()
TextWindow.Write("Kor?")

47

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Adatbzis-kezels a Small Basicben

Adat[2] = TextWindow.ReadNumber()
TextWindow.Write("Foglalkozs?")
Adat[3] = TextWindow.Read()
For i = 1 To 3
Excel.WriteCell("D:\small basic\adatbazis\proba.xlsx","Munka1", n, i, Adat[i
EndFor
Excel.CloseBook("D:\small basic\adatbazis\proba.xlsx")
TextWindow.WriteLine("Adatfelvtel megtrtnt!")

Elszr egyszer algoritmussal megvizsgljuk, hogy eddig hny sorba rtunk, majd a kvetkez sorba
feltltjk a bekrt rtkeket.
Az Excel-fjl megnyitsa s az adott rtk beolvassa az Excel.ReadCell(filePath, sheetName, rowIndex,
columnIndex) cellt beolvas, elrsi t, munkalapnv, sorindex, oszlopindex mvelet
trtnik. Egy adott cellba az Excel.WriteCell(filePath, sheetName, rowIndex, columnIndex, newValue)
cellba r, elrsi t, munkalapnv, sorindex, oszlopindex, j rtk mvelet segtsgvel
rhatunk. Az Excel-tblt az Excel.CloseBook(filePathOrName) bezr, elrsi t vagy fjlnv
mvelettel zrhatjuk be s menthetjk el. E mveletekkel a korbban elmentett adatok vltozkba
trtn beolvassa is megoldhat.
Az ertek vltoz kezdrtknek megadsra azrt volt szksg, mert enlkl a ciklus magjban lv
utastsok egyszer sem futottak volna le.

41. bra: Adatkezel programunk Excel-fjlja kt adatfeltlts utn


rdemes megjegyezni, hogy az Excel sok ms Microsoft-szoftverhez hasonlan de a szabad szoftverek
vilgban is tallunk pldkat az Excel lehetsgeit sokkal jobban kihasznl VBA programozsi
nyelvvel (pl. a 2010-es verzinl Visual Basic for Applications in Excel 2010) programozhat. A VBA
sok elemben nagyon hasonlt a Small Basichez, br inkbb a nagyobb testvr, a Visual Basic egyik
klnjnak tekinthet.
A fenti program termszetesen csak apr, korntsem tkletes plda, de az adatok beolvassa s a
futsi idben keletkez adatok tarts trolsa szmos programozsi feladatnl felmerlhet.

48

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Adatbzis-kezels a Small Basicben

42. bra: Adatkezel programunk futsi idben

49

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

17. fejezet - Small Basic-pldk


Az albbi programokhoz a kdokon belli megjegyzseken tl csak minimlis mrtkben fznk
tovbbi megjegyzseket. Kizrlag az alapnyelvi elemekre plnek, kiegsztseket nem hasznlnak.
Leginkbb azt hivatottak szemlltetni, hogy nmi tletessggel nhny soros programok is lehetnek
szrakoztatk. Termszetesen sokkal sszetettebb s ltvnyosabb programok is rhatk, ezek a
klnbz online programknyvtrakban elrhetk.

Helyesrs
Az albbi program bevezetst ad a szvegek kezelsbe:

'Helyesrs-ellenrz program
'Angol helyesrs-ellenrz
'A Dictionary.GetDefinition(word) mveletre pl.
'Internet-hozzfrs szksges hozz.
'
szoveg = "abcdefghijklmnopqrstuvwxyz'ABCDEFGHIJKLMNOPQRSTUVWXYZ"
While (bevittszoveg <> " ") 'kt szkz
TextWindow.WriteLine(" ")
TextWindow.WriteLine("rja be az angol nyelv mondatot: ")
bevittszoveg = Text.Append(TextWindow.Read()," ")
For i = 1 To Text.GetLength(bevittszoveg)
If (Text.GetIndexOf(szoveg,Text.GetSubText (bevittszoveg,i,1)) = 0) Then
If (szo <> "") Then
If (Dictionary.GetDefinition(szo) = "") Then
TextWindow.BackgroundColor="white"
TextWindow.ForegroundColor="black"
TextWindow.Write(szo)
TextWindow.BackgroundColor="black"
TextWindow.ForegroundColor="white"
Else
TextWindow.Write(szo)
EndIf
szo = ""
EndIf
TextWindow.Write(Text.GetSubText(bevittszoveg,i,1))
Else
szo = Text.Append(szo,Text.GetSubText(bevittszoveg,i,1))
EndIf
EndFor
EndWhile

A program j elemei:
A Text(szveg) objektum szvegek kezelsre alkalmas mveleteket tartalmaz.
A Text objektum Append(text1, text2) sszefz, els szveg, msodik szveg mvelete
kt szvegdarabot sszefzve egy szveget ad eredmnyl.
A Text objektum GetLength(text) hosszsg meghatrozsa, szveg mvelete megadja
az adott szveg karakterekben mrt hosszt.
A Text objektum GetIndexOf(text, subText) index meghatrozsa, szveg, rszszveg
(keresett szveg) mvelete megadja azt a pozcit, ahol a keresett rszszveg a szvegben

50

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

megjelenik. Ha a keresett szveget a szveg nem tartalmazza, a visszatrsi rtk nulla. (A keresett
szveg termszetesen egyetlen karakter is lehet.)
A Text objektum GetSubText(text, start, length) rszszveg ellltsa, szveg,
kezdpozci, hosszsg mvelete a szveg egy adott kezdpozcijbl adott szm
karakter hossz szveget llt el.
A Dictionary.GetDefinition(word) - sztr, definci meghatrozsa, sz mvelet a Small
Basic online elrhet sztrbl a keresett sz defincijt adja eredmnyl.

43. bra: A helyesrs-ellenrz program egyik futsi eredmnye

Jslat
Egyszer program a tmbk gyakorlsra:

Kezdet:
joslat[1] = "Biztosan."
joslat[2] = "Nagyon valszn."
joslat[3] = "Valszn."
joslat[4] = "Elfordulhat."
joslat[5] = "Taln."
joslat[6] = "Nem valszn."
joslat[7] = "Aligha."
joslat[8] = "Szinte kizrt."
joslat[9] = "Biztos, hogy nem."
joslat_tombhossz=Array.GetItemCount(joslat)
kovetkezo=Text.GetCharacter(13)+Text.GetCharacter(10)

Ciklus:
TextWindow.Write(("Krek egy eldntend, jvre vonatkoz krdst! Egyrtelm v
TextWindow.Read()
TextWindow.WriteLine((joslat[Math.GetRandomNumber(joslat_tombhossz)] + kovetkezo
Goto Ciklus

A program j elemei:

51

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

A tmbmveletek kezelst szolgl Array (tmb) objektum GetItemCount(array) elemek


sszeszmolsa, tmb mvelete megszmolja, hogy egy tmb hny elembl ll.
A Text objektum GetCharacter(characterCode) karakter kirsa, karakterkd mvelet a
karakterek Unicode-tblban lv szma alapjn visszaadja az adott karaktert. A 13-as s 10-es
karakterkd kombincija a sortrst jelenti (13 = CR carriage return , (rgp)kocsi/kurzor vissza,
, 10 = LF line feed, soremels/kvetkez sor).

44. bra: A Jslat program mkds kzben


A programkdban hasznlt vgtelen ciklus ltalban nem szerencss, komolyabb programozsi
feladatoknl kerlend. Az egyszersg kedvrt a ksbbiekben is tbb helyen hasznljuk ezt a
mdszert, de rdemes megjegyezni, hogy a standard programozsi mdszertanban ez lnyegben tiltott
eszkz. Kezd programozk azonban minden tovbbi nlkl lhetnek vele.

Morzebc
Egyszer Morzebc -alkalmazs:

Morse="a=+-;b=-+++;c=-+-+;d=-++;e=+;f=++-+;g=--+;h=++++;i=++;j=+---;k=-+-;l=+-++
Ciklus:
TextWindow.Write("Szveg megadsa (angol bc!):")
t=TextWindow.Read()
For i=1 To Text.GetLength(t)
TextWindow.Write(
(Morse[Text.ConvertToLowerCase(Text.GetSubText(t,i,1))])+" ")
EndFor
TextWindow.WriteLine(" ")
Goto Ciklus

A program j eleme:
A Text objektum ConvertToLowerCase(text) kisbetsre tkonvertl, szveg mvelete
kisbetsre alaktja t a nagybets szvegeket.

52

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

45. bra: Morzebc-alkalmazs

K-papr-oll jtk egysoros programmal


Az albbi jtk lnyegi rsze egyetlen programsor. lesben nem szabad vagy legalbbis nem rdemes
ilyen szint kdsrtsre trekedni, de rdekessgknt rdemes tanulmnyozni az albbi
trvnyszeren fapados, tovbbfejlesztsre szorul jtkprogramot:

'K-papr-oll - pldaprogram az egysoros jtkprogramra


'
'A k ersebb ollnl
'Az oll ersebb a paprnl
'A papr ersebb a knl
'
'A jtk sorn csak egy nagybets karaktert kell megadnunk.
'(K),(P)apr,(O)oll
'A program is kivlaszt egy vletlen jtkot a szmtgpnek, mint ellenflnek,
'
'">K" jelentse: "Kvet vlasztottl."
'">P" jelentse: "Paprt vlasztottl."
'">O" jelentse "Ollt vlasztottl"
'"vK" jelentse: "A szmtgp kvet vlasztott."
'"vP" jelentse: "A szmtgp paprt vlasztott."
'"vO" jelentse: "A szmtgp ollt vlasztott."
'"=G" jelentse: "Gyztl!"
'"=V" jelentse: "Vesztettl!"
'"=D" jelentse: "Dntetlen."
'Teht ">KvO=G" jelentse:
'"Te kvet vlasztottl, a szmtgp pedig ollt. Nyertl!"
'A PROGRAM TOVBBFEJLESZTEND! :-)
Jtk:

TextWindow.WriteLine
((Text.GetSubText(Text.GetSubText(">KvK=D>KvP=V>KvO=G>PvK=G>PvP=D>PvO=V>OvK=
Goto Jtk

53

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

46. bra: A jegyzet rjnak pechszrija a k-papr-oll jtkban

A Zld hullm alkalmazs


Az albbi, nagyon egyszer kdra pl program, a kd sszetettsghez kpest ltvnyos eredmnyt
ad. A program a tekncgrafikra pl:

GraphicsWindow.Show()
GraphicsWindow.PenColor = "Green"
Turtle.Speed = 9
szog = 91
Rajzolas()
Sub Rajzolas
n = 0
For i = 1 to 180
Turtle.Move(n)
Turtle.Turn(szog)
n = n + 1
EndFor
EndSub

54

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

47. bra: A Zld hullm alkalmazs

Koch-grbk
A programozk tmr algoritmusa s a programkd rvidsghez mrten ltvnyos futsi eredmnye
miatt kedvelik a Koch-grbe vagy Koch-hpehely felrajzolst. A Koch-grbe a matematikatrtnet
Helge von Koch svd matematikus ltal 1904-ben lert els fraktlja.
A grbe alapvltozatt gy llthatjuk el, hogy a szablyos hromszg oldalait elharmadoljuk, majd
a kzps harmadra ismt egy szablyos hromszget rajzolunk. A hromszgek oldalait szintn
harmadoljuk, s hromszget rajzolunk rjuk. Ezt a vgtelensgig folytathatjuk.
A Koch-grbnek szmos altpusa ismert, mi ezek kzl mutatunk be kt alapvltozatot. Mindkt
program a tekncgrafikra pl.
Az els Koch-grbnk egy n. els tpus kvadratikus Koch-grbe:

szog = 90
hossz = 3
iteracio = 5
GraphicsWindow.BackgroundColor = "White"
GraphicsWindow.PenColor = "Red"
Turtle.Speed = 9
Turtle.Turn(-90)
Turtle.PenUp()
Turtle.Move(300)
Turtle.Turn(-90)
Turtle.Move(200)
Turtle.Turn(-90)
Turtle.PenDown()

55

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

Rajzolas_szabaly()
Sub Rajzolas_szabaly
iteracio = iteracio - 1
If (iteracio = 0 ) Then
Turtle.Move(hossz)
Turtle.Turn(-szog)
Turtle.Move(hossz)
Turtle.Turn(szog)
Turtle.Move(hossz)
Turtle.Turn(szog)
Turtle.Move(hossz)
Turtle.Turn(-szog)
Turtle.Move(hossz)
Else
Rajzolas_szabaly()
Turtle.Turn(-szog)
Rajzolas_szabaly()
Turtle.Turn(szog)
Rajzolas_szabaly()
Turtle.Turn(szog)
Rajzolas_szabaly()
Turtle.Turn(-szog)
Rajzolas_szabaly()
EndIf
iteracio = iteracio + 1
EndSub

48. bra: Kvadratikus Koch-grbe (1. tpus)


Msodik tpus kvadratikus Koch-grbe:

56

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

szog = 60
hossz = 5
iteracio = 4
GraphicsWindow.BackgroundColor = "White"
GraphicsWindow.PenColor = "Blue"
Turtle.Speed = 9
Turtle.PenUp()
Turtle.Turn(90)
Turtle.Move(150)
Turtle.Turn(90)
Turtle.Move(150)
Turtle.Turn(90)
Turtle.PenDown()
Rajzol_kezdet()
Turtle.Hide()
Sub Rajzol_szabaly
iteracio = iteracio - 1
If (iteracio = 0) Then
Turtle.Move(hossz)
Turtle.Turn(-szog)
Turtle.Move(hossz)
Turtle.Turn(szog)
Turtle.Turn(szog)
Turtle.Move(hossz)
Turtle.Turn(-szog)
Turtle.Move(hossz)
Else
Rajzol_szabaly()
Turtle.Turn(-szog)
Rajzol_szabaly()
Turtle.Turn(szog)
Turtle.Turn(szog)
Rajzol_szabaly()
Turtle.Turn(-szog)
Rajzol_szabaly()
EndIf
iteracio = iteracio + 1
EndSub
SubRajzol_kezdet
Rajzol_szabaly()
Turtle.Turn(szog)
Turtle.Turn(szog)
Rajzol_szabaly()
Turtle.Turn(szog)
Turtle.Turn(szog)
Rajzol_szabaly()
EndSub

57

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

49. bra: Kvadratikus Koch-grbe (2. tpus)

Op-art rzsa
Egyszer, tekncgrafikra pl alkalmazs op-art stlust kvet rzsa rajzolsra:

GraphicsWindow.Title = "Op-art rzsa"


DrawRose()

Sub DrawRose
GraphicsWindow.BrushColor = "White"
GraphicsWindow.FillRectangle(0,0,GraphicsWindow.Width,GraphicsWindow.Height)
GraphicsWindow.PenWidth = 2
GraphicsWindow.PenColor = "Crimson"
Turtle.Speed = 10
Turtle.Show()
For elhossz = 1 To 250
Turtle.Move(elhossz)
Turtle.Turn(89)
EndFor
GraphicsWindow.PenColor = "DarkRed"
For elhossz =0 To 249
Turtle.Move(250-elhossz)
Turtle.Turn(89)
EndFor

58

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

Turtle.Hide()
EndSub

50. bra: Op-art rzsa

Landols
Mint mr korbban emltettk az interneten szmos, ltvnyos s rdekes jtkprogram elrhet Small
Basic nyelven. Az albbi programot is egy ilyen programtlet ihlette. Csak nhny soros, de j kiindulsi
alap egy komolyabb alkalmazshoz:

' A kezdeti sebessg belltsa x s y irnyba


sebx = 0.03
seby = 0
gravitacio = 0.001 ' A gravitci belltsa
GraphicsWindow.BackgroundColor = "Black" ' A vilgr fekete
GraphicsWindow.BrushColor = "Yellow" ' A bolyg srga
' A grafikus ablak mrete
GraphicsWindow.Width = 600
GraphicsWindow.Height = 600
GraphicsWindow.FillEllipse(200,200,200,200) ' A bolyg megrajzolsa
'Az rutaz teknc kezdeti pozcii
pozx = 0
pozy = 130

59

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

irany = 0 ' A teknc kezd utazsi irnynak belltsa


Turtle.Show()
Foprogram:
irany = Mouse.MouseX ' Egrmozgatssal naviglunk.
If Mouse.IsLeftButtonDown Then
' "Gzt adunk, ha a a bal egrkapcsolt lenyomjuk.
sebx = sebx + 0.0001 * Math.Sin(Math.GetRadians(irany))
seby = seby + 0.0001 * Math.Cos(Math.GetRadians(irany)) '
EndIf
R2 = pozx * pozx + pozy * pozy ' Innentl minden tiszta fizika
gravero = gravitacio / R2
R = Math.SquareRoot(R2)
gravhanyados = gravero / R
sebx = sebx - gravhanyados * pozx
seby = seby - gravhanyados * pozy
pozx = pozx + sebx
pozy = pozy + seby
Turtle.X = 300 + pozx
Turtle.Y = 300 - pozy
Turtle.Angle = irany
If GraphicsWindow.LastKey <> "Escape" Then ' ESC-vel lasstunk
Goto Foprogram
EndIf

A jtk sorn egrmozgatssal lltjuk be az rutaz teknc irnyt, bal egrkapcsolval gyorstunk,
az ESC billenty lenyomsval landolunk.
A program j elemei:
A Math objektum Sin(angle) szinusz, fok mvelete egy szg szinuszt, Cos(angle)
koszinusz, fok mvelete egy szg koszinuszt szmolja ki.
A Math objektum SquareRoot(number) ngyzetgyk, szm mvelete kiszmolja egy szm
ngyzetgykt.

60

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

51. bra: Sikeres landols

Retrolghaj
Az oldaln fnyreklmot hordoz lghaj az egyik legsibb Basic-program, ezrt mr csak
hagyomnytiszteletbl is rdemes megismerkednnk Small Basic-kdjval. Figyeljk meg a
vltozkezelst s a GraphicsWindow alakzatainak hasznlatt:

'Kezdrtkek
hossz = 75
szoveghossz = 175
lszel = 500
lmag = 250
lepes = 8
res = 10
kozepx = GraphicsWindow.Width / 2
kozepy = GraphicsWindow.Height / 2
hatter = "White"
uzenet = "Szll a lghaj velnk"
'A lgcsavar megrajzolsa
GraphicsWindow.BackgroundColor = hatter
GraphicsWindow.BrushColor = "red"

61

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

GraphicsWindow.PenColor = "black"
eszel = lszel
emag = lmag
For i = 1 To lepes
GraphicsWindow.FillEllipse(kozepx - (eszel/2),kozepy - (emag/2) - hossz,esze
GraphicsWindow.DrawEllipse(kozepx - (eszel/2),kozepy - (emag/2) - hossz,esze
hg = emag
emag = emag - res
res = res + (res * 0.35)
If Math.Remainder(i,2) = 0 Then
GraphicsWindow.BrushColor = "Red"
GraphicsWindow.PenColor = "Black"
Else
GraphicsWindow.BrushColor = "White"
GraphicsWindow.PenColor = "Black"
EndIf
EndFor

'Lghaj megrajzolsa
GraphicsWindow.BrushColor = "brown"
GraphicsWindow.FillRectangle(kozepx - 75,kozepy + (lmag/2) - hossz - 5,150,20)
GraphicsWindow.DrawRectangle(kozepx - 75,kozepy + (lmag/2) - hossz - 5,150,20)
GraphicsWindow.DrawLine(kozepx + 75, kozepy + (lmag/2) - hossz + 5, kozepx + 85,
GraphicsWindow.BrushColor = "lightblue"
GraphicsWindow.FillRectangle(kozepx - 73,kozepy + (lmag/2) - hossz - 0,15,10)
GraphicsWindow.DrawRectangle(kozepx - 73,kozepy + (lmag/2) - hossz - 0,15,10)
GraphicsWindow.FillRectangle(kozepx - 47,kozepy + (lmag/2) - hossz - 0,30,10)
GraphicsWindow.DrawRectangle(kozepx - 47,kozepy + (lmag/2) - hossz - 0,30,10)
GraphicsWindow.FillRectangle(kozepx - 4,kozepy + (lmag/2) - hossz - 0,30,10)
GraphicsWindow.DrawRectangle(kozepx - 4,kozepy + (lmag/2) - hossz - 0,30,10)
GraphicsWindow.FillRectangle(kozepx + 38,kozepy + (lmag/2) - hossz - 0,30,10)
GraphicsWindow.DrawRectangle(kozepx + 38,kozepy + (lmag/2) - hossz - 0,30,10)
GraphicsWindow.FontName = "Courier New"
GraphicsWindow.FontSize = 36
pontok = ".............."
megj = pontok + uzenet + pontok
i = 1
'Fciklus
While "true"
i = i + 1
If i >= Text.GetLength(megj) - Text.GetLength(pontok) Then
i = 1
EndIf
prt = Text.GetSubText(megj,i,text.GetLength(pontok))
textcolor = "black"
MegjText()
Program.Delay(100)
textcolor = "white"
MegjText()
Porog()
EndWhile

62

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Small Basic-pldk

'Fnyreklm
Sub MegjText
GraphicsWindow.BrushColor = textcolor
lpoz = 24
For j=0 To 6
kar = Text.GetSubText(prt,j,1)
betumeret = 21 + (j * 3)
GraphicsWindow.FontSize = betumeret
GraphicsWindow.DrawText(kozepx - szoveghossz+(lpoz),kozepy - hossz - ((2
lpoz = lpoz + (betumeret * 0.75)
EndFor
For j=7 To 1 Step -1
kar = Text.GetSubText(prt,(Text.GetLength(prt)-j),1)
betumeret = 21 + ((j - 1) * 3)
GraphicsWindow.FontSize = betumeret
GraphicsWindow.DrawText(kozepx - szoveghossz+(lpoz),kozepy - hossz - ((2
lpoz = lpoz + (betumeret * 0.75)
EndFor
EndSub
'Propeller forgatsa
Sub Porog
GraphicsWindow.PenWidth = 0.5
If PorogSwitch = 0 Then
PorogSwitch = 1
GraphicsWindow.BrushColor = hatter
GraphicsWindow.PenColor = hatter
GraphicsWindow.FillTriangle((kozepx
GraphicsWindow.DrawTriangle((kozepx
GraphicsWindow.FillTriangle((kozepx
GraphicsWindow.DrawTriangle((kozepx

+
+
+
+

85),(kozepy
85),(kozepy
85),(kozepy
85),(kozepy

GraphicsWindow.BrushColor = "darkgray"
GraphicsWindow.PenColor = "black"
GraphicsWindow.FillTriangle((kozepx + 85),(kozepy
GraphicsWindow.DrawTriangle((kozepx + 85),(kozepy
GraphicsWindow.FillTriangle((kozepx + 85),(kozepy
GraphicsWindow.DrawTriangle((kozepx + 85),(kozepy
Else
PorogSwitch = 0
GraphicsWindow.BrushColor = hatter
GraphicsWindow.PenColor = hatter
GraphicsWindow.FillTriangle((kozepx + 85),(kozepy
GraphicsWindow.DrawTriangle((kozepx + 85),(kozepy
GraphicsWindow.FillTriangle((kozepx + 85),(kozepy
GraphicsWindow.DrawTriangle((kozepx + 85),(kozepy
GraphicsWindow.BrushColor = "darkgray"
GraphicsWindow.PenColor = "black"
GraphicsWindow.FillTriangle((kozepx + 85),(kozepy
GraphicsWindow.DrawTriangle((kozepx + 85),(kozepy
GraphicsWindow.FillTriangle((kozepx + 85),(kozepy
GraphicsWindow.DrawTriangle((kozepx + 85),(kozepy
EndIf
EndSub

63

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

+
+
+
+

(lmag/2)
(lmag/2)
(lmag/2)
(lmag/2)

hossz
hossz
hossz
hossz

+
+
+
+

5
5
5
5

+
+
+
+

(lmag/2)
(lmag/2)
(lmag/2)
(lmag/2)

hossz
hossz
hossz
hossz

+
+
+
+

5
5
5
5

+
+
+
+

(lmag/2)
(lmag/2)
(lmag/2)
(lmag/2)

hossz
hossz
hossz
hossz

+
+
+
+

5
5
5
5

+
+
+
+

(lmag/2)
(lmag/2)
(lmag/2)
(lmag/2)

hossz
hossz
hossz
hossz

+
+
+
+

5
5
5
5

Small Basic-pldk

52. bra: Retrolghaj


Termszetesen a kapott eredmnyt nem lehet egy Flash-animcihoz hasonltani remnyeink szerint
a kurzus utn a Flash Action Scriptje is egy-kettre elsajtthat , de rdemes megprblkozni a
tovbbfejlesztsvel!

64

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

18. fejezet - Nhny ltalnos


programozsi feladat
rdemes megismerkednnk a klnbz programozsi feladatok megoldsa sorn gyakran felmerl,
ltalnos algoritmusok Small Basic-kdjaival, a ksbbiekben ezek j szolglatot tehetnek.

Keress
Minimlis s maximlis elem kivlasztsa
Gyakori feladat, hogy egy halmazbl az elemeket egyedi tulajdonsgaik alapjn kell kivlasztanunk.
Egsz szmokat tartalmaz tmbbl a legkisebb s a legnagyobb kivlasztsa az albbihoz hasonl
szerkezet program segtsgvel vgezhet el:

'Maximlis s minimlis rtk kiszmtsa egy vletlen szmokkal feltlttt 10 e


TextWindow.WriteLine("A szmok:")
For i=1 To 10
szamok[i]=Math.GetRandomNumber(10)
TextWindow.WriteLine(szamok[i])
EndFor
min = szamok [1]
max = szamok [1]
For n = 1 To 10
If min > szamok [n] Then
min = szamok [n]
EndIf
If max < szamok [n] Then
max = szamok [n]
EndIf
EndFor
TextWindow.WriteLine("Maximlis rtk:" + max)
TextWindow.WriteLine("Minimlis rtk:" + min)

Lineris s binris keress


Definiljunk egy x keresend rtket! Az albbi algoritmusokkal arra szeretnnk vlaszt tallni, hogy
x megtallhat-e az adott tmbben, s ha igen hnyadik elemknt. Az egyszersg kedvrt megint
csak vletlen szmokkal dolgozunk.

Lineris keress tmbben


A lineris keress meglehetsen egyszer mdszer, rendezetlen (nem sorba rendezett) elemeket
tartalmaz tmbknl is hasznlhat. Lnyegben vgigmegynk a tmb elemein, s egyenknt
megvizsgljuk az esetleges egyezst. Egy lehetsges megolds:

65

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

'Vletlen szm lineris keresse egy vletlen szmokkal feltlttt tmbben


TextWindow.WriteLine("Ezek kztt a szmok kztt keresnk:")
For i = 1 To 10
szamok[i] = Math.GetRandomNumber(10)
TextWindow.WriteLine(szamok[i])
EndFor
szam = Math.GetRandomNumber(10)
TextWindow.WriteLine("A keresett szm:" + szam)
elofordulas = 0
For n = 1 To 10
If szamok[n] = szam Then
TextWindow.WriteLine("A szm a(z) " + n + ". helyen szerepel.")
elofordulas = elofordulas + 1
EndIf
EndFor
If elofordulas = 0 Then
TextWindow.WriteLine("A szm nem szerepel a tmbben.")
EndIf

53. bra: Lineris keress tmbben


Rendezett tmbknl a lineris keress esetenknt felesleges itercikat jelent, hiszen ha a tmb
rendezett, akkor elg csak addig folytatni a vizsglatot, amg a keresett elemnl nagyobb elemre
tallunk.

Binris keress
Binris keresst rendezett tmbkben vgezhetnk. Az egyszersg kedvrt csak a nvekv sorrendbe
rendezett tmbben keresnk, az eljrs a cskken sorrendbe rendezett tmbnl is hasonl.

'Binris keress rendezett tmbben

66

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

'Rendezett tmb ellltsa vletlenszmokkal (1-100),


'a rendezettsget egy egyszer hozzadssal biztostjuk
kulonbseg = 0
For i = 1 To 10
szamok[i] = Math.GetRandomNumber(10) + kulonbseg
kulonbseg = szamok[i]
TextWindow.WriteLine("A(z) " + i + ".szm: " + szamok[i])
EndFor
'Keressi rtk
keresendo = Math.GetRandomNumber(szamok[10])
TextWindow.WriteLine("Keresend rtk: " + keresendo)
'A binris keress
also = 1
felso = 10
darab = 0
While also < felso + 1
kozepso = Math.Floor((also + felso) / 2)
If keresendo = szamok[kozepso] Then
darab = darab + 1
TextWindow.WriteLine("A szm a(z) " + kozepso + ". helyen szerepel.")
EndIf
If keresendo > szamok[kozepso] Then
also = kozepso + 1
Else
felso = kozepso - 1
EndIf
EndWhile
If darab = 0 Then
TextWindow.WriteLine("A keresett rtk nincs a tmbben.")
EndIf

A fenti, vletlen szmokkal dolgoz programban a keress sorn a keressi rtket elszr a tmb
kzepn elhelyezked rtkkel hasonltjuk ssze. Ha a kt rtk egyenl, a keresst befejezzk. Ha a
keresett elem kisebb, mint a kzps elem, akkor a tbb als felben keresnk tovbb, ha magasabb,
akkor a fels felben. A ciklus ltal megismtelt eljrs elbb-utbb ha van egyez rtk elvezet
a keresett elemhez.
A binris keress nagy adathalmazoknl elvileg gyorsabb, mint a lineris keress, ezrt gyakori,
ismtld keressnl rdemes az adatainkat sorba rendezni. Termszetesen a sorba rendezs is idt
ignyel, ezrt a mdszerek kztti vlaszts gyakran nem egyrtelm.

67

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

54. bra: Binris keress tmbben

Rendezs
Az adatok rendezsre tbbfle mdszer ismert, rdemes tbbel megismerkedni, hiszen klnbz
helyzetekben az egyes algoritmusok hasznlhatsga eltrhet egymstl. (A jegyzetben bemutatott
rendezsi mdszereknl tbb mdszer terjedt el.)

Beszrsos rendezs
A beszrsos rendezs sorn a rendezend tmbnk els elemt egyelem tmbnek tekintjk, amely
nyilvnvalan rendezett. Ezutn felvesznk egy jabb elemet, s rendezzk a ktelem tmbt. jabb
s jabb elemekkel addig egsztjk ki s rendezzk a tmbt, amg az eredeti tmbnk rendezett nem
lesz. Amikor a rendezett rsztmbhz egy jabb elemet adunk, a hozzadott elem miatt a tmbrszlet
ltalban nem lesz rendezett.
Az j elem helyt ilyenkor az eredetileg rendezett rsztmbben a korbban vzolt lineris vagy binris
keresssel kereshetjk meg, majd a keresett helyre beszrhatjuk az elemet. A beszrs sorn a rendezett
tmbrszletben a beszrsra vr elem felett elhelyezked elemeket eggyel feljebb toljuk, a lejjebb
elhelyezkedket eggyel lejjebb.
Pldaprogram a beszrsos rendezsre, lpsekre bontva:

Sub PrintList
TextWindow.WriteLine("")
TextWindow.Write("Jelenlegi sorrend : ")
For l = 1 To Array.GetItemCount(A) - 1
TextWindow.Write(A[l] + ", ")
EndFor
TextWindow.WriteLine(A[l])
EndSub
'Vletlenszmok
For d = 1 To Math.GetRandomNumber(10)+10 'Szmok 10 s 20 kztt
A[d] = Math.GetRandomNumber(100)
EndFor
PrintList()
For i = 2 To Array.GetItemCount(A) 'Kezds a msodik a pozcitl

68

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

ertek = A[i]
TextWindow.WriteLine("Beszrand elem = " + ertek)
j = i - 1
kesz = "False"
While (kesz = "False")
If (A[j] > ertek) Then
TextWindow.WriteLine("A[j] > beszrand rtk ===> " + A[j] + " > "
A[j + 1] = A[j]
j = j - 1
If (j <= 0) Then
TextWindow.WriteLine("Az rtk az els pozciban, az sszehason
kesz = "True"
EndIf
Else
TextWindow.WriteLine("A[j] <= beszrand rtk ===> " + A[j] + " <=
kesz = "True"
EndIf
EndWhile
A[j + 1] = ertek
PrintList()
EndFor

55. bra: Beszrsos rendezs

Buborkrendezs s ldarendezs
A buborkrendezs sorn a tmb els elemrl a vge fel haladva a szomszdos elemeket
sszehasonltjuk, s ha a tmb elejhez kzelebb lv elem nagyobb, mint az utna kvetkez, akkor
a kt elem sorrendjt felcserljk. Ha elrtk a tmb vgt, akkor a sorozat legnagyobb eleme a helyre,
a tmb utols pozcijba kerlt. Ezutn folyamatosan az utols elemmel rvidlt, teht eggyel kisebb
elemszmmal rendelkez tmbn hajtjuk vgre a buborkrendezst, amg minden elem a helyre nem
kerl (az utols vgighaladskor mr nem trtnik csere).
A ldarendezs (valjban az elnevezs flrefordts, a leszmll rendezs angol neve alapjn
inkbb fikrendezs lenne helyes) sorn a tmbnk rtkeivel indexelnk egy msik tmbt, a tmb
minden egyes eleme egy-egy fik lesz. Az j tmbnkben azt troljuk, hogy az egyes rtkekbl hny
darab szerepel az eredeti tmbnkben. A rendezs sorn vgigmegynk az j tmbn, s annyi elemet
runk a rendezett tmbnkbe, amennyi az egyes indexeknl darabszmknt szerepel.

69

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

sszehasonlt program a beszrsos, bubork- s ldarendezsre:

sorok = 14
oszlopok = 14
meret = 24
tavx = (oszlopok + 1) * meret
tavy = (sorok + 1) * meret
GraphicsWindow.Height = sorok * meret * 2 + meret
GraphicsWindow.Width = oszlopok * meret * 2 + meret
GraphicsWindow.Show()
GraphicsWindow.BackgroundColor = "White"

'Vletlen tmb kialaktsa


For r = 0 To sorok - 1
For c = 0 To oszlopok - 1
voros = Math.GetRandomNumber(256) - 1
zold = 0
kek = 0
GraphicsWindow.BrushColor = GraphicsWindow.GetColorFromRGB(voros,zold,ke
i = r * oszlopok + c
negyzetek[i]["obj"] = Shapes.AddRectangle(meret,meret)
negyzetek2[i]["obj"] = Shapes.AddRectangle(meret,meret)
negyzetek3[i]["obj"] = Shapes.AddRectangle(meret,meret)
Shapes.Move(negyzetek[i]["obj"], c * meret, r * meret)
Shapes.Move(negyzetek2[i]["obj"],c * meret + tavx, r * meret)
Shapes.Move(negyzetek3[i]["obj"],c * meret, r * meret + tavy)
negyzetek[i]["val"] = kek + zold + voros
negyzetek2[i]["val"] = kek + zold + voros
negyzetek3[i]["val"] = kek + zold + voros
EndFor
EndFor
tombhossz = i
GraphicsWindow.BrushColor = "black"
cim = "A rendezsi mdszerek hatkonysga"
GraphicsWindow.DrawText(tavx, tavy, cim)
tombmeretszoveg = "Tmbmret = " + (tombhossz + 1)
GraphicsWindow.DrawText(tavx, tavy + 0.5 * meret, tombmeretszoveg)
GraphicsWindow.DrawText(tavx, tavy + 2 * meret, "Bubork:")
kezdet = Clock.ElapsedMilliseconds
buborek()
bubido = Clock.ElapsedMilliseconds - kezdet
bubszoveg = "Vgrehajtsi id = " + bubido/1000 + " mp"
GraphicsWindow.DrawText(tavx + 100, tavy + 2 * meret, bubszoveg)
GraphicsWindow.DrawText(tavx, tavy + 3*meret, "Beszrsos:")
kezdet = Clock.ElapsedMilliseconds
beszuras()
beszido = Clock.ElapsedMilliseconds - kezdet
beszszoveg = "Vgrehajtsi id = " + beszido / 1000 + " mp"
GraphicsWindow.DrawText(tavx+100, tavy + 3 * meret, beszszoveg)
GraphicsWindow.DrawText(tavx, tavy + 4 * meret, "Lda:")
kezdet = Clock.ElapsedMilliseconds
lada()

70

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

ladaido = Clock.ElapsedMilliseconds - kezdet


ladaszoveg = "Vgrehajtsi id = " + ladaido / 1000 + " mp"
GraphicsWindow.DrawText(tavx + 100, tavy + 4 * meret, ladaszoveg)
GraphicsWindow.DrawText(tavx, tavy + 6 * meret, "Vge")
Sub lada
inc = Math.Round(tombhossz/2)
While inc > 0
For i = inc To tombhossz
atm = negyzetek3[i]["val"]
atmdoboz = negyzetek3[i]["obj"]
j = i
while (j >= inc) and (negyzetek3[j-inc]["val"] > atm)
negyzetek3[j]["val"] = negyzetek3[j-inc]["val"]
negyzetek3[j]["obj"] = negyzetek3[j-inc]["obj"]
r = Math.Floor((j) / oszlopok)
c = Math.Remainder(j,oszlopok)
Shapes.Move(negyzetek3[j]["obj"],c * meret, r * meret + tavy)
j = j - inc
EndWhile
negyzetek3[j]["val"] = atm
negyzetek3[j]["obj"] = atmdoboz
r = Math.Floor((j)/oszlopok)
c = Math.Remainder(j,oszlopok)
Shapes.Move(negyzetek3[j]["obj"],c * meret r * meret + tavy)
EndFor
inc = Math.Round(inc / 2.2)
Endwhile
Endsub
Sub beszuras
For i = 1 to tombhossz
ertek = negyzetek2[i]["val"]
atmdoboz = negyzetek2[i]["obj"]
j = i - 1
kesz = "false"
While kesz = "false"
If negyzetek2[j]["val"] > ertek then
negyzetek2[j + 1]["val"] = negyzetek2[j]["val"]
negyzetek2[j+1]["obj"] = negyzetek2[j]["obj"]
r = Math.Floor((j+1)/oszlopok)
c = Math.Remainder(j+1,oszlopok)
Shapes.Move(negyzetek2[j+1]["obj"],c * meret + tavx, r * meret)
j = j - 1
If j < 0 then
kesz = "true"
EndIf
Else
kesz = "true"
EndIf
EndWhile
negyzetek2[j+1]["val"] = ertek
negyzetek2[j+1]["obj"] = atmdoboz
r = Math.Floor((j + 1) / oszlopok)
c = Math.Remainder(j + 1,oszlopok)
Shapes.Move(negyzetek2[j+1]["obj"],c * meret + tavx, r * meret)
EndFor
Endsub

71

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

Sub buborek
imax = tombhossz
cserelt = "true"
While cserelt = "true"
cserelt = "false"
For bubi = 1 To imax
If negyzetek[bubi]["val"] < negyzetek[bubi-1]["val"] Then
csere()
EndIf
Endfor
imax = imax - 1
Endwhile
EndSub
Sub csere
atmdoboz = negyzetek[bubi-1]["obj"]
dobertatm = negyzetek[bubi-1]["val"]
negyzetek[bubi-1]["obj"]=negyzetek[bubi]["obj"]
negyzetek[bubi-1]["val"]=negyzetek[bubi]["val"]
negyzetek[bubi]["obj"]=atmdoboz
negyzetek[bubi]["val"]=dobertatm
r = Math.Floor((bubi-1)/oszlopok)
c = Math.Remainder(bubi-1,oszlopok)
Shapes.Move(negyzetek[bubi-1]["obj"],c * meret, r * meret)
r = Math.Floor((bubi)/oszlopok)
c = Math.Remainder(bubi,oszlopok)
Shapes.Move(negyzetek[bubi]["obj"],c * meret, r * meret)
cserelt = "true"
EndSub

A program j elemei:
A GraphicsWindow objektum GetColorFromRGB(red, green, blue) szn ellltsa RGB-bl,
vrs, zld, kk mvelete a vrs, a zld s a kk szn erssgnek (0-255) belltsval
kikever egy sznt.
A rendszerid-tulajdonsgokat tartalmaz Clock objektum ElapsedMilliseconds eltelt
milliszekundumok tulajdonsga megmutatja az 1900 ta eltelt milliszekundumok szmt.
A Math objektum Round(number) kerekt, szm mvelete egszre kerekt egy szmot.
A Math objektum Remainder(dividend, divisor) maradk osztand, oszt mvelete
visszaadja kt szm hnyadosnak osztsi maradkt.
Az algoritmus klnbz rnyalat vrs kockkat generl vletlenszeren, ezeket hromflekppen
sorba rendezi, az eredmny grafikusan jelenik meg.

72

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

56. bra: Rendezsi mdszerek sszehasonltsa

Euler-problmk
Leonhard Euler svjci matematikus tiszteletre a http://projecteuler.net/index.php?section=problems
oldalon tbb szz olyan matematikai alapfeladat tallhat, amelyeket programozsi eszkzkkel lehet
megoldani. Az oldalon tallhat feladatok minden kezd s halad programoz szmra kivl
agytornt jelentenek.
Ismerkedjnk meg nhny feladat megoldsval!

1. problma
Feladat: rjuk fel 3 s 5 sszes ezer alatti tbbszrsnek sszegt!
Program a problma megoldsra:

maxertek = 1000
szum = 0

73

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

For i = 1 To maxertek - 1 ' maxertek alatt


If Math.Remainder(i, 3) = 0 Or Math.Remainder(i, 5) = 0 Then
szum = szum + i
EndIf
EndFor
TextWindow.WriteLine("3 s 5 sszes 1000 alatti tbbszrsnek sszege: " + szum

2. problma
Feladat: rassuk ki a Fibonacci-sorozat pros rtkeinek sszegt egszen addig, amg a legnagyobb
rtk meg nem haladja a ngymillit!
A Fibonacci-szmok a matematikban az egyik legismertebb sorozat elemei. A sorozat els kt eleme
0 s 1, a tovbbi elemeket az elz kett sszegeknt kapjuk: 0, 1, 1, 2, 3, 5, 8, 13
(A termszetben szmos folyamat pl. a pozsgsok leveleinek osztdsa a Fibonacci-sorozat
segtsgvel rhat le.)
Program a problma megoldsra:

a = 1
b = 2
szum = 0
maxertek = 4000000

While a < maxertek


If (Math.Remainder(a, 2) = 0) Then
szum = szum + a
EndIf
tarolo = a
a = b
b = b + tarolo
EndWhile
TextWindow.WriteLine("A Fibonacci-sorozat ngymillinl nem nagyobb tagjainak s

3. problma
Feladat: Szmoljuk ki egy sszetett szm legnagyobb prmosztjt!
Az albbi program egy sszetett szm legnagyobb osztjt is kirja a prmoszt mellett:

osszetett_szam = 263168 'Ms termszetes szm is vlaszthat


TextWindow.WriteLine("Termszetes szmunk = " + osszetett_szam)
maxoszto = Math.Floor(Math.SquareRoot(osszetett_szam))
TextWindow.WriteLine("Legnagyobb oszt = " + maxoszto)
TextWindow.WriteLine("A legnagyobb prmoszt szmtsa...")
If Math.Remainder(maxoszto, 2) = 0 Then
maxoszto = maxoszto + 1
EndIf
For i = maxoszto To 3 Step -1
If Math.Remainder(osszetett_szam, i) = 0 Then
Primellenorzes()

74

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

If prim = "True" Then


Goto Befejezes
EndIf
EndIf
EndFor
Befejezes:
TextWindow.WriteLine("Legnagyobb prmoszt = " + i)
Sub Primellenorzes
prim = "True"
For j = 2 To Math.SquareRoot(i)
If Math.Remainder(i, j) = 0 Then
prim = "False"
Goto Ciklusbolki
EndIf
EndFor
Ciklusbolki:
EndSub

4. problma
Feladat: Keresse meg azt a legnagyobb palindromszmot, amely kt darab ktjegy szm szorzatval
elllthat!
A palindromszm olyan termszetes szmot jelent, amely szmjegyeit fordtott sorrendben felrva az
eredeti szmot kapjuk.
Program a problma megoldsra:

maxpalindrom = 0
For i = 990 To 100 Step -11 ' A palindromszmok mindig 11 szorzatai
For j = 999 To 100 Step -1
szorzat = i * j
Palindrom_ellenorzes()
If vajonpalindrom = "True" Then
TextWindow.WriteLine("Vizsglt palindromszm: " + szorzat + "...")
If szorzat > maxpalindrom Then
maxpalindrom = szorzat
Goto Ciklusbolki
EndIf
EndIf
EndFor
Ciklusbolki:
EndFor

TextWindow.WriteLine("Kt hromjegy szm szorzatbl elll legnagyobb palindr


Sub Palindrom_ellenorzes
vajonpalindrom = "False"
szorzatforditva = ""
hossz = Text.GetLength(szorzat)
For k = 1 To hossz
kerszoveg = Text.GetSubText(szorzat, k, 1)
szorzatforditva = Text.Append(kerszoveg, szorzatforditva)

75

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

EndFor
If szorzatforditva = szorzat Then
vajonpalindrom = "True"
EndIf
EndSub

5. problma
Feladat: Keresse meg azt a legkisebb szmot, amely az sszes 1 s 20 kztti szmmal maradk nlkl
oszthat!
Program a problma megoldsra:

a = 1
For i =
j =
l =
For

1 To 6000000000 Step a
0
0
j = 20 To 10 Step -1 'Az 1 s 9 kztti szmokat nem kell bevonni a
k = Math.Remainder(i,j)
If k = 0 Then
l = l + 1
If l > 0 And l > b then
b = l
a = i
EndIf
If l = 10 Then
Goto Befejezes
EndIf
Else
Goto Ciklusbolki
EndIf
EndFor
Ciklusbolki:
EndFor

viz

Befejezes:
If l = 10 Then
TextWindow.WriteLine(i + " az sszes 1 s 20 kztti szmmal maradk nlkl
EndIf

6. problma
Feladat: Mennyi a klnbsg az els szz termszetes szm ngyzetnek sszege s az els szz
termszetes szm sszegnek ngyzete kztt?
Az 12 + 22 + 32 + + 1002 s az (1 + 2 + 3 + + 100)2 sszegek kztti klnbsgre vagyunk
kvncsiak.
Program a problma megoldsra:

maxertek = 100
szum = 0
negyzetek_osszege = 0

76

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

For i = 1 To Maxertek
szum = szum + i
negyzetek_osszege = negyzetek_osszege + i * i
EndFor
osszegek_negyzete = szum * szum
kulonbseg = osszegek_negyzete - negyzetek_osszege
TextWindow.WriteLine("Klnbsg = " + kulonbseg)

7. problma
Feladat: Melyik a 10001. prmszm?
Program a problma megoldsra:

keresett_prim = 10001

For i = 2 To 200000
Prim_ellenorzes()
If prim_e = "True" Then
k = k + 1
If k = keresett_prim Then
Goto Program_vege
ElseIf Math.Remainder(K,10) = 0 Then
TextWindow.WriteLine(i + " iterci utn eddig " + k + " prmet tal
EndIf
EndIf
EndFor
Sub Prim_ellenorzes
prim_e = "True"
For j = 2 To Math.SquareRoot(i)
If Math.Remainder(i, j) = 0 Then
prim_e = "False"
Goto Ciklusbol_ki
EndIf
EndFor
Ciklusbol_ki:
EndSub
Program_vege:
If k = keresett_prim Then
TextWindow.WriteLine("A " + keresett_prim + ". prm: " + i)
Else
TextWindow.WriteLine("A program futsa id
eltt vget rt, a keresett szm 200000 iterci utn sem
szmthat ki.")
EndIf

Termszetesen a tbbi Euler-problma megoldsa is rdekes programozi feladat, de azt mr az


olvasra bzzuk.

77

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

Mtrixalgebra
Mtrixalgebrai mveleteket a kiegsztsek nlkli Small Basic-kel is vgezhetnk, br bonyolultabb
mveleteknl sszetett programozi fogsok alkalmazsra lehet szksg.
A kvetkez egyszer program kt, kt sorbl s oszlopbl ll, vletlenszmokkal feltlttt mtrixot
szoroz ssze:

max_szamjegy = 3
szoveg = " "
n = 2
Veletlen_AB_matrix_letrehozasa()
celmatrix = "A"
Matrix_felirasa()
celmatrix = "B"
Matrix_felirasa()
a = "A"
b = "B"
TextWindow.WriteLine("C = A x B")
c = "C"
Szorzat()
celmatrix = "C"
Matrix_felirasa()
Sub Veletlen_AB_matrix_letrehozasa
For i = 1 To n
For j = 1 To n
M["A"+Text.Append(i, j)] = Math.GetRandomNumber(9)
M["B"+Text.Append(i, j)] = Math.GetRandomNumber(9)
EndFor
EndFor
EndSub
Sub Matrix_felirasa
For i = 1 To n
If i = 1 Then
TextWindow.Write(celmatrix + " = ")
Else
TextWindow.Write(" ")
EndIf
For j = 1 To n
mij = M[celmatrix + Text.Append(i, j)]
l = Text.GetLength(Mij)
hossz = max_szamjegy - l
TextWindow.Write(Text.GetSubText(szoveg, 1, hossz) + mij + " ")
EndFor
TextWindow.WriteLine("")
EndFor
EndSub
Sub Szorzat
For i = 1 To n
For j = 1 To n
cij = 0

78

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

For k = 1 To n
aik = M[a + Text.Append(i, k)]
bkj = M[b + Text.Append(k, j)]
cij = cij + aik * bkj
EndFor
M[c + Text.Append(i, j)] = cij
EndFor
EndFor
EndSub

57. bra: Mtrixszorzat


A mtrixok mretnek s az elvgzend mtrixmveletek szmnak nvekedsvel prhuzamosan
azonban az alapvltozat ltal biztostott lehetsgek egyre szksebbnek tnhetnek.
Ha gyakran dolgozunk mtrixokkal, rdemes a korbban mr bemutatott LitDev kiegsztst telepteni.
A LitDev LDMatrix objektumnak mveletei ugyanis tartalmazzk a legfontosabb mtrixmveleteket,
s ezzel megknnytik a munknkat.
A kvetkez, LitDev kiegsztssel ksztett program kiszmolja egy hromvltozs, hrom egyenletbl
ll, elsfok egyenletrendszer gykeit:

matrix = LDMatrix.CreateMatrix(3,3)
inverz = LDMatrix.CreateMatrix(3,3)
baloldali_matrix = LDMatrix.CreateMatrix(3,1)
jobboldali_matrix = LDMatrix.CreateMatrix(3,1)
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,
LDMatrix.SetValue(matrix,

1,
1,
1,
2,
2,
2,
3,
3,
3,

1,
2,
3,
1,
2,
3,
1,
2,
3,

2)
-1)
0)
-1)
2)
-1)
0)
-1)
2)

LDMatrix.SetValue(jobboldali_matrix, 1, 1, 6)
LDMatrix.SetValue(jobboldali_matrix, 2, 1, 3)

79

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

LDMatrix.SetValue(jobboldali_matrix, 3, 1, 4)
LDMatrix.Inverse(matrix,inverz)
LDMatrix.Multiply(inverz,jobboldali_matrix,baloldali_matrix)

var[1] = "x"
var[2] = "y"
var[3] = "z"
For i = 1 To 3
For j = 1 To 3
TextWindow.Write(LDMatrix.GetValue(matrix, i, j)+var[j]+" ")
EndFor
TextWindow.Write("= "+LDMatrix.GetValue(jobboldali_matrix, i, 1))
TextWindow.WriteLine("")
EndFor
TextWindow.WriteLine("")
For i = 1 To 3
TextWindow.WriteLine(var[i]+" = "+LDMatrix.GetValue(baloldali_matrix, i, 1))
EndFor
TextWindow.WriteLine("")

Az LDMatrix objektum felhasznlt mveletei:


A CreateMatrix(rows, cols) mtrix ltrehozsa, sorok, oszlopok mvelet ltrehoz egy
mtrixot. A megfelel paramtert egynek vve sor- s oszlopvektor is definilhat.
A SetValue(matrixName, row, col, value) rtk megadsa, mtrix neve, sor, oszlop, rtk
mvelet segtsgvel a mtrix egyes elemeit tlthetjk fel rtkekkel.
Az Inverse(matrix, inverse) inverz, mtrix, inverz mvelet megadja egy mtrix inverzt.
A Multiply(matrix1, matrix2, result) mtrixszorzat, els mtrix, msodik mtrix,
eredmnymtrix mvelet mtrixokat szoroz ssze.
A GetValue(matrixName, row, col) rtket visszaad, mtrix neve, sor, oszlop visszaad
egy mtrix adott sorban s oszlopban lv rtket.

58. bra: Elsfok egyenletrendszer megoldsa

80

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

Statisztikai szmtsok
A Small Basic alaprendszervel megfelel programozi tudssal felvrtezve lnyegben minden
statisztikai mvelet megoldhat. Azonban az elz esethez hasonlan ha elssorban a statisztikai
problmkra koncentrlunk, s a programozst inkbb csak eszkzknt kezeljk, rdemes a Small Basic
statisztikai elemeket is tartalmaz kiegsztseit hasznlni.
A LitDev kiegszts egyszerbb statisztikai mveletekre kivl vlaszts.
Az albbi pldaprogram nhny statisztikai mutatt szmt ki:

For i = 1 To 5
A[i] = Math.GetRandomNumber(100)
TextWindow.WriteLine(i + ". szm: " + A[i])
EndFor
LDStatistics.SetArray(A)
max = LDStatistics.Max
TextWindow.WriteLine("Maximlis rtk: " + max)
min = LDStatistics.Min
TextWindow.WriteLine("Minimlis rtk: " + min)
szum = LDStatistics.Sum
TextWindow.WriteLine("Szumma: " + szum)
szum2 = LDStatistics.Sum2
TextWindow.WriteLine("Ngyzetsszeg: " + szum2)
median = LDStatistics.Median
TextWindow.WriteLine("Medin: " + median)

A program j elemei:
Az LDStatistics objektum SetArray(array) tmb belltsa, tmb mvelete meghatrozza,
hogy melyik tmb az ppen aktulistmb, amelyre a statisztikai mveletek vgrehajthatk, illetve
amelynek a tulajdonsgai lekrdezhetk.
Az LDStatistics objektum Min, Max, Sum, Sum2, Median tulajdonsgai az aktulis tmb minimum,
maximum, szmtani sszeg, ngyzetsszeg s medin rtkeit tartalmazzk.
Az LDStatistics objektum mveletei s tulajdonsgai a felsoroltaknl jval sszetettebb statisztikai
mutatk szmtst is lehetv teszi.

81

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

59. bra: Egyszer statisztikai mutatk szmtsa

Animcis alapproblmk
Nem tekinthetnk el attl az ignytl, hogy a hallgatk grafikailag ltvnyosabb, animlt elemeket
tartalmaz programokat szeretnnek rni. Ehhez termszetesen eszttikai rzkre s sok-sok kreativitsra
van szksg, de taln nhny alapvet eljrs bemutatsa is hasznra lehet a leend fejlesztknek.
Br a Small Basic alapvltozata is rengeteg lehetsget nyjt pl. jtkprogramok rshoz (nznk erre
mg majd pldkat), a kvetkez alfejezetekben bemutatott nhny alapvet, egyszer animcis
eljrsnl a LitDev kiegszts nyjtotta elnykkel lnk.

Pattog labda
Az albbi, LitDev-mveleteket hasznl program egy labda pattogst szimullja:

GraphicsWindow.BrushColor = "Red"
labda = Shapes.AddEllipse(50,50)
LDPhysics.AddMovingShape(labda,0,1,1)
LDPhysics.SetPosition(labda,200,100,0)
GraphicsWindow.ShowMessage("A befejezshez nyomja le a V billentyt", "zenet")
While "True"
LDPhysics.DoTimestep()
Program.Delay(20)
If GraphicsWindow.LastKey = "V" Then
Program.End()
EndIf
EndWhile

A program j elemei:
Az LDPhysics objektum AddMovingShape(shapeName, friction, restitution, density) mozg
alakzat hozzadsa, alakzat neve, srlds, visszapattans, tmrsg mvelet egy mozg
alakzatot definil. A labda mozgst esetnkben leginkbb a restitution (visszapattans) rtke
befolysolja. Ha a legnagyobb (1) rtk helyett 0-t vlasztannk, a labda nem pattanna vissza a
fldrl. 0.9-es rtk mellett pedig fokozatosan kisebbeket pattogva llna meg a talajon. A friction

82

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

(srlds) szintn 0 s 1 kztt vltoz rtke a msik testhez trtn srldskor bekvetkez
lassuls rtkt lltja be.
A LDPhysics objektum SetPosition(shapeName, posX, posY, angle) pozci belltsa, x
koordinta, y koordinta, elforgats szge mvelete az alakzat pozcijt lltja be.
Miutn az egyes objektumokat esetnkben egyet definiltuk, az animcirt lnyegben
DoTimeStep() mvelet lesz felels. A mvelet meghvsa utn egy idegysg eltelik, s az
objektumok frisstik a pozcijukat. A folyamatos frisstst mi egy vgtelen ciklussal rtk el, de
emellett egyszer pldt adtunk a ciklus (s a program) megszaktsra is.

60. bra: Pillanatfelvtel a pattog labdrl

Felfggesztett doboz
Az albbi program egy lncra felfggesztett doboz mozgst szimullja:

GraphicsWindow.BrushColor = "Red"
doboz = Shapes.AddRectangle(50,50)
LDPhysics.AddMovingShape(doboz,0,1,1)
LDPhysics.SetPosition(doboz,200,100,0)
forgoresz1 = LDPhysics.AddMovingAnchor(225,125)
LDPhysics.AttachShapes(forgoresz1,doboz)
forgoresz2 = LDPhysics.AddFixedAnchor(400,100)
LDPhysics.AddChain(forgoresz1,forgoresz2)
While "True"
LDPhysics.DoTimestep()
Program.Delay(20)
EndWhile

83

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

A program j elemei:
Az LDPhysics objektum AddMovingAnchor(posX, posY) mozg forgrsz hozzadsa, x
koordinta, y koordinta mvelet egy nem csak forgsra, hanem tbbirny mozgsra is kpes
elemet ad hozz a grafikus ablakhoz.
Az LDPhysics objektum AddFixedAnchor(posX, posY) mozg forgrsz hozzadsa, x
koordinta, y koordinta mvelet egy csak forgsra kpes elemet ad hozz a grafikus ablakhoz.
Az LDPhysics objektum AttachShapes(shape1, shape2) alakzatok sszekapcsolsa, els
alakzat, msodik alakzat mvelete sszekapcsol kt alakzatot, amelyek az sszekapcsols utn
egytt mozognak.
Az LDPhysics objektum AddChain(shape1, shape2) lnc hozzadsa, els alakzat, msodik
alakzat mvelete rugalmas lnccal kapcsol ssze kt alakzatot.

61. bra: Pillanatfelvtel a lendletet vev dobozrl

Tbb alakzat mozgsa-tkzse


Az albbi programban egy nagy sebessggel mozg, rugalmas goly sszednt egy dobozokbl felptett
alakzatot:

For i = 1 To 20
GraphicsWindow.BrushColor = "Black"
doboz[i] = Shapes.AddRectangle(20,20)
LDPhysics.AddMovingShape(doboz[i],0.3,0.8,1)
LDPhysics.SetPosition(doboz[i],500,GraphicsWindow.Height-20*i+10,0)
EndFor
GraphicsWindow.BrushColor = "Red"
golyo = Shapes.AddEllipse(8,8)

84

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

LDPhysics.AddMovingShape(golyo,0,1,1)
LDPhysics.SetPosition(golyo,50,200,0)
LDPhysics.SetVelocity(golyo,1000,0)
While ("True")
LDPhysics.DoTimestep()
Program.Delay(20)
EndWhile

A program j eleme a LDPhysics objektum SetVelocity(shapeName, velX, velY) sebessg belltsa,


alakzat neve, sebessg az x tengely mentn, sebessg y tengely mentn mvelet, amely egy
objektum sebessgt hatrozza meg.

62. bra: Az els tkzs utn

Mozgs s tkzs sk felleten


Az albbi programban egy sematizlt kocsi rugalmasan visszapattan a falrl, majd lassulva lell:

GraphicsWindow.BrushColor = "Brown"
kerek1 = Shapes.AddEllipse(40,40)
kerek2 = Shapes.AddEllipse(40,40)
kocsi = Shapes.AddRectangle(200,50)
LDPhysics.AddMovingShape(kerek1,1,0,1)
LDPhysics.AddMovingShape(kerek2,1,0,1)
LDPhysics.SetPosition(kerek1,180,400,0)
LDPhysics.SetPosition(kerek2,320,400,0)
LDPhysics.AddMovingShape(kocsi,0.3,0.5,1)

85

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

LDPhysics.SetPosition(kocsi,250,360,0)
LDPhysics.AttachShapesWithRotation(kerek1,kocsi)
LDPhysics.AttachShapesWithRotation(kerek2,kocsi)
LDPhysics.SetVelocity(kocsi,100,0)
While ("True")
LDPhysics.DoTimestep()
Program.Delay(20)
EndWhile

A program j eleme az LDPhysics objektum AttachShapesWithRotation(shape1, shape2) alakzatok


sszekapcsolsa elfordulssal, els alakzat, msodik alakzat mvelete, amely nemcsak
sszekapcsol kt alakzatot, hanem az egyms krli elfordulst is lehetv teszi.

63. bra: Pillanatfelvtel a sk felleten mozg kocsirl

Mozg ballonra felfggesztett mozg trgy


Az albbi program egy lggmb s a lggmbre felfggesztett doboz egyttes mozgst szimullja:

GraphicsWindow.BrushColor = "Red"
leggomb = Shapes.AddEllipse(50,50)
GraphicsWindow.BrushColor = "Black"
doboz = Shapes.AddRectangle(50,50)
LDPhysics.AddMovingShape(leggomb,0.3,0.5,1)
LDPhysics.SetPosition(leggomb,100,100,0)
LDPhysics.AddMovingShape(doboz,0.3,0.5,1)
LDPhysics.SetPosition(doboz,300,300,0)
leggomb_forgoresz = LDPhysics.AddMovingAnchor(100,125)

86

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

LDPhysics.AttachShapesWithRotation(leggomb,leggomb_forgoresz)
doboz_forgoresz = LDPhysics.AddMovingAnchor(300,275)
LDPhysics.AttachShapesWithRotation(doboz,doboz_forgoresz)
kotel = LDPhysics.AddRope(leggomb_forgoresz,doboz_forgoresz)
doboz_tomeg = LDPhysics.GetMass(doboz)
leggomb_tomeg = LDPhysics.GetMass(leggomb)
leggomb_forgoresz_tomeg = LDPhysics.GetMass(leggomb_forgoresz)
doboz_forgoresz_tomeg = LDPhysics.GetMass(doboz_forgoresz)
kotel_tomeg = LDPhysics.GetMass(kotel)
ossztomeg = leggomb_tomeg + doboz_tomeg + kotel_tomeg + leggomb_forgoresz_tomeg
While ("True")
LDPhysics.SetForce(leggomb,0,-100*ossztomeg)
LDPhysics.DoTimestep()
Program.Delay(20)
EndWhile

A program j elemei:
Az LDPhysics objektum AddRope(shape1, shape2) ktelet hozzad, els alakzat, msodik
alakzat mvelete kt objektumot kapcsol ssze egy ktllel.
Az LDPhysics objektum GetMass(shapeName) tmeget meghatroz, alakzat neve mvelete
elmleti kilogrammban meghatrozza egy alakzat tmegt.
Az LDPhysics objektum SetForce(shapeName, forceX, forceY) gyorsulsi er meghatrozsa,
gyorsuls x tengely mentn, gyorsuls y tengely mentn mvelete meghatrozza egy alakzat
gyorsulsi erejt.

64. bra: Pillanatfelvtel a lggmb s a vele sszekapcsolt alakzat mozgsrl

87

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

A hatr a csillagos g
A knyvben bemutatott alapvet programozsi ismeretek s technikk sok gyakorlssal, klnbz
programozsi feladatok nll megoldsval, a ksbbiekben esetleg j programozsi nyelvek
megtanulsval vlemnynk szerint brkit elindthatnak a profi programozv vls tjn.
Termszetesen nem kell mindenkinek erre trekednie, de az algoritmuspts alapjai mint ahogy azt
a bevezet rszben mr kifejtettk szmos terleten hasznosak lehetnek nemcsak a professzionlis
fejlesztk szmra.
Akik kedvet kaptak a programozshoz, az els idszakban prbljk kihasznlni a Small Basic
alapvltozata ltal nyjtott lehetsgeket. Termszetesen klnbz kiegsztsekkel sok esetben
knnyebb megoldani az egyes feladatokat, azonban a kezdetben tbb nehzsggel jr t kvetse
az alapvltozat hasznlata minden problmra hossztvon gymlcsz lehet. Korltozott
programnyelvi elemekkel a programoz ugyanis sokkal kreatvabb munkra knyszerl, s az gy
elsajttott algoritmusptsi kszsgek ms programnyelvi krnyezetben is megknnythetik a fejlesztst.
A Small Basic alaprendszernek hasznlata a pedaggiai megfontolsokon tl sok sikerlmnyt
tartogat a fejlesztk szmra. Ezt bizonytand, rdemes a megadott kd segtsgvel importlni,
kiprblni s tovbbfejleszteni vagy talaktani (akr csak magyar nyelvv) az albbi, alaprendszerrel
ksztett programokat. Ne feledjk, a felsorolt programokat nem professzionlis programozk vagy
cgek ksztettk, a programkd nyilvnos s a kvnt mrtkben talakthat! Ne a kereskedelmi
szoftverek szintjhez mrjk ket, hanem a kezd programozk tudshoz!
A hallgatk figyelmbe ajnlott programok:
bresztra: MDW647,
Animlt labdk: ZLJ620,
Kpgalria: PPG822 (a kpeket rdemes sajt kpekre cserlni),
letjtk: RVR167 (az egyik legrgebbi programozsi feladat),
Msodik vilghbors lgi csata: ZZD394 (a sajt gpnket egrrel irnytjuk, s az egrgombokkal
tzelnk),
Harc az aszteroidkkal: ASTEROIDS (az rhajt a kurzorbillentykkel irnytjuk, s a Space billenty
lenyomsval tzelnk),
Bngyi nyomozs: DWK528 (szveges jtk, csak angolul tudknak ajnljuk),
Gorillk: NLQ667-3 (kt gorilla bannokkal doblja egymst nagyvrosi hztetkn, dobs eltt a
dobs szgt s a sebessget kell megadnunk),
Aknakeres: DBM434 (nagyon hasonlt a Windows opercis rendszerekhez mellkelt jtkhoz),
Szmkitalls logikai jtk: CJC272 (szveges jtk, de kevs angol nyelvtudst ignyel),
Labdagyjts: KXW612,
Puzzle: LJH960,
K-papr-oll: CMJ212 (az ltalunk korbban bemutatottnl kifinomultabb),
Menekls a kgy ell: SNKBITE,
Soko: SOKO-92 (kurzorral mozogva megfelel helyre kell tolni a gymntokat),
Stargates: STARGATES (kurzorral mozogva Space-szel tzelve jtszhatunk a nyolcvanas vek
npszer videjtkhoz hasonl programmal),

88

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Nhny ltalnos programozsi feladat

tgets ngy tvel: MDJ923 (a jegyzetben tallhat program tovbbfejlesztett verzija)


Hanoi tornyai: HANOI (igazi agytorna, a jtkszablyokrl szmos helyen tjkozdhatunk).

65. bra: A SOKO-92 alkalmazs


Termszetesen az egyes programok folyamatosan vltoznak, s elfordulhat, hogy mr j cmeken
rhetk el.

89

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

19. fejezet - Zrsz


Remljk, hogy a jegyzettel sikerlt a programozs misztikus jellegt szertefoszlatni, s a hallgatk
sikeresen elsajttottk azokat a programozi fogsokat, amelyek segtsgvel kpesek lehetnek
egyszerbb programokat rni, vagy megfelel rdeklds esetn, jabb programozsi nyelveket
elsajttva akr professzionlis programozv vlni.

90

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Irodalom
Albert, Istvn. A .NET Framework s programozsa. Szak Kiad Kft.. 2004.
Bailey, Allen. Microsoft Small Basic - Graphics Window http://www.slideshare.net/allenbailey/21-graphicswindow (Hozzfrs: 2012. jnius 22.). 2010.
Brtfai, Barnabs. Makrhasznlat Excelben. BBS-INFO knyvek. 2012.
Barzee, Rex A.. The Handbook for Beginning Programmers with Examples in Visual Basic. Amazon Digital
Services, Inc.. 2012.
Beck, Kent. Implementcis mintk. Panem Kft.. 2008.
Boehm, Anna. Murach's Visual Basic 2010. Mike Murach & Associates. 2010.
Conrod, Philip s Lou, Tylee. Beginning Microsoft Small Basic. Kidware Software, LLC. 2010.
Cornell, Paul. Downloadable Code Examples http://blogs.msdn.com/b/paulcornell/archive/2010/01/04/smallbasic-16-downloadable-code-examples-so-far.aspx (Hozzfrs: 2012. jlius 3.). 2010.
Cske, Lajos s Garamhegyi, Gbor. A szmtgp-programozs logikai alapjai Algoritmusok s elemi
adatszerkezetek. Nemzeti Tanknyvkiad Zrt.. 2004.
Dusza, rpd. Algoritmusok Pascal nyelven Az alapoktl az emeltszint rettsgiig. Dusza Bt.. 2006.
Farkas, Csaba. A programozs alapjai Visual Basic .NET-ben. Jedlik Oktatsi Stdi Kft.. 2009.
Farkas, Csaba s Szab, Marcell. A programozs alapjai Visual Basicben. Jedlik Oktatsi Stdi Kft.. 2005.
Farkas, Kroly. Jtkos tekncgeometria. Szak Kiad Kft.. 2011.
Fthi, kos. Bevezets a programozshoz. ELTE Etvs Kiad Kft.. 2005.
Foxall, James. Sams Teach Yourself Visual Basic 2010 in 24 Hours Complete Starter Kit (Sams Teach Yourself
- Hours). Sams. 2010.
Gamma, Erich s Helm, Richard. Programtervezsi mintk. Kiskapu Kiad. 2004.
Halvorson, Michael. Microsoft Visual Basic 2010 Step by Step (Step by Step (Microsoft)). Microsoft Press. 2010.
Harris, Simon s Ross, James. Kezdknyv az algoritmusokrl. Szak Kiad Kft.. 2006.
Ivanyos, Gbor, Rnyai, Lajos, s Szab, Rka. Algoritmusok. Typotex Eleketronikus Kiad Kft.. 2008. Ivnyi,
Antal. Informatikai algoritmusok 2. ELTE Etvs Kiad Kft.. 2005.
Juhsz, Tibor s Kiss, Zsolt. Programozsi ismeretek. Mszaki Knyvkiad Kft.. 2011.
Kernighan, Brian W. s Ritchie, Dennis M.. A C programozsi nyelv Az ANSI szerint szabvnyostott vltozat.
Mszaki Knyvkiad. 1994.
Keys, Kenny L.. VBA Codes in Word Processors Are Fun, Simple, and Easy to Learn in One Hour or Less: VBA
for Students, Parents, and Professionals (Second Edition). Amazon Digital Services, Inc.. 2012.
Kingsley-Hughes, Adrian, Kingsley-Hughes, Kathie, s Korol, Julitta. Kezdknyv a programozsrl. Szak Kiad
Kft.. 2006.
Kotsis, Domokos, Lgrdi, Gbor, Nagy, Gergely, s Sznsi, Sndor. Tbbnyelv programozstechnika Object
Pascal, C++, C#, Java. Panem Kft.. 2007.

91

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Irodalom

Kuzmina, Jekatyerina, Tams, Pter, s Tth, Bertalan. Programozzunk Visual Basic rendszerben!. ComputerBooks.
2006.
Lengyel, Lszl s Tth, Blint. Programozs, algoritmusok. Typotex Kiad. 2002.
Mackey, Alex. A NET 4.0 s a Visual Studio 2010. Szak Kiad Kft.. 2010.
Martin, Robert C.. Tiszta kd Az agilis szoftverfejleszts kziknyve. Kiskapu Kiad. 2010.
Martin, Robert C.. Tllknyv programozknak. Kiskapu Kiad. 2011.
Provincien, Zeven. Sorting algorithm demo http://smallbasic.com/program/?SORTVIZ (Hozzfrs: 2012. jnius
1.). 2010.
Sakamoto, J.. Excel Library for Small Basic http://excel4smallbasic.codeplex.com/ (Hozzfrs: 2012. jnius 7.).
2011.
Schmidt, Stephan. Learn Programming with Microsoft Small Basic http://codemonkeyism.com/learn-programmingmicrosoft-small-basic/ (Hozzfrs: 2012. jnius 22.). 2010.
Simpleton Geek. Anything goes Simpleton Geek http://ramstrong.blogspot.hu (Hozzfrs: 2012. Jlius 11.).
2012.
Smith, Charles. Charles SmithVisual Basic Database Management : Essentials+(Professionals) KIT. Shiyam.
2012.
Snell, Mike. Code Camp 2009 - Small Basic Presentation. Visual Studio Unleashed Mike Snell on .NET
Development http://visualstudiounleashed.com/mikesnell/category/Small-Basic.aspx (Hozzfrs: 2012.
jnius 12.). 2009.
Vgh, Lszl. Programozs http://prog.ide.sk/ (Hozzfrs: 2012. jnius 22.). 2011.
(szerz nlkl). Data Extension http://wiki.smallbasic.com/Data%20Extension.ashx (Hozzfrs: 2012. jnius
15.). 2011.
(szerz nlkl). Extending Small Basic http://blogs.msdn.com/b/smallbasic/archive/2008/10/27/extending-smallbasic.aspx (Hozzfrs: 2012. jnius 9.). 2008.
(szerz nkl). Extend SmallBasic http://extendsmallbasic.codeplex.com/ (Hozzfrs: 2012. jlius 5.). 2011.
(szerz nlkl). Koch-grbe. Wikipdia http://hu.wikipedia.org/wiki/Koch-g%C3%B6rbe (Hozzfrs: 2012.
mjus 26.). 2010.
(szerz

nlkl).
Post your sample source code here and get featured on our blogs!
http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/eaacf826-9d12-4e3c-aa101b2788f160a6/ (Hozzfrs: 2012. mjus 30.). 2012.

(szerz nlkl). Project Euler Solutions http://social.msdn.microsoft.com/Forums/en/smallbasic/thread/c209f91a278c-43b3-ad03-7ecb4c8b6de1 (Hozzfrs: 2012. jnius 8.). 2012.
(szerz nlkl). Project Euler solutions using Small Basic http://wiki.smallbasic.com/ProjectEuler.ashx (Hozzfrs:
2012. mjus 9.). 2011.
(szerz nlkl). Small Basic, MSDN http://social.msdn.microsoft.com/Forums/en-US/smallbasic/ (Hozzfrs:
2012. mjus 4.). 2012.
( s z e r z
n l k l ) .
S m a l l
B a s i c
P ro g r a m
L i s t
http://wiki.smallbasic.com/Small%20Basic%20Program%20List.ashx?HL=game (Hozzfrs: 2012.
mjus 27.). 2012.

92

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Irodalom

(szerz

s vszm nkl).
Microsoft Small Basic An introduction to Programming
h t t p : / / d o w n l o a d . m i c ro s o f t . c o m / d o w n l o a d / 9 / 0 / 6 / 9 0 6 1 6 3 7 2 - C 4 B F - 4 6 2 8 - B C 8 2 BD709635220D/Introducing%20Small%20Basic.pdf (Hozzfrs: 2012. mjus 2.).

(szerz s vszm nkl). Project Euler http://projecteuler.net/ (Hozzfrs: 2012. jnius 16.).
(szerz

s vszm nkl).
Small Basic Enthusiasts a
http://smallbasic.com/doc.aspx (Hozzfrs: 2012. mjus 7.).

Small

Basic

Facebook-csoportja

(szerz s vszm nkl). Microsoft Small Basic reference documentation http://smallbasic.com/doc.aspx


(Hozzfrs: 2012. mjus 5.).
(szerz s vszm nkl). Small Basic Spread the joy of programming http://litdev.hostoi.com/ (Hozzfrs:
2012. jlius 5.).
(szerz s vszm nkl). Small Basic Recipes http://teachingkidsprogramming.org/blog/kids-learningprogramming/recipes-for-small-basic/ (Hozzfrs: 2012. jnius 26.).
(szerz s vszm nkl). Small Basic-wiki http://wiki.smallbasic.com/ (Hozzfrs: 2012. mjus 8.).

93

XML to PDF by RenderX XEP XSL-FO F ormatter, visit us at http://www.renderx.com/

Você também pode gostar