You are on page 1of 111

xi.

xIIx

xi

,.ouwúlhru

INFORMATIKA
8. Szoftverfejlesztés — Visual Basic

2006
[W

onfhnlé

.luvr

az

U?!
Infonnatika 5.
8. Szoftverfejlesztés
2003
bővített, átdolgozott kiadása

Lezárva: 2006. augusztus 1.

írták: Lévayné Lakner Mária


Molnár István
Orbán Anna

Sorozatszerkesztö: Orbán Anna

Magánkiadás

Nyomta és kötötte a Marosi—Print Kft.


1214 Bp., II. Rákóczi Ferenc út 195-197.
Tel/Fax: (06 1) 276 30 27
Felelős vezetö: Marosi Attila
1 ' ., 'r

_
.ja, _

, A

, .; .;

.1 '.' '—

__._, . .

,. v _ .

!. : _ ,

_ ._g- —_ ;
8. Szoftverfejlesztés

8.1. Előszó

Tisztelt Olvasó!

Az Ön által most kézbevett tananyag egy gazdasági informatikai alapismere-


teket és az arra épülő irodai alkalmazásokat tartalmazó tankönyvsorozat ötödik
része.
A tananyag elsajátításához nem szükséges semmilyen számítástechnikai elő—
képzettség, de áttanulmányozását azoknak is ajánljuk, akik már tanultak valahol,
valamilyen formában számítástechnikát.
A tananyag fejezetei szorosan egymásra épülnek, ezért feldolgozásuk sorrend-
jének a fejezetek sorrendjét javasoljuk:
Informatikai alapismeretek
Hardver
Szoftver — Windows XP

Kommunikációs rendszerek és számítógépes hálózatok

Szövegszerkesztés — Word 2003


Prezentációkészítés — PowerPoint 2003

Képszerkesztés
Szoftverfejlesztés — Visual Basic
Adatbázis—kezelés alapjai

Adatbázis-kezelési gyakorlat — Access 2003


A felsorolásból is jól látható, hogy az itt közölt ismeretek túlmutatnak az alap-
szintű gépkezelésen, de nem célunk informatikus szakemberek, programozók,
rendszergazdák képzése sem. Elsősorban felsőfokú képzésben résztvevők, egy
adott szakterületben jártas dolgozók informatikai ismereteit szeretnénk olyan
szintre hozni, hogy ezáltal a feladataik ellátásához szükséges informatikai eszköz—
rendszert minél hatékonyabban tudják használni.
A nyolcadik fejezet a szoftverfejlesztés legfontosabb fogalmait ismerteti, se—

gítséget nyújtva egy új program megtervezéséhez, elkészítéséhez. A programozás


alapjait az Office programoknál jól használható Visual Basic programnyelv segít-
ségével mutatjuk be.
Célunk, hogy a fejezet áttanulmányozása után képes legyen egy felhasználói
probléma megfogalmazására, a folyamat megtervezésére, algoritmikus leírására,
számítástechnikai programterv elemzésére, értékelésére, a programozás követel—
ményeinek meghatározására, egy elkészült program tesztelésére, kisebb progra-
mozási feladatok önálló megvalósitására.

—8.3—
8. Szoftverfejleszte's
A tankönyvsorozathoz tartozik egy példatár is, amely CD—lemezen kerül for-
galomba. Ezt a példatárt elsősorban azoknak ajánljuk, akik önállóan, vagy levele-
ző oktatás keretében szeretnék elsajátítani a tankönyvsorozat ismereteit. A példa-
tár tartalmazza a tankönyv egyes részeiben bemutatott feladatokat.
A jegyzetben használt jelölésrendszer
A tananyagban való könnyű tájékozódást többszintű fejezetszámozás és arra
épülő tartalomjegyzék segíti. Az egyes fejezeteken belül lapszélen elhelyezett
kulcsszavak hívják fel a figyelmet az ismertetett témakörök egyes elemeire. Java—
soljuk, hogy Ön a jegyzet áttanulmányozása során saját emlékeztetőivel bővítse a
széljegyzetek körét!
A tananyag elsajátítását a jegyzetben használt egységes jelölésrendszerrel is
szeretnénk elősegíteni. A szabványos jelölések a következőkre utalnak:

m ábrával és félkövér dőlt betűvel jelöljük azokat a fogalmakat, amelyek pontos


ismeretét feltétlenül fontosnak tartjuk,
?: ábrával és a normálnál kisebb betűvel jelöljük a fogalmak megértését szol-
gáltató, szemléltető jellegű példákat,

§ ábrával és normál betűvel jelöljük a gyakorlati feladatokat, amelyeket a tá-


nulás folyamán számítógéppel meg kell oldani,
CI ábrával zárjuk a szemléltető példákat és a megoldandó feladatokat,

(billentyűnév)-vel jelöljük a billentyűzet lenyomandó gombját,


félkövér betűvel jelöljük a programok menüpontjait és azok parancsait, amelye—
ket a megoldás során ki kell választani, ill. az ismertetett témákon belül fon—

tosnak tartott kifejezéseket,

(félkövér dőlt betűvel) jelöljük a menüpontok és parancsok angol nyelvű megfele-


lőit,

Courier New betűvel jelöljük a számitógép által kiírt üzeneteket.

-8.4-
8. Szoftverfej lesztés

8.2. Alapfogalmak

A szoftverke'szítés témakörének tárgyalásánál az algoritmus fogalmából indu—

lunk ki.

Algoritmus
m Algoritmus
Az algoritmus egy olyan feldolgozási előírás, amelyet olyan pontosan fogalmaz-
tak meg, hogy az mechanikus vagy elektronikus berendezéseken végrehajtható.
Lásd 1. fejezet algoritmus fogalmát is!
Az algoritmus egy probléma egyértelmű megoldására vonatkozó útmutatás.
Egy algoritmus készítése során meg kell adnunk, hogy egy adott probléma megol—
dásához milyen elemi lépéseket használhatunk fel. Ezen elemi lépések legyenek
egymástól fuggetlenek, legyenek szükségesek a probléma megoldásához, és al-
kossanak teljes rendszert. Minden elemi lépésre legyen szükség legalább egyszer,
és az elemi lépések összessége elég legyen a probléma megoldásához.

Az algoritmusok tulajdonságai Algoritmusok


tulajdonsagai
. Problémák egy adott osztályát írja le: egy konkrét problémát paraméterek
(bemeneti adatok) segítségével határozunk meg (A kötésminta megadását kö-
vetően a méretadat segítségével írjuk elő azt, hogy milyen pulóvert kötünk).
. Megismételhető eredményeket szolgáltat: tetszőleges gyakran alkalmazható
az adott problémára, mindig ugyanazt az eredményt kapj uk (a pulóverkészítés
algoritmusának megismétlésével mindig egy új pulóvert készítünk).
. Véges hosszúságú: a problémamegoldást véges számú elerni probléma meg-
oldására vezetjük vissza (pulóver összeállítása véges számú darabból, a kötés
visszavezetése véges számú hurkolásra stb.).
0 Lehet ,,nem teljes": az elemi problémák megoldását az algoritmus nem min-
dig tartalmazza (pl. egy szakácskönyv nem írja le, hogy hogyan forraljuk fel a
vizet, mivel ez elemi, mindenki által ismert megoldással rendelkező problé—
ma).

. Sorosan vagy párhuzamosan feldolgozható: lépések időben egymást köve—


tően, ill. egymással párhuzamosan is végrehajthatók (pl. mind a főzés, mind a
pulóverkötés során vannak/lehetnek párhuzamosan végrehajtható lépések).

' Pontosság: olyan pontos, hogy a szabad értelmezést megakadályozza (pl. ,,a
királynét megölni nem kell félnetek jó lesz ha mindenki beleegyezik én nem
ellenzem..." jellegű kijelentés elkerülése).
. Hatékonyság: az algoritmus végrehajtása alacsony erőforrás— és időfelhasz—
nálás mellett is lehetséges legyen (idő- és tárhatékonyság alacsony költségek
mellett).
Az algoritmus fogalmára építve vezetjük be a program fogalmát.

-8.5-
8. Szoftverfejlesztés

Program % Program
A program nem más, mint egy algoritmus és a hozzátartozó adatterületek egy
programozási nyelv segítségével történő leírása.
A program a számítógépnek szóló utasítások sorozata, amely egy algoritmus
alapján megadja, hogy a számítógép milyen módon végezzen el egy adott felada-
tot. A definíció következménye, hogy egy adott algoritmus különböző program-
nyelvekcn is megfogalmazható, a különböző programnyelveken megírt progra-
moknak azonban ugyanazt az eredményt kell szolgáltatniuk.

Programnak nevezzük:

. a forrásprogramot: a feladat leírása adott nyelven, olvasható módon,


0 a futtatható programot: a számítógép által végrehajtható kód.

m Szoftver
Szoftver A számítógépes programok összességét szoftvernek nevezzük.

8.3. A szoftverkészítés alapjai

Software-
m Software-engineering
engineering tudománya (Software-engineering) a programok és program-
A szoftverkészl'te's
rendszerek tervezése és létrehozása (implementála'sa) során használt elvekkel,
módszerekkel és technikákkal foglalkozik.
A 60-as évek szoftverkrízise nyomán megszületett fogalom bevezetése azt a fel-
fogást tükrözi, hogy a szoftverkészítés nem ,,művészi", hanem sokkal inkább ,,tu-
datos, műszaki-tudományos jellegű" tevékenység. A felfogás szellemében a szoft-
ver egy minőségileg magas értékű termék.

Program minösége A programnak, mint magas értékű terméknek a minőségét meghatározó tényezők
az alábbiak:

. Könnyű kezelhetőség, felhasználó-barátság: A felhasználói kezelőfelületek


egyszerű használatát biztosítani kell. (lásd Graphical User Interface: GUI).
. Megbízhatóság: a szoftvernek különleges körülmények között is működnie
kell, működési rendellenesség esetén is bizonyos komponenseknek még mű-
ködniük kell, s informatív hibaüzenetet kell szolgáltatniuk (robusztusság).
. Karbantarthatóság: a programot nem csak a szerzőnek, hanem másoknak is
meg kell tudniuk érteni, szükség esetén javítani ill. megváltoztatni.
. llleszthetőség, rugalmasság: a program legyen a további (késöbbi) felhasz-
nálói igényekhez is illeszthető.
. Hordozhatóság (Portabilitás): a szoftver legyen könnyen átvihető az egyik
számítógépről a másikra.
. Hatékonyság: a tár- és végrehajtási hatékonyság, mint fontos költségtényező
figyelembevételével működjön.
-8.6—
8. Szoftverfejlesztés
Ergonómia': a szoftvernek az ergonómiai szempontok figyelembevételével
kell működnie.

m A programfejleszte's célja
A programfejleszte's célja az adott probléma megoldását elvégző, helyesen míl— Programfcjlesztés
ködó' olyan program előállítása, amely egy adott számítógépen végrehajtható. célja
A szoftverfejlesztés során a következő feladatokat kell megoldani:

A probléma telj es és világos megfogalmazása.


A probléma felosztása részproblémákra.
A probléma-megoldási eljárás és a feldolgozni kívánt adatok leírása egy adott
programnyelven.
A számítógép által Végrehajtható program elkészítése.
A program minőségének és megbízhatóságának ellenőrzése.

8.4. A szoftver fázismodell

A problémakör részletes elemzését a fázismodell segítségével végezzük el. A szoftver


fázismodell
PROBLÉMA
Probléma
Problémaelemzés _" me gfogal-
A követelmények mazása
rögzítése

Tervezés (40% )——————l


Specifikáció

Megvalósítás (20%) —— *

Program
P ro gram-
fejlesztés
Rendszerteszt (40%) §

Tesztelt program

üzembehelyezés ___—— "


Informatikai Bevezetésr
alkalmazás és alkalma—

_—
_.

Uzemeltetés, karbantar- zásr fázrs


tás, módosítás ;
A szoftver elhasználódása

8—1. sz. ábra: A fázismodell

A szoftver—ergonómia olyan dialóg programrendszerek kialakításának követelményeivel és mód-


szereivel foglalkozik, amelyek elősegítik azt, hogy a felhasználó emberi szükségleteit, szellemi-,
fizikai- és szociális leterhelését a leginkább figyelembe vehessük.

-8.7—
8. Szoftverfejlesztés
8.4.1. A problémaelemzés

Problémaelemzés A problémaelemzés célja az, hogy a megoldandó problémát, és az összes mel—


lékkörülményt teljes körűen és pontosan meghatározzuk, majd ezt követően a
szoftverfejlesztés végrehajthatóságát megvizsgáljuk. Ennek megfelelően a prob—
lémaelemzés további lépésekre bontható:
A helyzetfelmérés fázisban'az összes olyan rendszerkomponenst vizsgálni és
elemezni kell, amelyet a számítógépes fejlesztés e'rint, megvizsgálva az érintett
komponensek működését és működési kölcsönhatásait.

Követelmények jegyzéke tartalmazza a rendszeren a számítógépes fejlesztés kö-


vetkeztében végrehajtandó strukturális változtatásokat, valamint a kifejleszteni
kívánt szoftver feladatait. A jegyzék csak a szoftverrel szemben támasztott köve-
telményeket tartalmazza, a megvalósítási részleteket nem (pl. rendszercélok; fel-
használandó alaphardver; felhasználói felület; továbbfejlesztési lehetőségek).

Megvalósíthatósági tanulmány azt vizsgálja, hogy a kifejleszteni kívánt szoftver


egyáltalán megvalósítható-e; azaz technikailag a probléma megoldható-e, a meg-
fogalmazott követelmények az adott feltételek mellett teljesíthetőek-e; (az adott
idő és pénzügyi korlátok, valamint egy elfogadható költség—/haszonmutató mel-
lett). A tanulmány megpróbálja előre jelezni a fejlesztés megvalósulásának várha-
tó kihatásait is.
A megvalósíthatósági tanulmány eredményeként vagy megkezdődhet a projekt
megvalósítása, vagy módosítani kell a követelményeket, vagy fel kell adni a pro—
jekt megvalósítását.
A projektterv tartalmazza a projekt időtervét, a személyzeti tervet és a kiegészítő
eszközökre, berendezésekre vonatkozó tervet.
A problémaelemzés eredményeként egy dokumentum jön létre, amit követelmény
vagy kötelezettség jegyzéknek nevezünk. Ez a dokumentum képezi a megrendelő
és a szoftverfejlesztő közötti szerződés alapját, amely ezt követően csak közös
megegyezés alapján módosítható.
Mivel a megrendelő és szoftverfejlesztő által kialakítani kívánt szoftver kom-
munikációs problémák miatt csak nehézkesen és lassan definiálható, ezért érthető
az a törekvés, hogy a követelményjegyzéknek megfelelő, gyorsan kialakított, mű—
ködőképes modell2 legyen a megállapodás alapja, s ennek pontosítása, funkciói-
nak tökéletesítése alapján lehessen a követelményjegyzéket, s így a szerződés tar—
talmát is meghatározni.

2
A gyorsan kialakított működőképes modell létrehozását ,,rapid prototyping"—nak (gyors prototí-
pusalkotásnak) nevezzük.

-8.8-
8. Szoftvcrfejlesztés
8.4.2. A tervezés

problémaelemzés fázisában a konkrét megvalósításra semmilyen utalás nem


A Tervezés
történik. A tervezési fázisban jön létre a teljes, megvalósítani kívánt szoftverrend—
szer olyan modellje, amelynek egy adott programyelven történő megvalósítása a
követelményeket kielégíti3. Különös figyelmet kell itt fordítani arra, hogy
o a létrejött modell a felhasználó meglévő, illetve beszerzésre kerülő hard-
ver/szoftver eszközein kerül—e realizálásra,
. a szoftverfejlesztés megvalósítása során használatos hardver/szoftver eszkö-
zök milyenek.
A tervezés során általában a hierarchikus modularizáció módszertani eszközét
használják (lásd 1.2. fejezet, valamint 8.6 fejezet).
A tervezési fázis befejezéseként egy specifikáció jön létre, amely az alábbi tar-
talommal rendelkezik:
0 az egyes modulok,
. a modulok funkciói,
. a modulok felhasználása,

' az illeszkedési felületek leírása,

. áttekintés az egyes modulok egymás közötti kapcsolatairól.


A specifikáció egyértelműségének biztosítása érdekében specifikációs nyelveket
és/vagy grafikus ábrázolási eszközöket (pl. HIPO-diagram) használnak.

8.4.3. Megvalósítás

A megvalósítás során jön létre a specifikációnak megfelelő, végrehajtásra al— Megvalósítás


kalmas számítógépes program.
A megvalósítás során az egyes modulok állnak az előtérben. A programozási
nyelvek használata során gondoskodni kell arról, hogy az algoritmusok és adat-
struktúrák a kívánt funkciókat valósítsák meg, s ugyanakkor az alábbi elvek is ér—

vényesüljenek:

. A struktúrált programozás elvei.


. A programozási nyelveknek csak általánosan elterjedt és használatos (ha lehet
szabványos) elemeit használjuk, ne használjunk géptől Függő konstrukciókat.

' Hozzunk létre áttekinthető illeszkedési felületeket (a paraméterezés felhaszná-


lásával).

3
Ez a modell az egy adott programnyelven történő megvalósíthatóság követelményeit is kielégíti.

-8.9-
8. Szoftverfejlesztés

. Használjunk megfelelő megnevezéseket (pl. változónevek).


. A program áttekinthető legyen, használjunk megjegyzéseket, üres sorokat,
lapváltást, modulfejléceket (lásd 8.2. sz. ábra).
Különleges jelentősége van a programozási nyelv kiválasztásának. A kiválasz-
tás szempontjaira a 8.5 sz. fejezetben utalunk.
*************************************************************
* Modulnév *
* A modul funkciói: *

Paraméter: Paraméter l; Bemenő paraméter; jelentése *


* Paraméter 2; Kimenő paraméter; jelentése *

* A modul hívása: *

* Felhasznált globális változók: *


* Felhasznált modulok *

* Verziószám *

* Szerző Dátum *

* Utolsó változtatást végrehajtotta *


Időpontja
* *

*************************************************************

8-2. sz. ábra: A modulfejléc tartalma

8.4.4. Rendszerteszt e's funkcióvizsgálat


Rendszerteszt A rendszerteszt és funkcióvízsgálat fázisában a programok spccifikációknak
megfelelő működését ellenőrzik az alábbi lépésekben:
Modulteszt A modulteszt azt vizsgálja, hogy valamennyi modul helyesen valósítja-e meg
a specifikációban előírt funkciókat. Tekintettel arra, hogy egy modul önmagában
(általában) nem képes a teljes funkcionalitást megvalósítani, ezért a modul számá-
ra egy olyan tesztkörnyezetet kell létrehozni, amely a tesztelni kívánt modult
tesztadatokkal látja el.
A hibák kiszűrését a programozó által kialakított, valamint az operációs rend-
szer által rendelkezésre bocsátott eszközök teszik lehetővé (pl. programhiba ese—
tén a végrehajtott utasítás(ok) és a tártartalom kiíratása, vagy a lépésenkénti vég—
rehajtás előírása).

Integrációs teszt Az integrációs teszt az összefűzött (integrált) moduloknak, azaz az egész


rendszernek a funkcionalitás-vizsgálata. Az integrációs teszt célja annak vizsgála-
ta, hogy a specifikáció és a követelményj egyzék a működő programtól mennyiben
tér el.

lnstallációs teszt Ha a szoftverrendszert nem azon a számítógéprendszeren fejlesztették, ame-


lyen a felhasználó a rendszert használni kívánja, akkor egy installációs tesztre is
szükség van.

—8.lO—
8. Szoftverfejlesztés

Az átvételi teszt során a megrendelő azt vizsgálja, hogy a program eleget tesz- Átvételi teszt
e valamennyi, a szerződésben rögzített megállapodásnak (a vizsgálat alapja a kö-
vetelményjegyzék).
A rendszerteszt és funkcióvizsgálat fázisának eredményeként egy olyan módo—
sított program és egy ehhez kapcsolódó dokumentáció áll rendelkezésre, amely a
követelményjegyzékben foglaltaknak megfelel.
A fázis befejezéseként általában egy teljesítmény vizsgálatra is sor kerül, Teljesítmény
amelynek célja a program elméleti és gyakorlati hatékonyságvizsgálata (pl. futás- vizsgálat
idő vizsgálata, tárterület felhasználásának vizsgálata).

Megjegyzés: Teszteléssel a hibáknak csak a jelenlétéről győződhetünk meg, arról


azonban nem bizonyosodhatunk meg, hogy nincsenek!!! (Ha egy program egy
megadott beviteli adatsorral helyes eredményt szolgáltat, az még nem biztosíték
arra, hogy bármilyen beviteli adatsorral is helyes eredményeket ad.)

8.4.5. Územbe helyezés és átvétel

Az üzembe helyezés és átvétel során a szoftverrendszert a működési környe— Územbe helyezés


zetben helyezik el, átadva azt az üzemeltetőnek (megrendelőnek). Ebben a fázis-
ban kerül(het) sor a felhasználók (át)képzésére is.

8.4.6. üzemeltetés, karbantartás, módosítás


Az üzemszerűen használt szoftveren idővel változásokat, módosításokat, bőví- üzemeltetés
téseket kell végrehajtani:

. az egyes algoritmusokat ki kell cserélni,

. új, a felhasználó által igényelt funkciókat kell beépíteni,

. a rendszeres használat során feltárt hibákat meg kell szüntetni,

' az egyes algoritmusok változása (pl. adó számítása) rendszeres programmó-


dosítást igényel.
A szoftverfejlesztési projekt során valamennyi fázisban dokumentumok ké-
szülnek. A dokumentáció fontosabb részeit és azt a szakmai kört, amelynek a do-
kumentáció íródott az alábbiakban soroljuk fel:

. Felhasználói dokumentáció a programfelhasználók számára. Dokumentációk


. Fejlesztői dokumentáció a fejlesztésben résztvevők számára.
. Műszaki-technikai dokumentáció a karbantartó személyzet számára.

8.4.7. A szoftverek elhasználódása, elavulása

A szoftverek életciklusának végén — csakúgy, mint más terméknél - a meg- Szoftver életciklus
szüntetés áll. Bár igen nagy erőfeszítéseket tesznek a szoftverek (vagy legalább vége

-8.11-
8. Szoftverfejlesztés

egyes modulok) újrafelhasználására (szoftver-reengineering), egyidejűleg több


operációs rendszer üzemeltetésére az adott hardvereszközökön, a szoftverek er-
kölcsi elavulása igen gyors.
Tekintettel arra, hogy egy—egy szoftvertermék kifejlesztése igen költséges (akár
több ezer emberév is lehet), már a tervezés és fejlesztés időszakában fel kell hasz—
nálni valamennyi lehetőséget a hosszú távú gazdaságosság biztosítására.

8.4.8. Szoftverköltségek

Tekintettel arra, hogy nemzetközi viszonylatban is kimutatható eltolódás jött


létre a szoftver- és hardverköltségek között az előbbiek javára, különleges jelentő—
sége van annak, hogy a szoftverfejlesztési projektek sikeresek legyenek.

Költségtúllépések A szoftverprojektek sikerének két leggyakoribb akadálya a következő:


okai 0 A határidők túllépése; amely általános jelenség (,,nem lehet elég pesszimis—
tán becsülni").
. A költségkeretek túllépése; amely több okra vezethető vissza:
0 A fejlesztési költségeket - amelyek meghatározása bonyolult, — alulbe-
csülik. A fejlesztési költségek csökkenthetők a termelékenység növelésé—
vel, a minőség megőrzése mellett.
0 A karbantartási költségek halmozódhatnak (hiba —
hibajavítás —
hiba prob—

lémája).
o Az üzemeltetési költségek (az adatrögzítés, az előkészítés, az anyag, vala—
mint a számítógép költségei) a hardver, a szoftver és a feladat minőségé-
nek Higgvényei, s így nehezen becsülhetők.
o Rejtett költségek, következményjellegű költségek (a bevezetésből valamint
az esetleges késleltetett bevezetésből adódó költségek) jelentkezhetnek.
A költségek csakis a vállalati, intézményi keretek összefüggéseiben vizsgálha—
tók. A költségek elemzése igen összetett probléma, s így a költségek csak külön-
leges megfontolást és körültekintést igénylő döntésekkel kezelhetők.
A költségek csökkentése területén egyre nagyobb szerepe van a minőségbizto-
sításnak. A szoftverek minősége az MSZ EN ISO 9000 alapján biztosítható. Az
ISO 9000-3 irányelveket ad az ISO 9001 szoftverre való alkalmazásához. Az ISO
9001 azt fogalmazza meg, hogy mely működési folyamatokat milyen követelmé—
nyek szerint kell kialakítani a termékek és szolgáltatások megfelelő minőségi
szintjének eléréséhez. Egyre terjednek a TOM (Total Ouality Management) rend-
szerek a szakterületen. 1995-ben jött létre az ISO 12207 szoftveréletciklus-
követési szabvány. Tartalmazza, hogy egy szoftver elkészítéséhez milyen specifi—
kációt kell kiadni a fejlesztőnek, milyen specifikáció szerint kell átvenni a termé—
ket, és foglalkozik a teszteléssel is.

-8.12-
8. Szoftverfejlesztés
A bemutatott szoftver fázismodell a kb. 100.000 programsor nagyságú szoft-
vertermékek kifejlesztéséhez adhat útmutatót. Az ennél nagyobb szoftverrendsze—
rek kifejlesztéséhez más módszereket (is) használnak. Az áttekinthetőség és köny-
nyű kezelhetőség érdekében a szoftverfejleszte'st különböző speciális szoftverek
felhasználásával támogatják. Ezeket a szoftvereket a CASE (Computer-Aided
Software Engineering) gyűjtőfogalma alá sorolhatjuk. A CASE-rendszerek a
szoftverfejlesztés valamennyi fázisát hatékonyan támogató eszközökkel rendel-
keznek.

8.5. A programozási nyelvek

A 8.4.3 fejezetben kifejtettük, hogy a megvalósítási fázis sikerének egyik kul-


csa a megfelelő programozási nyelv kiválasztása.
' in lv
m , . Progra m ozas ye
Programozas: nyelv
A program utasításait a számítógép számára leíró formális nyelv.
Programozási nyelveket osztályozhatjuk a folyamat szempontjából:

. compiler (fordító): a forráskódot egy fordítóval leforditjuk, majd futtatjuk.


. interpreter (értelmező): a forráskód utasításonként a végrehajtás során kerül
értelmezésre.
Annak függvényében, hogy a számítógépes hardvert a programozás során mi—
lyen mértékben kell figyelembe venni, a programozási nyelveket a következőkép—
pen osztályozhatjuk:
M

Szoftver

A mesterséges intelligencia programnyel-


5. g eneráció
vel, VlZuallS, komponens alapu eszkozok
. . ,. , .. ..

Magas szintű leíró e's programozási nyel—


* ) fordítás

