Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
1
CSORDÁS JÁNOS: A PROGRAMOZÁS ALAPJAI VISUAL BASIC-BEN
Tartalom I. Bevezetés .............................................................................................................................................. 2
II. Programozási alapok ........................................................................................................................... 2
1. Az első lépések ................................................................................................................................ 2
2. Névterek .......................................................................................................................................... 3
3. Eljárások (alprogramok) .................................................................................................................. 4
4. Változók ........................................................................................................................................... 5
4.1 A változók elmélete ................................................................................................................... 5
4.2 Változó típusok .......................................................................................................................... 6
4.3 Példák változók felhasználásával ............................................................................................... 6
4.4 Az egydimenziós tömb .............................................................................................................. 6
4.5 A kétdimenziós tömb ................................................................................................................. 7
5. Elágazások (szelekciók) a programban ............................................................................................ 8
6. Ciklusok (iterációk) a programban .................................................................................................. 9
7. Matematikai műveletek a programban......................................................................................... 10
III. Programozás haladó(bb) szinten ...................................................................................................... 11
1. Adatbeolvasás szöveges fájlból ..................................................................................................... 11
2. Szöveges fájlok feldarabolása ........................................................................................................ 12
3. Adatbeolvasás, Split(), kétdimenziós tömb – 3 az 1-ben, egészségére! ........................................ 15
IV. Az érettségi feladat megoldása – beszéljenek a kódok! .................................................................. 18
Szöveges fájl beolvasása kétdimenziós tömbbe – a beolvas() eljárás............................................... 18
1. feladat – a feladat1() eljárás .......................................................................................................... 18
2. feladat – a feladat2() eljárás .......................................................................................................... 18
3. feladat – a feladat3() eljárás .......................................................................................................... 20
4. feladat – a feladat4() eljárás .......................................................................................................... 20
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
2
I. Bevezetés Oldjuk meg a 2005. májusi érettségi vizsga programozási feladatának első részét (1-6 feladatok). Egy
szöveges fájlban (lottosz.dat) 51 hét ötös lottó számai találhatóak. Az első sorban az első héten hú-
zott számok vannak, szóközzel elválasztva, a második sorban a második hét lottószámai vannak stb. A
szöveges fájl első négy és utolsó sorának adatai:
37 42 44 61 62
18 42 54 83 89
5 12 31 53 60
1 28 47 56 70
…
9 20 21 59 68
Megjegyzések:
- a lottószámok minden sorban emelkedő számsorrendben szerepelnek
- a szöveges fájlt ki kell majd egészítenünk egy 52. sorral (89 24 34 11 64)
- a szöveges fájlban található legkisebb szám 1, a legnagyobb pedig 90, mivel a lottószelvénye-
ken 90 szám közül 5 számot kell a fogadónak megjelölnie egy-egy fogadás alkalmával
Az első lépés az, hogy a szöveges fájlt valamilyen formában elérhetővé tegyük a Visual Basic számára.
II. Programozási alapok
1. Az első lépések A Visual Basic indítása után két választási lehetőségünk van: New Project, illetve Open Project. Ter-
mészetesen az előbbire van szükségünk. A New Project ablakában többféle programtípus közül vá-
laszthatunk. Nekünk minden esetben a Console Application-ra van szükségünk. A lehetőség kiválasz-
tása után adjunk nevet a project-nek, majd kattintsunk az OK gombra. A megjelenő ablakban az aláb-
bi kódrészletet látjuk:
A Sub Main() a főprogram eleje, az End Sub a főprogram vége. A program fut-
tatásakor a főprogramban található utasítások kerülnek végrehajtásra egymás
után.
A legalapvetőbb utasítás a képer-
nyőre való kiírás utasítása. Ez a
Console.Write() és a
Console.WriteLine(). A kettő között az a különbség,
hogy a Console.WriteLine() miután a képernyőn meg-
jeleníti a zárójelben található szöveget, a sor végén egy
sortörést is elhelyez.
A jobb oldalon látható program kimenete: HelloWorld!:-). Amennyiben Console.Write() helyett,
Console.WriteLine()-t használunk, a program kimenete a következő lesz:
Hello World!
:-)
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
3
Amennyiben lenne egy harmadik Console.WriteLine() is a programban, annak tartalma a smile alá
kerülne. Látható, hogy az utasítások végrehajtása egymás után történik. Ahhoz, hogy a program
eredményéből valamit lássunk is, meg kell akadályozni, hogy a Windows az utasítások lefuttatása
után bezárja a Console –t:
A Console.ReadKey() tulajdonképpen arra utasítja, a gépet, hogy egy karakter leütésére várjon.
Miután ez megtörtént következik az End Sub, a (fő)program futása véget ér.
2. Névterek A fenti példákban látható, hogy minden utasítás előtt megtalálható a Console bejegyzés. Ennek meg-
adására azért van szükség, mert egyébként nem lenne egyértelmű, hogy hová szeretnénk adatokat
írni (Write), illetve honnét szeretnénk adatokat beolvasni (ReadKey). Írhatunk ugyanis a nyomtatóra
is, vagy beolvashatunk adatokat az USB portról is. A Console egyértelműen meghatározza, hogy a
képernyőre kell a programnak írnia, és általunk a billentyűzet segítségével, a képernyőn megjelení-
tett adatokat kell beolvasnia. Ha csak a monitort szeretnénk használni adatok beolvasására és kiíratá-
sára, akkor megtehetjük, hogy a program elején beállítunk egyfajta alapértelmezést (névteret), amely
biztosítja, hogy a program futása során, a Console utasítás elhagyása esetén is, egyértelmű legyen,
hogy a monitor az alapértelmezett periféria:
Az Imports System.Console–on kívül hasonló megfontolásból használható a következő két névtér:
- Imports System.IO fájlműveleteknél, adatbeolvasásnál, fájlba írásnál
- Imports System.Math komplexebb matematikai műveleteknél (Ezekről részletesebben ké-
sőbb)
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
4
3. Eljárások (alprogramok) Eljárások segítségével a programot kisebb részekre oszthatjuk, ezzel a kód áttekinthetőbb lesz, és jól
megírt programok esetén előfordulhat, hogy egy korábban elkészített eljárást egy másik feladat
megoldásánál is felhasználhatunk, ezzel pedig időt spórolhatunk. Egy-egy érettségi feladatot egy-egy
eljárásban célszerű megoldani. Mi hat feladatot (+1 a beolvasás) fogunk megoldani, így programunk
szerkezete valahogy így fog kinézni:
Megjegyzések:
- az utasítások végrehajtásának logikája nem változott. A Sub Main()–nel kezdődik a program,
itt rögtön az első utasítás a beolvas() nevű eljárás meghívása. A beolvas() nevű eljárásban
található utasítások végrehajtása után a feladat1() eljárás következik. Végül eljutunk a
ReadKey()-hez.
- a beolvas() nevű eljárásban találunk kettő zöld színű, aposztróffal kezdődő sort. Ezek meg-
jegyzések, a program végrehajtása szempontjából semmiféle jelentőségük sincsen. Arra
használjuk őket, hogy emlékeztető szövegeket helyezzünk el a programban. Ha hónapokkal,
vagy évekkel később megnyitjuk a project-et, akkor a megjegyzések segíthetnek abban, hogy
megértsük mit miért csináltunk.
- a programkód bal oldalán csomópontokat találunk ezekben + vagy – jeleket. A csomópontok
segítségével a program bizonyos részeit elrejthetjük. Ennek hosszú program esetén van külö-
Start
Kész!
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
5
nös jelentősége: a már megírt, működő programrészek elrejtésével megakadályozzuk, hogy
véletlenül onnét valamit kitöröljünk, vagy oda valamit beírjunk. A program így rövidebbnek
fog tűnni, a rövidebb program pedig jobban átlátható. A példafeladatban öt eljárást rejtet-
tünk el.
4. Változók
4.1 A változók elmélete
Ha adatokkal szeretnénk dolgozni (azaz mindig ), akkor a programban meg kell teremteni az adatok
kezelésének feltételeit. Adatokkal akkor tudunk dolgozni, ha az adatokat változókba (a memória egy
meghatározott szegletébe) helyezzük. A változókat egy-egy névvel rendelkező dobozhoz hasonlíthat-
juk leginkább. Ahhoz, hogy valamit a dobozba tudjunk helyezni először létre kell hozni a dobozt, lét-
rehozásnál meg kell határozni, hogy mekkora legyen a mérete. Ha kész az adott méretű doboz, akkor
az adott tárgyat bele lehet tenni, sőt arra is van lehetőség, hogy a tárgy helyett egy másik tárgyat
helyezzünk bele, feltéve, ha belefér.
A Visual Basicben is tulajdonképpen így kezeljük az adatokat:
- változó (doboz) létrehozása: a változó DEKLARÁLÁSA. A
deklarálást a Dim vezeti be. Ezt követően meg kell ad-
nunk a változó nevét (valtozo) majd ez után a változó
méretét (Byte), azaz típusát
- a változó (doboz) feltöltése: a változó DEFINIÁLÁSA. A
deklarálás után közvetlenül a változóba betettünk egy
1-est.
- a változó (doboz) tartalmának cseréje szükség esetén: a
definiálás után közvetlenül az 1-est 2-esre cseréltük. Ez-
után érdekes dolgot látunk, a kifejezést jobbról balra ki-
olvasva:
o a változó tartalmához hozzáadunk 2-t. 2+2=4.
o az így létrejött számot (4) beletettük a változó-
ba, azaz a 2-es 4-esre cseréljük.
Megjegyzések:
- a változó neve bármi lehet, azonban lehetőség szerint kerüljük az ékezetes betűket. A változó
nevével hivatkozhatunk a programban a változó értékére. Használjunk beszédes neveket!
- a változó csak abban az eljárásban él, amelyikben deklaráltunk (ezért is hívjuk lokális válto-
zónak). Azaz a fenti példa szerinti (valtozo) csak a Sub Main()–ben használható a többi eljá-
rásban nem létezik. Ha olyan változóra van szükség, amely bármelyik eljárásból elérhető, ak-
kor globális változót kell létrehozni. Ez mindössze annyit jelent, hogy eljáráson kívül, a Module
Module1 –en belül kell deklarálni.
- a változó típusa meghatározza, hogy milyen értékeket lehet a változóban tárolni. Eme tény
figyelmen kívül hagyása esetén furcsa dolgok történhetnek. Esetek:
o szám típusú változóba szöveget próbálunk tenni – papírdobozba vizet öntünk: a prog-
ram hibaüzenettel leáll. Használjunk műanyag dobozt!
o szám, konkrétan Byte típusú változóban nagy számot kívánunk tárolni – gyufás ska-
tulyába próbálunk elefántot tenni: ún. túlcsordulás lép fel, a program leáll.
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
6
4.2 Változó típusok
Változók deklarálásánál kell döntenünk arról, hogy a változóban milyen típusú adatokat fogunk tárol-
ni. Gyakori típusok:
- Byte: 0-255 közötti szám (a memóriából egy bájtot foglal el)
- Integer: -2 147 483 648 és 2 147 483 647 közötti szám (a memóriából négy bájtot foglal el)
- Single: amennyiben nem egész számokat kívánunk tárolni. Hatalmas méretű…
- Char: egy karaktert tárol (a memóriából két bájtot foglal el)
- String: szöveg tárolására (a memóriából két bájtot foglal el. Ez azt jelenti, hogy egy ilyen tí-
pusú változóba 4 294 967 296 tetszőleges karaktert rögzíthetünk egyszerre)
4.3 Példák változók felhasználásával
Az előző programot dolgozzuk át egy kicsit!. A változó
deklarálása utáni sorban a felhasználó által begépelt
értéket beolvassuk a monitorról (ReadLine()), majd elhe-
lyezzük a változóban (valtozo=ReadLine()). Tegyük fel,
hogy a felhasználó az 5-öst gépelte be. A program kimene-
te a következő lesz:
valtozo
5
A programban két utasítással írunk ki valamit a képernyő-
re. Az első WriteLine() a „valtozo” szót írja a képernyőre, a második pedig a valtozo nevű változó
tényleges értékét. Ne keverjük a kettőt! Két megjegyzés:
- programunk legyen mindig felhasználóbarát: a felhasználót tájékoztassuk, hogy mi történik,
mit várunk tőle
- a ReadLine() utasítást a Val() utasítással együtt használjuk számbeolvasás esetén. Az utóbbi
ugyanis abban az esetben, ha a felhasználó betűket is begépel, kiszűri a számként nem ér-
telmezhető karaktereket:
4.4 Az egydimenziós tömb
Az egydimenziós tömb egy olyan változó, amely doboz helyett inkább egy fiókos szekrényhez hason-
ló. A deklarálásnál ilyenkor a fiókok számát is meg kell adnunk. A fiókokra, illetve tartalmukra sor-
számukkal hivatkozhatunk. Az első fiók sorszáma a 0, az utolsó fiók sorszáma a fiókok száma-1-gyel
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
7
egyezik meg. Konkrétan egy 5 fiókos szekrény első fiókja sorszám szerint a 0., az ötödik pedig a 4. Egy
egydimenziós tömb deklarálása és a fiókok tartalmának definiálása:
A tomb nevű tömb egy ötfiókos szekrény:
1 A 0. fiók tatalma
2 Az 1. fiók taralma
3 A 2. fiók tartalma
4 A 3. fiók tartalma
5 A 4. fiók tartalma
A program kiírja az első (0.) és a második (1.) fiók
tartalmát szóközzel elválasztva. A WriteLine()
utasításban jól látható, hogy egyszerű szöveget
(szóköz), miképpen fűzhetünk össze egy-egy válto-
zó tartalmával. Az összefűzéshez a & operátort kell
használnunk. A & előtt és után egy-egy szóköz kö-
telező!
4.5 A kétdimenziós tömb
A kétdimenziós tömb egy olyan változó, amely egy egyszerű fiókos szekrény helyett inkább egy szek-
rénysorhoz hasonlítható. A kétdimenziós tömb tulajdonképpen egy táblázat, x db sorral, és y db osz-
loppal rendelkezik.
A deklarálásnál ilyenkor a fiókok száma lényegtelen, a sorok (x) és az oszlopok (y) számát kell megad-
nunk. A fiókokra, illetve tartalmukra a sor- és oszlopszámmal hivatkozhatunk. Az első fiók sorszáma a
0,0, az utolsó fiók sorszáma pedig x-1, y-1. Konkrétan egy 2x2-es szekrény első fiókja sorszám szerint
a 0,0, az utolsó pedig az 1,1. Egy kétdimenziós tömb deklarálása és a fiókok tartalmának definiálása:
A tomb nevű tömb egy négyfiókos
(2x2-es) szekrény:
0,0 fiók 11 21 0,1 fiók
1,0 fiók 13 41 1,1 fiók
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
8
5. Elágazások (szelekciók) a programban Elágazások segítségével határozhatjuk meg, hogy adott helyzetben milyen utasítás végrehajtására
kerüljön sor:
A program bekér egy számot, és
ha a felhasználó 1-est üt be, kiír
valamit. A kódban látható
If (feltételvizsgálat) Then
utasítás1
utasítás2
utasítás3
…
utasításn
End if
szerkezet egy elágazás. Ha a feltételvizsgálat (beker=1, jelen esetben 1=1) igaz, akkor az elágazásban
szereplő utasítás, vagy utasítások végrehajtásra kerülnek. Az ilyen szerkezetet egyágú szelekciónak
hívunk, mivel csak a feltétel teljesülése esetén végrehajtandó utasítások listáját tartalmazza. A fenti
programban valójában két darab egyágú szelekció található. Ezek csak csak 1 és 2 esetén határozzák
meg, hogy mi történjen. Ha a felhasználó pl. 3-at üt be, semmi sem történik.
Egyágú szelekciók mellett gyakran használunk kétágú szelekciókat is. A kétágú szelekció nem csak
azt írja elő, hogy mi történjen a feltétel teljesülése esetén, hanem azt is, hogy ellenkező esetben mi-
lyen utasítás(ok) kerüljön(ek) végrehajtásra:
A program bekér egy számot, és
attól függően, hogy a megadott
szám 1 vagy sem, kiír valamit. A
kódban látható kétágú szelekció
szerkezete:
If (feltételvizsgálat) Then
utasítás1
utasítás2
utasítás3
…
utasításn
Else
utasítás1
utasítás2
utasítás3
…
utasításn
End if
A feltételvizsgálatokban használhatóak a következő operátorok: =, és kifejezések: And, Or
beker=1
beker1
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
9
6. Ciklusok (iterációk) a programban Ciklusok segítségével egy vagy több utasítást többször hajthatunk végre. Háromféle ciklust használ-
hatunk, de most csak eggyel, a növekményes ciklussal fogunk megismerkedni. A ciklus szerkezete:
For [ciklusváltozó]=[kezdőérték] To [befejező érték]
utasítás1
utasítás2
utasítás3
…
utasításn
Next
A program egymás alatt négyszer jeleníti meg a „Hello”
szót. A ciklusváltozó jelen esetben az i, de lehetne más is,
mondjuk j. Ez egy speciális lokális változó, mivel:
- nem kell deklarálni
- csak a ciklusban létezik, a ciklus után nem használható.
A program működése az i aktuális értékétől függ. Az i kezdetben nulla (kezdőérték). A Next utasítás-
nál két dolog történik:
- az i értéke eggyel nő
- a vezérlés a ciklus elejére (For utasítás) lép ismét.
A ciklus elején a program megvizsgálja, hogy az i értéke a kezdő- és befejező érték között van-e.
Amennyiben igen, a ciklusban található utasítás (WriteLine("Hello")) ismét végrehajtásra kerül.
Majd újra eljutunk a Next –hez, i értéke nő, vezérlés visszatér a For –hoz. Vázlatosan a következő
történik:
For Next WriteLine("Hello") i legyen egyenlő 1-gyel az i 0 és 3 között van? IGEN WriteLine("Hello") i legyen egyenlő 2-vel az i 0 és 3 között van? IGEN WriteLine("Hello") i legyen egyenlő 3-mal az i 0 és 3 között van? IGEN WriteLine("Hello") i legyen egyenlő 4-gyel az i 0 és 3 között van? NEM-STOP
Könnyen belátható, hogy az alábbi esetekben sem változik meg a program kimenete:
- For i = 1 To 4 - For i = 10 To 13 - For i = 11 To 14
Az alábbi program kimenete azonban már eltérő lesz a ciklusváltozó értékeinek módosítása esetén:
A For-Next ciklus, mint látni fogjuk, remekül használható
tömbök feltöltéséhez. A bal oldalon látható programmal
például egy négyelemű egydimenziós tömbbe könnye-
dén beírhatunk 1-eseket. Amikor i=0, akkor tomb(0)-nak
adhatunk értéket,amikor i=1, akkor a tomb(1)-nek, és így
tovább. Azaz a For és Next közé elegendő ennyit írni:
tomb(i)=1!
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
10
7. Matematikai műveletek a programban Alapműveletek:
- *: szorzás (6*3 -- 12)
- /: osztás (6/3 -- 2)
- +: összeadás (6+3 -- 9)
- -: kivonás (6-3 -- 3)
- \: maradékos osztás (13\2 -- 6)
- Mod: maradékképzés (13\2 -- 1)
- ^: hatványozás (3 ^ 2 -- 9)
- Math.Sqrt(): négyzetgyök (Math.Sqrt(4) -- 2)
- Math.Floor(): egészrész képzés (Math.Floor(4.7) -- 4)
- Math.Round(): kerekítés (Math.Round(4.7) -- 5)
Példa1: Döntsük el egy számról, hogy páros vagy páratlan!
13: páratlan
12: páros
Belátható, a fenti két példa alapján is, hogy ha páros számokat kettővel osztunk, akkor a maradék 0
lesz, páratlan számok esetén viszont 1. Ezt kihasználva, a megoldás egyágú és kétágú szelekcióval:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
11
Példa2: Mit csinál az alábbi program?
III. Programozás haladó(bb) szinten
1. Adatbeolvasás szöveges fájlból Hozzunk létre (például) a C: meghajtón egy VB nevű könyvtárat. Ebben a könyvtárban hozzunk létre
egy nevek.txt nevű szöveges fájlt a következő tartalommal:
Gipsz Jakab
Aba Botond
Nagy Kata
A feladat az, hogy olvassuk be a szöveges fájlt, majd a neveket egymás után jelenítsük meg a monito-
ron:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
12
A megoldás értelmezése:
- fájlműveletekhez szükségünk van az IO névtérre. Ezt a második sorban importáltuk
- létrehoztunk egy egysor nevű, szöveges típusú változót. A szöveges fájlból ebbe fog kerülni
az első, a második és a harmadik sor (név)
- a fajl változóról csak azt kell tudnunk, hogy deklarálása során kell megadnunk a fájl elérési
útvonalát, ezután pedig azt, hogy mit akarunk vele kezdeni. Jelen esetben csupán megnyitjuk
(FileMode.Open). Ez azt jelenti, hogy tartalmát nem tudjuk módosítani, törölni. Ne felejtsük
el lezárni a változót, miután már nincs rá szükség (fajl.Close())!
- az sorok változóról csak azt kell tudnunk, hogy a program a szöveges fájlban található adato-
kat segítségével tudja közvetlenül elérni. Ne felejtsük el lezárni a változót, miután már nincs
rá szükség (sorok.Close())!
- a sorok.ReadLine kiolvassa az első sort a fájlból. A kiolvasott sort azonnal betesszük az egy-
sor nevű változóba, majd annak tartalmát rögtön ki is íratjuk a monitorra. Mivel Write() he-
lyett WriteLine() utasítást használunk, a nevek egymás alá fognak kerülni. A második so-
rok.ReadLine a második sort, a harmadik sorok.ReadLine a harmadik sort olvassa ki.
- Mivel a kiolvasás és kiíratás utasítása háromszor változatlanul egymás alatt megtalálható, a
programot ciklus segítségével egyszerűsíthetjük:
2. Szöveges fájlok feldarabolása Feladat1: A „Gipsz Jakab” nevet helyezzük el egy String típusú változóba, majd soronként külön
jelenítsük meg a vezeték-, majd keresztnevet (A vezeték- és keresztnév között egy szóköz található)!
A feladat megoldásához a Split() függvényt fogjuk használni. A Split() függvény a zárójelben
megadott karakter mentén darabolja fel a szöveges fájlt. Jelen esetben a szóköz mentén kell két
részre vágni Gipsz Jakabot, így kapjuk meg külön a vezeték- és keresztnevet. Igen ám, de ennek
következtében két szövegrész keletkezik, hogy kezeljük ezeket? Tegyük be egy kétfiókos String
típusú szekrénybe!
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
13
A nev nevű változó tárolja a nevet. Létrehoztunk egy
elemek nevű kételemű egydimenziós tömböt. Ez fogja
tárolni a vezeték- és keresztnevet.
A tömb deklarációja után a Split(" ")függvénnyel a
bal oldalon látható kód szerint a szóköz helyén felda-
raboltuk a nev nevű változó tartalmát, „Gipsz Jakab”-
ot. Ezt követően az elő- és utónevet az elemek nevű
tömbbe helyeztük, majd a 0. és 1. sorszámú fiók tar-
talmát egymás alá a monitorra írtuk.
Megjegyzés:
- az elemek nevű tömb értelemszerűen kisebb nem
lehet, de az az igazság, hogy nagyobb sem. A Split()
használata esetén a Split()-tel feldarabolt szöveg ré-
szeinek tárolására szolgáló tömb méretét körültekin-
tően kell megtervezni!
- Könnyen belátható, hogy ciklus segítségével, a cik-
lusváltozó felhasználásával is megoldhattuk volna a
feladatot
Ezt követően az előző fejezetben beolvasott neveket is
bontsuk két részre, majd a vezeték- és keresztneveket
jelenítsük meg egymás alatt!
A neveket egy szóköz választja el egymástól, így a
Split() használható. A Split() által feldarabolt szö-
vegrészek tárolásra itt is elegendő egy kételemű egy-
dimenziós tömb, mivel a két részből álló neveket so-
ronként olvassuk ki és daraboljuk fel.
Lapozz!
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
14
A bekarikázott részt ciklusra cserélve a program végleges formája:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
15
Feladat2: A következő, szóközzel elválasztott számokat olvassuk be egy Byte típusú tömbbe:
4 65 12 8 12!
Szükségünk lesz egy olyan tömbre, amely a számokat fogja tárolni. Ez ötelemű lesz, mivel öt számról
van szó. A tömb neve legyen szamok, típusa pedig Byte. A „4 65 12 8 12” Split()-tel feldarabolható,
azonban a Split() csak szöveges típusú tömbbe képes beírni a feldarabolás után keletkezett szöveg-
részeket. Így először egy ötelemű, szöveges típusú tömböt kell feltöltenünk (legyen ez most is az ele-
mek nevű tömb), majd a tömb értékeit át kell írnunk a szintén ötelemű szamok nevű tömbbe. Az első
program ciklus nélkül, a második ciklussal oldja meg a feladatot. Az utóbbi rövidebb, elegánsabb, és
bár a feladat nem kéri, de könnyedén megjeleníti a szamok nevű tömb minden értékét:
3. Adatbeolvasás, Split(), kétdimenziós tömb – 3 az 1-ben, egészségére! A VB könyvtárban készítsünk egy feladat.txt nevű szöveges fájlt a következő tartalommal:
37 42 44 61 62
18 42 54 83 89
A számokat szóköz választja el egymástól. Olvassuk be a számokat egy Byte típusú kétdimenziós
tömbbe, majd jelenítsük meg azokat a monitoron először egymás után, majd a fenti mintának megfe-
lelően!
Hozzávalók:
- az adatbeolvasáshoz szükséges változók (fajl, sorok)
- a Split() által használt String típusú tömb. Mivel soronként 5 szám található, ezért 5 ele-
műnek kell lennie. Legyen a tömb neve továbbra is elemek
- a kétdimenziós, Byte típusú, 2x5-ös tömb. Legyen a tömb neve szamok
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
16
1. lépés – a program keretének elkészítése
A program középső részén látunk egy For-Next ciklust. Mivel a szöveges fájlban csak két sor van,
ezért a ciklusban található utasításokat kétszer kell végrehajtani. Az i értéke először 0, majd 1, így
tényleg kétszer olvasunk ki sorokat a szöveges fájlból (sorok.ReadLine), majd ezeket a sorokat külön-
külön daraboljuk a szóközök mentén. Az i értéke pedig felhasználható valamire: segítségével először
a kétdimenziós tömb első (sorszám szerint 0.), majd második (sorszám szerint 1.) sorát tölthetjük fel.
2. lépés – a kétdimenziós tömb feltöltése
A megjegyzés helyére a következőt írhatjuk:
Az i először 0, így először a tömb első sorába írjuk be az első 5
számot, végül az i értéke 1, így a tömb második sorába írjuk
be az utolsó öt számot. A bal oldalon látható kód nem túl
szép, és nem túl hatékony, ezért átalakítjuk.
3. lépés – a feltöltés optimalizálása és a számok kiírása a monitorra egymás alá:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
17
A végleges kód:
Már csak a megjegyzés helyére kell írnunk valamit. Felhívnám a figyelmet, hogy nem véletlenül fogjuk
ide a kódot beszúrni. A megnyitott fájlt célszerű lezárni (fajl.Close()), ha már nem használjuk.
Mivel a kétdimenziós tömböt már feltöltöttük, és a feladatunk csupán az, hogy ennek a tartalmát a
mintának megfelelően kilistázzuk, a megnyitott fájlra már nincs szükségünk, így a fájl lezárása után is
elkészíthetjük a hiányzó kódrészletet:
Az i itt is a sorokat azonosítja. Az i először 0, majd 1. A
kiíráshoz a Write() utasítást használjuk, mert soron-
ként szóközzel elválasztva egymás mellé kell írni 5-5
számot. 5 szám után azonban kell egy sortörés. Erre
szolgál az üres WriteLine().
Ez a kódrészlet szintén optimalizálható:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
18
IV. Az érettségi feladat megoldása – beszéljenek a kódok! Egy nagy kitérő után végre elérkeztünk a feladatmegoldáshoz. Az alábbiakban a megoldásokat köz-
löm, magyarázatokat viszont nem fűzök a kódhoz. Teszem ezt azért, mert a korábbi fejezetekben
minden szükséges információ megtalálható. Így ezt a részt csak azoknak ajánlom, akik az előismere-
teket más elsajátították. Az alábbi program a mellékelt megoldas.txt-ben is megtalálható.
A program váza a II. fejezet 3. pontjában (Eljárások) megtalálható kód lesz. Az alábbiakban csak az
egyes eljárások tartalmát közlöm. A forrásfájlt, amit mellékeltem is, a lottosz.dat-ot, a VB könyvtárba
másoltam, onnét fogom megnyitni. A továbblépés előtt olvassuk el ismét a tananyag elején található
feladatleírást. Az alábbi kódokban figyeljünk a megjegyzésekre is!
Szöveges fájl beolvasása kétdimenziós tömbbe – a beolvas() eljárás
1. feladat – a feladat1() eljárás Kérje be a felhasználótól az 52. hét megadott lottószámait!
2. feladat – a feladat2() eljárás Figyelem!!! Ez a feladat a legbonyolultabb, és az alábbiakban használt algoritmust még nem tanultuk.
Nyugodtan kihagyhatjuk, és folytathatjuk a 3. feladattal!
A program rendezze a bekért lottószámokat emelkedő sorrendbe! A rendezett számokat írja ki a
képernyőre!
Ahhoz, hogy a bekért számokat rendezni tudjuk, a következő feltételeket figyelembe kell vennünk:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
19
- a feladat1() eljárásban használt ujhet változó tartalmát Split()-tel darabolnunk kell, és az
elemeket Byte típusú tömbbe kell elhelyezni
- az ujhet lokális változó, a feladat() eljárásból nem érhető el, ezért globális változóvá kell elő-
léptetnünk:
Végül a megoldás:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
20
3. feladat – a feladat3() eljárás Kérjen be a felhasználótól egy egész számot 1-51 között! A bekért adatot nem kell ellenőrizni!
4. feladat – a feladat4() eljárás Írja ki a képernyőre a bekért számnak megfelelő sorszámú hét lottószámait, a lottosz.dat állo-
mányban lévő adatok alapján!
Megjegyzések:
- mivel a lottosz.dat adatait már elhelyeztük a szamok nevű kétdimenziós tömbbe, ezért a fájlt
nem kell újra megnyitnunk. A szamok azonban lokális változó, a feladat4()-ből nem érhető el.
Globális változóvá kell előléptetni:
- hasonlóképpen a feladat3() eljárásban bekért szám (szam) is lokális változó. Globális változót
kell belőle csinálni, hogy a feladat4() eljárás kezelni tudja:
A programozás alapjai Visual Basic-ben
Budapest-Fasori Evangélikus Gimnázium ©Csordás János – 2010. v1.
21
* az ujhet nevű globális változót a feladat2()-ben hoztuk létre.
Végül a megoldás:
folytatása következik januárban…