ÚJ rovat indult e percekben ! Most, hogy már EGY éve állandóan a PC-X Magazin programozási rovatát alkotjuk, jöjjön egy olyan rovat mely az eddig (újonan) megszerzett tudást - tapasztalatot tökéletesíti. Mit takar a cím, hogy "programtervezés" ? Semmi képen sem egy elavult fölösleges dolgot ! Sokak akik már úgy érzik, hogy elég komoly programokat írnak e cím hallatára rögtön mosolygásba kezdenek, DE ők tévednek a legjobban, mert a kezdők törekednek egy könyebb, praktikusabb ezáltal JOBB programozási módszer - szokás kialakítására. Előbb utóbb a 'kezdők' be hozzák a 'haladókat' s gyorsabban - hatékonyabban tudnak majd egy problémát megoldani !

Miért tévednek a 'haladó(bba)k' ? Mert nem vizsgálják meg tejlesen, hogy mit nyújt a programtervezés számukra ! Tévedés ne essék a haladóknak és a kezdőknek egyaránt segítséget szeretnénk nyújtani !

Mit jelent és mit nyújt a Programtervezés ? 

Hogy a kezdeti kérdéseket eloszlassam ki kell kötnöm, hogy a jelenlegi tudásszinttôl különbözô programtervezésrôl kell beszélni. Kezdjük sorjában: Egyik programozónál se maradhat ki a program-ellenôrzés (DeBugging). Ez két szálon mehet:
1, Eleve hibás adatokkal próbálkozunk, pl. egy változóval amivel tudjuk, hogy osztunk 0-t adunk, hogy a program tényleg le kezeli -e ?
2, módszeresen teszteljük a programot különbözô adatokkal.

Nézzünk egy gyakorlati példát a fent elmondottakra 

Lássuk egy adott problémán a lépéseket [1]:

Adott, pl. egy másodfokú egyenlet amit meg kell oldani.

    Ha másodfokú egyenlet megoldó programot akarunk írni nyilván tisztában kell lenni ennek elméleti hátterével.
    - meg kell vizsgálni, hogy aki a programot megrendelte milyen adatokat akar megadni a programnak
    - s azt is milyen eredményt vár
    (Ez az elsô lépés. Egy program megírása 3 részből áll, a probléma megbeszélése a megrendelőtől (x idô), a program gyakorlati megvalósítása számítógépen (x idô), és végül dokumentáció készítése (2*x idô).)
    A probléma elméletbeli megoldása. Gondoljuk végig, hogyan oldjuk meg pl. a másodfokú egyenletet!
    Mi a másodfokú egyenlet alakja ?  Mi a megoldó képlet ?
    Ha  akkor 
    Láthatjuk, hogy már itt kikötöttük, hogy a nem egyenlô nulla ! Tehát a programnak ezt eleve le kell kezelni ! (lásd alább !)
    Hogyan oldjuk ezt az alakot meg ? MI papíron simán behelyettesítjük az együtthatókat a megoldóképletbe, és ha azt vesszük észre, hogy a gyök alatt negatív van megmondjuk, hogy nincs valós megoldás.
    DE a számítógépnek nem így kell megoldani, hisz ha csak negatívat adnánk a gyök alá akkor run-time error-ral félbeszakadna a program. Le kell kezelni a külöbözô eseteket:
    - HA a gyök alatt pozitív szám van akkor két megoldás van
    - HA nulla akkor egy megoldás (teljes négyzet)
    - HA negatív van a gyök alatt akkor nincs valós megoldás
    Foglaljuk össze az eddigieket egy lepésvázlatban:
    Ha a=0 akkor nincs másodfokú egyenlet, így elsôfokúra vezet oldjuk meg ezt is !
    Formája: bx+c=0
    Ha b 0 akkor x = -c/b
    Ha b = 0 akkor (c=0 alakú egyenletet kell megvizsgálni)
    Ha c = 0 akkor minden szám megoldás
    Ha c 0 akkor nincs megoldás
    Egyébként másodfokúként vizsgáljuk.
    Most jön a második sarkallatos pont, a megoldási folyamat leírása. Itt az egymás után végrehajtott cselekményeket kell az - e célre kifejlesztett nyelvvel - leíróeszközzel egyértelm?vé tenni. Az egymás után végrehajtott cselekmények folyamát algortmusnak nevezzük. Szebben ezt úgy fogalmazták meg: az egyértelm?en elôírt módon és sorrendben végrehajthatandó tevékenységek véges sorozata. Mivel vetjük papírra az algoritmusokat ? Az algoritmus-leíró eszközökkel:
    - Stuktogram
    - Folyamatábra
    - pszeudokód
    Az algoritmus kódolása a fentiekben megbeszélt programozási nyelven
    Már a tesztelésrôl (debugging) is beszéltünk.
    dokumentálás:
    Felhasználói:
    - A feladat, amire alkalmazható
    - A (hardware - software) környezet leírása
    - A program használata
    - A hibaüzenetek értelmezése
    - Telepítés
    Fejlesztôi dokumentáció:
    - A feladat specifikáció
    - program specifikáció
    - algoritmusok
    - fejlesztôi környezet
    - a használt változók - eljárások
    - s végül a forráskód megjegyzésekkel
    (Persze a dokumentációk ennél jóval összetettebbek a teljesség igénye nélkül áttekintésileg csak ennyit.)