%
4. generáció -

vek, nemprocedurális nyelvek, speciális


célú nyelvek
Altalános célú, magas szintű programozá-
3. generáció si nyelvek )
2. generáció Assembly-nyelvek
1. generáció Gépi kódok
c . :
Mikroprogramozás 1

Mikrooperációk
A számítógépek száma, amelye-
Hardver ken a nyelv közvetlenül, vagy új—
rafordítás után felhasználható.
"
8-3. sz. ábra: A programozási nyelvek hierarchiája

—8.13-
8. Szoftverfejlesztés

Gépi kód a számítógép számára közvetlenül értelmezhető adatsor. Általában


processzorfüggő nyelv, nem vihető át más rendszerbe. Az assembly nyelv is a gép
architektúrájához igazodik, de szimbolikus címeket és utasításokat (néhány betűs
rövidítések) is használhatunk. Az assembly nyelven írt programot az assembler
forditja le gépi kódra. A magas szintű nyelvek már géptől függetlenek, az ember
által olvashatóak, fordítás kell gépi kóddá alakításukhoz. Fordított nyelvek pl.:
Algol, c, CwL—t, ca, Clipper, Cobol, Fortran, Pascal, Pl/ 1, Java. lnterpretált nyelvek
pl.: Basic, JavaScript, VBScript, Logo, PHP.

A programozási nyelvek vizsgálatánál nem csak a jellemző nyelvtani és formai


szabályok összességét, hanem azt is vizsgálhatjuk, hogy bizonyos gondolatok az
adott nyelvben milyen módon fejezhetők ki. Ezt a speciális jellemzőt paradigmá-
nak nevezzük. Paradigma alatt a filozófiában azt értjük, hogy bizonyos dolog
hogyan működik, ill. hogyan kellene működnie.

Paradigma LD Programozási paradigma


Számítógépes programok tervezésének és programozásának a módszerét jelenti.

Programozási Paradigma általánosan egy tudományterület általánosan elfogadott nézeteit, fo-


paradigmák galmait, szakkifejezéseít jelenti egy adott időpontban. A programozási nyelvek
területén többféle paradigmát különböztetünk meg, néhány ezek közül:

Imperatív paradigma (procedurális programozási nyelvek): legelterjedtebb, leg-


régibb, szemléletében a program utasítások sorozatának szekvenciális végrehajtá—
sa; a strukturált programozás gátja lehet (Algol-60).

Deklaratív paradigma (leíró megállapodáson alapuló): csak azt határozza


v.
meg, milyen eredmény elérése a kívánatos, azt nem, hogy az eredményt hogyan
kell elérni, milyen szabályok alapján kell az eredményt levezetni. Fajtái: logikai
és funkcionális programozás.

Logikai paradigma: a matematikai logikához kötődik. Jellemzői a tények, szabá-


lyok és a következtetőrendszer. (Prolog)
Funkcionális paradigma: középpontjában Híggvények végrehajtása áll megadott
paraméterekkel; tiszta struktúrák, egyszerű szintakszisú nyelv jellemzi; valameny—
nyi részprobléma egy Higgvényként írható le; a programhelyesség bizonyítható
(Haskell, Lisp, Scheme).

Objektumelvű paradigma: alapja az adatok és a hozzájuk tartozó algoritmusok


egységként, ún. osztályként kezelése; az osztályok (öröklés útján) új osztályokat
hozhatnak létre; (Simula-67, CvLJr, Java).

Mintegy 1000 programozási nyelv közül kb. 20 terjedt el széleskörűen. A szoft—


verfejlesztésre leginkább alkalmas nyelv kiválasztását a felsoroltakon kívül szá—
mos tényező befolyásolhatja (pl. a programozók szaktudása, a programnyelv piaci
helyzete és ára, stb.). A megfelelő programnyelv kiválasztására különböző kifi-
nomult módszerek alakultak ki.
-8.14—
8. Szoftverfejlesztés
8.6. A programfejlesztés elvei, módszerei és eszközei

A programfejlesztés fázisát az alábbi lépésekre bonthatjuk:

T
Moduláris
Tervezési fázis programnyelv
l

Módszerek
Program- Megvalósítás
és
fejlesztés (Programozás)
eszközök
felhasználása
Megvalósítási
fázis
Funkció— és
teljesítményteszt
(Rendszerteszt)

8-4. sz. ábra: A programfejlesztés lépései


A programfejlesztési fázisban leggyakrabban használt elv a modularizálás. Modularizálás
Modularizálás során a bonyolult rendszert egymástól függetlenül megvalósítható,
áttekinthető kölcsönhatásokkal rendelkező egyedi építőkövekre, ún. modulokra
bontjuk, s az építőkövek funkcióit valamint azok kapcsolatait az ún. interfészeket
(csatlakozófelületeket, illeszkedési felületeket) leírjuk.
A modul fogalma
m A modul fogalma
A modul olyan funkciók és tartalmi vonatkozások összefoglalása, amelyek

együttesen meghatározott jelentéssel vagy feladattal bírnak.


A modulok tulajdonságai a következők:

. Logikailag és funkcionálisan zárt egységet alkotnak. Modulok


. A modulfunkciók megvalósításának módját, a modul működését kívülről nem tulajdonságai
kell ismerni (ez az információ elrejtése).

. Kifelé jól definiált csatlakozófelülettel rendelkeznek.


. Áttekinthetőek és ennek következtében könnyen tesztelhetőek.

. Lehetőség szerint kevés más modult használnak.


Csatlakozófelület
m Csatlakozófelület fogalma
A csatlakozófelület vagy interfész a más rendszerekkel ill. modulokkal történő fogalma
információcserét szolgáló konstrukció. A csatlakozófelület tartalmazza:

-8.15-
8. Szoftverfejlesztés

o a modul számára kívűlről szükséges (import) információkat,


o a kívülről lekérdezhetó' (export) információkat,
o a modul felhasználásának általános információit, valamint
0 a modulok közötti információcserére vonatkozó megállapodásokat (pro-
tokollok).
Modularizálás A modularizálás módszerének használata különböző előnyökkel jár:
előnyei
. lehetővé teszi a feladatok szétosztását több programozóra,
. a már elkészített modulok újrafelhasználását biztosítja,

. megengedi a programrész kicserélhetőségét (pl. karbantartáskor egy másikra


cserélhető),
. lehetővé teszi azoknak a részleteknek a csökkentését, amelyet egy programo-
zónak más programrészekről tudnia kell,
0 a tesztelés egy része modulonként történhet.

Követelmények A modularizálás célja az, hogy a programtervezést és programkészítést követ—

hetővé és jól áttekinthetővé tegye. Ezért arra van szükség, hogy


o a modularizálás a probléma megoldását érthetővé, helyességét, pedig ellen—

őrizhetővé tegye,
. a modulokat egymástól függetlenül lehessen kifejleszteni és ezt követően ösz—

szefogni, integrálni,
o valamennyi modul helyettesíthető legyen olyan más modullal, amely ugyan—
azt a funkciót elégíti ki.
Hierarchikus A modularizálás egyik legelterjedtebb alkalmazása a hierarchikus modulari—
modularizálás zálás. Természetesen a gyakorlatban számtalan más módszert is használnak a
programtervezés és programfejlesztés támogatására. Ilyenek pl. a Jackson mód-
szer, a pszeudókód, a döntési táblák, a HIPO, stb. Ezekre a módszerekre, eszkö-
zökre a jegyzetben részletesen nem térünk ki.

Stratégiák A hierarchikus modularizálás megvalósítására kétféle stratégia áll rendelkezésre:


. a TOP-DOWN, azaz felülről-lefelé (lépésenkénti finomítás) elve,

. a BOTTOM-UP, azaz lentről—felfelé haladás elve.


Top—down elv Felülről-lefelé haladás elve (top-down, vagy outside-in): rendszer főfunkci—
a
óiból kiindulva vizsgáljuk a részfunkciókat (részrendszereket), majd a részfunkci-
ókat főfunkcióknak tekintve a következő lépésben azokat bontjuk részfunkciókra,
és így tovább mindaddig, amíg a további lépésenkénti részfunkciókra bontás le-
hetséges ill. célszerű.

Bottom-up elv Lentről-felfelé haladás elve (bottom-up): a rendszert részfunkcióiból (rész-


rendszerekből) kiindulva vizsgáljuk, azoknak lépésenkénti integrációjából főfunk—
ciókat, magasabb szintű részrendszereket képezünk, amelyeket ezt követően rész—

-8.16-
8. Szoftverfejlesztés
funkcióknak tekintve további integrációval új főfunkciókat nyerünk mindaddig,
amíg a lépésenkénti integrációval a teljes funkcióig (a rendszer) el nem jutunk.
Egy problémamegoldási eljárás a redukció, amikor a problémát két részre
osztjuk, egy megoldható problémarészre és egy maradék (nehezen megoldható)
problémarészre. Egy probléma dekompozíciója azt jelenti, hogy több részre bont-
juk a problémát (összetettebb probléma esetén javasolt).
A hierarchikus modularizálás módszerét a számítógép—beszerzés példáján mutat—
juk be.

E A számítógép—beszerzést funkcionálisan az alábbi tevékenységekre bonthat—


juk:
o Helyzetelemzés
. Követelményjegyzék
. Ajánlatok kiértékelése
. Megvalósítási terv
. Átvétel; üzembe helyezés, átvételi teszt. E!

A funkcionális dekompozíció nem csak a résztevékenységeket, hanem azok idő-


beli sorrendjét is rögzítette.

Számítógép beszerzése

Helyzet- Követelmény- Ajánlatok Megvaló- üzembe helye—


elemzés jegyzék kiértékelése sítási terv zés, átvételi
teszt

8-5. sz. ábra: A számítógép—beszerzés feladatának funkcionális felbontása


Az ábra második hierarchiaszintjét vizsgálva az időbeli sorrend a balról jobbra
haladás elve alapján jól látható.

Helyzet- Követel- Ajánlatok Megvaló- üzembe helye—


elemzés
__ mény- __ kiértékelése
__ sítási terv __ zés, átvételi
jegyzék teszt

8-6. sz. ábra: A számítógép-beszerzés résztevékenységeinek időbeli sorrendje

8.7. Struktúrált programozás


A hierarchikus modularizálás koncepcióját legkövetkezetesebben a struktúrált Struktúrált
programozás juttatja érvényre. A struktúrált programozás programozás

. szigorúan alkalmazza a modulkoncepciót,


. az algoritmusok leírását néhány alapvető konstrukcióra alapozza.
- 8.17 -
8. Szoftverfejlesztés

Struktúrált programozás használata nagyméretű feladatok esetén elengedhetet-


len. Alkalmazásával a programozás biztosabbá, a programok minősége jobbá, a
programok előállításához szükséges idő pedig rövidebbé vált. Kiválóan alkalmaz-
ható akkor, ha a programozásra egy problémaorientált programnyelvet haszná—
lunk [ gen nagyméretű és hosszan tartó projektek esetén a struktúrált programozá-
si ijárás gyengéire is fény derült, s ennek következtében az utóbbi időben az ob-
jektumorientált programozás eljárása egyre nagyobb teret nyert.

Programvczérlési Bizonyítható, hogy valamennyi algoritmus három programvezérlési konstruk—


konstrukciók ció segítségével megvalósítható:

. Szekvencia: utasítások egymást követő végrehajtása.


. Döntés: a végrehajtás elágaztatása bizonyos feltétel függvényében.
. Ismétlés: ismétlés egy adott feltétel bekövetkezéséig (iteráció megszakítási
kritériummal).
Természetesen a konstrukciók grafikus megjelenítését szabványos eszközök tá-
mogatják:

. Folyamatábra v. blokkdiagram (DIN 66001)


. Struktogram v. Nassi-Schneiderman diagram (DIN 66261)
A modern programozási nyelvek ugyancsak támogatják ezeket a konstrukciókat.

8.7.1. Szabványosított programkonstrukciók

Az algoritmus leírása a végrehajtani kívánt lépések (utasítások) és a végrehaj-


tási sorrend megadása alapján történik.

8.7.1.1 Szekvencia v. utasítássor

Szekvencia Az utasítások matematikailag vagy szövegesen megfogalmazott lépései az al-


goritmusnak. Az utasítások végrehajtási sorrendjét a folyamatábra nyilai illetve a
struktogramok ,,felülről lefelé" haladásának szabálya adja meg.

Folyamatábra L
Struktogram
1

1. utasítás 3. utasítás 1_ utasítás


2. utasítás
2. utasrtas 2.
utasnas 3_ utasítás

3. utasítás 1. utasítás
l l

8-7. sz. ábra: Szekvencía


-8.18—
8. Szoftverfejlcszte's
8.1. Példa

8 irjunk algoritmust két adat összeadásáralű


Folyamatábra Struktogram

Első adat (A) be-


olvasása Első adat (A) be-
olvasása
'
Második adat (B) Második adat (B)
beolvasása beolvasása

Eredmény :A % B
Eredmény :A % B
Eredmény kiírása
"
Eredmény kiírása

A 8-8. sz. ábra: Két adat összeadása

8.7.1.2 Döntés vagy kiválasztás

A döntés, illetve kiválasztás az algoritmusban az utasításoknak egy feltételtől Döntés


függő végrehajtását jelöli. A döntés, illetve kiválasztás programvezérlési konst-
rukciója a speciális igényeknek megfelelően több fajta lehet:
Kiválasztás [: egy eset kiválasztása egy esetből
Kiválasztás 11:
egy eset kiválasztása két esetből
Kiválasztás lll: egy eset kiválasztása n ) 2 esetből
Kiválasztás IV: egy eset kiválasztása n ) 2 esetből az egyéb esetek összevoná-
sával
A kiválasztás egy (összetett) logikai feltétel teljesülése esetében történhet meg.
A logikai feltételt és a feltétel kiértékelését a matematikai logikában szokásos
módon jelöljük.

-8.19-
8. Szoftverfejlesztés
Kiválasztás [: Egy eset kiválasztása egy esetből
Folyamatábra Struktogram

Logikai kifejezés
igaz hamis

utasítas(ok)
utasítás(csoport) %

8-9. sz. ábra: Egy eset kiválasztása egy esetből

8.2. Példa

8 Olvassuk be az egy adott személyre vonatkozó alábbi adatokat: Név, Születési


év, Jövedelme. lrassuk ki a személy adatait, ha a személy 1956-ban szüle—
tett:!
F 01 amatábra Struktogram

Név, Szülév, Jövede-


lem beolvasása
Név, Szülév, Jövedelem be—

olvasása
Szülév : 1956?
hamis
Szülév : 1956 igaz amis

Név, Szülév, J öve— %


delem kiírása
Név, Szülév, Jövede-
lem kiíratása

8-10. sz. ábra: 1956-ban születettek adatainak a kiírása

- 8.20 -
8. Szoftverfejlesztés

Kiválasztás II: Egy eset kiválasztása két esetből


Folyamatábra Struktogram

iif—§? hamis !

igaz
Logikai kifejezés
hamis
v 1.utasítás 2.utasítás
[. utasitás(0k) 2. utasítás(ok) (csoport) (csoport)

8-11. sz. ábra: Egy eset kiválasztása két esetből

8.3. Példa

B Olvassuk be az egy adott személyre vonatkozó alábbi adatokat: Név, Születési


év, Neme, Jövedelme. lrassuk ki az adott személy nevét és születési évét, ha
az adott személy nő, a nevét és jövedelmét, ha férfi. Az adatok között a fel-
adatokban (a személyi számhoz hasonlóan) a férfiakat l-es, a nőket 2-es kód-
számmal jelöljük.El
F 01 amatábra Strukto gram

Név, Szülév, Nem,


Jovedélem beolvasasa
Név,

Nem : l?
hamíc
igaz hamis

Név , Jövede- Név, Szülév ki— Név, Jövedelem Név, Szülév


'I ! , ,
kllrasa kllrasa
.

lem kiírása írása

LA

8-12. sz. ábra: Nemtől függő adatkiíratás

-8.21-
8. Szoftverfejlesztés

Kiválasztás III: Egy eset kiválasztása n ) 2 esetből


Folyamatábra Strukto gram

1
változó, vagy kifejezés
értéke
1.utasí- 2
tás(ok)
2.utasí-
1

2
' 1. utasitás(ok)
tás ( ok )
n

_,
,
2. utasítás(ok) 112128?)—

n
___. n. utasítás(ok)

8-13. sz. ábra: Egy eset kiválasztása n ) 2 esetből


8.4. Példa

8 Az AVF hallgatóinak adatait kívánjuk feldolgozni. Az alábbi adatok ismertek:


Név, Születési év, Évfolyam, Tanulmányi átlag. Valamennyi hallgató adata
névsor szerint rendezve áll rendelkezésre. A hallgatók adatait évfolyamon-
ként szeretnénk különböző adathordozóra kiíratni.Ú
Folyamatábra Strukto gram
%

Név, Szülév, Évf, Át-


lag beolvasása
Név, Szülév, Évf, Átlag beolvasása

,
Évf ?
Evf l
?
Kiírás l. 2
adathor—
1 ,
dozora ., , 2"
Knras
—5 Ki l. adathordozóra
adathor-
3

dozóra
L, Ki 2. adathordozóra
., , 3-
Knras
adathor-
dozóra
_,
3 ,
KI 3. adathordozora
_

8-14. sz. ábra: Évfolyamonkénti adatkiírás

— 8.22 -
8. Szoftverfejlesztés

Kiválasztás IV: Egy eset kiválasztása n ) 2 esetből az egyéb esetek össze—

vonásával
Folyamatábra Strukto gram
$
változó, vagy kifejezés
]
értéke-,
változó, vagy
1. utasí— 2
tás(ok) ülönben
2 utasí- ,
tás(ok) 3. utasí— n. utasí-
V 1
. utasítás(ok) tás(ok) tás(ok)

_, "
2.

3.
utasítás(ok)

utasítás(ok)

külön; n. utasítás(ok)
ben

8-15. sz. ábra: Egy eset kiválasztása n 2 esetből )


az egyéb esetek összevonásával

8.5. Példa

E Hallgatóink adatait kívánjuk feldolgozni. Az alábbi adatok ismertek: Név, Év-


folyam, Tanulmányi átlag. A hallgatók adatait évfolyamonként szeretnénk
különböző adathordozóra kiíratni. Az egyéb hallgatókat (pl. PhD, vendég-
hallgató stb.), akiknél az Évf) 3 kezeljük közösenEl
Folyamatábra Strukto gram

Név, Évf, Átlag beol—


Név, Évf, Átlag beolvasása
vasása
Évf ?
1

Ki 1.
adathor— " "
3 ulonben
dozóra Ki 2.
adathor- Ki 3. Ki 4.
Ki 1
. adathordozóra dozora
adathor- adathor—
dozóra dozóra
Ki 2. adathordozóra

Ki 3. adathordozóra

Ki 4, adathordozóra

8-16. sz. ábra: Évfolyamonkénti adatkiírás, 3. évf. fölött egyben


- 8.23 -
8. Szoftverfejlesztés

8.7.1.3 Ismétlés, iteráció, vagy ciklus

Ismétlés Az ismétlés, vagy iteráció programvezérlési konstrukciója egy vagy több blokk
többszörös végrehajtásának leírását teszi lehetővé az algoritmusban. Az ismétlés
vagy iteráció háromféle módon valósítható meg:
I. tipus: Előlvizsgáló (elutasító) ciklus
II. tipus: Hátulvizsgáló (nem elutasító) ciklus
III. típus: Számláló ciklus

Míg a számláló ciklusnál a ciklusvégrehajtás száma előre adott, addig az elől—


ill. hátulvizsgáló ciklusnál (általában) előre nem ismert, a végrehajtási feltétel
függvénye.
A ciklust felépítése alapján két részre osztjuk:

. ciklusfej tartalmazza azokat az információkat, amelyek a ciklusvégrehajtás


számát határozzák meg

' ciklustörzs tartalmazza azokat az utasításokat, amelyeket többször kell vég-


rehajtani.
Előlvizsgáló 1. típus: Az előlvizsgáló ciklus először megvizsgálja a végrehajtási feltételt, s
ciklus csak annak teljesülése esetén hajtódnak végre a ciklustörzs utasításai. Ha az iterá—
ciós blokkba belépéskor a végrehajtási feltétel nem teljesül, akkor a ciklustörzs
utasításai egyszer sem hajtódnak végre.

Folyamatábra Struktogram

Ismételd, ha a feltétel (nem)


. teljesül
ligaz

utasítás(ok) utasítás(csoport)

8-17. sz. ábra: Előlvizsgáló ciklus

8.6. Példa

§ Adjuk meg a két természetes szám legnagyobb közös osztóját kiszámító Euk-
lideszi algoritmust. Ha a/b esetén b osztója a-nak, akkor az eredmény a b ér—
téke. Ha nem, akkor a-t osszuk el maradékosan b—vel (mod).
a:b*hányados—l-maradék. Most a két kisebb számmal (a értéke legyen b, és
b értéke legyen a maradék) folytatjuk a műveletet. CI

- 8.24 —
8. Szoftverfejlesztés
Folyamatábra Strukto gram

OT
hamis
Hajtsd Végre, amíg b $ O teljesül

i igaz r : a mod b
r : a mod b a:b
'
b:r
b :r
8-18. sz. ábra: Legnagyobb közös osztó előltesztelő ciklussal

ll. típus: A hátulvizsgáló ciklus a ciklustörzs utasításait legalább egyszer végre— Hátulvizsgáló
hajtja, majd ezt követően vizsgálja a végrehajtási feltételt. ciklus

Folyamatábra Struktogram
V

utasítás (ok) uta51tas( csoport)

Ismételd, mindaddig, amíg a


feltétel ( nemi teliesül

8-19. sz. ábra: Hátulvizsgáló ciklus

8.7 Példa

E Adjuk meg a két természetes szám legnagyobb közös osztóját kiszámító Euk—
lideszi algoritmust, hátulvizsgáló ciklussalEl
Folyamatábra Struktogram

r : a mod b
a: b
b:r
Ismételd mindaddig, amíg az
:
b O feltétel nem teljesül.

8-20. sz. ábra: Legnagyobb közös osztó hátultesztelő ciklussal


- 8.25 -
8. Szoftverfejlesztés

Számláló ciklus III. típus: a számláló ciklusnál a ciklusok végrehajtását egy változó, a ciklusvál-
tozó számlálja, amely értékét egy kezdeti értéktől egy végértékig egy meghatá-
rozott értékkel, az ún. lépésközzel változtatja (növeli, vagy csökkenti).
A végérték elérésekor hajtódik végre utoljára a ciklus. A ciklusváltozót, a kezdeti—
és a végértéket, valamint a lépésközt a ciklusfej határozza meg.

SZ : Számláló KE : Kezdőérték VE : Végérték L : Lépésköz


Folyamatábra Struktogram

:
Számláló SZ KE-től
L lépésközzel
VE—ig,

hamls
_

utasítás(csoport)
utasítás(ok)

SZ:SZ-l-L

8-21. sz. ábra: Számláló ciklus

8.8. Példa

8 Adjuk össze az első 10 pozitív természetes számot.Cl


Folyamatábra Struktogram

l
összeg :0
l [: l—től lO-ig l lépésközzel

_A
I : 1

hamis
. összeg : összeg % I

igaz ( )

összeg : összeg * l
l
I:I*l
8-22. sz. ábra: 1-10 természetes számok összege

8.7.1.4 Modulblokkok

Természetesen a fenti jelölésrendszer csak a programvezérlési alapkonstrukci-


ókra összpontosította a figyelmet. A grafikai jelölésrendszert szükség esetén
számtalan, (akár egyedi) jól definiált szimbólummal is kiegészithetjük.
- 8.26 —
8. Szoftverfejlesztés
Az ismertetett jelölésrendszert a modulblokk jelölésével egészítjük ki. A mo-
dulblokk olyan konstrukció, ami egy algoritmust, vagy egy algoritmusrészletet
tartalmaz, s így az alapkonstrukciókat vagy további modu1(oka)t foglalhat magá-
ba.

Modulnév
Modulleírás

8-23. sz. ábra: Modulok jelölése

8.7.2. Egy egyszerű feladat

A struktúrált programozásnál használatos fontosabb elvek és eszközök bemuta-


tására egy egyszerű feladat megoldásának fő lépéseit választottuk ki.

8.7.2.1 A feladat megadása

Tervezzen egy olyan programot, amely a felhasználóval közvetlen párbeszéd so-


rán a következő feladatot oldja meg:

. Ke't pozitív egész szám összeszorzása.


. A szorzást többszörös összeadásként kell megvalósítani.

8.7.2.2 A feladat elemzése

A feladat látszólagos egyszerűsége ellenére a megoldás során néhány probléma


vetődhet fel:

. Számábrázolás

' Számítási hatékonyság


1. Számábrázolás
A feladat számítógépes megoldása során a két összeszorozni kívánt változóra
(a és b) vonatkozó, feladatfüggő feltételek az alábbiak:

a ) 0; b ) O
a, b EN, ahol N a természetes számok halmaza (8.1)
Csakhogy - az 12. Adatábrázolás, adattárolás fejezetben tárgyaltak alapján - a 16
biten ábrázolható egész számok a (——215) (4-215 — l) zárt intervallumban helyez-
——

