és makrók Dr. Kallós Gábor 2008-2009. Bevezetés Eml.: hagyma-modell, programnyelvek, rendszerközeli szoftverek Problémamegoldás a számítógép segítségével dott egy probléma Mit tud a gép? Milyen nyelven programozható 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 lgoritmus 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) datszerkezet milyen adatokból kell kiindulni, milyen közbülső adatok, részeredmények kiszámítása szükséges 2 adattípusok datok, adattípusok Konstans Fix módon beírt adat Változó, jellemzői: év (azonosító) 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) z adattípusok csoportosítása (leggyakrabban, kicsit leegyszerűsítve ) Egyszerű, valós, logikai, karakter (jel), sztring Összetett Tömb (sztring) 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] Halmaz (általában csak egész ill. jel típusból) Műveletek umerikus 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. RDOM, SQRT, T, LEFT, RGHT, LEGTH stb.) Kifejezések, kiértékelés: precedencia és balról-jobbra szabály 3 z algoritmus elemei laptevékenységek Beolvasás, kiírás, értékadás (automatikus konverzióval) Vezérlőtevékenységek 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 terá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 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: 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. ktuális elem (ktuális) maximum MX, output 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. 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. ktuális elem Pozitív elemek száma Pozitív elemek összege Pozitív elemek átlaga DRB TLG OSSZEG, output Output 5 6 1
2. példa: elemek összege és átlaga 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! egatív n számot a bekérésnél ne fogadjunk el! Ötlet: tudjuk, hogy n! = 1*2*3* (n-1)*n. szorzat értéke kezdetben 1. Ezután vesszük sorra a számokat, és aktuálisat összeszorozzuk a részszorzattal. szükséges jó n számot egy hátultesztelős ciklussal garantáljuk. (ktuális) szorzat SZORZT, output 7 8 4. példa: lottószámok generálása 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. Lottószámok Tömb (egész), output Éppen előállított szám SEGED Jó-e az éppen előállított szám JO Logikai Ciklusváltozó (ellenőrzéshez) J 9 10 5. példa: kiválasztásos rendezés 5. példa: kiválasztásos rendezés Feladat: rendezzünk egy tetszőleges adatokat tartalmazó n elemű tömböt! ( 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. jó hatásfokú módszerek általában logikailag bonyolultabbak, és nehezebben érthetőek. tt 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. 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, Sorozat elemei Tömb (tetszőleges), output ktuális minimum M Mint elemei z aktuális minimum sorszám DEX Ciklusváltozó, rögzített sorszám Ciklusváltozó (kiválasztáshoz) J 11 12 2
13 14 Más algoritmus-leíró eszközök Jackson-féle ábra Szekvencia egymás mellé írással Szelekció karika, és utána egymás melletti feltételek teráció csillag, és alatta az ismétlődő tevékenység(sorozat) Folyamatábra Már elavult STRT Ki: F ED gaz Be: F:=1; :=1 >= Hamis :=+1 F:=F* Előkészítés M:=[] DEX:= Kiválasztás Rendezés kiválasztással :=1, 1 * z -edik a helyére Minimum J:=+1, * Hasonlítás [J] < M º M:=[J] DEX:=J Besorolás [DEX]:=[] []:=M 15 i nyelvek i nyelvek 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 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) z első sikeres megvalósítások: FORTR, LSP, COBOL, később az LGOL Rövidítések: FORmula TRslation, LGOrithmic Language, LSt 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 legtöbb ma használatos programnyelv ide sorolható, pl. Pascal, C, C++, C#, Delphi, Java 16 i nyelvek yelvek osztályozása (folyt.) egyedik 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, MTLB, Mathematica Ötödik generáció (még kifejletlen) Constraint (megszorítás) alapú programozás 17 Programfejlesztés 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 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 nterpreter em készít gépi kódú programot, hanem utasításonként értelmezi és hajtja végre a magasszintű nyelven leírt programot lyenkor a tesztelés egyszerűbb, de komoly hátrány, hogy nem keletkezik futtatható program Szerkesztőprogram (Linker) 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 fejlesztői környezet is nagy változáson ment keresztül 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 3
pari programfejlesztés pari programfejlesztés Szoftvertechnológia pari 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 em elég a korábbi elemzés-tervezés-algoritmuskészítés-programozás-tesztelés ciklus z itt alkalmazandó módszerekkel a szoftvertechnológia (Software Engineering) tudományág foglalkozik 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!) SE nagyon fontos problémája a szoftvertermékek minősége, megbízhatósága lyen 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 US) szoftverfejlesztési folyamatban a menedzsment feladata a folyamat állandó felügyelete, értékelése (benne: adatgyűjtés), javítása + 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 Más mérnöki produktumokkal ellentétben a szoftver eléggé megfoghatatlan valami, ezért nem könnyű a folyamat megfelelő kezelése! 19 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? ( 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 mplementáció Validáció Fenntartás 20 pari programfejlesztés SE nagyon fontos kérdése az emberekkel való bánásmód 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 Milyen a jó fejlesztőcsoport, hány tagja van (kb.) Projekt terv emcsak az elején van aktivitás, hanem a folyamat közben is 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 ) Megfelelő formális eszközök állnak rendelkezésre a pontos leíráshoz Verifikáció és validáció 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 dolgozók betanítása, az esetlegesen felmerülő hibák javítása Visual Basic általános bemutatás Visual Basic (VB) a Microsoft cég által kifejlesztett programozási nyelv ill. fejlesztői környezet z első verziója, a Visual Basic 1.0 1991-ben jelent meg Windows 3.0 platformra 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 Visual Basic a korábban nagyon népszerű BSC nyelven alapul, de modernebb, eseményvezérelt és korlátozott mértékben objektumorientált 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) 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 (GU) fejlesztésére (sokkal) jobb a VB 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 em igazi OO nyelv, hiányzik a polimorfizmus és az öröklődés hagyományos VB mellett 2002-ben megjelent a.et-es változat is VB.ET a VB-nek egy teljesen újratervezett változata, az utolsó klasszikus VB verzió (VB 6.0) és a.et verziók között is már nagyon nehéz konvertálni a programokat Visual Basic.ET már teljesen objektumorientált.et alapú nyelv, gyakorlatilag egyenértékű a.et nyelvek közül vezető szerepben lévő C#-pal (szi-sarp) 21 22 Visual Basic nyelv a Wordben (Excelben) BSC-szerű nyelv, modernizálva Elsősorban Word és Excel környezetben nézzük os deklaráció, de nem szigorú z Option Explicit utasítással állítható be a szigorú deklaráció Fontosabb adattípusok Byte, nteger, Long, Boolean, String, Variant, (Részletesebben ld. Data Type Summary a Súgóban) Szubrutinok Ez az alapegység, Sub End Sub kulcsszavak között Szelekció f log.kif. Then ut1. Else ut2. End f terációk Léptetős: For i=1 To n ciklusmag ext Előltesztelős: Do While log.kif. ciklusmag Loop Hátultesztelős: Do log.kif. ciklusmag Loop While log.kif. // bennmaradási felt. hátultesztelős ciklust az Until kulcsszóval is meg lehet adni 23 Makrók engedélyezése Eszközök/Makró/Biztonság közepes szint Visual Basic Editor Váltás oda: lt + F11 vagy /Visual Basic Editor képernyő elemei Project ablak Dokumentumok, ahova makrókat készíthetünk/menthetünk Properties ablak z objektumok tulajdonságai állíthatók itt be Szövegszerkesztő ablak de 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 mmediate (futtatási) ablak Egyes futási eredmények megtekintésére Watch ablak yomkö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 4
Word objektummodellje súgóból behívható Lényegében mindent meg csinálni programból, amit egyébként a Word tud 25 26 Formok használata nsert/userform Beszúrhatók az elemek a panelre (parancsgomb akciókat lehet kezdeményezni, rádiógomb, listadoboz, léptető lista, ) Properties ablak: leírás az elemről Egyes tulajdonságok módosíthatók z elemhez tartozó kód dupla kattintásra előjön Ez alapból csak váz, a háttérben lévő eljárást persze meg kell írni 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) 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! 27 28 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 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) lakí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) 29 30 5
dokumentumok: 31 32 z Excel objektummodellje súgóból behívható 33 6