Escolar Documentos
Profissional Documentos
Cultura Documentos
Tth Zsolt
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].
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
Programozsi alapismeretek
iv
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
Bevezets
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.
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
Ha a fenti kdot futtatjuk, programfuts kzben nmi interakcira is lehetsgnk nylik. Ehhez azonban
vltozkat kellett hasznlnunk.
A vltozk hasznlata
vezeteknev = TextWindow.Read()
s a
keresztnev = TextWindow.Read()
TextWindow.WriteLine(
"dvzlm nt, Tisztelt " + vezeteknev + " " + keresztnev+ "!")
A vltozk hasznlata
Szmtrol program
A kvetkez egyszer pldaprogram a szmok trolsra ad pldt:
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:
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
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.
11
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.
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.
12
Feltteles elgazs
13
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
11. bra: A Goto-val kiegsztett szorzsi plda futsi eredmnye tbb helytelen vlasz esetn
14
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.)
15
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
Ciklusok
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
Ciklusok
18
GraphicsWindow.Show()
GraphicsWindow.BackgroundColor = "Red"
GraphicsWindow.Title = "Grafikus ablakom"
GraphicsWindow.Width = 400
GraphicsWindow.Height = 200
GraphicsWindow.CanResize = "True"
GraphicsWindow.Show()
19
GraphicsWindow.BackgroundColor = "Red"
GraphicsWindow.BackgroundColor = "#FF0000"
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)
20
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.
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)
21
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
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.
22
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)
'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
23
'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
'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
24
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:
25
26
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.
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()
27
Tekncgrafika
'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
Tekncgrafika
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:
29
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
30
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.
31
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
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.
Indexels szveggel
Az elz programban a tmbt szmokkal indexeltk, azonban az indexels nemcsak szmokkal
trtnhet:
'Indexels szveggel
33
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.
Tbbdimenzis tmbk
Az elz program viszonylag knnyen talakthat tbb felhasznl adatait bekr s kir programm:
34
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
[2][irnytszm] = 9400
n. felh. [n][nv] = gi
[n][irnytszm] = 9025
35
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.
'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
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.
37
'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
38
Esemnyek s vezrlk
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
Esemnyek s vezrlk
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
GraphicsWindow.Show()
kep = Flickr.GetRandomPicture("kutya")
szelesseg = GraphicsWindow.Width
magassag = GraphicsWindow.Height
GraphicsWindow.DrawResizedImage(kep, 0, 0, szelesseg, magassag)
41
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
43
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.
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
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
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.
46
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
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.
48
49
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
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.
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
Small Basic-pldk
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
Small Basic-pldk
TextWindow.WriteLine
((Text.GetSubText(Text.GetSubText(">KvK=D>KvP=V>KvO=G>PvK=G>PvP=D>PvO=V>OvK=
Goto Jtk
53
Small Basic-pldk
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
Small Basic-pldk
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
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
56
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
Small Basic-pldk
Op-art rzsa
Egyszer, tekncgrafikra pl alkalmazs op-art stlust kvet rzsa rajzolsra:
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
Small Basic-pldk
Turtle.Hide()
EndSub
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:
59
Small Basic-pldk
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
Small Basic-pldk
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
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
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
+
+
+
+
(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
64
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:
65
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.
66
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
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
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
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
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"
70
71
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
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
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
3. problma
Feladat: Szmoljuk ki egy sszetett szm legnagyobb prmosztjt!
Az albbi program egy sszetett szm legnagyobb osztjt is kirja a prmoszt mellett:
74
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
75
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
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
77
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
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
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
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("")
80
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
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
(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.
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
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.
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
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
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
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
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
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.
87
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
89
90
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
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
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
93