kednek el (16 bites ábrázolás). Ha nem 16 biten, hanem 32, 64 vagy akár 128 bi-
ten ábrázolnánk is az egész számokat, mindenképpen keletkezne a számítógépes
számábrázolásból következően egy felső korlát a még ábrázolható legnagyobb
egész számra. Ennek következtében érvényesülnie kell az alábbi összefüggésnek:

8.27 -
8. Szoftverfejlesztés
0 ( a S MAXINT ( b S MAXINT, ahol
O (8.2)

MAXINT az adott számítógépen ábrázolható legnagyobb egész szám.


A fentieknek megfelelő gondolatmenetet követve

EREDMÉNY :a * b (8.3)
alapján az EREDMÉNY nevű változóra is teljesülnie kell az alábbi feltételnek:
0 ( EREDMÉNY s MAXINT (8.4)
Azt, hogy a szorzatot (EREDMÉNY) is ábrázolnunk kell a számítógépben, termé—
szetesnek tartjuk. Ez azonban a és b értékére vonatkozóan további megszorításo—
kat tartalmaz, hiszen így a és b értéke sem külön-külön, sem pedig együttesen
nem lehet tetszőleges érték a (8.2)—ben megadott intervallumban. További meg-
szorításokat kell tennünk az a és b által felvehető értéktartományára! Természete—
sen többféle megoldás lehetséges, ezek közül itt csak néhányat sorolunk fel:
a és b értéke egyszeri pontossággal (16 biten), míg az EREDMÉNY értéke kétsze-
res pontossággal (32 biten) kerüljön meghatározásra,
a és b-re teljesüljön, hogy kisebb MAXINT négyzetgyökének egészértékénél [je—

lölése: INT (JMAXINT )],

O
( A, B ( INT (,IMAXINT ) (8.5)
ami az előző megoldáshoz hasonlít, s így a és b lehetséges értékeinek tartományát
egyformán ,,csonkítottuk".
a szorzó által felvehető értékek tartománya függjön a szorzandó előre adott érté—

kétől a következőképpen:

a adott értéke mellett b-re érvényesüljön


O
( (
b INT (MAXINT/a). (8.6)
Természetesen a kifejtett gondolatmenet következményekkel jár: a és b értékét
külön-külön és egymás, illetve a várható eredmény függvényében együtt is ellen-
őrizni kell még a számítások megkezdése előtt.
2. Számítási hatékonyság
Ha a szorzást többszörös összeadásként kell megvalósítani, akkor nem mind-
egy, hogy hányszor végzünk összeadást. Például 5 *3 kétféleképpen is megvaló-
sítható, s mindkét változat ugyanazt az eredményt adja:

54-54-5215
3t3t3r3t3215
Nyilvánvaló, hogy az első megvalósítás hatékonyabb. A technikai megvalósítás
során csak arra kell ügyelni, hogy a és b értékét figyelembe véve hajtsuk végre a
műveletet (a nagyobbik számot adjuk össze a kisebbik szám által meghatározott
alkalommal).

- 8.28 -
8. Szoftverfejlesztés

8.7.2.3 A feladat funkcionális felbontása, programterv

A feladat három általános funkcióra osztható. (lásd 824. sz. ábra hierarchia diag-
ramj át)

Szorzás

Adatbevitel Számítás Adatkivitel

8-24. sz. ábra: A feladat hierarchia diagramja


Ezeket a funkciókat a felhasználó kívánságának megfelelően többször végre kell
tudni hajtani. A modulokra bontást követően az alábbi algoritmushoz jutunk.

Folyamatábra Struktogram
l.

Adatbevitel 1
.

1 Adatbevitel
Számítás Számítás

*
Adatkivitel

Adatkivitel , , , .. ,
Ismetles, amlg szukseges

igaz

16111

8-25. sz. ábra: Szorzás feladat algoritmusa


A lépésenkénti finomítás elvét (a problémát egyre kisebb részekre bontjuk,
míg könnyen megoldható elemeket kapunk) alkalmazva mind az Adatbevitel,
mind pedig a Számítás modul további modulokra bontható. Ennek megfelelően
mind a hierar-chiadiagram, mind pedig a folyamatábra és a struktogram is tovább
finomítható. Az eredményt a 8.26. és 827. sz. ábrán mutatjuk be.
Az Adatbevitel modul a Beolvasás és az Ellenőrzés almodulokra, a Számítás
modul az Összehasonlítás és Összeadás almodulokra bontható.

— 8.29 -
8. Szoftverfejlesztés
A Beolvasás modul A és B Változók hibátlan adatbevitelét két lépésben oldja
meg; először A-t és B-t beviszi, majd egymástól függetlenül, ezt követően pedig
együtt ellenőrzi.
Az Összehasonlítás modul A és B értékét hasonlítja össze a hatékony számítás
elvégzése céljából, az Összeadás modul a szorzás műveletét valósítja meg több—
szörös összeadással.
1.1 Modul
1.1
Adatbevitel

1.1.1 [ ] 1.1.2
A és B A és B
beolvasása ellenőrzése

—*l A beolvasása 1—1

A beolvasása
"
B beolvasása B beolvasása

A és B ellenőrzése
l
A és B ellenőrzé- Mindaddig, amíg A és B
se nem lesz OK.

A, B
megadása

8-26. sz. ábra: Adatbevitel almoduljai

— 8.30 -
8. Szoftverfejlesztés

1.2 Modul

1.2
Számítás
!

1.2.1 ] !
1.2.2
Összehasonlítás Összeadás

l 1.2
__

Összehasonlítás ..
Összehasonlítás
ll
Összeadás
Összeadás

8
1

8-27. sz. ábra: Számítás almoduljai


A Számítás modul két almodulra osztható. Az Összehasonlítás feladata A és B
aktuális értékének összehasonlítása, s a kettő közül a nagyobb érték B-ben való
tárolásának előírása. A hierarchiadiagramok további részletezésétől eltekintünk,
mivel az már nem célszerű. Az Összehasonlítás modult a 828. sz. ábrán mutatjuk
be. Az A és B változó szükség esetén bekövetkező cseréjét a H segédváltozó fel-
használásával valósítottuk meg.
1.2.1Modul

G HzA
l
N
1
1.2.1

:
ASB
1

AzB : %

1
:
BzH

8-28. sz. ábra: Az Összehasonlítás modul


- 8.31 -
8. Szoftverfejlesztés

Az összeadás modul az EREDMÉNY előállítását ve'gzi egy ciklusban, amelyben


B összeadását A—szor kell végrehajtani.

l
Eredményzo 1 2 2

0
Eredmény: O

Z :l Z—t l—től A—ig, 1


lópe'sközzel
l
——
I
% Eredmény:
Eredmény 4—
B

Eredmény : Eredmény * B
1

Zzz—l-l

8-29. sz. ábra: Összeadás modul


Természetesen az Adatkívitel modul további részletezésére nincs szükség.
1.3 Modul
1.3
Adatkivitel

1.3

Eredmény kiíratása Eredmény kiíratása

8—30. sz. ábra: Adatkivitel modul

8.7.2.4 Programterv - ahogyan nem szabad


Az előbbiekben ismertetett feladat bár igen egyszerű, mégis alkalmas arra,
hogy a 8.7 fejezetben ismertetett módszertan használatát bemutassuk. A feladat
mérete és bonyolultsági foka arra ösztönöz, hogy ne a struktúrált programozás
módszereit felhasználva oldjuk meg a feladatot. Az eredményt a 8.31. és 832. sz.
ábrán mutatjuk be.

- 8.32 -
8. Szoüverfejlesztés

,,A hagyományos megoldás" hátrányai jól láthatók:


nehezen áttekinthető algoritmus,
nem jönnek létre újrafelhasználható modulok,
a tesztelése nehezebb.

A, B beolvasása

é
A, B ellenőrzése

Mindaddig, amíg A és B OK nem


lesz

ASB
N

H:A
AzB %

BZH
Eredményzo
ZZO
Eredmény : Eredmény * B
Z———Z
ll
Mindaddig, amíg Z S A igaz

Eredmény kiíratása

Mindaddig, amíg szükséges

8-31. sz. ábra: ,,Ahogy nem szabad" struktogram


8.33 -
8. Szoftverfejlesztés

A, B beolvasása
l
A, B ellenőrzése

v
Eredmény :0

Eredmény kiíratása

Eredmény : Eredmény % B

l
ZZZ-Fl

8-32. sz. ábra: ,,Ahogy nem szabad" folyamatábra

8.7.2.5 Teszt-terv készítése

A programterv elkészítését követően az algoritmus működésének részletes


tesztelésére alkalmas teszt—tervet mutatunk be. A tesztadatok mellett a program
működésének várható eredményeit, valamint az esetleges algoritmus-módosítá—
sokat is feltüntettük.
A B Esemény Reakció
—3 —5
—5 —3

_03 _03 A program hibaüzene- Adatellenőrzés beépí—


C:)
tet ad ki HA NEM tése a programba
5 __5
—5 5
O O

5
7
7
5 l Az eredmény megjele—
nik chs
.

A program hibaüzene—
32767 32767 § tet ad k1 HA NEM
C:) Adatellenőrzés beépí—
tese a programba

- 8.34 -
8. Szoftverfej lesztés
8.8. Válogatott algoritmusok

8.9. Példa

Tervezzen egy menüvezérelt programot, amely egy háromszög, egy kör, egy
gömb és egy kúp jellegzetes adatait számítja ki. A felhasználóval párbeszédben
készítse el az adatbevitelt a következő módon: a háromszög esetében a három 01-
dal, a kör és a gömb esetében a sugár, a kúp esetében az alap sugara és a kúp ma-
gassága kerüljön megadásra. A feladat megoldása során használatos összefüggé—
sek a következők:

Háromszög: Kerület: a *b* c (8.7)

Kör:
Terület:

Kerület:
t/s-(s—a)-(s—b)-(s—c) , ahol

d n -
:2 -
r - Tt
S:? (8.8)

(8.9)
Terület: r2 -
1: (8.10)

M
Gömb: Felület: 4 rz n
- -
(8.11)
Térfogat: (8. 12)
3

Kúp: Felület: (n r s)-F(Tt r2) , ahol


- - -
Szdrz -t-h2 (8.13)
2
Térfogat: n -r -
h (8.14)
3

Első lépésként a feladat tervezésekor a hierarchiadiagramot mutatjuk be (lásd


834. sz. ábra). A lépésenkénti finomítás elvét használva a háromszöggel kapcso-
latos feladat együttest oldjuk meg. A többi feladatrész hasonlóan oldható meg.
1.
Menü
I I I !

1.1 1.2 1.3 1.4 1.5


Három- Kör Gömb Kúp Számítás
szög vége
I
l I
[

l l
.

l 1

1.1.1 1.1.2 1.1.3 1.2.1 1.2.2 1.2.3


Adatbevi- Számítá-

[_
Adatkivi— Adatbevi— Számítá— Adatkivi—
tel sok tel tel sok tel
'

1.1l.1.1 1.1.1l.2 1.1.í.3 1.1.l1.4


l.1.2.1 .1.2.2
a b c a,b,c Kerület Terület

%
bevitele bevitele bevitele együttes kiszámítá- kiszámí-
vizsgálata sa tása

a beolva— a ellen-
sása őrzése
8—33. sz. ábra: Hierarchiadiagram
- 8.35 -
8. Szoftverfejlesztés
A háromszög oldalainak megadásakor a, b, c értékeire egyenként és együttesen
is teljesülnie kell bizonyos feltételeknek. Ezek a feltételek a következők:

a)0;b)0;c)0 (8.15)
arb)c;a4-c)b;b-i-c)a (8.16)
Az a, b, c értékeire vonatkozó egyedi vizsgálatot az 1.l.l.l, az l.l.l.2 és az
l.l.1.3 modulokban végezhetjük el. A modulok felépítése egyező, a különbség
csak az, hogy más változót ellenőriznek. Az a, b, c értékeire vonatkozó együttes
vizsgálatot az l.1.l.4 modulban végezzük el.
A feladat tervezését a menütervvel kezdjük. A struktogram segítségével történő
ábrázolást az alábbi ábrán mutatjuk be.

A VÁLASZ bevitele

2 VÁL AS 2?'
Három-
3
szö Kör 4
számígtá- számítá— Gömb , ,
- számítá— KUP , , ,
EEVeb
Számítá_ Szamita-
-

sai 531 .
sai Hlba'
_

sai sok vége


üzenet

Ismételd mindaddig, amíg VALASZ : 5 nem teljesül

8-34. sz. ábra: Választás menüből


A háromszög számításai modul struktogramját az alábbi ábrán mutatjuk be.
1 1
.

Bevitel

Számítás

Kivitel
Mindaddig, amíg kívánatos

Bevitel a
Bevitel b
Bevitel c
Mindaddig, amíg a -lr b5c

Mindaddig, amíg b 4—
c 5a
Mindaddig, amíg a -l- c 5b

- 8.36 -
8. Szoftverfejlesztés

Beolvasás a 1.1.1.1
Mindaddig amíg a ( 0 Bevitel a
Beolvasás b
Mindaddig, amíg a S 0
Mindaddig, amíg b S O

Beolvasás c l.l.l.2 és l.l.l..3 hasonlóképpen,


Mindaddig, amíg C S. 0
mint l.l.l.l

Mindaddig, amíg a * b S 0

Mindaddig, amíg b *i' c s a


Mindaddig, amíg a -l- c S b

Számítás K
Számítás T 1.1.2.2
1.1.2.l s : K/2
K :a Jr b Jr 0 T : SORT [s*(s-a)*(s-b)*(s-c)]
8—35. sz. ábra: Háromszög modul struktogramjai
Feladat: lrjon teszt-tervet a háromszög-számítási modul teszteléséhez!

8.10. Példa
Állítsunk elő adott számú (n db.) Fibonacci számot!

A Fibonacci számok képzési szabálya a következő: l, 1, 2, 3, 5, 8,

általánosan
szFk-l "l'Fk-Z , (8-17)
ahol k ) 2 , egész szám és Fk a k-adik Fibonacci szám és F] : 1, F; : 1.

Ha figyelembe vesszük a számábrázolást, akkor 16 bites ábrázolásnál Fk S 215 -

lfeltétel miatt Fk felső korlátja adott, s ennek megfelelően 11 maximális értéke is


meghatározható.
Két algoritmust mutatunk be. Az első algoritmus csak a (8.17) összefüggésben
szereplő Fibonacci számokat tárolja, s az n-edik szám előállításához valamennyi
(az n-ediket megelőző) Fibonacci számot elő kell állítania (lásd 8.37/a sz. ábra). A
második algoritmus az előállított Fibonacci számokat egy egydimenziós tömbben
tárolja, ahol a tömbelemek sorszáma a Fibonacci szám sorszámával megegyező
(lásd 8.37/b sz. ábra).

- 8.37 -
8. Szoftverfejlesztés
n elemszám megadása n elemszám megadása
a :l a kivitele FIB [1]: 1

b: 1 b kivitele FIB [2] : 1

Számláló l-től n-l—ig l lépésközzel Számláló 3—tól n—ig l lépésközzel


FIB :a*b FIB [Számláló]:
a:b FIB [Számláló- 1] -l-
b : FIB FIB [Számláló-21

FIB kivitele Összes FIB[.] elem kivitele


a. Első megoldás. Az elemek száma b. Második megoldás. A sorozat ele—

explicit korlátozott. meit tároljuk (egydimenziós tömb-


henl

8-36. sz. ábra: Fibonacci számok előállítása

B Feladat:
Ellenőrizze az algoritmusok működését n: 10 esetén! Állítsa elő a Fibonacci
számokat! El

8.11. Példa
A 8.10. példában egy egydimenziós tömb elemeit generáltuk egy adott szabály
(8.17) alapján. Gyakori eset, hogy a tömb elemeit egy külső adathordozóról kell
beolvasni.
Olvassuk be egy n elemű tömb adatait úgy, hogy az első adat a tömb elemszá—
mát tartalmazza, az azt követő n adat pedig a tömbelemek értékét.
Például, ha az adatok sorban 5, 21, 18, 34, 3, 5, akkor ez azt jelenti, hogy n 5; :
A[l] : 21; A[2] : 18; A[3] : 34; A[4] :3; A[S] : 5.

N és A[.] értékeinek felső/alsó korlátaira gyakran a feladattól függően konstanso—


kat vezetünk be, hogy az adatbevitelt ellenőrizzük (lásd 838 sz. ábra).
N beolvasása
Mindaddig, amíg 04N4100
Számláló I : l-től N-ig lépésközzel
1

A[I] beolvasása

8-37. sz. ábra: N elemű tömb beolvasása

A[I] beolvasásának adatellenőrzése esetén pl. a 838. sz. ábra a következőkép—


pen pontosítható (lásd 839. sz. ábra).

- 8.38 —
8. Szoftverfejlesztés
Számláló I
: l-től N-ig l le'pe'sközzel

Olvasd A[I]-t

Mindaddig, amíg az A[I] a feltételnek


meg nem felel.

8-38. sz. ábra: Tömbelemek beolvasása ellenőrzéssel

8.12. Példa

Készítsünk struktrogramot annak vizsgálatára, hogy egy egydimenziós n elemű


tömb elemei szigorúan monoton növekvő sorozatot alkotnak-e!
A megoldás során egy Válasz elnevezésű logikai változót (True : igaz, False :
hamis) vezetünk be.
Válasz : TRUE
] számláló 1-től(N-1)-ig l le'pe'sközzel
A[IH] ) A[I]
N
Válasz : FALSE %

Válasz
N 1

Kivitel "monoton Kivitel "nem mono-


növekvő" ton növekvő"

8-39. sz. ábra: Monoton növekvő sorozat vizsgálata

B Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával!

A[1]: 3; A[2] : 5; A[3] : 7; A[4] :6.


Készítse el a struktogramnak megfelelö folyamatábrát!
Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! CI

8.13. Példa

Készítsünk struktogramot, amelyben meghatározzuk egy N elemű egydimenzi-


ós egész számokat tartalmazó tömb elemei közül hány elem értéke páros.

- 8.39
8. Szoftverfejlesztés
Szám :0
I számláló 2-től N-ig l lépésközzel
A[I] mod 2 :0
1 N

Szám : Szám %
: !

Szám kivitele

8-40. sz. ábra: Páros elemek száma


A döntésnél az A[l] mod 2 a tömbelem kettővel való osztásának maradékát jelöli.

Megjegyzés:
Különösen valós számokkal történő hasonló műveletvégzés esetén a számábrázo-
lási pontatlanságból származó veszélyek elkerülése érdekében célszerű az :0 he-
lyett például a 510"5 feltétel vizsgálata.

§ Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával!
A[l] : 3; A[2] : 4; A[3] : 19; A[4] :4; A[5] :16
Készítse el a struktogramnak megfelelő folyamatábrát!
Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! E]

8.14 Példa
Készítsünk struktogramot, amelyben összegezzük az N elemű egydimenziós
tömb páros számú (2, 4, 6, ...) azaz A[2], A[4] , A[6], tömbelemeit.
SUM :0
I számláló 2-től N—ig 2 lépésközzel
SUM : SUM * A[I]
SUM kivitele

8—4]. sz. ábra: Páros számú tömbelemek összege


Technikai okok miatt az összeget gyűjtő SUM változó értékét a számítások
kezdetén nullára állítjuk.

Megjegyzés:
Természetesen valamennyi változó értékét nem szükséges nullára állítani, szorzat
képzése esetén a nullára állítás pedig végzetes következménnyel jár.

- 8.40 —
8. Szoftverfejleszte's
§ Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával!
a. : : :
A[l] 3; A[2] 4; A[3] 7; A[4] :6; A[S] :1; A[6] :10; A[7] :3
b. A[l] : 3; A[2] : 4; A[3] : 7; A[4] :6; A[5] :1;A[6] :10
Készítse el a struktogramnak megfelelő folyamatábrát!
Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! EI

8.15. Példa
Készítsünk struktogramot, amelyben meghatározzuk egy N elemű egydimenzi—
ós tömb minimális tömbelemének az értékét, s azt, hogy hány helyen (hol) fordul
elő a tömbben.

A feladat két részből áll. A tömb minimális értékű elemének meghatározását az


első részben végezzük el. A feladat második részében a tömbminimummal meg-
egyező tömbelemek előfordulási helyeit rögzítjük.
l .

Minimum meghatározása
Minimum előfordulása

8-42. sz. ábra: Modularizálás


1.1. 1.2.

Min : Maxint Szám :0


Iszámláló l—től N-ig ] lépésközzel Iszámláló l—től N-ig l lépésközzel

A[I] ( Min Min : A[I]


igaz hamis igaz hamis

:
Szám Szám 4- 1
%
Min : A[I] % Hely [Szám] I :
Min kiírása Hely[.] és Szám kiírása

8-43. sz. ábra: Minimum meghatározása és előfordulásai

Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával!
a. A[l]:-12;A[2]:0; A[3]:5;A[4] :-14; A[S] :72
b. A[l]:3; A[2]:—3;A[3]:3;A[4]:3; A[S]:O;A[6]:1
Készítse el a struktogramnak megfelelő folyamatábrát!
Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! Cl

— 8.41 -
8. Szoftverfejlesztés

8.16 .Példa
Készítsünk struktogramot egy N elemű egydimenziós X tömb elemeinek csök—

kenő érték szerinti sorba rendezésére.


H számláló l—től (N—l)—ig l lépésközzel

K számláló (HH)—től N-ig 1


lépésközzel

X[K] ) X[H]
1 N

U : X[H]
X[H] : X[J] %

xm:u

8-44. sz. ábra: Csökkenő sorrendbe rendezés

Megjegyzés:
Többfajta, különböző számítási igényű sorbarendezési algoritmus létezik a feladat
megoldására.

B Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával!
a. xm : 9; xm : 7; xm : 4; X[4] :4; X[5] :1
b. xm : 9; xm : 1; X[3] : 4; X[4] :0; X[5] :10
Készítse el a struktogramnak megfelelő folyamatábrát!
Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! El