A szükséges alapfogalmak  

Az adatokon - számokon végezhető műveletek - tevékenységek:  Az alapismeretek ismertetése után visszatérnék az algoritmus leiró eszközökhöz, s most már részletesen is tárgyalnám azt. Személy szerint (kisebb - nagyobb külsô hatásra) a stuktogramm algoritmus leíró módszert részesítem elônyben, így ezt tárgyaljuk. Mint minden algoritmus leíró eszköznek, ennek is teljesen nyelvfüggetlennek kell lennie, hogy a papíron kész algoritmust bárki - tehát nem csak mi akik ezt papíron terveztük, hanem egy másik ezt a leíró nyelvet ismerô (szak)ember is kódolhassa egy programozási nyelven. A nyelvfüggetlenség előnye, a stuktogramm elkészülte után bárki (aki ismeri) akármilyen magasszint? nyelven kódolhatja az algoritmust.

A stuktogram felépítésének szabályai:

Gyakorlati lépések: 

Hát ez volna a legegyszerűbb stuki, de lássuk az alapvető stuki emeket:

Elsô ezek közül a szekvencia. Nevébôl adódik, hogy valami nem? egymásutániságról lehet szó. A stuktogramban alkalmazott szekvencia exakt jelentése - elvárása:

Lássunk egy példát:

- login-elés a helyi hálózatunkba:

Látható, hogy csak a lépéseit adtuk meg a cselekménynek, így azt még tovább finomíthatjuk. A finomítás mindaddíg szól, míg kizárólag az alkalmazott algoritmus leíró nyelv utasításit nem használjuk. Pl.:

Mielôtt e témában már járatos Olvasóink hibát vélnének felfedezni a megnyugtatás végett közölném, hogy csak sematikus ábrát muttam be a fenti stuktogrammal, a cikk vége felé pontosítjuk a HA-val kezdôdô dobozainkat ...

Az alapvető utasítások 

Megszokott dolog, hogy a számítógép valamilyen adatot a felhasználótól kér be, pl.: billenty?zeten, vagy ír ki a monitorra, hisz ez a gép - ember (és ford.) közötti kommunikációs lehetôség.

Nézzük szépen sorjába az alap utasításokat:

Értékadás:

Láthatjuk ugyanolyan az értékadás menete, ahogyan a matematikában megszokhattuk.

Láthatjuk, hogy programon belül, hogyan adhatunk értéket. Általában a felhasználótól is kérünk adatokat, ezeket a Beolvasással tudjuk változóinkba helyezni.
  Persze, nem csak beolvasni, hanem Kiírni is tudjuk a kiszámolt eredményeket:
  A stuktogram típusai:
Természetes számok  N 
Természetes számok és a 0  N+0 
Egész számok  Z 
Valós számok  R 
Egy karakter  C 
Szöveges adat típusa  S 

Ez persze egy olyan egyszerű probléma, hogy nem kell megtervezni, ha valaki már ismer egy programozási nyelvet. Csak egy az eddigi összes alapm?veletet (a típusadást is beleértve) együtt akartam bemutatni.

Lessünk bele következô számunk tartalmába:

Szelekció 

Mint a biológia órán megtanultuk a szelekció (ki)választást jelent. Választani két - vagy több dolog közül.

A feltétel helyen megadunk egy felételt, pl. van erôm tovább cikket írni ? Ha a feltétel helyen megadott kifejezés igaz, akkor a T1 cselekmény hajtódik végre, ha nem igaz - tehát hamis - akkor a T2 hajtódik végre.

Bôvebben következô számunkban folytatjuk, ugyanis nincs erôm tovább cikket írni, így a T2 cselekmény a befejezés lép fel. Még a végelgyengülés, s szemeim teljes kiguvvadása elôtt elôtt megmutatom a fent ígér példát:

Persze a számítógép bekapcsolását részletezhetjük, DE ezt már tényleg a következô számban ...
(A szokásos: ha valaki valamit nem ért, vagy egyéb nagy kérdése - véleménye lenne az eMail-ezzen !)

Bérczi László
eMail:PC-XUser@IDG.HU, Subject: "ProgTerv rovat"
BELA@MI.STUD.PMMFK.JPTE.HU

Köszönetet mondanék fôiskolai tanáromnak, Bálintné Farkas Judit tanárnônek a felhasznált irodalomért ([1]), és segítségért.