Programozás és makrók Dr. Kallós Gábor
2008-2009.
Széchenyi István Egyetem
Programozás
Bevezetés • •
Eml.: hagyma-modell, programnyelvek, rendszerközeli szoftverek Problémamegoldás a számítógép segítségével – Adott egy probléma… – Mit tud a gép? • Milyen nyelven programozható
– A feladat mely részeit célszerű számítógéppel megoldani • Célszerű-e esetleg átfogalmazni a problémát, hogy általánosabb megoldást kapjunk, ami később más esetekre is jó lesz
– Általában: elemzés és értelmezés (megoldás gép nélkül), adatszerkezet, algoritmuskészítés, kódolás, tesztelés, javítás/karbantartás (ld. még később is)
•
Program – utasítások sorozata, amelyet a gép végrehajt, és ezzel (jó esetben) a kiindulási adatokból előállítja a keresett megoldást – Algoritmus – a feladat megoldásának elméleti leírása, géptől független módon (algoritmus-leíró nyelv ill. szabvány, szöveges vagy rajzos formában) – Adatszerkezet – milyen adatokból kell kiindulni, milyen közbülső adatok, részeredmények kiszámítása szükséges 2
Programozás – adattípusok
Széchenyi István Egyetem
Adatok, adattípusok •
Konstans –
•
Fix módon beírt adat
Változó, jellemzői: – – –
Név (azonosító) Típus – hogyan tárolja a gép az adatot a memóriában, milyen műveletek végezhetők vele Memóriaterület (itt található a változó értéke)
Az adattípusok csoportosítása (leggyakrabban, kicsit leegyszerűsítve…) • Egyszerű –
•
Egész, valós, logikai, karakter (jel), sztring
Összetett –
Tömb (sztring)
–
Halmaz (általában csak egész ill. jel típusból)
•
•
– – – – –
•
Sorba vagy táblázatba rendezett azonos típusú, egyszerű adatok tárolására (az elrendezés jellegét a dimenzió adja meg), az adatok indexelhetők, hivatkozás: [index]
Műveletek Numerikus adatokra: +, -, *, /, ^ és még mod és div Sztringekre és jelekre: összefűzés Logikai adatokra: mint korábban Halmazokra: unió, metszet, különbség, eleme-e? Továbbá még: relációk (hasonlítások), függvények (pl. RANDOM, SQRT, INT, LEFT, RIGHT, LENGTH stb.)
Kifejezések, kiértékelés: precedencia és balról-jobbra szabály 3
1
Széchenyi István Egyetem
Programozás
Az algoritmus elemei •
Alaptevékenységek
•
Vezérlőtevékenységek
– Beolvasás, kiírás, értékadás (automatikus konverzióval) – Szekvencia – az eredeti (összetett) tevékenység egyszerűbb (akár: elemi) tevékenységek sorozatára bontható fel – Szelekció (elágazás) – egy logikai kifejezés értékétől függően kettő vagy néhány ág közül kiválasztjuk az aktuálisan végrehajtandót – Iteráció (ciklus) – a feladat megoldása egy tevékenység ismétlődő végrehajtását jelenti
•
Leírás (pszeudokód, egyszerű lehetőség) – be: i; ki: j – ha log. kif. akkor tev.1. különben tev.2. elágazás vége – ciklus amíg log. kif. ciklusmag ciklus vége • Előltesztelős ciklus, bennmaradási feltétel, spec. eset: számlálós ciklus
– ciklus i=1-től n-ig ciklusmag ciklus vége – ciklus ciklusmag amíg nem log. kif. ciklus vége • Hátultesztelős ciklus, kilépési feltétel
•
Minden struktúrának van eleje és vége! 4
Széchenyi István Egyetem
Programozás – példa algoritmusok
1. példa: a legnagyobb elem meghatározása • • •
Feladat: határozzuk meg, hogy a bekért pozitív számok közül (n db) melyik a legnagyobb! Ötlet: A 0 lesz kezdetben a legnagyobb (!). Ezután vesszük sorra a számokat, és aktuálisat hasonlítjuk az eddigi legnagyobbal. Ha találunk nagyobbat, akkor az lesz az új legnagyobb. Adatszerkezet Funkció
•
Azonosító
Típus
Jelleg
Elemek száma
N
Egész
Input
Aktuális elem
A
Valós
Input
(Aktuális) maximum
MAX
Valós
Munka, output
Ciklusváltozó, sorszám
I
Egész
Munka
Algoritmus
5
Széchenyi István Egyetem
Példa algoritmusok
2. példa: elemek összege és átlaga • •
•
Feladat: határozzuk meg bekért számok közül (n db) a pozitívak összegét és átlagát! Ötlet: kezdetben az összeg 0, és az aktuális részösszeghez mindig hozzáadjuk az éppen bekért elemet, ha az pozitív. A végén kiírjuk az összeget és az átlagot, ha volt pozitív elem. Ha nem volt pozitív elem a sorozatban, akkor nincs átlag. Adatszerkezet Funkció
Azonosító
Típus
Jelleg
Elemek száma
N
Egész
Input
Aktuális elem
A
Valós
Input
Pozitív elemek száma
DARAB
Egész
Munka
Pozitív elemek összege
OSSZEG
Valós
Munka, output
Pozitív elemek átlaga
ATLAG
Valós
Output
Ciklusváltozó, sorszám
I
Egész
Munka
6
2
Széchenyi István Egyetem
Példa algoritmusok
2. példa: elemek összege és átlaga •
Algoritmus
7
Széchenyi István Egyetem
Példa algoritmusok
3. példa: faktoriális számítása • • •
Feladat: határozzuk meg, egy bekért nemnegatív egész szám (n) faktoriálisát! Negatív n számot a bekérésnél ne fogadjunk el! Ötlet: tudjuk, hogy n! = 1*2*3*…(n-1)*n. A szorzat értéke kezdetben 1. Ezután vesszük sorra a számokat, és aktuálisat összeszorozzuk a részszorzattal. A szükséges „jó” n számot egy hátultesztelős ciklussal garantáljuk. Adatszerkezet Funkció
•
Azonosító
Típus
Jelleg
Elemek száma
N
Egész
Input
(Aktuális) szorzat
SZORZAT
Egész
Munka, output
Ciklusváltozó, sorszám
I
Egész
Munka
Algoritmus
8
Széchenyi István Egyetem
Példa algoritmusok
4. példa: lottószámok generálása • • •
Feladat: generáljunk lottószámokat! (Megj: már kihúzott számot nem lehet kihúzni újra.) Ötlet: véletlen számokat állítunk elő, ezekből képezzük a lottószámokat. Ha egy szám már szerepelt az eddig előállítottak között, akkor helyette újat generálunk mindaddig, amíg jó számot nem kapunk. Adatszerkezet Funkció
Azonosító
Típus
Jelleg
Lottószámok
A
Tömb (egész)
Munka, output
Éppen előállított szám
SEGED
Egész
Munka
Jó-e az éppen előállított szám
JO
Logikai
Munka
Ciklusváltozó, sorszám
I
Egész
Munka
Ciklusváltozó (ellenőrzéshez)
J
Egész
Munka
9
3
Széchenyi István Egyetem
Példa algoritmusok
4. példa: lottószámok generálása •
Algoritmus
10
Széchenyi István Egyetem
Példa algoritmusok
5. példa: kiválasztásos rendezés •
• • •
Feladat: rendezzünk egy tetszőleges adatokat tartalmazó n elemű tömböt! (A tömb elemeit most nem kell bekérnünk, és a rendezett tömböt nem kell kiíratnunk. Feltehetjük, hogy ezeket a tevékenységeket a program itt nem bemutatott része tartalmazza.) Megj: sokféle rendező eljárás ismeretes. A jó hatásfokú módszerek általában logikailag bonyolultabbak, és nehezebben érthetőek. Itt egy olyan megoldást mutatunk be, amely könnyen érthető, és a hatékonysága is elfogadható. Ötlet: megkeressük a sorozat legkisebb elemét, majd felcseréljük az első elemmel. A következő lépésben a második elemtől indulva újra megkeressük a mostani legkisebb elemet, és ezt felcseréljük a második elemmel, … Adatszerkezet Funkció Elemek száma
Azonosító N
Típus Egész
Jelleg Input
Sorozat elemei
A
Tömb (tetszőleges) Input, output
Aktuális minimum
MIN
Mint A elemei
Munka
Az aktuális minimum sorszám
INDEX
Egész
Munka
Ciklusváltozó, rögzített sorszám
I
Egész
Munka
Ciklusváltozó (kiválasztáshoz)
J
Egész
Munka 11
Példa algoritmusok
Széchenyi István Egyetem
5. példa: kiválasztásos rendezés •
Algoritmus
12
4
Széchenyi István Egyetem
Programozás
13
Széchenyi István Egyetem
Programozás
14
Széchenyi István Egyetem
Programozás
Más algoritmus-leíró eszközök •
Jackson-féle ábra
Rendezés kiválasztással
– Szekvencia – egymás mellé írással – Szelekció – karika, és utána egymás melletti feltételek – Iteráció – csillag, és alatta az ismétlődő tevékenység(sorozat)
•
I:=1, N–1 * Az I-edik a helyére
Folyamatábra – Már elavult
Igaz Ki: F END
Kiválasztás
START
Be: N
Előkészítés
F:=1; I:=1
MIN:=A[I] INDEX:=I
I>=N Hamis
I:=I+1 F:=F*I
Besorolás
Minimum
A[INDEX]:=A[I] A[I]:=MIN
J:=I+1, N * Hasonlítás A[J] < MIN
º
MIN:=A[J] INDEX:=J
15
5
Programozási nyelvek
Széchenyi István Egyetem
Programozási nyelvek •
A programozási nyelv olyan mesterséges nyelv, amelyet a számítógéppel történő kommunikáció megkönnyítésére terveztek – A programozási nyelvek (megfelelő apparátus + szintaktikai és szemantikai szabályok) alkalmasak az algoritmusok gép számára érthető kódolására, megvalósítására
•
Osztályozásuk (generációk) – Első generáció – gépi kód – Második generáció – assembly nyelvek, majd később finomodtak, „ősi” magasabb szintű nyelvek, emberközeli nyelvi elemek, cél a géptől való függetlenedés is • K. Zuse már 1943-45-ben tervezett egy magasabb szintű nyelvet, de ez akkor nem terjedt el (Plankalkül) • Az első sikeres megvalósítások: FORTRAN, LISP, COBOL, később az ALGOL • Rövidítések: FORmula TRANslation, ALGOrithmic Language, LISt Processing • Lényegében az összes mai nyelv ezen nyelvek valamilyen „leszármazottja”
– Harmadik generáció – kifinomult magasszintű nyelvek • Új, fontos filozófiák: strukturált programozás, objektum-orientált programozás • A legtöbb ma használatos programnyelv ide sorolható, pl. Pascal, C, C++, C#, Delphi, Java 16
Programozási nyelvek •
Széchenyi István Egyetem
Nyelvek osztályozása (folyt.) – Negyedik generáció • Új fejlesztések, fejlett kereskedelmi igények hatására • Fejlett szoftver engineering technológiák alkalmazása, pl. komponensek beépítése, újrafelhasználhatóság ill. speciális alkalmazások • Példák: SQL nyelvek, SPSS, MATLAB, Mathematica
– Ötödik generáció (még kifejletlen) • Constraint (megszorítás) alapú programozás
17
Széchenyi István Egyetem
Programozás
Programfejlesztés • •
A forrásnyelven írt program értelmezése, végrehajtása összetett tevékenység(sorozat) Fordítóprogram (Compiler) – Értelmezi a forrásnyelven írt program utasításait, jelzi a szintaktikai hibákat – A formailag hibátlan programokból elkészíti a gépi kódú utasításokat – Ezzel a forrásprogramból ún. tárgyprogram keletkezik
•
Interpreter – Nem készít gépi kódú programot, hanem utasításonként értelmezi és hajtja végre a magasszintű nyelven leírt programot – Ilyenkor a tesztelés egyszerűbb, de komoly hátrány, hogy nem keletkezik futtatható program
•
Szerkesztőprogram (Linker) – A lefordított tárgyprogram általában még nem futtatható, pl. azért, mert több részből állhat – Végül a szerkesztőprogram teszi futtathatóvá a programot
• •
Általános munkafolyamatok: programírás, fordítás, szerkesztés A fejlesztői környezet is nagy változáson ment keresztül – A modern, 3. generációs nyelvek kezdetben karakteres felületet használtak – Most már az igényes grafikus környezet az általános 18
6
Széchenyi István Egyetem
Ipari programfejlesztés
Szoftvertechnológia •
Ipari méretű programfejlesztés (több ezer programsor és felette) esetén más módszereket kell alkalmazni, mint „házi” programkészítésnél
•
Az itt alkalmazandó módszerekkel a szoftvertechnológia (Software Engineering) tudományág foglalkozik
– Nem elég a korábbi elemzés-tervezés-algoritmuskészítés-programozás-tesztelés ciklus – A SE a teljes szoftverfejlesztési folyamatot magában foglalja, és érint kapcsolódó gazdasági területeket is, pl. projekt menedzsment – Ez igen fontos terület, hiszen a profi szoftverkészítés nagyon nagy üzlet (a turizmus után a 2., megelőzi pl. az olaj- és autóipart is!)
•
A SE nagyon fontos problémája a szoftvertermékek minősége, megbízhatósága – Ilyen téren még bőven van tennivaló, 2005-ben egy tipikus hibaráta: 5-10 ezer soronként 1 hiba (hasonló hibaráta: napi 2 repülőgép katasztrófa, napi kb. 2000 elveszett postai levél – USA)
•
A szoftverfejlesztési folyamatban a menedzsment feladata a folyamat állandó felügyelete, értékelése (benne: adatgyűjtés), javítása
•
Más mérnöki produktumokkal ellentétben a szoftver eléggé megfoghatatlan „valami”, ezért nem könnyű a folyamat megfelelő kezelése!
– + kapcsolódóan: a hatékonyság növelése, a költségek csökkentése, a dolgozók jó közérzetének a biztosítása
19
Széchenyi István Egyetem
Ipari programfejlesztés •
A szoftverfejlesztés klasszikus fázisait mutatja be (visszacsatolásokkal) az ún. vízesés-modell (szemléletes: a víz „visszafolyatása” drága) – Ez eléggé idealista megközelítés, a gyakorlatban inkább kevert, evolúciósiterációs fejlesztéseket szoktak alkalmazni
•
Honnan tudjuk, hogy véget ért egy fázis? (A program még nincs kész) – Elkészült az adott szinthez tartozó dokumentáció (ezekre van „kotta”)
Követelmények Specifikáció Tervezés Implementáció Validáció Fenntartás 20
Ipari programfejlesztés •
Széchenyi István Egyetem
A SE nagyon fontos kérdése az emberekkel való bánásmód – A hibák nagyobb részben egyszerű emberi mulasztásokból, félreértésekből erednek – Tipikus pl. a követelmények rossz felmérése ill. a hibás specifikáció (akár egy egyszerű fogalom másként értelmezése miatt)
•
Csapatszervezés
•
Projekt terv
– Milyen a jó fejlesztőcsoport, hány tagja van (kb.) – Nemcsak az elején van aktivitás, hanem a folyamat közben is – A projekt menedzser szerepe meghatározó
•
Menedzsment – Tervezés, ütemezés (függőségek csökkentése, vészforgatókönyvek), kockázatok becslése és figyelése – Minél később derül ki egy hiba, annál drágább a javítása
•
Specifikáció (tdk: „szoftver tervrajz”)
•
Verifikáció és validáció
– Megfelelő formális eszközök állnak rendelkezésre a pontos leíráshoz – Helyes-e a szoftver, ill. azt csinálja-e, amit elvártunk – Fontos terület, az ellenőrzés már a folyamat korábbi fázisaiban is jelen van – Átvételi teszt: a megrendelő jelenlétében végzendő
•
Fenntartás – A dolgozók betanítása, az esetlegesen felmerülő hibák javítása 21
7
Széchenyi István Egyetem
A VB környezet
Visual Basic – általános bemutatás • •
A Visual Basic (VB) a Microsoft cég által kifejlesztett programozási nyelv ill. fejlesztői környezet Az első verziója, a Visual Basic 1.0 1991-ben jelent meg Windows 3.0 platformra – –
•
A Visual Basic a korábban nagyon népszerű BASIC nyelven alapul, de modernebb, eseményvezérelt és korlátozott mértékben objektumorientált – – – – –
•
A nyelv gyorsan nagy népszerűségre tett szert, a fejlesztőknek kényelmes és hatékony eszközt adott a Windows alkalmazások vizuális tervezéséhez Könnyen tanulható volta miatt sokaknak a Visual Basic volt az első lépcső a programozás tanulásában
A Microsoft elsősorban a gyors fejlesztésre helyezte a hangsúlyt a tervezéskor (részben még a hatékonyság rovására is) A VB nagy vetélytársa a C++ Általánosan a C++ gyorsabb, és rugalmasabb struktúrákat biztosít, de konkrétan a Windows felület alatt a grafikus alkalmazások (GUI) fejlesztésére (sokkal) jobb a VB A C++-hoz (sőt a Pascalhoz) képest a VB nem támogatja a mutatókat, és nem kötelező benne a változók deklarálása, valamint nem kezeli nagyon szigorúan a típusokat Nem igazi OO nyelv, hiányzik a polimorfizmus és az öröklődés
A hagyományos VB mellett 2002-ben megjelent a .NET-es változat is – –
A VB.NET a VB-nek egy teljesen újratervezett változata, az utolsó klasszikus VB verzió (VB 6.0) és a .NET verziók között is már nagyon nehéz konvertálni a programokat A Visual Basic .NET már teljesen objektumorientált .NET alapú nyelv, gyakorlatilag egyenértékű a .NET nyelvek közül vezető szerepben lévő C#-pal (szi-sarp)
22
Széchenyi István Egyetem
A VB környezet
A Visual Basic nyelv •
BASIC-szerű nyelv, „modernizálva”
•
Típusos deklaráció, de nem szigorú
•
Fontosabb adattípusok
•
Szubrutinok
•
Szelekció
•
Iterációk
– Elsősorban Word és Excel környezetben nézzük – Az Option Explicit utasítással állítható be a szigorú deklaráció – Byte, Integer, Long, Boolean, String, Variant, … – (Részletesebben ld. Data Type Summary a Súgóban) – Ez az alapegység, Sub … End Sub kulcsszavak között – If log.kif. Then ut1. Else ut2. End If – Léptetős: For i=1 To n ciklusmag Next – Előltesztelős: Do While log.kif. ciklusmag Loop – Hátultesztelős: Do log.kif. ciklusmag Loop While log.kif. // bennmaradási felt. – A hátultesztelős ciklust az Until kulcsszóval is meg lehet adni 23
A VB környezet
Széchenyi István Egyetem
A VB környezet a Wordben (Excelben) •
Makrók engedélyezése
•
Visual Basic Editor
•
A képernyő elemei
– Eszközök/Makró/Biztonság – közepes szint – Váltás oda: Alt + F11 vagy …/Visual Basic Editor – Project ablak • Dokumentumok, ahova makrókat készíthetünk/menthetünk
– Properties ablak • Az objektumok tulajdonságai állíthatók itt be
– Szövegszerkesztő ablak • Ide készíthetjük el a kódot, a szubrutinok futtathatók • Egyes szintaktikai hibákat jelez a fordító a beírás után
– Immediate (futtatási) ablak • Egyes futási eredmények megtekintésére
– Watch ablak • Nyomkövetésre, hibakeresésre, mi nem nagyon fogjuk használni
– Kis eszköztár, fontosabb lehetőségek: • Makró futtatása, szüneteltetése, leállítása, váltás (mindezt persze menüből is lehet, és gyorsbillentyűk is vannak, pl. F5 – futtatás)
•
Minden kulcsszóról infót kaphatunk az F1 lenyomására a Súgóban – Ugyanitt tematikusan is kereshetünk 24
8
Széchenyi István Egyetem
A VB környezet
25
Széchenyi István Egyetem
A VB környezet •
• •
A Word objektummodellje A súgóból behívható Lényegében mindent meg csinálni programból, amit egyébként a Word tud
26
Széchenyi István Egyetem
A VB környezet
Formok használata •
Insert/UserForm
•
Properties ablak: leírás az elemről
•
Az elemhez tartozó kód dupla kattintásra előjön
• • •
Bal felső lista: választható elemek Jobb felső lista: választható események Váltás a szerkesztőmód és az objektum között: View/Code ill. Object (F7)
– Beszúrhatók az elemek a panelre (parancsgomb – akciókat lehet kezdeményezni, rádiógomb, listadoboz, léptető lista, …) – Egyes tulajdonságok módosíthatók – Ez alapból csak váz, a háttérben lévő eljárást persze meg kell írni
27
9
Széchenyi István Egyetem
A VB környezet Formok használata (folyt.) • 1. feladat: az első parancsgombra (CommandButton) kattintva írjuk ki az első bekezdés szövegét! • 2. feladat: a 2. parancsgombra kattintva jelöljük ki a második szót!
28
Széchenyi István Egyetem
A VB környezet Formok használata (folyt.) • 3. feladat: rakjunk fel a formra 3 db rádiógombot, bekezdés, szó és karakter felirattal. Írjunk meg úgy egy nyomógomb mögötti eseménykezelőt, hogy a bejelölt egységeket számolja meg a szövegben! • Ötlet: két szubrutint írunk, a második hívja az elsőt, amelyik a rádiógombokat kezeli
29
Széchenyi István Egyetem
A VB környezet
Egy összetett feladat • (Ha nem tudjuk a makró kódját, akkor rögzíthetjük, és utána belenézhetünk, és kapunk ötleteket) • Feladat: feladat-adatbázis alapján készítsünk véletlen zh feladatsort! (Minden feladat új bekezdésben van, és nincs üres bekezdés a dokumentumban.) • Részfeladatok: – – – –
Számoljuk meg a bekezdéseket (Generáljunk véletlen egész számot) (Írjuk ki az annyiadik bekezdést) Alakítsuk át az eddigi részeket úgy, hogy több feladatot is választhassunk (de amit már egyszer kiválasztottunk, azt újra nem lehet) – Új üres dokumentumba rakjuk át a kiválasztott kérdéseket – (Táblázatba szúrjuk be az átvitt kérdéseket)
30
10
A VB környezet
Széchenyi István Egyetem
31
A VB környezet •
Széchenyi István Egyetem
A dokumentumok:
32
A VB környezet •
•
Széchenyi István Egyetem
Az Excel objektummodellje A súgóból behívható
33
11