8.17. Példa
Készítsünk struktogramot egy N elemű rendezett egydimenziós tömbben tör-
(
ténő keresésre. Valamennyi I J—re teljesül, hogy A[I] S A[J] A tömbben keresni.

kívánt érték X. A O változóban tároljuk, hogy találtunk—e keresett értéket.


Feladatunknál felhasználjuk, hogy az elemek rendezettek. Megfelezzük az
elemek számát, és megnézzük, hogy a középső elemnél kisebb, vagy nagyobb a
keresett érték. Ezután már a tömbnek csak a felével folytatjuk a műveletet.

— 8.42 —
8. Szoftverfejlesztés

:l
J:N
O:False
K:(l-I-J)X2

N
AK:X
[ ]
I
A[K](X
1 N
O:True
I:KH J:K—1

Ismételd mindaddig, amíg 0 vagy 1 ) J nem teljesül

8-45. sz. ábra

Megjegyzés:
A rendezett tömbben történő keresés leghatékonyabb módja az úgynevezett biná-
ris (felezős) keresés. Az algoritmus ezt a keresést mutatja be.

B Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával!
: :
A[l] :9; A[2] 7; A[3] 5;A[4]:3;A[5]:1;A[6]:O
a. X :1

b. X :6
Készítse el a struktogramnak megfelelő folyamatábrát!
Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! Cl

8.18. Példa

Készítsünk struktogramot egy M x N—es (M sorból és N oszlopból álló) kétdi-


menziós tömb sorösszegeinek (a sorokban lévő elemekből ke'pzett összeg) megál-
lapítására.
I számláló l-től M—ig l lépésközzel
Sum[I] : O

J számláló l-től N-ig 1


lépésközzel
:
Sum[I] Sum[I]
Tömb[l, J]
4—

8-46. sz. ábra: Kétdimenziós tömb sorösszegeinek számítása

Megjegyzés: Sum[l] : az I. sor elemeinek az összege

— 8.43 -
8. Szoftverfejlesztés
B Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával: M : 3; N : 5.
A tömb elemeinek értékeit az alábbi táblázat tartalmazza:

l 2 3 4 5

6 7 8 9 10

5 4 3 2 l

Készítse el a struktogramnak megfelelö folyamatábrát!


Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! El

8.19. Példa
Készítsünk struktogramot egy M x N—es kétdimenziós tömb oszlopmaximuma-
inak (az oszlopokban levő maximális értékű tömbelem) meghatározására.
J számláló l-től N-ig l lépésközzel

Max[J] : Minint
Iszámláló l—től M-ig 1
lépésközzel

Tömb[I,J] ) Max[J]
1 N

Max[J ]
Tömb[l,J ] %

8-47. sz. ábra: Kétdimenziós tömb oszlopmaximumai

Megjegyzés: Max[J] : a J sor maximális értékű eleme


Minint: az adott számítógépen ábrázolható legkisebb egész szám.

§ Feladat:
Hajtsa végre az algoritmust az alábbi tesztadatok felhasználásával: M : 5; N: 3.
A tömb elemeinek értékeit az alábbi táblázat tartalmazza:

l 5 7

3 3 9

5 4 5

l l 2

2 9 7

Készítse el a struktogramnak megfelelő folyamatábrát!


Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! Cl

- 8.44 -
8. Szoftverfejlesztés

8.20. Példa

Készítsünk struktogramot az alábbi mátrixszorzás megvalósítására:


:
C(M,L) A(M,N) * B(K,L) , (8.18)
ahol N : K.

Iszámláló l-töl M-ig l lépésközzel


J számláló l-től L—ig 1
lépésközzel
ERG [ I, J ] 0 :
H számláló l—től N—ig l lépésközzel

ERG[I,J]
ERG[I,J] % (A[I,H]
:
* B[H,J])

ERG[. ] kivitele

8-48. sz. ábra: Mátrixszorzás

§ Feladat:
Készítsen teszt—tervet olyan esetre, ahol M : 3 ; N : K : 5 L : 2!
;

Készítse el a struktogramnak megfelelő folyamatábrát!


Ellenőrizze a folyamatábrát ugyanazokkal a tesztadatokkal! El

8.9. Excel programozása, Makrók, Visual Basic

A makró billentyű lenyomások révén kiadott utasítások és/vagy Visual Basic Makró
nyelven írt utasítások sorozata, melyeket Microsoft Visual Basic modulban táro-
lunk. Ez egy program, amely egyetlen parancs kiadása után az adott feladat bár—

mikor végrehajtódik, futtatható.


Az Excel makrókban billentyűzet leütéseket, menü parancsokat és Visual Basic
utasításokat használhatunk. A Visual Basic objektum orientált, procedurális nyelv,
melynek legfontosabb elemei az eljárások, az objektumok valamint az objektu—
mok tulajdonságai és műveletei.
A makrók főbb alkalmazási területei a következők: Makrók alkalmazási
területei
. rutin feladatok automatizálása a feladatmegoldás megkönnyítésére;

. egymás utáni parancsok sorozatának összevonása;


. bonyolult alkalmazások készítése kevesebb Excel ismerettel rendelkező, vagy
akár szakképzetlen felhasználók számára.
A makrókat vagy abban a táblázatban tároljuk, ahol létrehoztuk vagy új mun- Makrók elhelyezése
kafüzetbe, illetve saját makró-munkafüzetbe menthetjük el. Az utóbbi lehetőséget
akkor választjuk, ha más munkafüzetekben is használni akarjuk a létrehozott mak-
rókat.

- 8.45 -
8. Szoftverfejlesztés

Minden makrónak egyedi nevet kell adni, amelyre a későbbiek során hivatkozha—
tunk. Egy adott munkafüzethez, táblázathoz létrehozható makrók száma nem kor-
látozott.
A makrók előnyei:

Makrók előnyei egyszerűsíti az ismétlődő feladatok végrehajtását;


. a felhasználó közvetlen egymás utáni billentyűlenyomásait kiváltó makrók
gyorsabban hajtódnak végre, mintha azt a felhasználó begépelné;
. egyszerűsítheti egy táblázat létrehozását, kezelését, szerkesztését, formázását;
. a típushibák minimalizálása révén növeli a feladat végrehajtásának biztonsá-
gát;
. a beépített Higgvényekkel felhasználóbarát környezet létrehozása a makrók—
ban.

8.9.1. Makró létrehozásának lehetőségei

Makró Az Excelben többféleképpen hozhatunk létre makrót:


feljegyzéssel Feljegyzéssel - ekkor az Eszközök menü Makró parancs kiválasztása után az
Új makró rögzítése... parancsot választva feljegyzés üzemmódba lépünk, majd
kijelölve a feljegyzés módját végrehajtjuk a műveletsorozatot. Az Excel a művele-
tek végrehajtásához szükséges billentyűlenyomások kódját megjegyzi. Kilépve a
feljegyzés módból a makró a feljegyzés előtt megadott munkafüzetbe kerül, így
később bármikor felhasználható. (Ezt láttuk az Excel részben)

Makró beírással Beírással ekkor Visual Basic utasításokat tartalmazó programot írunk. Ilyen
-
utasításokkal a Visual Basic módban feljegyzett makrók is módosíthatók. Makró-
ink átírásához az Eszközök / Makrók / Makrók... menüpont választása után a
megfelelő makrónevet kiválasztjuk, majd a Szerkesztés gombot választjuk.
Új makró létrehozásához az Eszközök / Makrók / Makrók... menüpont segít—

ségével ugyanebben az ablakban egy nevet kell adnunk. Ennek hatására a Szer-
kesztés helyett a Létrehozás nyomógombunk él. Ezt kiválasztva megkapjuk a
makró kódszerkesztési területét, ahova beírjuk a kívánt utasítássorozatot.

VB szerkesztő Visual Basic szerkesztő segítségével a Visual Basic fejlesztési környezetébe


juthatunk. Az Eszközök / Makrók / Visual Basic Editor menüpont segítségével
a fejlesztő környezetet kapjuk a munkafüzet proj ektj ében tárolt objektumokkal.

? Makrók. .. Albi-FB

a Új makgó rögzítése. ..

Biztonság. ..

[gifzfagiguaiéas'ic Édítor'f'; _
';41GF1'1 "
69 Microsoft §cript Editor AIt—I—ShiFt-t-Fll


8.46 -
8. Szoftverfejlesztés

Vigyázat! Programunk biztonsági szintjének beállítása korlátozhatja a makró—


kat tartalmazó Excel munkafüzetek megnyitását. Beállított biztonsági szintünket
ellenőrizhetjük az Eszközök / Makrók/ Biztonság... menüvel.

(" Nagyon magas. Csak a megbízható helyeken teieptett makrók _

filmeknek. Minden más aláirtes alá nem irt makró le van tiltva.

(_ Magas, Csak a megbízható forrásból származó. aláírt makrók


futtatán engedélyezett. Az alólratlan makrók ném futhatnak
G gözepes. iOválaszthatla, hogy a biztonság szemportjábúl kérdéses
makrók fussonak—-e vagy ne .
,"

(_ Nacsony (nem javasolt). A számítógép nincs védve a biztonságot


esetleg veszélyezth makróktól, Csok akku használja ezt a
beálikást, ha víruskereső "szoftver van telepitve a rendszeren, vagy
,

ha a megnykmdó dolnmertumokat biztonság szempontjából


elen-őrizte.
*
-'
-_ - -

Telep—tett víruskuesöoo.

III—___i—W

8-49. sz. ábra: Biztonsági szint


A Visual Basic munkafelületét gyakran nevezik integrált fejlesztő kömyezet-
nek4. Ezt az elnevezést azért kapta mivel egy közös környezetben több különböző
funkciót is egyesít. Ugyanabban a környezetben végezhetjük el a felhasználói fe-
lületek tervezését, a programkód szerkesztését és a hibakeresést.

.
'B'EüWMWWMIMBN-WWM
a
:- w
:]
nw aga-ru; e
Proiekt ablak
Modulablak

-' í-i

Eszköz—
készlet HÉEHtELBuaUHHL

Tulajdonsá-
Úrlan ablak
gok ablak

8-50. sz. ábra: Visual Basic képernyő

4
Integrated Development Environment: IDE


8.47 -
8. Szoftverfejlesztés
A Visual Basic szerkesztő indításakor az alkalmazás ablaka jelenik meg menü-
vel és eszközsorral.

Projekt ablak A képernyő bal oldalán egy projekt (Project) ablakot jeleníthetünk meg. A
projekt egy fejlesztési feladat, az elkészítendő alkalmazás fájljainak együttese,
azaz egy projekt fogja össze a fejlesztett alkalmazás összes állományát és tartal—
mazza a fejlesztőrendszer adott alkalmazáshoz tartozó beállításait, működési pa—
ramétereit.
Ez az ablak tartalmazza az aktuális projekthez tartozó modulok, űrlapok és
egyéb fájlok listáját a megfelelő csoportosításban. A jobb egérgomb lenyomásával
megjeleníthető menü segítségével kedvünk szerint módosíthatjuk a projektet.
Hozzáadhatunk, illetve elvehetünk elemeket a listából. Ilyenkor természetesen a
módosítások elmentődnek a projektünkbe is.

Tulajdonság ablak Képemyőnk bal oldalán, a projekt ablak alatt láthatjuk a tulajdonság (Proper-
ties) ablakot is. Ebben az ablakban az aktuális objektum tulajdonságait tekinthet—
jük meg és módosíthatjuk. Az ablakban megjelenő jellemzők köre függ attól,
hogy milyen objektumot (űrlap, gomb, címke, stb.) jelöltünk ki.
Ha valamelyik ablakot nem látjuk, megjelenítését bekapcsolhatjuk a View
(Nézet) menü segítségével:
Égi Ereje-zt Explorer Ctrl-t-R

§ Properties Window F4

Beszúrás menü Az lnsert (Beszúrás) menüvel Procedure... (eljárás), UserForm (felhasználói


űrlap), Module (modulok), Class Module (osztály modulok) illeszthetők be pro-
jektünkbe. A File... (fájl) segítségével szöveges állomány tartalmát szúrhatjuk be
programunkba.
A fejlesztő környezet tartalmazza:
. a UserForm választási lehetőségét, a Form (Úrlap) vizuális elemeivel,
. a Module választás a controlok (vezérlők) működéséért felelős Visual Basic
kódot, másrészt a standard Visual Basic kódban írt makrókat, modulokat jele-
níti meg,
o a Class Module más modulokkal, adatállományokkal és a standard Visual
Basic makrókkal való kapcsolattartást tartalmazza.

8.9.2. Visual Basic fejlesztő rendszer alapjai

A Visual Basic fejlesztő rendszer egy objektumorientált programozási


nyelv, amely támogatja a strukturált programozási szerkezetet, ahogy azzal a
szoftverfejlesztés elméleti részében már foglalkoztunk.

Esemény Az alkalmazások a modulok összessége, melyet az objektumokon keresztül


eseményvezérelve szervezünk meg. Az esemény egy olyan külső, vagy belső ha—
tás, beavatkozás melyet az űrlap, vagy az űrlap valamelyik vezérlője képes felis-
- 8.48 -
8. Szoftverfejlesztés
merni. Minden egyes objektum előre meghatározott eseménykészlettel rendelke—
zik. Pl. esemény az űrlap egyik parancsgombjára kattintás.

Feladat:
Készítsük el az első Visual Basic szerkesztésű feladatunkat. Hozzunk létre egy
űrlapot, majd helyezzünk két nyomógombot és egy címkét az űrlap felületre. Az
egyik nyomógomb kiírása legyen ,,Indít", a másiké ,,Vége". Az Indít hatására je—
lenjen meg ,,Az első programom" kiírás, a ,,Vége" nyomógombra, pedig fejeződ—
jön be a futás.
Úrlap beszúrásához az Insert / UserForm menüpontot használhatjuk. Ezután Urlap beszúrása
beállíthatjuk az űrlap tulajdonságait a tulajdonság ablakban.
Propartiésf— UserForml" —-
*

Name (név) az azonosítást szol—


IUserForml UserForm gálja. Caption (felirat) szövege ki—
Alphabetic lCategorized ]
jelzésre kerül az ablak fejrészében.
UserForm 1
BackCoIor El aHe000000Fa Beállíthatjuk a Backcolor (hát—
BorderColor laHe0000012a _
ter), a BorderColor (keret) es
BorderStyle O-meorderStyleNone ForeColor (előtér) színeket. Ter-
Caption UserForml
mesze t esen a t"bb'
, . , .

cycle D-FmCycleAllForms o 1t uaj d onsago


1
t 1s
DrawBuFFer 32000 módosíthatjuk.
Enabled True ,, ..
"
Urlapunk neve legyen ,,Udvo-
.
Font Tahoma
ForeCC'lor BtH'BUUUUUlZBk 261", a felirata pedig ,,Első üdvöz-
He'ght 180
let". Az űrlap háttérszínét állítsuk
HelpContextID 0
KeepScrollBarsVisible 3 - fmScrollBarsBoth világoskékre. Ehhez a BackColor
LBft U
tulajdonság listagombját kinyitva a
MOUSSICÉ" (Nme) Palette (paletta) fülön válasszuk ki a
MousePonnter - meousePounterDefaull
_

O
" ,
picture (Nome) _
megfelelo szmt. A System (rend-
PictureAlignment 2-meictureAlignmentCer szer) fülön a rendszer előre beá11í_
PictureSizeMode [] - meictureSizeModeClip
:J tott színei közül választhatunk.
A vezérlőelemek űrlapra helyezéséhez használjuk a ToolBox (Vezérlőelem)
készlet jeleit.

A Label
l—Á
(címke) kiválasztásával, majd az űrlapon a hely kijelölésével tu- Címke
dunk szöveg megjelenítéséhez vezérlőelemet elhelyezni. A CommandButton —-' Parancsgomb
(parancsgomb) kiválasztásával, majd az űrlapra kattintva, ill. helyet kijelölve tu—
dunk parancsgombokat űrlapunkra tenni.
Az űrlapon tehát három objektumot helyezünk el, két parancsgombot és egy
címkét. A címke mérete akkora legyen, hogy elférjen benne a kiírandó szöveg. A
nyomógombok általában egyformák.

— 8.49 -
8. Szoftverfejleszte's

CommandButtc-nl

CommandButtonZ

Lü'lL'Öí—lgg!

ÉE'I'UELILZ

8-51. sz. ábra: Úrlap egy címkével és két nyomógombbal


A címke neve legyen ,,Helló", kezdetben ne jelenjen meg semmilyen felirat, a
háttérszíne legyen sárga. Célszerű a betűtípust e's méretet is beállítani a Font (Be-
tű) tulajdonság segítségével.
A parancsgombok neve és felirata is lehet ugyanaz: ,,Indít" és ,,Ve'ge".

Properties Helló —
Properties Indít

[Helló Label
É ]Indít CommandButton _vj
Alphabetic lCategorizecl ! Alphabetic !Categorized ]

(Name) Helló
_: (Name) Indil:
_:
Accelerator Accelerator
AutoSize False AutoSize False
BackColor El siHoochFFFFsi BackColor [] aHeooooooFe

.
BackStyle 1 - meackStyleOpaciue BackStyle 1 - FmBackStyleOpaciue
BorderColor SiHBOÚOUDOSBi Cancel False
BorderStyle O - FmBorderStyleNone Indít
Caption ControlTipText
ControlTipText Default False
Enabled True Enabled True

. .
_

Times New Roman __._.j Font Tahoma


ForeColor %8000001284 ForeColor _
%HBOOOODIZBA

Height 30 .... Height 24 __


HelpContextID O , '
HelpContextID O

Laft 12 Left 144


MouseIcon (Nene) Locked False
MousePointer O - meousePointerDeFault MouseIcon (Nane)
Picture (Nene) MousePointer 0 - FmMousePointerDeFault
PicturePosition ? - FmPicturePositionAboveCentnd Picture (Nane)
A
8-52. sz. ábra: Címke és parancsgomb tulajdonságai

- 8.50 -
8. Szoftverfejlesztés
Az elhelyezett vezérlőelemekre kattintva az elem aktívvá válik: mozgatható,
méretezhető, törölhető, tulajdonságait ellenőrizhetjük e's beállithatjuk.
Első üdvözlet

8-53. sz. ábra: űrlapunk látványterve


Kódolás
Az lnsert menüből válasszuk ki Module (Modul) menüpontot, vagy kétszer az VB kódolás
egyik parancsgombunkra kattintva kódszerkesztés ablakot kapunk. Úrlapunkhoz
fűződő kódírásnál ez utóbbi módszert javasoljuk. Ezzel létrehoztuk a környezetet,
később elég a View / Code (Kód) menü választása is. A tervezés és a kódolás kö—
zötti váltogatás a View / Code és a View / Object menüpontokkal, vagy az abla—
kok közötti váltással is megoldható.
!!
Indh
Helló.xls - üdvözöl (Code) '

:j lCHck
M
.

la
rll—L
_Mmg
—(Generah
Helló _!.e

UserForn1 ___"
Vége
Private Sub Indít_Click[]
rad Sah ,A

Private Sub UserFornLClicktj


End Sub

Private Sub Uége_Click[)


End Sub

8—54. sz. ábra: Kódablak


A kódablak listájában az űrlapunk vezérlőelemei olvashatók. Ezekhez rendelve
adjuk meg az eseményeket. E keretekbe írhatjuk le, mit szeretnénk az egyes ob—
-8.51-
8. Szoftverfejlesztés

jektumokat vezérelve végrehajtani, milyen eseményeket szeretnénk elindítani. A


vezérlőelemek kiválasztásakor a hozzájuk rendelt eljárások eleje (Private Sub) és
vége (End Sub) megjelenik a kódablakban. Csak a nyomógombok Click (kattin—
tás) eseményéhez van értelme utasításokat adni. A többit hagyjuk üresen.

Control-esemény A control-esemény egy vezérlést jelent, hogy a nyomógombhoz (objektum-


hoz) rendelt funkció elinduljon.
Az Indít gomb megnyomásával szeretnénk, ha kiíródna, hogy ,,Első Progra-
munk VB-ben", új sorban ,,Helló". A szöveg megjelenését a Helló címke objek-
tumba tehetjük. Ehhez beírandó utasítás a környezettel együtt:
Private Sub Indít_Click()

Helló.Caption : "Első programom VB—ben" 8L Chr(l3) 8L "HELLÓ"

End Sub
A (85) jel a szöveg összefűzést segíti, a CHR(13) pedig a beépített standard ka-
rakterüíggvény, mely a 13 paraméterrel a soremelés (Enter) karakterét adja meg
megjelenítéskor.
A Vége nyomógomb hatására befejeződik a program. Ez utóbbi minden űrla—
pon elvárható esemény. Ez az End parancs hatására hajtódik végre, amikor min-
den megnyitott objektum bezáródik, és haladéktalanul befejeződik az alkalmazás
futása.
Private Sub Vége_Click()
End
End Sub

Mentés A megtervezett és modulkódok megírása után nem marad más feladatunk, mint
a program elmentése, majd kipróbálása, futtatás. Programunkat egy Excel munka-
füzetbe mentjük. Ehhez szokás szerint választhatjuk a H Mentés gombot, vagy a
File (Fájl) / Save... (Mentés...) parancsot.

Futtatás A futtatást a Run Sub / User Form menüvel, eszközgombbal, vagy az F 5


9

funkció billentyűvel kezdeményezhetjük. Ennek eredményét látjuk az alábbi áb-


rán.

Első programom "UB—ben


Ind't
memmmmmmmmmmmg
IíEIÁLí)

Vége

8-55. sz. ábra: Futtatás


- 8.52 -
8. Szoftverfejlesztés
8.9.3. Kódírási szabályok

Amikor először veszünk fel alkalmazásunkhoz egy objektumot (űrlap, pa- Elnevezési
rancsgomb, stb.), vagy vezérlő elemet, a Visual Basic beállítja annak Name (Név) konvenciók
tulajdonságát egy kezdő értékre. Például a parancsgomb név tulajdonságértéke
CommandButtonl, illetve CommandButton2 lett. A felvett címke név értéke pe-
dig Labell. Nem célszerű az így kapott nevet megtartani, de néhány hagyományos
irányelvet tartsunk be. A program olvashatóságát megkönnyíthetjük beszédes ne—
vek használatával.
Az objektum megnevezését például az adott objektumra utaló rövid előtaggal
kezdhetjük, ez segít a funkciók közötti eligazodásban (pl. cdendít, lblHelló).
Névadási szabályok:

. Objektumok, változók nevei csak betűvel kezdődhetnek.


. Betűket, számokat és aláhúzás (_) karaktert tartalmazhat a név, de más írásje-
let és szóközt nem tartalmazhat.
. Változó neveinek nem használhatunk foglalt szavakat.
. A név maximális hossza 40 karakter.
A Visual Basic kódszerkesztő egy sajátos szövegszerkesztő, amelyben egy bi-
zonyos beépített automatizmus a munkánkat megkönnyíti,
*

ha okosan használjuk. Például, ha beírunk egy objektum-


nevet es az azt koveto
, .. ,,
pontot, akkor automatikusan feljon
.
§ BackColor
[§Backswle
egy lista, amely azokat a tulajdonságokat tartalmazza, me- [§ BorderColor
lyek használhatók az adott objektumhoz. (Pl. cimkéhez [§ BorderSty-le
[§ *:
,

EÉDEÉ! ,—
választható tulajdonságok). _MMW...

Utasításszavunk beirásakor pedig megjelennek a létező utasítás vagy eljárás


szintaktikai szabályai.
MsgBox
MsgBox(Prompt, [Buttons As VszgBoxStyle : vbOKOnly], [Tide], [HelpFJIe], [ContextD As VszgBoxResult [

A kódírás szintaktikai szabályainak nem megfelelő sor (ENTER) hatására pi-


rosan jelenik meg, és hibaüzenet kapunk (angolul). Pl. ha sor közepén nyomjuk le
az Enter-t.
Microsoft Visuám :

§]
Private Sub Indít_Click[J Compile error:
Helló.Caption :
"Első programom UB—ben" ; Chrílel ; "HELLÓ" '! Expected: expression
,,
End 51133

Súgó !
'

A szintaktikai szabályok betarthatósághoz néhány jó tanács.


. Általában egy utasítás egy sor.

- 8.53 -
8. Szoftverfejlesztés

. Ha egy utasítást több sorba kell írnunk (hosszú az utasításunk), akkor a sor
folytatását a ( _) szóköz és az aláhúzás karakterek egymás utáni írásával je-
lezzük.
. Több utasítást akarunk egy sorba írni, akkor a kettősponttal különítjük el az
utasításokat.
. Utasításokhoz megjegyzés írása a későbbi jobb érthetőséghez. Az aposztróf
(,) karakterrel kezdjük a megjegyzést, akár az utasítás sorában, akár külön
sorba írva a megjegyzést.
Adatok, adattípusok, változók, konstansok
Elemi objektum
g Elemi objektum
Elemi objektum alatt egy megnevezés és érték által definiált együttest értünk.
Az objektum egy tárolási helyből és egy értékből áll. A tárolási hely egy cí-
mezhető tárterület, amelyet egy szimbolikus névvel (változóne'v) nevezhetünk el.
A programozási nyelvek adatobjektumai megnevezhető tárterületekből és az
ezekhez rendelt meghatározott adattípusokból állnak.
így az adatot tartalmazó adatterület helye és az adattartalom mellett az adat-
típus megadásával a memóriabeli tárolási módját is meghatározhatjuk.
A Visual Basic végrehajtási időben ellenőrzi az adattípust (dinamikus típuske—
zelés), így a típus hibákat is futás közben jelzi ki. A Visual Basic nem kívánja
meg a feltétlen adattípus deklarálását. Ha egy változót explicit módon deklará-
lunk, akkor nekünk kell gondoskodnunk a típus megadásáról és a konverziókról.

Adattípusok Az adattípusok bevezetésével

. az adatokat a tárban minimális tárigénnyel lehet tárolni és az információtar—


talmat helyesen meghatározni,
. biztosítani lehet, hogy az adattípusokhoz hozzárendelt műveletek alapján a
program-végrehajtási biztonság növekedjen,
' a felhasznált adatokhoz a legmegfelelőbb adattípust választva hatékonyabb
kódot lehet írni.
A Visual Basic fejlesztési környezet több alapvető adattípust bocsát rendelke—
zésünkre. Az adattípusokat a következőképpen osztályozhatjuk:

. numerikus (byte, integer, long, single, double, currency, decimal)


. logikai (boolean)
. karakterlánc (string): rögzített, vagy változó hosszúságú
. dátum (date)
. objektum (object)
. változó (variant): szám, vagy szöveg
. összetett: tömb és felhasználó által definiált adattípus.

— 8.54 —
8. Szoftverfejlesztés
A programokban használhatjuk a különböző típusú adatokat. Ha alkalmazá-
sunkban csak ideiglenesen van rá szükségünk bizonyos műveletek eredményeinek
tárolására, akkor változókat használunk. Több azonos típusú változott kényelme—
sebb együtt kezelni, akkor tömbbe rendezzük őket. Ha olyan értékeket szeretnénk
tárolni, amelyek értéke nem változik az alkalmaz futása alatt, akkor ezeket, mint
úgynevezett állandókat, konstans változóként definiálhatjuk.
Visual Basic—ben az adat típusa egyértelműen utal az adat tárolási módjára.
Alapértelmezett adattípus a Variant, amely elég rugalmasan kezeli a benne tárolt
adatokat, és a szükséges konverziókat.
A változók működési területe háromféle lehet: Változók

. Lokális változók csak annak az eljárásnak (makró) a belsejében ismerhető


fel, amelyikben feltűnik. Ha átmenetileg van szükségünk egy változóra, akkor
a változót célszerű lokálisnak deklarálni. Ez azt is jelenti, hogy ugyanazon el-
nevezésű változót különböző eljárásokban deklarálhatunk és mindegyiknek
az saját változója marad. A változót Dim vagy Static kulcsszóval deklaráljuk:
Dim sorszám As Integer
Static név As String

. Modulszintű változó a benne tárolt információt megosztja az egyes űrlap il-


letve modul eljárásai között. Ezek a változók adott modul bármely eljárásai-
ból elérhetők, más modulokból viszont nem láthatók. A modulszintű változók
deklarálását a űrlap-, illetve az osztálymodul deklarácíós részében kell meg-
tennünk a Dim vagy Private kulcsszóval. A modulszintű változók alkalmazá-
sunk teljes futási ideje alatt léteznek, és értékük is megmarad.
Dim létszám As Integer

Private hónap As Byte

. Globális változók értékei elérhetők az alkalmazás bármely moduljából, eljá—


rásából. A globális változókat valamelyik modul deklarációs részében a
Public kulcsszóval deklaráljuk.
Változók elnevezésére vonatkozó szabályok:
0 változó neve egyedi legyen,
0 a változó neve maximum 255 karakter lehet,

. betűvel kell kezdődnie,


. nem tartalmazhat pontot, szóközt, !

§ %% 8L % $ jeleket.
A programban felhasznált változókat és konstansokat a programleíró részben
kell megadni.

Egy változóhoz csak egy adattípus rendelhető. A deklarált változók értéke a


modul végrehajtás kezdetekor 0 vagy üres (NULL vagy EMPTY értékű).


8.55 —
8. Szoftverfejleszte's

Változók típusait és nagyságrendjüket, amit ábrázolhatunk velük, a következő


táblázat mutatja:

Típus Minimális élték Maximális Pontos- Tárolás


érték ság
Byte (bájt) 0 255 1
Byte

Integer (egész) -32 768 32 767 2 Byte

Long (hosszú -2147483648 2147483647 4 Byte


egész)
Single (egyszeres -3,402823*1038 3.4*lo38 6 jegy 4 Byte
pontosságú lebe-
gőpontos)
Double (dupla -1.79*10308 1.79*10308 14 jegy 8 Byte
pontosságú lebe—
gőpontos)
Currency (kerekí- —9.22* 1014 9.22*"10]4 4jegy 8 Byte
tés nélküli flxpon-
tos)
Date (dátum) 1000. január 1 9999. decem- 8 Byte
ber 31
Boolean (logikai) 0, False 1, True 2 Byte

String (változó 0 2 billió 10 Byte


hosszúságú karak- *sztríng
terlánc) hossza
String (le hosszú- 0 65 400 sztring
ságú karakterlánc) hossza
Variant (változó Double 16 Byte
számok esetén) határáig
Variant (változó 22 byte
karakterekkel) Jrsztring
hossza
Object (objektum) Objek- 4 Byte
tumra-
hivatko—
zó vál-
tozó

Adattípusok A következőkben a fontosabb adattípusokat mutatjuk be.

Integer Az INTEGER és LONG adattípus


Long Az Integer (egész) és Long (hosszú egész) adattípus konstansai, valamint a vál-
tozók értékei az egész számok halmazából kerülnek ki. Számábrázolási korlátok
miatt megadható egy olyan szám, amelynél nagyobb abszolút értékű egész szám
- 8.56 -
8. Szoftverfejlesztés

nem ábrázolható (lásd táblázat). Az egész típusú változókkal gyorsabb a művelet—


végzés, mint a Variant változókkal, és kevesebb memória helyet foglalnak el.
Deklaráláskor nem csak az As kulcsszóval adhatjuk meg a változók adattípu—
sát, hanem egy típusdeklarációs karakter segítségével is.

A (%) az lnteger adattípus, a (8z) a Long adattípus deklarációs karaktere.


Az egész adattípusú adatokkal a következő műveletek végezhetők:
Aritmetikai műveletek:
* összeadás,
— kivonás (vagy előjelváltás),
* szorzás,
X
egész osztás (az eredmény törtrészét kerekítés nélkül levágja),
/ osztás (eredménye mindig REAL),
MOD az A MOD B művelete az ,,A osztva B"-vel művelet maradékát állítja
elő.

Relációs műveletek:

) nagyobb,

): nagyobb vagy egyenlő,

( kisebb,

(: kisebb vagy egyenlő,

: egyenlő,

() nem egyenlő.
Az alábbi standard függvények egész e'rte'kű eredményeket szolgáltatnak:
ABS (I) az 1 egész adat abszolút értéke,
SOR (I) az 1 egész adat négyzete,
TRUNC (R) az R valós adat egészre vágott értéke,

ROUND (R) az R valós adat egészre kerekített értéke.


a) Változók b) Konstansok c) Programrészlet
Dim A As lnteger Const A :0 Sub MintaplO
Static év As lnteger Const év : 5 Const első : 20
Dim ID,E As lnteger Dim csoport As lnteger
Public FUR As lnteger

8-56. sz. ábra: Példák egész típusú változók és konstansok használatára

- 8.57 -
8. Szoftverfejlesztés

Single A Single, Double, Currency adattípusok


Double
Adattípusok konstansait és változóinak értékeit a valós számok halmazának
Currency elemei alkotják. Az integer típushoz hasonlóan ugyancsak megadható egy-egy
olyan valós szám, amelynél nagyobb ill. kisebb valós szám nem ábrázolható. A
valós számok ábrázolása miatt a 0,0 környezetében is keletkezik egy olyan inter-
vallum, amelyben található valós számok nem ábrázolhatók (* minimális valós és
a — minimális szám által bezárt intervallum a 0.0 kivételével).

%% O.,O
7 x ,,

_! nmax _] n—min Inmin ]nmflx

8—57. sz. ábra: Valós számok ábrázolása


Ábrázolási Az ábrázolási pontossággal is gondok vannak, hiszen a valós számegyenes leg—
pontosság kisebb intervalluma is végtelen sok valós számot tartalmaz: a valós számok foly-
tonosak. Ennek az intervallumnak csak reprezentánsait képes a bináris számáb-
rázolás megjeleníteni, s így mintegy diszkretizálja az intervallumot. Természete-
sen a fenti problémák (számábrázolási tartomány és számábrázolási pontosság)
számítási pontatlansághoz vezetnek, amely pontatlanság becslése a legtöbb eset—
ben igen nehéz. A kérdéskörrel annak különleges jelentősége miatt - a numeri-

kus matematika foglalkozik.


Programozás esetén azt célszerű eldönteni, hogy a valós számok tárolására a
három közül melyiket válasszuk a fentiekben tárgyal tárolás miatt. A Currency
adattípusában négy tizedes jegyig pontosíthatunk amellett, hogy tizenöt számjegy
lehet az egész rész. Ezt pénzügyi számításoknál használjuk. A másik kettő na-
gyobb korlátok között mozoghat, de ott számítanunk kell a fent említett kerekítési
hibákkal is.
A lebegőpontos számokat megjeleníthetjük tudományos formában is, ami a
számok normál alakban való bemutatását jelenti.
A Single adattípushoz a mmmEeee, a Double adattípusnál a mmmDeee formá-
tumot használjuk. A mmm a mantisszát (együtthatót), míg az eee a karakteriszti-
kát (kitevőt) jelenti, a hatvány alapja pedig a 10.
A (!) a Single adattípus, a (ii) a Double adattípus, a (((D) a Currency adattípus
típusdeklarációs karaktere.
A valós adatokkal az alábbi műveletek végezhetők:

Aritmetikai műveletek:
-I- összeadás

- 8.58 -
8. Szoftverfejlesztés
— kivonás
-!—
szorzás
/ valós osztás, ahol a hányados a törtrészt is tartalmazza
X ; egész osztás, ahol a nem egész számok előbb egészre kerekítődnek, a
hányados a törtrésze törlődik

a) Változók b) Konstansok c) Programrészlet


Dim b As Single, c As Double Const A : 0.0 Sub MintaplO

Dim C As Currency Const Kicsi : 1.8E—ll Const PI : 3.1415


Public ID!,EC12 Const Nagy : —4.7E—Fll Dim R, KER As Single
Dim Ár,Fizet As Single Const PI : 3.14159

8-58. sz. ábra: Példák valós típusú változók és konstansok használatára


A STRING adattípus String
Ha a karakterlánc nem numerikus értéket tartalmaz, akkor választhatjuk a
String adattípust. Alapértelmezés szerint egy string változó, vagy argumentum
egy változó hosszúságú karaktersorozat. A Visual Basic megengedi, hogy méreté—
nek megjelölésével fix hosszúságúra deklaráljuk.
A fix hosszúságúnak deklarált string változóban a megengedettnél több karak—
ter nem kerül tárolásra, ha rövidebb a karakterlánc, akkor az üres helyek space
(szóköz) karakterekkel töltődnek fel.
A ($) a String adattípus típusdeklarációs karaktere.

A karakter adatokkal aritmetikai műveletek nem végezhetők.


Karakter adatokkal relációs műveletek (), (, ):, (:, :, 0)
végezhetők, a vég-
rehajtás a karakter belső kódjainak számértékei szerint történik.
8L a karakterláncok összefűzését szolgáló operandus. (A Jr jel ugyan-
ezt eredményezií.
A karakterek kezelését elősegítő standard függvények a következők:

Trim(C) Karakterfüggvény. A C fix hosszúságú string változó. A karakter—


láncból eltávolítja a szóköz karaktereket.
Chr (I) Karakterfúggvény. 1 egy nem negatív egész szám. A CHR (I) függ—
vény karaktert állít elő, amely az egész értéknek - mint belső kód—
számnak - megfeleltetett karakter. Általában speciális karakterek-
nél használjuk, mint például a soremelésnél: Chr(13). Az ASCII
:
jelkészlet szerint például Chr (42) ' * '. (Az I maximális értéke
annyi lehet, hogy ahhoz a karakterkészletben tartozzon még karak-
ter.)

- 8.59 -
8. Szoftverfejlesztés

a) Változók b) Konstansok c) Programrészlet


Dim Város As String Const Obetű : "
O" Sub Mintapl()

Dim Név As String * 30 Const C : "Karakter'" Const Csillag : " * "

Public csillag, pont As String Const Aposztróf : " ' " Dim jel AS String *5
Dim neve$ Dim név$

8-59. sz. ábra: Példák karakter típusú változók és konstansok használatára

BOOLEAN adattípus
Boolean George Bool-ról (1815-1864) kapta nevét. A Boolean (logikai) adattípushoz
két konstans, két egymást kizáró érték: a TRUE (igaz) és a FALSE (hamis) tarto-
zik.

Az előző típusokhoz hasonlóan a logikai konstansok is sorrendbe állíthatók,


(
eszerint FALSE TRUE. Egy Boolean típusú változó alapértelmezés szerinti ér-
téke False. Ha egy numerikus értéket konvertálunk Boolean típusú Változóvá 0
értékből False lesz, minden más érték True értékre változik. Fordítva, ha egy
Boolean típusú változót konvertálunk más adattípussá, akkor a False értékből 0, a
True értékből 1 lesz.
A relációs műveletek (), (, ):, (:, :, O)
a Boolean típusú adatokra is érvé—

nyesek, egy relációs művelet mindig Boolean értéket állít elő.


Aritmetikai műveletek Boolean adatokkal nem végezhetők.
A következő műveletek csak logikai értékekre alkalmazhatók, az eredmény tí-
pusa is logikai:
AND logikai ÉS (két operandusos művelet)
OR logikai VAGY (két operandusos művelet)
NOT logikai NEM (egy operandusos művelet)
A logikai műveletek defmícióit az alábbi táblázatban foglaltuk össze:

P O P OR O P AND O NOT P

F F F E T

T F T F F

F T T F T

T T T T F

8-60. sz. ábra: Logikai műveletek kiértékelése


A relációk és a standard logikai műveletek felhasználásával további tetszőleges
logikai műveletsorozatok végezhetők el a Visual Basic—ben.

— 8.60 —
8. Szoftverfejlesztés

a) Változók b) Konstansok c) Programrészlet


Dim A As Boolean Const Igaz : True Sub Mintapl()

Dim vége As Boolean Const Igazi :True Const Igazi : True


Public kérdés As Boolean Const Hamis : False Dim Igaz, Hamis As Boolean

8-61. sz. ábra: Példák Boolean típusú változók és konstansok használatára


VARIANT adattípus
Amikor egy változót deklarálunk, akkor egyúttal megadhatjuk a változó adattí- Variant
pusát is. Ezzel a változóhoz hozzárendelődik az adattípusnak megfelelő adatok
fajtájának készlete. Ha valamely változót nem láttunk el deklarációs típussal, vagy
nem is deklaráltuk, akkor a változóhoz minden esetben automatikusan hozzáren-
delődik az alapértelmezés szerinti Variant adattípus.
A Variant adattípus többféle típusú adat tárolására alkalmas adattípus.
Numerikus érték elhelyezése Variant változóban
TextBox, vagy InputBox tartalmával akarunk számolni (ezek adatbeviteli lehe-
tőségek, egy objektum illetve adatbeviteli Higgvény). Ha ez egy String tartalmú
változó lett és ezzel szeretnénk számolni (aritmetikai műveletet végezni) az hibá-
hoz vezet. A változót Variant adattípusként deklaráljuk, akkor az IsNumericO
függvény lehetőséget ad adat vizsgálatára.
Feladat: bekért összeghez kiírjuk az Áfával emelt fizetendő értéket.
Sub bekór()

Dim összeg, áfa, fizet

összeg : InputBox("Kérem az összeget! ")


áfa : 12
If IsNumeric(összeg) Then
fizet : összeg *
(l Jr áfa *
0.01)
" 8L flzet 8: "
MsgBox ("Fizetendő összeg: Ft")
Else

MsgBox ("Ez nemjó érték! ")


End If
End Sub

Figyelem! Utasításban tizedes számjegy megadása mindig ponttal történik, példá-


ul 0.0l, de amikor értéket viszünk be, adunk meg, akkor az Excel beállításának
megfelelő módon kell begépelni az adatot. A magyar beállításkor általában a tize-
des vesző van érvényben.

-8.6l —
8, Szoftverfejleszte's

Karaktersorozat Variant változóban


Gondot okozhat, ha a két karaktersorozat Variant váltózót összeadjuk, ugyanis:
0 ha mindkét változó numerikus, akkor összeadja a két változó tartalmát.
. ha mindkét változó string, akkor összefűzi. A (*) jel úgy viselkedik, mint a
konkatenáció (85) jele.
. ha az egyik változó tartalma numerikus érték, akkor a (-l-) műveletre hibaüze—
netet kapunk (,,Type mismatch"), azaz típus keveredés.
'r'r
tort.

B Próbáljuk ki az alábbi makrót! Szúrjunk be egy Module ablakot, majd gépel—


jük be a makró szövegét. Futtassuk többször! Először a C1, C2 cellákba ír—
junk számokat, majd számot, szöveget, végül mindkettőbe szöveget. El
Sub összefűzO Cl: 1, C2:l esetén
Dim szövl, szöv2 As Variant Eredmény: 2 és l l
Dim értékl, érték2

szövl : Cells(l, 3) C1:l, C2:a esetén


szöv2 : Cells(2, 3) Eredmény: Run-time eror (13).
értékl : szövl Jr szöv2 Type mismatch.
érték2 : szövl 8c szöv2

MsgBox (értékl 8: " " 85


érték2) Cl:a, C2:b esetén
End Sub Eredmény: ab és ab
Dátum érték Variant változóban
Dátum Dátumokat, idő értékeket ugyanúgy tárolhatunk egy Variant változóban, mint
stringeket és a numerikus értékeket. Dátum és idő alapértelmezés szerinti megje-
lenítése a Windows rendszerbeállításához kötődik. Itt is használhatjuk a konverzi-
ós Cdate(), illetve a típus lekérdező IsDate()függvényt.

Feladat: Kérjük be valakinek a születési dátumát, ellenőrizzük, hogy dátumot


kaptunk, és mutassuk meg. Hiba esetén jelezzük, ,,nem dátum".
SubidátumO

Dim szül_dátum, dátum, üzenet

üzenet : "Születési dátum: "

,
InputBox utasítást használunk az adatbekérésre.
dátum : InputBox(üzenet)
If IsDate(dátum) Then ,dátum

MsgBox (üzenet 8c Format(CDate(dátum), "dddddd"))


- 8.62 -
8. Szoftverfejlesztés
Else ,
nem dátum
MsgBox ("nem dátum")
End If
End Sub

_;
_
51;
l

Születési dátum:
i
Microsoft Eat: *

.En—CÉLJ- l
Születési dátum: 1985. december 5.
l

l
,

[1985.12.5

l
Microsoft Excel 35]

LI
_,

Születési dátum:
ÚKl
Cancel
nem dátum

[198513.51
l

8-62. sz. ábra: Dátum vizsgálata (adatbekérés, eredmény kiírása)

Variant változó Empty és Null értéke


Ha arra van szükségünk, hogy egy változónak van-e már értéke deklarálás óta, Empty Null
vagy adott cellában van—e érték, ennek kiderítésére használható a IsEmptyO Higg—
vény.

A variant változó kezdetben az Empty értéket veszi fel. Az Empty egy speciá-
lis érték, mely nem azonos a (0) nullával, és nem azonos a nulla hosszúságú ka-
raktersorral.
A másik speciális érték a Null érték, melyet az adatbázisok hiányzó értékeinek
vizsgálatára használunk. A változó tartalmának tesztelésére az IsNullO Híggvényt
használhatjuk.

If IsEmpty(érték) Then If IsNull(érték) Then


MsgBox("Úres") MsgBox (" Nincs tartalma")
Else Else

MsgBox "Nem üres" MsgBox (" Van tartalma")


End If End If

- 8.63 -
8. Szoftverfejleszte's
Összetett adattípusok
Tömb A tömb típus olyan összetett adattípus, amely azonos típusú adatok csoportját
tartalmazza. Az adatcsoportban az elemek száma rögzített, az adatcsoport egyes

_-
elemeihez közvetlenül is hozzá tudunk férni. Az így kialakított típust tömbnek5 is
nevezzük.

(
[ indextípus ) As elemtípus
_a

8-63. sz. ábra: A tömbtípus szintaxisa


Az indextípus csak sorszámozott típus (olyan típus, amelynek elemeit sor-
számokkal is elláthatjuk) lehet. A megadott indextípusok száma a tömb dimenzió—
számát határozza meg (maximum 3). A tömb kezdőindex értéke mindig 0, és a
maximális érték a megadott indextipus értéke. Az egydimenziós tömb elemeinek
száma: indextípus értéke H. A tömb elemeinek típusát a tömb elemtípusának ne—
vezzük. A tömb elemtípusát az As kulcsszó vezet be. Elemtípuske'nt bármilyen
előzőleg ismertetett típus szerepelhet.
A tömböt azonosító nevet a deklarációs részben, a Dim, Public, Privat kulcs—

szavak után adhatjuk meg.

a) Dim számok(90) As Integer

b) Dim kétdim (10, 70) As String

c) Sub MintaplO
Dim He't (6) As String * 10

Hét (0) : '


Hétfő'
Hét (1) : '
Kedd '

8-64. sz. ábra: Példák tömb típusú változók és konstansok használatára


A tömb elemeire indexes változóval hivatkozhatunk. Az indexes változó meg-
adásának szintaxisdiagramját a 8.65. sz. ábrán láthatjuk.

5
A matematikában használt megnevezéssel egyezően.

- 8.64 -
8. Szoftverfejleszte's

—— tömbnév V FN
n—u

: indexérték "

O.—
8-65. sz. ábra: Indexes változó használatának szintaxisdiagramja
'r'r
dextípussal meg kell egyeznie. Az indexkifejezések számának l és a deklarált
dimenziószám közé kell esnie.
A tömbelemre hivatkozáskor az indexértékeknek a megadott maximális mére-
ten belül kell esniük

Felhasználói adattípusok

Saját készítésű adattípus is létrehozható. A Visual Basic szerkesztői felületen Felhasználói


ezt csak valamelyik modul deklarációs részében helyezhetjük el. Az új adattípu- adattípus
sok mindig globálisak az adott modulra (Private), illetve az egész alkalmazásra
(Dim vagy Public) vonatkoznak.
Általános formája:

Szint Type Struktúranév


eleml As Típus
elem2 As Típus

End Type
Például definiáljunk egy Személy típust.
Public Type Személy
Vezetéknév As String * 20

Keresztnév As String * 15
Szülidő As Variant
Kód As String *6
End Type
A létrehozott adattípust felhasználva alkalmazásunkban deklaráljuk a Hallgató
változót Személy tipusúként.

Dim Hallgató As Személy.

- 8.65 -
8. Szoftverfejlesztés

8.10.Pr0gramstruktúrák
Jegyzetünk Szabványosított programkonstrukciók részében foglalkoztunk a
szekvencia, döntés és iteráció különböző megvalósulásaival. Most tekintsük át
ezek Visual Basic programnyelvi megvalósitásait.

8.10.1. Szekvencia

A legegyszerűbb programrészek adatbeolvasásból, értékadásból és adatkiírás—


ból tevődnek össze.

InputBox Az adatbeolvasással már előző példaprogramjainkban is találkoztunk. Az


lnputBox utasítás hatására képernyőnkön egy párbeszédablak jelenik meg, ahol a
szövegmezőbe beírhatjuk az általunk megadott értéket. Az OK gomb hatására ez
az érték a parancsban használt változóba kerül.
Szintaktikája:
változónév : InputBox(szöveges kifejezés)
Pl. egy négyzet oldalának bekérése az A változóba:

A : InputBox(,,A négyzet oldalaz")


MsgBox Az eredmények és üzenetek megjelenítésére használhatjuk a MsgBox utasítást.
A MsgBox utasítás paramétere lehet szöveges kifejezés, változó, vagy ezek együt-
tesen, szöveg összefűzéssel.
Szintaktikája:
MsgBox(szöveges kifejezés) Pl. MsgBox(,,Ez egy üzenet")

MsgBox(változó) Pl. MsgBox(Terület)

MsgBox(szöveges kifejezés SL változó)


Pl. egy négyzet területének a megjelenítése:

MsgBox(,,A négyzet területe:" SL Terület)


Értékadás Programunkban többször van szükség értékadásra. Az értékadás során megvál—
toztatjuk egy változó értékét. Az egyenlőségjel bal oldalán kell megadnunk azon
változó nevét, amely értékét felülírjuk a jobb oldalon megadott kifejezés értéké-
vel. A kifejezésben felhasználhatjuk a változó eredeti értékét is.

Szintaktikája:
változónév : kifejezés
Pl. A:3
I:I—F2
Terület:A*A

_—8.66-
8. Szoftverfejlesztés
§ Kérjük be egy négyzet oldalát (az egyszerűség kedvéért egy egész számot),
majd számoljuk ki a kerületét és területét. lrassuk ki a kerület és terület érté-
ke't egy ablakba, külön sorbalcl
Sub négyzetO
Dim A, Terület, Kerület As Integer
A : InputBox(,,Kérem a négyzet oldalátl")
Kerület: 4 * A
Terület :A * A

MsgBox ("Négyzet kerülete:" 8: Kerület 85 Chr(l3) 8: "Négyzet területe:" 84


Terület)
End Sub

8.10.2. Feltételes végrehajtás, az IF struktúra

A megadott feltételek kiértékelésének Higgvényében hajtódnak végre az utasítá— If Then


sok. Az IF utasítás valósítja meg a kiválasztás l. és II. esetét (lásd 8.7. fejezet). Else
A feltétel egy logikai kifejezés, amely a kiértékeléskor Boolean értéket ad
End If

eredményül.
Szintaktikája:
If feltétel Then Ha a feltétel igaz, akkor

utasítások], ha a feltétel igaz


Else egyébként

utasításokz, ha a feltétel hamis


End If (elágazás vége)
Megjegyzés:
A kiválasztás I. esetében az Else ágra nincs szükség, el is maradhat. Ha csak az
igen ágban és csak egy utasítást akarunk végrehajtatni, akkor kerülhet az utasítás
a Then után egy sorba, de akkor az End If elmarad.
If feltétel Then utasítás
Egymásba ágyazható utasítás blokkok is használhatók, mikor kizáró feltétel-
rendszerünk van.

§ Számoljuk ki a havi fizetés nettó értékét. Tegyük fel, hogy éves szinten
(
egyenletesen keresünk. Ha a fizetés (600 000/ 12), akkor 20%—ot vonunk le,
(
ha a fizetés (1 200 000/ 12) akkor 30%-ot, különben 40% a bruttó fizetésből
a levonás. Ezt a nettó értéket mutatjuk meg. Ennek megoldására egy egymás-
ba skatulyázott If— Else utasítássorozatot használtunklEl
A feladatmegoldás során használjuk az STR(számérték) függvényt, ami a szá—
mot szöveges (string) formára konvertálja.
- 8.67 -
8. Szoftvcrfejlesztés
Sub adóelőleg()
Dim fizetés, x As Long
Dim adó, nettó As Double
x : lnputBox("Havi fizetés")
Ifx ( 600000 / 12 Then
adó : 0.2
Else
Ifx ( 1200000/ 12 Then
adó : 0.3
Else
adó : 0.4
End If
End If
nettó :x * (1 - adó)
" 85
MsgBox ("Nettó érték: Str(nettó))
End Sub

8.10.3. Esetszétválasztás, a Select Case struktúra

Select Case A Select Case struktúra valósítja meg a kiválasztás III. és IV. esetét (lásd 8.7.
End Select fejezet). Az utasítás többszörös, Összetett IF utasítással kiváltható.
A CASE utasítás speciális szelekció, ahol a szelekció feltételei úgy fogalmaz—
hatók meg, hogy egy kifejezés a típusának megfelelően éppen melyik konstanst
veszi fel értékül. A tesztkifejezés a struktúra elején értékelődik ki. A kifejezés ér-
tékét hasonlítja össze a Case struktúra tesztlistájában szerepelő értékekkel. Az
egyezőség függvényében hajtja végre az utasítást.
Az utasítás Case Else ágára a kiválasztás IV. esténél van szükség, amikor a
Case struktúrában nem szereplő értékeket (egyéb eset) összevontan kezeljük,

Szintaktikája:
Select Case tesztkifejeze's
Case Mintal
utasítások. ..
Case Minta2
.. .. utasítások. ..

Case Else
utasítások. ..
End Select


8.68 -
8. Szoftverfejlesztés
B A beolvasott szöveg első karaktere alapján a munkanapok nevét, mint szöve-
get beteszi a nap változóba, majd kiírja. Nagybetűt, kisbetűt vizsgáljuk. Be—
tűk, amire figyelünk: h,k,s,c,p.El
Sub napok_case()
Dim kar As String * l

Dim nap As String * 10

:
kár InputBox("Melyik nap?")
Select Case kar
Case "H", "h"
nap : "Hétfő"
Case "K", "k"
nap : "Kedd"
Case "S", "s"

:
nap "Szerda"
Case "C", "c"
nap : "Csütörtök"
Case "P", "p"
nap : "Péntek"
Case Else
" Hibás adat! "
MsgBox
nap : ""
End Select
MsgBox(,,A nap:" 84 nap)
End Sub

B Bekért számjegyről eldöntjük, hogy páros vagy páratlan szám—e. Cl


Sub számjegy_case()

jel : InputBox("Egy számjegyet kérek!")


Select Case CIntGel) 'Csak számra dönt
Case l, 3, 5, 7, 9 'páratlan
msg : "Páratlan szám"
Case 0, 2, 4, 6, 8 'páros
msg : "Páros szám"
Case Else
msg : "Nem értékelhető "

End Select
MsgBox (msg)
End Sub

- 8.69 -
8. Szoftverfejlesztés
8.10.4. Ciklusok

A ciklusok segítségével ugyanazon utasítások végrehajtását ismételtctjük.


Alapvető ciklusszerkezetek a következők, mint azt a 8.7. fejezetben láttuk.

8.10.4.] A For... Next ciklusszerkezet

For Next A számláló ciklus egy speciális előlvizsgáló ciklus. E ciklusszerkezetet akkor
használjuk, ha ismerjük, hogy hányszor akarjuk végrehajtani az utasításokat. A
számláló (ciklusváltozó) határozza meg az utasítások végrehajtásának számát a
mettől a meddig és a lépésköz függvényében. Ha a lépésköz hiányzik, akkor alap-
értelmezésben annak értéke 1. így az ismétlések száma (meddig—mettől)/lépésköz
egész része. A lépésköz értéke negatív szám is lehet, de akkor a mettől értéke na-
gyobb kell legyen, mint a meddig értéke.
Szintaktikája:
For Számláló : Mettől To Meddig [Step lépésköz]
... utasítások. ..
Next Számláló
Határozzuk meg 3-tól (megadott értéktől kezdődően) sorban a ciklusváltozó érté-
két és négyzetét a 37 (megadott Végértékig), 3-as lépésközzel haladva. A C válto—
zóba írjuk folyamatosan a ciklusváltozó értékét, a D változóba pedig a négyzetét.
A megoldás számláló ciklussal történjen! E]
Sub Ciklusl()
For I
: 3 To 37 Step 3

C: C 8: str(l) 8L", ,,

D: D (§; str(I * I) 8L", ,,

Next ]
MsgBox(,,Ciklusváltozó: ,,
SL C 85 Chr(l3) 8c ,,Négyzete: ,, SL D)
End Sub

8.10.4.2 A Do Loop ciklusszerkezet

Do Loop A Do ...Loop ciklusszerkezetet akkor használjuk, amikor nem tudjuk előre


megmondani, hogy hányszor hajtódjon végre az utasításblokk. Különböző típusai
lehetnek, de mindig egy feltétel kiértékelésének függvénye. Ahogyan az If.. Then
struktúrában is, itt is egy kifejezés True vagy False értékétől függően folytatódik
vagy sem a ciklus.
Annak függvényében, hogy e logikai kiértékelés mikor történik, kétféle lehet e
konstrukció, az előltesztelő és a hátultesztelő ciklusszerkezet.

- 8.70 —
8. Szoftverfej lesztés
Az előltesztelő Do ...Loop ciklusszerkezet esetében a feltétel kiértékelésének Előltesztelő
eredményétől függően hajtódnak végre, illetve nem hajtódnak végre a ciklusutasí-
tások. Ennél a szervezési struktúránál az is előfordulhat, hogy egyszer sem kerül
végrehajtásra az utasításblokk. Ha egyszer végrehajtódott, akkor a vezérlés visz-
szaadódik a De While, vagy a Do Until utasítássorra, és kezdődik az újbóli kiérté-
kelés. Ebből következik, hogy mindig kell az utasításblokkban egy olyan utasítás—
nak lennie, ami a feltételben szereplő változó tartalmát változtatja.
Do While feltétel (:True) Do Until feltétel (:False)
Utasítások Utasítások

Loop Loop
A While kulcsszót használva, a feltétel : True értéke esetén kerülnek az utasí—

tások végrehajtásra az Until kulcsszót használva a feltétel : False értéke esetén


kerülnek végrehajtásra.

§ Generáljunk egy véletlen számot 0 és 100 között. Adjuk össze a számokat 50


és a véletlen szám között. Cl
Az RndO függvény egy véletlen számot generál O és között. Ha nem akarunk 1

mindig ugyanolyan számokat, előtte adjuk ki a Randomize parancsot. Mivel mi 0


és 100 közötti számot szeretnénk, ezért az értékét meg kell szoroznunk a maximá-
lis értékkel, azaz példánknak megfelelően lOO—zal. A művelethez egész számra
van szükségünk. Az Int(Szám) függvény segítségével a Szám változó egész érté-
két kapjuk.
Sub dowhilel()
Randomize
Szám : Int(Rnd() * 100)
összeg : 0
i
: 50
Do While i ( Szám
összeg : összeg * i

i
: i 4- 1

Loop
MsgBox(,,Az eredmény: ,, 85 összeg)
End Sub

§ Határozzuk meg l-től 10-ig a számok szorzatát! (kicserélhetjük, hogy meg-


adott értékig a szorzatot, ez a faktoriális)Cl
Sub dountillO

szorzat: l

i: l

Do Until i
) lO
- 8.71-
8. Szoftverfejlesztés
szorzat : szorzat * i

i
: i -l- 1

Loop
MsgBox(,,Az eredmény: ,,
85 szorzat)
End Sub

Hátultesztelő A hátultesztelő Do Loop ciklusszerkezet is a feltétel kiértékelésének ered—


ményétől Híggően hajtja végre, illetve nem hajtja végre a ciklus magjában szerep-
lő utasítássorozatot. Ennél a szervezési struktúránál egyszer biztosan végrehajtás—
ra kerül az utasításblokk, mivel a kiértékelésre az utasításblokk végrehajtása után
kerül sor. Az első végrehajtás után a feltétel kiértékelése után vagy kilép a ciklus-
ból, vagy a vezérlés visszaadódik a D0 utasítássorra és kezdődik a ciklusblokk
újbóli végrehajtása.
A hátultesztelő ciklusnak is két fajtája van

Do Do

Utasítások Utasítások

Loop While feltétel (:T rue) Loop Until feltétel (:False)

B Generáljunk egy 12 oldalú kockához dobásokat tizszer, és számoljuk meg,


hogy hányszor dobtunk kilenc feletti dobásokat.El
Sub dowhileZO
Randomize
számol :0
i: ]

Do
kocka : Int(Rnd() *
12) -l- 1

C: C str(kocka) 8: ", ,,
ők

If kocka ) 9 Then számol számol * l :


i
: : i 1

Loop While i
(: 10
MsgBox(,,Kockadobások: ,, 85 C 8c Chr(l3) 8c ,,Az eredmény: ,,
8L számol)
End Sub

Elemezzük az előző feladatot, és nézzük meg a feltétel fordítottjával a megol-


dást! Cl
Sub dounti12()
Randomize
számol :0
i: l

Do
- 8.72 -
8. Szoftverfejlesztés
kocka : Int(Rnd() * 12) 4- 1

C: C 62 str(kocka) 8c ", ,,
If kocka ) 9 Then számol : számol * 1

i
: t
i 1

Loop Until i
) 10
MsgBox(,,Kockadobások: ,, 85 C 85 Chr(13) 85 ,,Az eredmény: ,, SL számol)
End Sub

8.11. Vezérlőelemek

vezérlőelemek az űrlapon (vagy munkalapon) elhelyezhető grafikus ob-


A
jektumok, melyek adatok megjelenítését, bevitelét, műveletek végrehajtását te—
szik lehetővé. Az objektumok közé tartoznak a beviteli mezők, listapanelek, vá—
lasztókapcsolók, parancsgombok és más elemek. A vezérlőelemek a felhasználó-
nak választható lehetőségeket vagy gombokat ajánlanak fel, me—
"i! 33!
lyekre kattintva makrókat indítanak el a feladatok automatikus
Controls ! végrehajtására.
i
R A Objektum kijelölése Címke (Felirat)
ah! Beviteli mező (Szövegmező) Beviteli lista
[7
Listapanel Jelölőnégyzet
(;- _!
'—
Választókapcsoló Váltógomb
[É _!
Keret (Csoportpanel) Parancsgomb
A _'_J

:,
!, ;
v
TabStrip
Görgetősáv
Karton
Léptetőgomb
§; [EI

Kép RefEdit

Felirat (Címke): Megmutat egy szöveget munkalapon, űrlapon (Form-on), amit


interaktívan nem változtathatunk, amely egy vezérlőről, munkalapról vagy űrlap-
ról nyújt tájékoztatást.

Beviteli mező — Szerkesztőmező (TextBox): Egyaránt alkalmas szöveg beírására


és megjelenítésére.

Beviteli lista - Kombi panel (ComboBox): Legördülő listát tartalmazó lístapanel.


Beirhatunk a mezőbe, vagy választhatunk elemet a listáról. A TextBox és a
ListBox kombinációja.

Listapanel (ListBox): Elemek felsorolását tartalmazó mező. Megmutatja a lista


elemeit, amelyek közül egyet vagy többet választhatunk.
Jelölőnégyzet (CheckBox): Bejelölésével vagy a jel törlésével ki- és bekapcsol-
hatunk egy beállítást. A lapon vagy csoportban egyszerre több bejelölt négyzet
lehet, melyek nem zárják ki egymást. True/False, Igen/Nem a választási lehetőség.

- 8.73 -
8. Szoftverfejlesztés
Választókapcsoló (OptionButton): A felkínált választási lehetőségek csoportjá—
ból időben mindig csak egy elem kiválasztására használható gomb. Olyankor
használjuk, amikor több lehetőség közül csak egy kiválasztását engedjük meg.

Váltógomb: Olyan gomb, amely lenyomva marad, ha rákattintunk, és kioldódik,


ha ismét rákattintunk.

Parancsgomb (CommandButton): A gombra kattintva műveletet indíthatunk el,


lefut egy makró, a felhasználói parancssort értékeli.

Görgetősáv (HScrollBar): Olyan vezérlőelem, amely értéktartományt görget,


amikor a görgetőnyilakra kattintunk, vagy a görgetőcsúszkát húzzuk. Egy egész
lapot ugorhatunk, ha a görgetőcsúszka és az egyik görgetőnyíl közé kattintunk.

Léptetőgomb (VScrollBar): Felfelé és lefelé mutató nyilat tartalmazó vezérlő-


elem, amely cellához vagy beviteli mezőhöz kapcsolható. Az érték növeléséhez a
felfelé mutató nyílra, az érték csökkentéséhez a lefelé mutató nyílra kell kattinta-
nunk. Megadott határok közötti értékek kiválasztására alkalmazható.

Kép (PictureBox): Vezérlőelem, amely képet ágyaz be, tálcaként szolgál külön—
böző információk elhelyezésére. Képi (*.bmp, *.jpg, *.ico, *.gif) információk fo-
gadására.

8.11.1. Címke és szövegmező

Első Visual Basic példánkban készítettünk egy űrlapot, ahol nyomógombokat


és címkét helyeztünk el. A gombokhoz rendelhetjük utasításainkat, a címkék sc—
gítségével pedig megj eleníthetünk adatokat.

Szövegmező A szövegmező (textbox) alkalmas az adatbevitelre és megjelenítésre is. A


abl
Toolbox eszköztár gombját lenyomva, az űrlapon kijelölhetjük a szövegmező
területét. A vezérlő tulajdonságait a Properties ablakban beállíthatjuk.

§ Hozzunk létre egy űrlapot (Négyzet területe felirattal). Jelenítsünk meg rajta
két feliratot: Négyzet oldala és Négyzet területe szöveggel. A harmadik cím-
ke a terület megjelenítésére szolgál (felirat nélkül, lblTerület néven). A négy-
zet oldalához egy beviteli mezőt vigyünk fel (txtOldal néven). Szokás szerint
űrlapunkra helyezzünk egy OK és egy Kilép gombotis. E]
Négyzet területe -

8-66. sz. ábra: Négyzet űrlapjának látványterve


- 8.74 -
8. Szoftverfejlesztés
Célszerű a szövegmező és az eredmény megjelenítésére szolgáló címke igazítását
(TextAlign) átállítani jobbra zártra (fmTextAlignRight). A terület megjelenítésére
szolgáló címkéhez állítsunk be keretet (BorderStyle): meorderStyleSingle.
A parancsgombokhoz adjuk meg a megfelelő utasításokat. A szövegmező Text
tulajdonságával hivatkozhatunk a beírt adatra.
Private Sub cdeilép_Click()
End
End Sub
Private Sub cmeK_Click()
lblTerület.Caption : txtOldal.Text * txtOldal.Text
End Sub
Négyzet területe __
(

Négyzet oldalai ,
I 10.

Négyzet területe: r
_

_
Kilép; !

8-67. sz. ábra: A négyzet terület feladatának megoldása

8.11.2. Jelölőnégyzet és választókapcsoló

Az adatbevitelt megkönnyíthetjük, ha választható adatoknál jelölőnégyzetet,


vagy választókapcsolót használunk.
A jelölőnégyzet három állapotú kapcsoló. A kiválasztásnak megfelelő érték Jelölőnégyzet
(Value) hamis (false, 0), ha nincs kiválasztva El, igaz (true, —l), ha ki van választ—
va El, és null értékű, ha nem meghatározható. Úrlapra helyezéséhez használjuk a
Toolbox "7 gomját.
A választókapcsoló kétféle logikai értéket vehet fel. Igaz (true, -l), ha ki van Választókapcsoló
választva G), hamis (false, 0), ha nincs kiválasztva O. Úrlapra helyezhetjük a
Toolbox 5 gombjával.

Mindkettőt keretben célszerű elhelyezni. Ehhez az eszköztár Él gombját le— Keret

nyomva, jelöljük ki a szükséges területet. A keret a benne levő elemeket egységbe


foglalja, ezért először a keretet kell elhelyeznünk, majd benne az objektumokat.
Célszerű a feliratot (Captíon) és a szegély stílusát (BorderStyle) megadni.

- 8.75 -
8. Szoftverfejlesztés
Hozzunk létre egy űrlapot, ahol pizzánkat megrendelhetjük. A pizza me'rete't
választókapcsolóval, a feltéteket pedig jelölőnégyzettel választhatjuk ki. lras-
suk ki egy címkén a választott pizza árát. Cl
Pizza rendelés
!"

i—(_

" (IDOUFt) ::: ::

:::F(1300Ft):::::i """"""""" ::cz:


:: :
32cm ::ÉzÉÁ
'

8-68. sz. ábra: Pizza rendelés űrlapjának látványterve


Számoláshoz kihasználhatjuk azt a tényt, hogy -1 értékű a jelölőnégyzet és a
választókapcsoló értéke is, ha kiválasztottuk. Csak a negatív előjelet kell meg-
szüntetnünk.
Private Sub cdeile'p_Click()
End
End Sub
Private Sub cmeK_C1ick()

:
lblÁr.Caption —(0pt26.Value
200 Jr cthomba.Value * 150
*
4—
1000 opt32.Value * 1300 * chkSajt.Va1ue
4-

chkSonka.Va1ue * 200)
*

End Sub
Az egyes elemeknek van alapértelmezett tulajdonsága. Pl. címkének a Caption,
jelölőnégyzetnek és választókapcsolónak a Value. Ezért az utasításunk egysze-
rűbben is leírható:
Private Sub cmeK_C1ick()

:
lblÁr -(opt26 * 1000 * opt32
chkSonka * 200)
* 1300 * chkSajt * 200 -l- cthomba * 150 4-

End Sub
Ha szeretnénk, hogy már az egyes elemek választásakor kiszámításra kerüljön
és megjelenjen az ár, akkor a jelölőnégyzetek és választókapcsolók kattintásra
(Click) eseményéhez rendeljük hozzá a cmeK_Click parancsot. Például:
Private Sub opt26_Click()
cmeK_Click
End Sub

— 8.76 -
8. Szoftverfejlesztés
Pizza rendelés '

1350
;

Fizetendő:

— Méret --———————
;— Feltétek ——————————————

Sajt (200 Ft)


!

26 cm Tv"
G
-

(moon)
-

IV Gomba (150 Ft)


32 cm -

(nem) _
, !" Sonka (200 Ft)

8—69. sz. ábra: Pizza rendelés feladatának megoldása

8.1].3. Visual Basic makró szerkesztése egy feladaton keresztül:

§ Visual Basic szerkesztővel hozzuk létre az alábbi User Form űrlapot, a megfe—
lelő objektumokkal és a hozzájuk tartozó utasításokkal. Generáljunk 8 vélet-
len számot 0 és 100 között, ezek jelenjenek meg, egy Címke objektumon. Ha—
tározza meg igény szerinti sorrendben a generált számok közül a legkisebbet,
legnagyobbat, a kettő különbségét, átlagát. A különbséget csak akkor tudjuk
meghatározni, ha a minimumot és a maximumot már látjuk. Ha ezek nem tel—
jesülnek, adjunk figyelmeztetést. Új sorozat generálásakor töröljük le az elő-
ző eredményeketEl
íj Microsoft Visual Basic - Összefoglaló feladat űrlappalmls ' *f'f
;.
Elle Edit !,low [mert Fgmat Debug gun Iools Add-ms Mndow Help ví.

sans
!

'líl'n'd
Proiect—VBAPi—oiect
'
"DH—my
X
urd%—€§'ÉT§-iléi' §
:
Összefoglaló feladat űrlappalmls - űrlap (UserForm)
Y

El
aa Összefoglaló feladat
f—i
§ VBAProiect (Összefoglaló feladat űrlap
!; %t; Microsoft Excel objects

!] Munka! (Munka!)
!] mmz (MunkaZ)
. Munka3 (Munka3)
ThisWorkbook
-'-v if'f! Forms
űrlap
foi C; Modules

§ rá'?
Generál
'

_
..- un _x A.
_.

Properties - Cmdűeneral
'

ii
lCdeeneral CommandButton
;]
Alphabetic Icateoorlzed ]

Cdeeneral

AutoSize False
BackColor [] waomooom
Backstyle l —
meackStyleOpaclue
Cancel False
Caption Generál

Default False
Enabled True

.
Font l'ahoma
_'..l
ForeColor waoooomza

8-70. sz. ábra: Összefoglaló feladatunk űrlapja


— 8.77 -
8. Szoftverfejlesztés
Állítsuk be az objektumok tulajdonságait sorban. Name (eljárás neve): Kon-
venciónak megfelelően, mivel ez egy CommandButton nyomógomb kezdődjön
cmd és mit fog végrehajtani, számok generálását, tehát legyen cdeeneral. A
Caption tulajdonsága a nyomógombon megjelenő szöveg, legyen Generál.
' roperties —
Cdeeneral
lCdeeneral CommandButton
Alphabetic lCategorized ]

Cdeeneral

AutoSize False
BackColor [] aHsooooooFa
BackStyle 1 - meackStyleOpaclue

Cancel False
Caption Generál

8-71. sz. ábra: Parancsgomb tulajdonságai


A Height (magasság) és a Width (szélesség) tulajdonságok állításával az objek—
tumok méretét változtathatjuk, egységesíthetjük.
A megtervezett és elhelyezett objektumok tulajdonságait állítsuk be sorba.

Tulajdonságok beállítása
A Visual Basic szerkesztésénél a felhasználói felületen az objektumok, illetve
a munkaüizeten elhelyezett vezérlők (AktívX vezérlők) tulajdonságainak beállítá-
sa hasonló módon történik.

A tulajdonság ablak megnyitása mindkét esetben lehetséges a Standard eszköz-

sor ikonja segítségével


A Visual Basic esetében még három módunk van rá:

0 Yiew/ Properties Window menüparanccsal,


. Az Alt—FV e's Alt-FW billentyűkombinációval,

. F4 gyorsbillentyűvel.
A Properties aktivitás tartalomérzékeny, az aktuális Form, a kiválasztott
controljához, illetve a vezérlőelemhez tartozó Tulajdonságok tábla jelenik meg.
Például Properties — Cdeenerál. Nézzük meg egy kiválasztott objektumhoz,
amihez automatikusan hozzárendelődik egy tulajdonságkészlet beállított értékek-
kel. Nézzük meg az egyes részek funkcionális jelentését részletesebben!

- 8.78 -
8. Szoftverfejlesztés
' roperties —.Cdeeneral
IEdeeneral CommandButton 4————— Obj ektummező

X
Alphabetic lCategorized !
Tulajdon—
Cmcheneral Rendezési fülek
ság lista
False
Beállítási mezők
[! aHsooooooFa
1 - meackStyleOpaaue
False
Generál

8-72. sz. ábra: Tulajdonság ablak felépítése


Az objektummező a kiválasztott control objektumosztálybeli nevét, illetve az
adott objektum nevét, az AktívX vezérlőelem lCdeeneral CommandButton _:l
""""""""""""""""""
nevét mutatja. Az objektummező jobboldali fűid'l'i'éííéFal'__Eö'i'ri'rh'ái'i'déüt'tö'n
Cdeülönbség CommandButton
lefelé mutató nyílra kattintva az űrlapon fel— CmdMaHimum CommandButton
EmdMinimum CommandButton
használt további objektumok felsorolását ta-
Cdeége CommandButton
láljuk meg. így az objektumok tulajdonságai LblAtlag Label
LblKülönbség Label
innen is elérhetők. LbIMaHimum Label

Rendezési fülek címszó alatt két felírat található (Alphabetic, Categorized),


amely szerint rendezve ill. csoportosítva találhatók a tulajdonságkészlet elemei.
Alphabetic lCategorized !
ategonzed
ma—
Alphabetic
Cdeeneral E Appearance
Accelerator
_:
Cdeeneral
AutoSize False BackColor [] aHeoononoFe
BackColor [] SHBOUDDODFEx BackStyle 1 - FmBackStyleOpaczue
BackStyle 1 -
FmBackStyleOpaclue Caption Generál

.
Cancel False ControlTipText
Caption Generál ForeColor aHsuooootza
ControlTipText Visible True
Default False El Behavior
Enabled True AutoSize False

.
Font Tahoma Cancel False
ForeColor wennoomza Default False
Height 24 Enabled True
HelpContextID O Locked False
Left 6 TakeFocusOnClick True
Locked False WordWrap False
MouseIcon (Nene) El Font
MousePointer D - FmMousePointerDeFault Font Tahoma
Picture (None) El Misc
PicturePosition ? - FmPicturePositionAboveCentt Accelerator
TabIndex O HelpContextID D
'

TabStop True MouseIcon (Nene)


Tag *MousePointer Cl - meousePointerDefau__
TakeFocusOnClick True TabIndex D

Top 102 'TabStop True


Visible True Tag
Width 48 El Picture
WordWrap False Picture (Nene)
Dirh irnDndHnn 7 - FmDir—h lrpDnciHnr-nhnull

8-73. sz. ábra: Tulajdonságok névsor és kategóriák szerint

- 8.79 —
8. Szoftverfejlesztés

Tulajdonságkészlet az objektumokhoz rendelt tulajdonságokra vonatkozó ér-


vényes informácíókat mutatja. Két oszlopa van:

. Tulajdonságlista
. Beállító mező
Tulajdonságlista az objektum választható tulajdonságainak listája. Minden
objektumnak más összetételű a listája, de természetesen vannak olyan tulajdonsá-
gok, melyek mindegyik része.
Beállító mező a tulajdonságlista egy adott tulajdonságeleméhez rendelt aktuá—
lis érték. A beállító mezőben beállíthatjuk, vagy szerkeszthetjük. Ezek a tulajdon—
ságértékek három csoportba sorolhatók

. Szabadon szerkeszthetők.
. (V) Legördülő listából válaszhatók, az eredeti érték megjelölésével.
. (...) Párbeszédpanel jelenik meg, a tulajdonságtól függ, milyen típusú fájl
hozzárendelését engedi meg.

E A felvett objektumainknak a tulajdonságait a következőként állítsuk be:


Name —(eljárás neve): az objektum típusának megfelelő prefix névvel kezdöd—
jön, a címkék lbl, a parancsgombok cmd-vel. Második részük utaljon arra, hogy
mit hajt végre, mit jelenít meg. így legyenek lblMinimum, lblMaximum,... illetve
cdeeneral, cmdMaximum. A generáláshoz tartozó mező legyen lblSzám.
Caption — (objektum kijelzett elnevezése): a címke objektumoknál töröljük
le. Nincs így kezdeti értékük, csak ha számoltunk már. A nyomógomboké pedig
mutassa, hogy mit hajtunk végre vele, így Generál, Maximum, Átlag, stb.
Összefoglaló feladat

8-74. sz. ábra: Úrlapterv


Állítsuk be a nyomógombok méretét, hogy egységes nagyságúak legyenek, a
Heigth (magasság) tulajdonságát 24-re, a Width (szélesség) tulajdonságát 48-ra.
— 8.80 -
8. Szoftverfejlesztés

Ugyanígy a címkék méretezését (60 x 72). A magasság azért 60, hogy két sorban
tudjuk kiírni a szöveget és a kiszámolt tartalmat. A középre igazítást is adjuk meg.
A címke objektumok betű (Font) tulajdonságát Times New Roman, 12-re állít—

suk. A háttérszínt is módosítsuk ízlésünknek megfelelően.

Ha elkészültünk a tulajdonságok beállításával, akkor áttérhetünk a kódolásra.


Válthatunk a tervezési rendszeren belül a Code Window (kód ablakra)
Project VBAProjett

§
-----
É Munkal (Munkal)
§É
§

View Code ----- Munka2 (MunkaZ)


View Object

8
'
""" MunkaS (MunkaS)

_
ThisWorkbook
Él %? Forms
űrlap
EEC] Modules

8-75. sz. ábra: Project ablakban válthatunk

Lépjünk át a kódszerkesztésbe, és írjuk meg az egy-egy objektumhoz tartozó


utasításainkat. Kódablakba juthatunk az egyik parancsgombra duplán kattintva is.

j.
!! Összefoglaló feladat űrlappaluls —
űrlap (Code)
[(Generalt :J !(Declal ationsl

'Összefüglalo feladat
Dim t[0 To 7) As Integer *Gene rált számok tömbje ü— tül T—ig, ez 8 elem
(Dim max, min As Integer
Private Sub CmdÁtlag_Click[)
Dim i, ossz As Integer
ossz : 0
For i : D To ?
ossz : ossz * tti]
Next
LblÁtlag.Caption : "Átlag" ; Chr(13] .; Str(Application.Round[ossz / s, 21;
End Sub

Private Sub Cdeeneral_Click[]


'Új számok generálásakür mindent ürítsünk
LblSzám.Caption Empty :
LblHaximum.Caption Empty :
LblMinimum.Caption Empty :
LblKülönbség.Caption Empty :
LblÁtlag.Caption : Empty
For i : O To ?
: InttRnd * 100)
tti)
LblSzám.Caption : LblSzám.Caption s Strtttij) ; ", "
Next i
___??39. 5.333

Private Sub Cdeülönbség_Click()


(
[
hl llllll
LL__l (§.

8-76. sz. ábra: Kódablak

Figyeljük meg, hogy a kódablakban többféle színt láthatunk. A megjegyzések


(aposztróf jel utáni szöveg) zöld színűek. A fenntartott (foglalt) szavak kék szín-
-8.81-
8. Szoftverfejleszte's
nel jelennek meg. Az általunk adott változónevek, objektumok nevei, ill. az ezek—
kel kapcsolatos műveletek fekete színűek. A hibajelze'sről már szó volt, ezt a piros
szín jelzi.

Vigyázzunk arra, hogy utasításainkat hova írjuk! Ne keverjük össze a hasonló


nevű, de eltérő funkciójú vezérlőket. Minden programnak van egy (General) re'-
sze. Ez fuggetlen a mi Generál parancsgombunktól.
General A (General) részhez írjuk a tömb, a minimum és maximum változók definiálá-
sát, mert ezekre több eljárásban is hivatkozni fogunk.
Összefoglaló feladat
Dim t(0 To 7) As Integer 'Generált számok tömbje O-tól 7-z'g, az 8 elem
Dim max, min As Integer
A többi kódot a megfelelő eljárás kiválasztása után, a kezdő és befejező sor
közé írjuk. Figyelem! Használhatunk ékezetes betűket a programozás során név—

adásra, de következetesen kell a megadott nevekre hivatkozni.


Generálás Először a számokat kell generálni, csak utána végezhetünk vele műveleteket.
Private Sub Cdeeneral_Click()
'Új számok generálásakor mindent ürítsünk
LblSzám.Caption : Empty
LblMaximum.Capti0n : Empty
LblMinimum.Caption : Empty
LblKülönbség.Captí0n : Empty
LblÁtlag.Capti0n : Empty
Forí : 0 T0 7
t(i) : Int(Rnd 100)
*

LblSzám.Capti0n : LblSzám.Capti0n dí Str(t(z)) (FL ", "

Next i
End Sub
Minimum A következő lépés, hogy kiszámoljuk, mennyi a legkisebb érték. Abból indu-
lunk ki, hogy az első érték a legkisebb, majd megnézzük a többi elemet. Ha talá-
lunk egy nála kisebbet, akkor az a legkisebb. Ellenőrizzük, hogy van-e a tömbben
érték.

Private Sub CmdMinimum_Click()


'Dim min As Integer - már definiáltuk
Ift(0) : Empty Then
MsgBox ("Számokat generálj ! ")
Else


8.82 -
8. Szoftverfejleszte's
min: t(0)
For i : 0 T0 7
]ft(z) ( min Then min : t(i)
Next i

LblMinimum.Capti0n : "Minimum: "


á Chr(13) (?; Str(min)

Endlf
End Sub
Ugyanígy kell kiszámolnunk a legnagyobb értéket is. Mivel a műveletek na- Maximum
gyon hasonlítanak, használhatjuk a másolás (Copy) és beillesztés (Paste) jól be—
vált módszerét. Ne felejtsük el a neveket és a relációjeleket kijavítani!
Private Sub CmdMaximum_Click()
'Dim max As Integer már definiáltuk

If t(0) : Empty Then


MsgBox ("Számokat generálj/ '?
Else
max : t(0)
For i : 0 To 7
Ift(i) ) max Then max : tú)
Next i

LblMaximum.Caption : "Maximum" ó'c Chr(13) (?; Str(max)


End If
End Sub
A maximum és a minimum ismeretében egyszerűen kiszámolhatjuk azok kü— Különbség
lönbségét. Ellenőrizzük, hogy ezeket kiszámoltuk-e már! Ha bármelyik hiányzik,
már nincs értelme a számolásnak.
Private Sub Cdeülönbség_Click()
If(LblMaximum.Capti0n : Empt)y Or (LblMinimum.Capti0n : Empty) Then
MsgBox ("Előbb határozd meg a max ill. min értékeket! ')
Else
LblKülönbség.Caption : "Különbség" á Chr(13) (?; Str(max - min)
End If
End Sub
Utolsó műveletünk az átlag számítása. Természetesen itt is vizsgáljuk meg, Átlag
hogy a tömbünk üres—e! Az átlag lehet tört szám, ezért a kiíráskor megadjuk, hogy
2 tizedesre kerekítve (Round) akarjuk kiíratni.

— 8.83 —
8. Szoftverfejlesztés
Private Sub CmdÁtlag_Click()
Dim i, ossz As Integer
ossz :0
If t(0) : Empty Then
MsgBox ("Számokat generálj ! '?
Else
For : 0 T0
i 7

ossz : ossz % t(i)


Next
LblÁtlag.Captí0n : "Átlag" őz Chr(13) (fc Str(Applicati0n.Round(ossz / 8, 2))
End If
End Sub
Vége A programból való kilépést a szokásnak megfelelően készítjük el.
Private Sub Cdeége_Click()
End
End Sub
UserForm Ne felejtsük el, hogy programunkban véletlen számokat generáltunk. Valahol
meg kel adnunk a Randomize parancsot, hogy ne kapjuk ugyanazokat a számokat.
Erre a legjobb hely az űrlap kezdése.
Private Sub UserForm_Click()
Randomize 'Ve'letlen számok kezdéséhez
End Sub
A programunk működtetése után a következő képernyőképet adja: felül a gene-
rált számok jelennek meg, alattuk meg a gombokhoz tartozó műveletek eredmé-
nyei.
Összefoglaló feladat '
,
*
55

70, 53, 57, 28, 30, 77, 1, 76,

Minimum: Maximum Különbség Átlag


1 77 _
76 49

Generál !

Minimum ! Maximum Különbség


'

_
Vége !

8—77. sz. ábra: Eredmény képernyő


— 8.84 -
8. Szoftverfejlesztés

8.12.Szabványos programstruktúrák példái


A Szabványosított programkonstrukciók részben áttekintettük a feladatok
megoldásának módját, az algoritmusok blokkdiagram és struktrogram formáját.
Nézzük meg most ezen feladatok sematikus leírását és Visual Basic kódját.

8.1. Példa: Két adat összeadása.


A változó beolvasása
B változó beolvasása

Eredmény: A Jr B

Eredmény kiírása
A Val(szöveg) függvényre azért van szükség, hogy az InputBox utasítással beol-
vasott szöveg formátumú számok szám értékét meghatározzuk. Ha elhagyjuk, ak—

kor a beírt számok összefűzését kapjuk.


Sub SzekvenciaO
Dim a, b, eredmény As Integer
a : InputBox( szám: '9"A

b : InputBox( "B szám: '?

eredmény : Val(a) Val(b)4-

"
MsgBox ("Eredmény: (% eredmény)
End Sub

8.2. Példa: Olvassuk be az egy adott személyre vonatkozó alábbi adatokat: Név,
Születési év, Jövedelme. írassuk ki a személy adatait, ha a személy 1956-ban szü-
letett.

Név, Szülév, Jövedelem beolvasása


Ha a Szülév:l956 akkor
Név, Szülév, Jövedelem kiíratása
(elágazás vége)
Láthatjuk, hogy a beolvasás sematikus leírásunkban ugyan egy sorba esik, de a
programban minden egyes változót külön kell beolvasnunk. A kiírás már történhet
egyszerre, de az adatok elválasztása miatt szóközöket adunk a kifejezéshez.
Sub Döntés] ()
Dim név As String
Dim szülév As Integer
Dim jövedelem As Long
név: InputBox( "Személy neve: '?

szülév : InputBox("Születésí éve: '?

jövedelem : InputBox("Jövedelme: '?


- 8.85 -
8. Szoftverfejlesztés
If szülév : 1956 Then
MsgBox (név (% " "
á szülév ói " " ói
jövedelem)
End If
End Sub

8.3. Példa: Olvassuk be az egy adott személyre vonatkozó alábbi adatokat: Név,
Születési év, Neme, Jövedelme. lrassuk ki az adott személy nevét és születési
évét, ha az adott személy nő, a nevét és jövedelmét, ha férfi. Az adatok között a
feladatokban (a személyi számhoz hasonlóan) a férfiakat l—es, a nőket 2-es kód-
számmal jelöljük.
Név, Szülév, Nem, Jövedelem beolvasása
Ha Nem : 1 akkor
Név, Jövedelem kiírása
különben
Név, Szülév kiírása
(elágazás vége)
A feladatok leírásakor célszerű a szerkezet könnyebb áttekintése végett az össze—
tartozó utasításokat azonos szinten kezdeni. A tagolást tabulálással szemléltethet—
jük. Az elágazás végét nem kell külön jelölni, de most még a sematikus leírás és a
kód könnyebb összevetése miatt kiírjuk.
Sub döntés2()
Dím ne'v As String
Dim szülév As Integer
Dim neme As Byte
Dim jövedelem As Long
ne'v: InputBox( "Személy neve: '?
szülév : InputBox("Születe'sí éve: '?
neme : InputBox( "Neme: férji ] / nő 2) ")

jövedelem : InputB0x("Jövedelme: '?


If neme : ] Then
" ói ne'v dí " " (fc
MsgBox ( "Férfz jövedelem)
Else
MsgBox ("Nő " 8; név dir. " " (fc szülév)
End If
End Sub


8.86 —
8. Szoftverfejlesztés
8.4. Példa: Az AVF hallgatóinak adatait kívánjuk feldolgozni. Az alábbi adatok
ismertek: Név, Születési év, Evfolyam, Tanulmányi átlag. A hallgatók adatait év—

folyamonként szeretnénk különböző adathordozóra kiíratni.


Név, Szülév, Évf, Átlag beolvasása
Évf értékétől Híggően
ha 1, akkor kiírás: ,,1. évfolyam"
ha 2, akkor kiírás: ,,2. évfolyam"
ha 3, akkor kiírás ,,3. évfolyam"

(elágazás vége)
A feladatot egy kisség leegyszerűsítettük. Nem különböző adathordozóra, hanem
különböző szöveget írunk ki. Ha űrlapon oldanánk meg a feladatot, akkor lehető—
ségünk lenne más-más címkére kiírni a különböző évfolyamos hallgatók adatait.
Sub döntésNO
Dim név As String
Dim szülév As Integer
Dim évf As Byte
Dim átlag As Double
név : InputBox( "Személy neve: '?
szülév : InputBox( "Születési éve: ')
évf : lnputBox( "Évfolyam száma: ')
átlag : InputBox("Átlaga: '?
Select Case e'vf
Case "] "
MsgBox ( "Kil'rás: ]. évfolyam '?
Case "2"
MsgBox ( "Kiírás: 2. évfolyam '?
Case "3 "
MsgBox ( "Kiírás: 3. évfolyam")
End Select
End Sub

8.5. Példa: Hallgatóink adatait kívánjuk feldolgozni. Az alábbi adatok ismertek:


Név, Évfolyam, Tanulmányi átlag. A hallgatók adatait évfolyamonként szeretnénk
különböző adathordozóra kiíratni. Az egyéb hallgatókat (pl. PhD, vendéghallgató
stb.), akiknél az Évf) 3 kezeljük közösen.
Név, Szülév, Évf, Átlag beolvasása
Évf értékétől függően

- 8.87 -
8. Szoftverfejlesztés
ha 1, akkor kiírás: ,,1. évfolyam"
ha 2, akkor kiírás: ,,2. évfolyam"
ha 3, akkor kiírás ,,3. évfolyam"
különben kiírás ,,egyéb évfolyam"
(elágazás vége)
Az előző feladatnál csak azon hallgatóknál volt kiírás, akik az 1—2-3 évfolyamra
járnak. Ennél a feladatnál minden egyéb (pl. hibás begépelés) egy közös ágon ke-
rül kiírásra. Vegyük észre, hogy az évfolyamot definiálhatjuk számként (byte) és
szövegként (string) is.
Sub DöntéstülönbenO
Dim ne'v, évf As String
Dim szülév As Integer
Dim átlag As Double
név : InputBox( "Személy neve: '?
szülév : InputBox( "Születési éve: ")

évf : InputBox( "Évfolyam: '?


átlag : InputBox("Átlaga.' ')
Select Case évf
Case "] "
MsgBox ( "K iírás: ] évfolyam
. ")

Case "2"
MsgBox ( "Kz'írás: 2. évfolyam '?

Case "3"
MsgBox ( "Kiírás: 3. évfolyam ')
Case Else
MsgBox ( "K iírás: egyéb '?
End Select
End Sub

8.6. Példa: Adjuk meg a két természetes szám legnagyobb közös osztóját kiszá—

mító Euklideszi algoritmust.


Beolvasás a, b
Ciklus amíg b nem 0
rzamodb
a:b
bzr
ciklus vége

- 8.88 —
8. Szoüverfejlesztés
Ez egy előltesztelő ciklus. Úgyeljünk arra, hogy a programozási nyelvek a nem
egyenlő kifejezést a ()
jelekkel ábrázolják.
Sub előlvizsgálóO
Dim a, b, r As Integer
a : InputBox( szám: '9
"A

b : InputBox( "B számi '?


Do While b () 0
r:aModb
a:b
b:r
Loop
MsgBox (,,A legnagyobb osztó: ,,
ők a)
End Sub

8.7 Példa: Adjuk meg a két természetes szám legnagyobb közös osztóját kiszámí-
tó Euklideszi algoritmust, hátulvizsgáló ciklussal.
Beolvasás a, b
Ciklus
r:amodb
a:b
b:r
amíg b nem 0
Ez egy hátultesztelő ciklus. Ekkor a művelet legalább egyszer végrehajtódik. Fel—
adatunkban a nem O kifejezés miatt a feltételt most megfordítottuk: amíg nem
igaz, hogy 0.
Sub Hátulvízsgálo'O
Dim a, b, r As Integer
a : 1nputBox( szám: '9
"A

b
: InputBox( "B szám: '?
Do
r:aM0db
a:b
b:r
Loop Until b :0
"
MsgBox ("A legnagyobb osztó: (% a)
End Sub

- 8.89 -
8. Szoftverfejlesztés
8.8. Példa: Adjuk össze az első 10 pozitív természetes számot.
Összeg legyen 0
Ciklus I: l-től lO-ig l-vel
Növeld az Összeg értékét I-vel
ciklus Vége
Ez egy számláló ciklus. A Next utasítás után nem kötelező odaírni az I változót,
mert ez az alapértelmezés. Szintén nem kell a lépésköz, ha l—vel lépünk.
Sub számlálóO
Dim i, összeg As Integer
összeg :0
Fori : I T0 10
összeg : összeg 4- i

Next i

MsgBox ( "Az összeg: "


á összeg)
End Sub

8.9. Példa: Tervezzen egy menüvezérelt programot, amely egy háromszög, egy
kör, egy gömb és egy kúp jellegzetes adatait számítja ki. A felhasználóval párbe-
szédben készítse el az adatbevitelt a következő módon: a háromszög esetében a
három oldal, a kör és a gömb esetében a sugár, a kúp esetében az alap sugara és a
kúp magassága kerüljön megadásra. A feladathoz ismertek a kerület, felület, terü-
let és térfogat képletek.
Be menüválasztás (m)
m értékétől függően
ha 1
(háromszög)
Be a, b, c
kerület és terület kiszámítása, kiírása
ha 2 (kör)
Be r
kerület, terület kiszámítása, kiírása
ha 3 (gömb)
Be r
felület, térfogat kiszámítása, kiírása
ha 4 (kúp)
Be r, h
felület, térfogat kiszámítása, kiírása
különben

- 8.90 -
8. Szoüverfejlesztés
Ki ,,rossz választás)

(elágazás vége)

A feladat jelenlegi formájában csak egyszeri választást tesz lehetővé. Ha egy cik-
lusba zárnánk, akkor ismételt végrehajtást tenne lehetővé.
Sub MenüO
m : InputB0x("1. Háromszög" * Chr(13) *
Gömb" * Chr(l3) *
Kör" * Chr(13)
Kúp" Chr(13) * "Választása: 1-4")
"4. 4-
"2. 4- "3.

Select Case m
Case "[ "
'Háromszög
a : InputB0x( "a oldal: '9
b : InputBox( "b oldal: '9

c : InputBox("c oldal: ")

kerület : Val(a) * Val(b) 4—


Val(c)
s : kerület / 2
terület : Sar(s * (s - a) (s * - b) * (s * c))
MsgBox ( "Kerület: " őz kerület á ,, Terület: "
á terület)
Case "2"
'Kör
P : 3.14
r : InputBox( "Sugár: ")

kerület : 2 r *P
*

terület : r r *P
*

MsgBox ( "Kerület: " ói kerület (%


,, Terület: " ó):
terület)
Case "3"
'Gó'mb
P : 3.14
r : InputBox( "Sugár: '?
felület: 4 *r *r *P
térfogat:4 *r *r *r *P/3
MsgBox ( "Felület: " (?;
felület á "
Térfogat: " őz
térfogat)
Case "4"
'Kúp
P : 3.14
r : InputBox( "Sugár: '?
h : InputBox( "Magasság: '?

- 8.91-
8. Szoftverfejlesztés
s :Sar(r *r—Fh *h)
felület: *r *s) 4- (P *r *r)
(P
térfogat: r *r *P/3
MsgBox ( "Felület: " ők ői "
Te'lfogat: "
felület (fc térfogat)
Case Else
MsgBox ("Rossz választás. '9
End Select
End Sub

8.10. Példa: Állítsunk elő adott számú (n db.) Fibonacci számot!


n beolvasása
FIB(I) : 1

FIB(2): 1

Ciklus I: 3-töl n-ig


FIB(I) :FIB(I-l)—l—FIB(I-2)
Ciklus I: l-től n-ig
F IB(I) kiírása

Megoldásunkban tömböt használunk. A tömb deklarálásában megadott maximális


elemszámot figyelembe kell vennünk az N értékének megadásához.
Sub F ibonacciO
Dimjib(0 To 20) As Integer
n : InputBox("Elemszám, max. 20: '?

fzb(1) : ]
jib(2) : 2
For : i n 3 To

fbú) :fib(i ]) *fibű - 2)


Nexti
Fori :] To n
"
MsgBox (i (§ ". elem: áfib(i))
Next z'

End Sub

8.11. Példa: Olvassuk be egy n elemű tömb adatait úgy, hogy az első adat a tömb
elemszámát tartalmazza, az azt követő 11 adat pedig a tömbelemek értékét. Az
elemszám 0 és 20 közé essen.
Ciklus
n beolvasása

- 8.92 -
8. Szoftverfejlesztés
amíg 04n420 nem lesz
Ciklus l: l—től n-ig
Tömb(i) beolvasása
Ciklus I: l-től n—ig

Tömb(i) kiírása
Ennél a feladatnál három ciklust is használunk. Az adatbeolvasás ellenőrzésére
általában hátulvizsgáló ciklust használunk. A számláló ciklusokat adott elemszá-
mú tömbök feldolgozására alkalmazzuk.
Sub BeolvasásO
Dim tömb(O To 20) As Integer
Do
n : 1nputBox("Elemszám, max. 20: '?
Loop Until (n ) OAndn ( 20)
For i : ] To n
tömb(i) : InputBox( "Elem értéke: ")

Next i
For i : ] To n
MsgBox (i dí ". elem: " á tömb(w
Next i
End Sub

8.12. Példa: Készítsünk programot annak vizsgálatára, hogy egy egydimenziós n


elemű tömb elemei szigorúan monoton növekvő sorozatot alkotnak-e!
n beolvasása
Ciklus I: l—től n-ig
tömb(i) beolvasása
válasz legyen igaz
Ciklus I: l-től n-l-ig
Ha a tömb(H—l) (: tömb(i) akkor
válasz legyen hamis
Ha a válasz igaz, akkor
Kiírás ,,monoton növekvő"
különben
Kiírás ,,nem monoton növekvő"

Figyeljünk arra, hogy a ciklus csak az első vizsgálatra vonatkozik.


Sub MonotonO

- 8.93 —
8. Szoftverfejlesztés
Dim válasz As Boolean
Dim tömb(O To 20) As Integer
N : lnputBox("Elemszám: '?
Fori : ] To N
tömb(i) : lnputBox( "Elem értéke: ")

Next í

: True
válasz
Fori : ] To N —
]
Iftömb(i * I) (: tömb(i) Then válasz : False
Next i
If válasz Then

MsgBox ("Monoton növekvő ')


Else
MsgBox ("Nem monoton növekvő")
End If
End Sub

8.13. Példa: Készítsünk programot, amelyben meghatározzuk egy N elemű egy-


dimenziós egész számokat tartalmazó tömb elemei közül hány elem értéke páros.
n beolvasása
Ciklus I: l-től n-ig
tömb(i) beolvasása
szám legyen 0
Ciklus I: l-től n-ig
Ha tömb(i) osztliató 2-vel akkor szám növelése l-gyel
szám kiírása
A páros számok 2-vel maradék nélkül oszthatók. Ezt használja fel algoritmusunk.
Sub PárosO
Dim tömb(O To 20) As Integer
N : lnputBox("Elemszám: ")

Fori : ] To N
tömb(i) : lnputBox( "Elem értéke: '?
Next i
szám :0
Fori : ] To N
Iftömbű) Mod2 : 0 Then szám : szám 4—
]
Next i
— 8.94 —
8. Szoftverfejleszte's
MsgBox (,,Párosok száma: ,,
őz szám)
End Sub

8.14 Példa: Készítsünk programot, amelyben összegezzük az N elemű egydimen-


ziós tömb páros számú (2, 4, 6, ...) azaz A[2], A[4] , A[6], tömbelemeit.
n beolvasása
Ciklus I: l-től n-ig
tömb(i) beolvasása
SUM legyen 0
Ciklus I: 2—től n-ig 2-ve1
SUM : SUM -l- tömb(i)
SUM kiírása
Sub TömbösszegO
Dim tömb(O To 20) As Integer
N : InputBox("Elemszám: '?
Fori : I T0 N
tömb(i) : InputBox( "Elem értéke: '?
Next i
Sum :0
Forí :2 ToNStepZ
Sum :
Sum * tömb(i)
Next í

MsgBox (,,Eredmény: ,, őz Sum)


End Sub

8.15. Példa: Készítsünk programot, amelyben meghatározzuk egy N elemű egy—


dimenziós tömb minimális tömbelemének az értékét, 5 azt, hogy hány helyen (hol)
fordul elő a tömbben.
n beolvasása
Ciklus I: l-től n-ig
tömb(i) beolvasása
min: 32767
Ciklus I: l-től n-ig
Ha min ) tömb(i) akkor min:tömb(i)
min kiírása
szám legyen 0
Ciklus I: l—től n-ig
Ha tömb(i) : min akkor
- 8.95 -
8. Szoftverfejlesztés
szám növelése l—gyel
hely(szám) :I
Szám kiírása
Ciklus I: l-től szám-ig
hely(i) kiírása
Sub MinimumO
Dím tömb(0 T0 20) As Integer
Dim hely(O To 20) As Integer
n: InputBox("Elemszám: ")

For i : T0 n1

tömb(í) : InputBox( "Elem értéke: '?


Next i
Min : 32767 'Minimum meghatározása
For i : I T0 n
)fMin ) tömb(i) Then Min : tömb(z)
Next i
"
MsgBox ( "Minimum; (% Min)
Szám :0 'Minimum előfordulása

Fori : I T0 n
If Min : tömbú) Then
Szám : Szám ] 4—

hely(Szám) : i
End If
Next i
"
MsgBox ("Szám: (fc Szám)
Fori :] To Szám
" ói
MsgBox ( "Helye: hely(ü)
Next i
End Sub

8.16 .Példa: Készítsünk programot egy N elemű egydimenziós X tömb elemeinek


csökkenő érték szerinti sorba rendezésére.
n beolvasása
CiklusH: l-től n-l-ig
Ciklus K: H-Fl-től n-ig
Ha X(k) ) X(h) akkor
U: X(h)
- 8.96 —
8. Szoftverfejlesztés
X(h): X(í)
X(j): U
Ciklus l: l-től n-ig
X(í) kiírása
Sub RendezésO
Dim X(O To 20) As Integer
n: InputBox("Elemszám: '?
Fori : ] To n
X : lnputBox( "Elem értéke: ')
(1)

Next i

Forh:1T0n—1 'Rendezés
For k :h 4- ] To n
IfX(k) ) X(h) Then

u : X(k)
X(k) : X(h)
X(h) : u
Endlf
Next k
Next h
Fori : ] To n 'Kiírás
MsgBox (l' á ". elem: " (?:
X(z))
Nexti
End Sub

8.17. Példa: Készítsünk programot egy N elemű rendezett egydimenziós tömbben


(
történő keresésre. Valamennyi I J-re teljesül, hogy A[I] S A[J] A tömbben ke- .

resni kívánt érték X. A O változóban tároljuk, hogy találtunk—e keresett értéket.

n beolvasása
Ciklus I: l-től n-ig
A(i) beolvasása
X beolvasása

I: 1

J: n
0 legyen hamis
Ciklus
K: (I % J) X
2
Ha A(K) : X akkor
- 8.97 -
8. Szoftverfejlesztés
0 legyen igaz
különben
Ha A(K) ( X akkor
1
:K 4- 1

különben
J :K — 1

amíg 0 vagy 1) J lesz


X és I kiírása
Sub KeresésO
Dim A(O To 20) As Integer
Dim i, j, kAs Integer
Dim g As Boolean
n: InputB0x("Elemszám: '?
For í : ] To n
A(z) : InputBox( "Elem értéke: '?

Next 1"

X : InputBox( "Keresett érték: '7


i
: 1 'Bz'nárt's keresés

j:n
4 : False
Do 'Cíklus eleje
k : (i —l-j)X 2

IfA (k) : X Then


c]: True
Else
If A (k) ( X Then
í :k 4- ]

Loop While (g Or (i )j))


elem: " (§
MsgBox (i 8: ". X)
End Sub

- 8.98 -
8. Szoftverfejlesztés
8.18. Példa: Készítsünk programot egy M x N-es (M sorból és N oszlopból álló)
kétdimenziós tömb sorösszegeinek megállapítására.
n, m beolvasása
Ciklus I: l-től m-ig
Ciklus J: l—től n-ig
tömb(i,j) beolvasása
Ciklus I: l—től m-ig
SUM(i) ürítése
Ciklus J: l—től n—ig

SUM(i) növelése Tömb(i,j)-vel


SUM(i) kiírása
Sub Kétdimenzz'ósO
Dim SUM(O To 20) As Integer
Dim tömb(0 To 20, 0 To 20) As Integer
n: InputBox("S0r0k száma: '? 'Beolvasás
m : [nputBox( "Oszlopok száma." '?

Forí : I T0 m
For j : ] To n
tömb(í, j) : InputB0x(i áj (fc ", " (§ ", Elem értéke."?
Next j
Next i
For i
: ] T0 m 'Összegzés
SUM(I) : 0
For j : ] To n
SUM(i) : SUM(i) -l—
tömöm/)
Next j
"
MsgBox (i dí ". sor összege: (fc SUM(i))
Next i

End Sub

8.19. Példa: Készítsünk programot egy M x N-es kétdimenziós tömb oszlopma—


ximumainak (az oszlopokban levő maximális értékű tömbelem) meghatározására.
n, m beolvasása
Ciklus I: l-től m-ig
Ciklus J: l-től n—ig

tömb(i,j) beolvasása
Ciklus J: l-től n-ig
-899-
8. Szoftverfejlesztés
MAXG) ürítése
Ciklus I: l—től m—ig

Ha Tömb(i,j) ) MAXO) akkor MAXG): tömb(i,j)


MAXO) kiírása
Sub MaximumO
Dim AMX(0 To 20) As Integer
Dim tömb(0 To 20, 0 To 20) As Integer
n : InputBox( "Sorok száma." '? 'Beolvasás
m : InputBox( "Oszlopok száma: ')

Fori : T0 m 1

For j : I T0 n
tömb(i, j) : InputBox(i áj ők ", " (% ". Elem értéke:")
Next j
Next i

For j :] To n Oszlopmaximum meghatározása


MAXÚ') :0
Fori : 1 T0 m

Iftömbű, j) ) A/MXÚ) Then MAXÚ) : tömb(i, j)


Next i
MsgBox (j (§ oszlop maximuma, "
á M4X0))
Next j
End Sub

8.20. Példa: Készítsünk programot az alábbi mátrixszorzás megvalósítására:


:
C(M,L) A(M,N) * B(K,L) , ahol N:K.
m, n, 1
beolvasása
k: n
Ciklus I: l-től m-ig
Ciklus J: l-től n-ig
A(i,j) beolvasása
Ciklus I: l-től k-ig
Ciklus J: l-től k-ig
B(i,j) beolvasása
Ciklus I: l-től m-ig
Ciklus J: l-től n—ig
C(i,j) ürítése
Ciklus H: l—töl n—ig

- 8.100 -
8. Szoüverfejlesztés
C(iJ) : C(íJ) * A(Lh) *
Büki)
Ciklus I: l-től m-ig
Ciklus J: l-től l-ig
C(i,j) kiírása
Sub MátrixszorzásO
Dim A(O To 20, 0 To 20) As Integer
Dim B(0 To 20, 0 To 20) As lnteger
Dim C(O To 20, 0 To 20) As Integer
m : InputBox( "M' '? 'Beolvasás
n : InputBox( "N : K: ")

l : lnputBox( "L: '9


k :n

Fori : ] To m
For j : ] To n
A(i, j) : InputBox(í á ", "
á j őz ". A tömbelem értéke: '?
Next j
Next i

Fori : ] To k
For j : I T0 !

B(i, j) : InputBox(i (% ", " őz


j őz ". B tömbelem értéke."9
Next j
Next i
Fori : 1 T0 m 'Mátrixszorzás
For j : I T0 !
C(i, j) : 0
For h : I T0 n
C(ij) : C(i,j) * (A(l', h) *B(h,1))
Next h
Next j
Next i

Fori : ] To m 'Kiz'rás
For j : ] To !
MsgBox (i di ", " (§ j (§ ". tömbelem értéke: " ói
C(i, j))
Next j
Next !"

End Sub

—8.101-
8. Szoftverfejlesztés

8.13.Ellenőrző kérdések és feladatok

8.13.1. Feladat vezérlők használatára

Készítsük el Visual Basic szerkesztővel az alábbi képhez hasonló űrlapot,


amely ellenőrzötten két számmal a kiválasztott műveletet végzi el az nyomó- :
gomb hatására. Eredmény kiírása pedig a feltétel beállítása szerint történik. Az
eredménynek csak az egész részét írja ki, vagy/és nagy számok, tehát formájában
nagyobb betűnagysággal, vagy alapértelmezésként írja ki az eredményt.
, , . ,
'
' "**—"

Az en szamologepem 25]
' -
,. —

1. szám
! 3
i"
[

§
M"velet ,__,___V____,

(" Összeadás
]
!
1

"7
!

!
2. szám i
i

i
(: Kivonás '

..
"m'—"_
l

- Opcmk ***" _
F Szorzás
l— egész
(' Osztás
.

[J' nagy számok , i

8-78. sz. ábra: Számológép űrlap


Az űrlap beszúrása után a feliratát változtassuk meg: Az én számológépem
címre. Ezután szükségünk lesz a következő vezérlőelemek elhelyezésére:

. Felirat
. Beviteli mező
. Keret
. Jelölő négyzet

' Választókapcsoló
. Parancsgomb
A jelölő négyzetet és választó kapcsolót Keretbe (Frame) foglaljuk. Az egyes
vezérlőelemek nevét, megjelenési formáját a feladatnak megfelelően módosítsuk.
A kód elkészítéséhez használjuk mintaként az előző feladatokat.

8.132. Ellenőrző kérdések


Válassza ki az alábbi válaszok közül a helyeset!
1. Visual Basic programozási nyelvben a változónevekre vonatkozó szabályok:

-8.102-
8. Szoftverfejlesztés
A. A változónevek tartalmazhatnak betűket, számokat, pont (.) és felkiáltójel
(!) karaktereket.

B. A változóneveknek betűvel kell kezdődni;


C. A változónevekben lehet szóköz.

2. A számláló ciklusban a ciklusváltozó értékét a ciklusban


A. változtatni kell (növelni, csökkenteni),

B. feltételt kell írni rá,

C. az utasítás maga növeli, csökkenti;


3. Változó megadása történhet:
A. Const Szám As Integer : 100
B. Szám As Integer : 100
C. Dim Szám As Integer
4. Adott az alábbi sematikus feladat leírás:

Legyen az Összeg egy


Olvasd be a Szám változó értékét
Ha a Szám nagyobb, mint nulla
Ismételd
Szorozd kettővel az Összeg értékét
Csökken a Szám értéke eggyel
:
Mindaddig, míg Szám O nem lesz
Különben
lrd ki "negatív érték"
elágazás vége
lrd ki az Összeg változót.
a.) Adja meg a struktogramját!

Összeg: l , BE szam

Szam)0

N l

összeg2összeg*2
KI negatív szamzszam-l
érték

szasz
KI összeg

b.) A fenti feladattervet adja meg blokkdiagramban!

—8.lO3—
8. Szoftverfejlesztés

7:
összeg ]
BE szam

KI negatív N
érték

l
összeg :összeg*2
szamzszam- 1

KI összeg

A
c.) írja meg a Visual Basic programot rá!

Sub Hf()
Összeg :1
:
Szám InputBox ,,Kérem a számot!"
)
If Szám 0 Then
Do
:
Összeg Összeg * 2
:
Szám Szám - l
Loop Until Szám 0:
Else
MsgBox( "Negatív érték")
End If
MsgBox(,,Eredmény: ,, 8L Összeg)
End Sub
d.) Milyen feladatot old meg a leírás?
5. Mit old meg a következő feladat?
Sub FeladatO
Dim x As Integer
:
x InputBox("Adjon meg egy számot!")
Select Case x
Case l
MsgBox "A megadott szám: 1"
Case 2
MsgBox " A megadott szám: 2"

-8.lO4-
8. Szoftverfejlesztés

Case 3
" A megadott szám: 3"
MsgBox
Case Else
MsgBox " A megadott szám nem: 1, 2, vagy 3"
End Select
End Sub
6. lrja át a Case szerkezetet If szerkezetekre! Hasonlítsa össze a kétféle eljárást!

lf x : l then
MsgBox "A megadott szám: 1"
else
lf x : 2 then
MsgBox "A megadott szám: 2"
else
If x : 3 then
MsgBox "A megadott szám: 3"
else
" A megadott szám nem: 2, vagy 3"
MsgBox 1,

end if
end if
end if
8.14.Webes parancsfájlok

A vezérlőelemek a munkalapon elhelyezhető grafikus objektumok, melyek


adatok megjelenítését, bevitelét, műveletek végrehajtását teszik lehetővé. Az ob—
jektumok közé tartoznak a beviteli mezők, listapanelek, választókapcsolók, pa-
rancsgombok és más elemek. A vezérlőelemek a felhasználónak választható lehe-
tőségeket vagy gombokat ajánlanak fel, melyekre kattintva makrókat indítanak el
a feladatok automatikus végrehajtására.

A Microsoft Excel kétféle vezérlőelemmel rendelkezik. Az AktívX vezérlők—


kel, mely együtt működik a Microsoft Visual Basic for Application (VBA) makró-
ival és webes szkriptjeivel. Az Úrlapok eszköztár vezérlőelemei kompatibilisek az
Excel korábbi verzióival, és XLM makrólapokon is használhatók.
A webes parancsfájlok olyan számítógépes programok, amelyekkel a weblapok
dinamikussá tehetők. Parancsfájllal létre lehet hozni például egy látogatók számát
nyilvántartó számlálót, amely minden egyes látogató után eggyel növekszik. Pa—
rancsfájllal lehetne létrehozni egy különleges eseményig történő visszaszámlálást
is, amelyben a ,,már csak x nap van hátra" felirat lenne olvasható: az x érték min—
den nap eggyel csökkenne. A webes parancsfájlokat általában a böngészőprogram
futtatja a weblap megnyitásakor, legtöbbször a parancsfájl által létrehozott adatok
megjelenítése céljából. A webes parancsfájlok létrehozása programozói ismerete-
ket igénylő Office szolgáltatás.

-8.105-
8. Szoftverfejlesztés
A Microsoft Visual Basic Scripting Edition (VBScript) vagy JavaScript
nyelven írt programok egyaránt hozzáadhatók a Microsoft Office dokumentumai-
hoz.

Microsoft Visual Basic Scripting Edition (VBScript):


A Microsoft Visual Basic fejlesztőrendszer egyik része. A Microsoft Internet
Explorer 3.0—s és újabb verziói — több más böngészővel együtt — már képesek a
HTML—lapokba ágyazott VBScript programok olvasására).

JavaScript: Platformfiiggetlen webes parancsnyelv. A JavaScript JavaScript


kód közvetlenül a HTML-lapon található. A JavaScript Java prog—
ramok írását teszi lehetővé. A parancsfájlhorgony JavaScript nyelven írt parancs-
fájlt jelképez.
A parancsfájlok rendkívül hasznosak az egyéni webes eszközök fejlesztésekor,
hiszen teljes objektummodellt kínálnak a böngészőprogramnak és az aktuális lap
objektumainak. Ez az, amiért könnyen megirható az oldal elemeit kezelő kód
anélkül, hogy ismernénk az oldal HTML—kódját, valamint az objektumok végre—
hajtásának mike'ntjét. Olyan parancsfájl is létrehozható, amely kifejezetten objek—
tumok (például az ActiveX vezérlők) eseményeit kezeli.
A HTML-kódot (a weblap egyéb parancsfájlkódjaival együtt) a Microsoft
Script Editor programmal tekinthetjük meg és szerkeszthetjük. A Script Editor
segítségével szöveget adhatunk a weblaphoz, HTML-kódokat szerkeszthetünk, és
bármilyen parancsleíró nyelven programozhatunk. A weblapokat megtekinthetjük
úgy is, ahogy azok böngészőben megjelennének, és ebben a nézetben szerkeszt—
hetjük is őket. A parancsfájlok létrehozásával kapcsolatban a Microsoft Script
Editor súgója tartalmaz részletes információt.
A Microsoft Script Editor ugyanúgy az Eszközök / Makró menüjéből indítha-
tó, mint a Visual Basic szerkesztő.

, Makrók. .. Alta-FB

. Új makró

Biztgnság.
rögzüése. ..

. .

a
[% :
!ísual Basic szerkesztő

Micrpsoft'gcri'pt Editor ,
Albi-Flt

Alttíhifltm

8-79. sz. ábra: Microsoft Script Editor indítása


A képernyőn — ha telepítettük a programrészt — a következő nyitóképemyő je-
lenik meg. A képernyő felépítése sokban hasonlít a Visual Basic fejlesztőkörnye-
zetére. Ugyanúgy látható Project Explorer, megtalálható a Toolbox a vezérlőele-
mek elhelyezésére, és van kódablakunk.

-8.106-
8. Szoftverfejlesztés
Munk—dual] —
Mluumlt Sumi ldllol —
Munka!

lmammaaem 2] hanem) *I; *§


e
_vJ
;
,:
x
, , .
,

(nem! mulna:o-"utn:schem-microsott-com:office:office"
*
*

xmlns:x-"uzn:schem-mxcrosutt—com:ottweuxcel"
xmln:-"hbtpz//wvv.v3.ozg/TR/REC—htm140")
(head)
(meta hccp—eguw-Contenc—Type connenc-"uxclhnml: chusec-uindowa-lzsu")
(maca name-Prowld concent-Exceláheec)
(menu name-theracor content-"Hictoantt Excel ID")
(% ld-Haín—Fue rel-Hatn—Fil:
(WE ::L-File-Lxs: hrez-tilelxst.xmb
hiret-"..IHunka-fuzeclmtm")
rel-Edin-Time-Ducn hrer-edicduamsa)
(AZ-!!)?

(%
(aus)
(elzsnylesheec hretnatylesheecxss)
[] Tau: ( '-—£abl':
E ""le FN
D %,.pr
__
?
epen):
(Inso—ama layed—der:nnal—separator :
mao—dxspiayed—chcusand—separator;
"X
"
,
"::
":

mlm-o- ?

:mazgln: sem .79m .981n .7s-m;


Ember: ;
Inso—head!" Murano: n:
!
mo—tootEE-marwln. Sun) .

l
..-,
(lscyle)
(fu:
(n--
'supporn'l'ahünrlp))(script language-"JavaScript")
;

1
function tnUpdaceTnbs ()

'
(

;! (parent.v1ndnu.g iIEVEK)'4) (
: hasat MNE maps:
it (patent. .document:.:eadyscaze--"complete ,. "."—MGM"
ax

parencJumeat'nTabs']
VBScrlot
EG .documenc.zeadyScate--"complece")
,a
!
_

pezeannSecAcclveSl-neet (0) : .a.


:

else n'"— !

windowsecnmeou: ("!nupdue'raba () ; ", 150) :


1

Lim—m
'

i
)
l

alv' , ,. " - -
!

Bow !Em—
, '
" ' ' '
'

Hx'lnl, (oli

8-80. sz. ábra: Script Editor képernyője

-8.107-
Irodalomjegyzék

INFORMATIKA
7. Szoftverfejlesztés — Visual Basic
írták: Lévayné Lakner Mária
Molnár István
Orbán Anna
2003

Microsoft Excel Súgó


Microsoftú§ Excel 2003

CopyrightCÉ Microsoft Corporation 1985-2003

Microsoft Visual Basic 6.3 Súgó

Farkas Csaba — Szabó Marcell: A programozás alapjai Visual Basicben


J.O.S. 2004
TARTALOMJEGYZÉK

8. SZOFTVERFEJLESZTÉS 8.1

8.1. ELÖSZÓ ....................................................................................................................... 8.3


8.2, ALAPFOGALMAK ......................................................................................................... 8.5

8.3. A SZOFTVERKÉSZíTÉS ALAPJAI .................................................................................... 8.6


8.4. A SZOFTVER FÁZISMODELL .......................................................................................... 8.7
8.4.1. A problémaelemzés ................................................................................................ 8.8
8.4.2. A tervezés ............................................................................................................... 8.9
8. 4. 3 . Megvalósítás .......................................................................................................... 8 9 .

8. 4.4 . Rendszerteszt ésjimkcióvizsgálat ........................................................................ 8 l0


.

8. 4.5. üzembe helyezés és átvétel .................................................................................. 8. l 1


8.4. 6. üzemeltetés, karbantartás, módosítás ................................................................. 8.1]
8.4. 7. A szoftverek elhasználódása, elavulása ............................................................... 8. ll
8. 4. 8. Szoftverköltségek 8. l 2
..................................................................................................
8.5. A PROGRAMOZÁSI NYELVEK ...................................................................................... 8.13

8.6. A PROGRAMFEJLESZTÉS ELVEI, MÓDSZEREI És ESZKÖZEI .......................................... 8.15


8.7. STRUKTÚRÁLT PROGRAMOZÁS
.................................................................................. 8.17
8. 7. l . Szabványositott programkonstrukciók ................................................................. 8. l 8

8. 7.2. Egy egyszerű feladat ............................................................................................ 8.27


8.8. VÁLOGATOTT ALGORITMUSOK .................................................................................. 835
8.9. EXCEL PROGRAMOZÁSA, MAKRÓK, VISUAL BASIC ................................................... 8.45
8. 9. l . Makró létrehozásának lehetőségei ....................................................................... 8.46
8. 9.2. Visual Basic fejlesztő rendszer alapjai ................................................................ 8. 48

8. 9. 3. Kódírási szabályok ............................................................................................... 8. 53

8.10. PROGRAMSTRUKTÚRÁK
............................................................................................. 8.66
8. 10. l . Szekvencia ....................................................................................................... 8. 66

8.102. Feltételes végrehajtás, az IF struktúra ............................................................ 8.6 7


8.10.3. Esetsze'tválasztás, a Select Case struktúra ...................................................... 8. 68
8. 10. 4. Ciklusok ........................................................................................................... 8. 70

8.1 1. VEZÉRLÖELEMEK
...................................................................................................... 8.73
8. ll l
. . Címke e's szövegmező ...................................................................................... 8. 74

8.1 1.2. Jelölőnégyzet és választókapcsoló .................................................................. 8. 75

8. ll .3 . Visual Basic makró szerkesztése egy feladaton keresztül: .............................. 8. 77

8.12. SZABVÁNYOS PROGRAMSTRUKTÚRÁK PÉLDÁI


.......................................................... 8.85
8.13. ELLENÖRZÖ KÉRDÉSEK És FELADATOK
................................................................... 8.102
8.13. 1. Feladat vezérlők használatára ...................................................................... 8. 102

8. 13. 2. Ellenőrző kérdések ........................................................................................ 8. l 02


8.14. WEBES PARANCSFÁJLOK ......................................................................................... 8.105
Példaj egyzék
Visual Ba-
Ssz. Feladat szovege
.. .
Algoritmus sic kód
1 _
Két adat összeadása. 17.0. 83 _0_

2_ Olvassuk be az egy adott személyre vonatkozó alábbi


adatokat: Név, Születési év, Jövedelme. Irassuk ki a sze— 18.0. 83.0.
mély adatait, ha a személy 1956-ban született.
3_ Olvassuk be az egy adott személyre vonatkozó alábbi
adatokat: Név, Születési év, Neme, Jövedelme. Irassuk ki
, , 19.0. 84.0.
az adott szemely nevet es szuletesr evet, ha az adott sze-
, .. , , . ,

mély nő, a nevét és jövedelmét, ha férfi.


4_ A hallgatók adatait évfolyamonként szeretnénk különböző
,
adathordozora .,
kuratni.
. 20.0. 85.0.
5_ A hallgatók adatait évfolyamonként szeretnénk különböző
adathordozóra kiíratni. Az egyéb hallgatókat, akiknél az 21.0_ 85.0.
Evf ) 3 kezeljük közösen.

6, Adjuk meg a két természetes szám legnagyobb közös osz—


22.0. 86.0.
tOJat kiszamito EuklidéSZi algoritmust.
.
, , , . . .

7_ Adjuk meg a két természetes szám legnagyobb közös osz-


tóját kiszámító Euklideszi algoritmust, hátulvizsgáló cik— 23.0. 87.0.
lussal.
8_ Adjuk össze az első 10 pozitív természetes számot. 24,0_ 880
9_ Tervezzen egy menüvezérelt programot, amely egy há-
romszög, egy kör, egy gömb és egy kúp jellegzetes adatait 33.0. 88.0.
számítja ki.
]0_ Állítsunk elő adott számú (n db.) Fibonacci számot! 350, 90.0.
1 1_ Olvassuk be egy n elemű tömb adatait úgy, hogy az első
adat a tömb elemszáinát tartalmazza, az azt követő n adat 36.0. 90.0.
pedig a tömbelemek értékét.
12_ Készítsünk programot annak vizsgálatára, hogy egy egy-
dimenziós n elemű tömb elemei szigorúan monoton nö- 37.0. 91.0.
vekvő sorozatot alkotnak-e!
13. Készítsünk programot, amelyben meghatározzuk egy N
elemű, egydimenziós egész számokat tartalmazó tömb 37.0, 92.0.
elemei közül hány elem értéke páros.
14_ Készítsünk programot, amelyben összegezzük az N elemű
., tomb , , 38.0. 93.0.
paros szamu tombelemeit.
.
.. , .. .
egydimenzms
15 _
Készítsünk programot, amelyben meghatározzuk egy N
elemű egydimenziós tömb minimális tömbelemének az
39 "O' 93 ' O '
értékét, 5 azt, hogy hány helyen (hol) fordul elő a tömb-
ben.
16_ Keszrtsunk programot egy N elemu egydrmenzros X tomb
elemeinek csökkenő érték szerinti sorba rendezésére
40-0. 940.
17_ Készítsünk programot egy N elemű rendezett egydimen—
ziós tömbben történő keresésre. A tömbben keresni kívánt 40.0. 95.0.
érték X,
18_ Készítsünk programot egy M x N—es kétdimenziós tömb
. , , , , 41.0. 97.0.
sorösszegeinek megallapitasara.
.

19_ Készítsünk programot egy M x N-es kétdimenziós tömb


42.0' 97.0-
oszlopmaximumainak meghatározására.
20_ Készítsünk programot az alábbi mátrixszorzás megvalósí—
:
tására: C(M,L) A(M,N) * B(K,L) , ahol NzK. 43.0. 98.0.

You might also like