Új rovat indult e percekben ! Jöjjön egy olyan rovat mely az eddig (újjonan) megszerzett alap programozási 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ásszinttol különbözo programtervezésrol kell beszélni. Kezdjük sorjában:
  • A kezdők programtervezési lépései: (a haladók is olvassák el !)

  • 1, Le ül az íróasztalhoz meg nézi a megoldandó problémát. Ha matematikai akkor a szükséges elméletet áttanulmányozza, ha fizikai - grafikai akkor is a rá vonatkozó törvényeket - és a praktikumokat is meg kell keresni.
    2, Most, hogy tisztában van milyen programocskát akar írni, (a probléba adott volt !) el kell dönteni milyen programozási nyelven kívánja megvalósítani. A Pascal-t érdemesebb a bonyolultabb, a nagyobb nehezen áttekintheto forráskód igény?, ugyanakkor kis hardware szükséglet? programoknál használni. A C++ nyelv leginkább a matematikai, modellezési, vagy nagyobb hardware igény? problémák megoldására ajánlott. Persze ez csak egy elméleti dolog mindenki azon a nyelven írja meg a programot melyen neki egyszerübb. Itt két nyelvet említettem, hisz -e kettovel foglalkozunk !
    2/b, mivel a kezdok olvassák e lépéseket: nekik ha nem óriási project-rol van szó minden képen a fejben nem elvégezheto rutinokat - programrészeket - algoritmusokat úgymond kötelezo megtervezni. A programtervezés elhagyható szakaszai, avagy az elhagyható szakaszok mértéke függ a 'programozó' tudásától - tapasztalatától. Én MINDENKÉPEN azt tanácsolom a kezdet kezdetén ha mód van rá tervezzük meg az egész programot akár papíron !!!
    3, Ugyanis aki papiron egyszer?bb problémákat eloszörre hibamentesen meg tud tervezni az már számítógép mellet - persze a probléma alapos ismerete után - el kezdhet dolgozni. Bizonyos algoritmusokat viszont nekik is szükségük van megtervezni. Akik e harmadik pontban elmondottaknak meglehetos önkritika mellet úgy érzik megfelelnek azok olvassák el a haladók programtervezési lépéseit !
    (Megjegyezném, hogy majd az elso 3-4 szám után dönsék el, hogy maguk szerint haladók -e, ugyanis elvileg még nem vagytok tisztában a programtervezés gyakorlati mibenlétével !)
  • A haladók - avagy haladóbbak programtevezési lépései:

  • Olvassátok el a kezdok 3 lépését, megszívlelendo !
    1, Elso lépés - mint a kezdoknél - a probléma megismerése. Pl.: egy gázrészecske modellnél milyen fizikai törvények kellenek ? Ezeket, hogyan alkalmazzuk - modellezük a számítógépen, hogy a törvények hatással legyenek a képernyon mozgó részecskékre (melyeket pontok modelleznek) ? Tehét a probléma elméleti háttere nélkül nem lehet kezdeni !
    2, A probléma ismeretében, számítógép elott el kezdhetjük a programot megtervezni: -e tervezés már a megvalósítás bizonyos részei. (Persze a programozási nyelvet már kiválasztottuk !)
    a, gyakorlott programozónak nincs szüksége stuktogrammra, pl. egy egyszer?bb adat beviteli rutin megvalosítására. Mivel már ismert az elmélet, hogy milyen információkat kell kérni a felhasználótól, rögtön gép mellett megírhatja az adatbekérést. Az adatokat le is kell ellenorizni, ha elsore megy hibátlanul a beolvasott adatok leellenornése, akkor írjuk géppel, ha nem akkor PAPÍRON !
    b, Ha objektum-orientált programozást követünk érdemes lehet az absztrakt objektumot metódusaival, mezoivel melyek lehetnek rejtettek vagy publikusak papiron megtervezni.

    Szumma szummárum a probléma bonyolultabb részeit papiron a rutin munkát géppel oldják a haladóbbak meg !

Egyik programozónál se maradhat ki a program-ellenorzé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özo 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 elso lépés. Egy program megírása 3 részből áll, a probléma megbeszélése a megrendelőtől (x ido), a program gyakorlati megvalósítása számítógépen (x ido), és végül dokumentáció készítése (2*x ido).)
    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 egyenlo 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özo 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 elsofokú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 eloí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ésrol (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
    Fejlesztoi dokumentáció:
    - A feladat specifikáció
    - program specifikáció
    - algoritmusok
    - fejlesztoi 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  


  • Adat: Lehet bármi, amin a számítógéppel valamilyen m?velet lehet végezni. [1] Pl.: számlázás, raktárnyilvántartás, stb.

  • számok
    nevek, születési hely, dátum
    személyi igazolvány szám, rendszám
  • konstans: fix érték, független a többi adattól, vagy a program m?ködésétol. Pl. a pi értéke mindig 3.14 lesz, ha a fene fenét eszik akkor is !
  • változó: a neve szerepel a programban, értéke változik a program végrehajtása során. Pl.: a matematikában megszokott módon, az x értékét másik bet?höz (névhez) rendelt számokkal számítjuk ki, lássuk csak a fent leírt másodfokú egyenlet megoldó-képletét.
  • típus: Minden adathoz tartozik egy halmaz - értelmezési tartomány -, amit meg kell adnunk. Pl.: újfent a matematikában: a sorozatoknál - függvényeknél is megadjuk, hogy mi az értelmezési tartomány (Df). A valós számok, vagy csak a pozitív egészek. Ugyanígy a számítógépnél is meg kell adnunk, hogy milyen - mekkora számokkal kívánunk dolgozni: hisz ha csak pozitív, 65536 alatti számokkal kívánunk dolgozni, akkor nyilván ne a legnagyobb - s ezáltal valószín?leg általában leglassabb módon számítható - intervallumban a 3.4e-4932 .. 1.1e4932 kívánjunk a géppel dolgoztatni.
Az adatokon - számokon végezhető műveletek - tevékenységek:
  • Művelet - adatmanipuláció
  • aritmetikai művelet
  • adatkiírás - adatbeolvasás
  • az adat kódolása - egyéb titkosítás
 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ülso hatásra) a stuktogramm algoritmus leíró módszert részesítem elonyben, í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 ismero (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:

  • Az algoritmust téglalap(ok)ba írjuk,
  • A feladatot több részre bontva, újabb téglalapokba írjuk. A feladat felbontása részekre addíg történik, míg egy a leírónyelv számára is értelmezheto cselekményt nem kaptunk. Biztosan felépítheto bármilyen nehézség? probléma ezekbol az alaptevékenységekbol. (lásd alább).
  • Az algoritmus leírás azonos logikai szinten álló téglalapjainak (rész feladatainak), azonos szélesnek kell

  • lenniük úgy, hogy a téglalapok egymás oldalával érintkezzenek, de ne lógjanak egymásba.

Gyakorlati lépések


  • A feladat kezdetét - és végét is egyértelm?en kell megadnunk. A kezdet és vég közvetlenül közrezárja a megoldando feladat fo téglalapját. Ennek a stuki (a stuktogram rövidítése) ábrája:

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

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

  • Az egymás után végrehajtandó tevékenységeket egymás alatti, azonos szinten - azonos szélesség? téglalapokba írjuk.
  • A fent elmondottak szerint ezen téglalapoknak érintkezniük kell - és csak oldaléleikkel kell érintkezniük - egymással.
  • Az algoritmust - a tevékenységek sorozatát - felülrol lefelé, egymás után kell a téglalapokba írni, s ugyanígy végrehajtani.
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.:

Mielott 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 kezdodo 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 lehetosé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.

    Értéket adhatunk a bet?vel (de lehet bet?kkel) megnevezett elemnek amit a számítástechnikában változónak nevezük.
  • Mielott a változónak értéket adnánk meg kell határoznunk típusát - azt az intervallumot melyen értelmezve van -. Egy változónak olyan értéket adhatunk ami értelmezve van értelmezési tartományán. Pl.: a változó 0 - 255 közötti egész számokat vehet fel, de mi - 3.14 értéket akarunk adni neki, nyílván vagy hibaüzenet kapunk, vagy hibás számítást végez programunk. (Mert ha egész típusba akarunk tizedes számot rakni akkor egyszer?en levágódik - általában - a tizedes. Így nagy hibávab számolunk.)

  • A típus megadásának formája: változó halmaz (a halmaz az értelmezési tartomány minden elemét magábafoglalja. Az értelmezési tartomány lehet egy szám intervallum, vagy bet? - karakter, stb.)
    Pl.: x N (Ahol N a természetes számokat jelöli, de ezt lásd alább.)
  • a változó nem csak számokat, hanem más változók értékét is felveheti
  • a változó más számokból ill. más változókból számított értéket is felvehet, ha a megadott m?velet(ek) végrehajthatók. (Pl.: Ha x = -c/b és a b értéke = 0-val nyílván hibaüzenetet kapunk, mert matematikailag nincs értelmezve a 0-val való osztás.)
  • Matematikával már közelebb kapcsolatba került Olvasónk - ki még a programozást csak ezen rovaton kezdi el lehet, hogy az utolsó dobozon elszörnyülködött.
  • De miért: a fenti sorok: x = x +4 egyenletnek néz ki. S milyen egyenlet az ami eleve hamis, hisz a matematikában az 1 soha sem egyenlő 1+4. Akkor más szálon van a megoldás:
  • Tekintsük úgy, hogy az x eddíg egyenlő volt 1-gyel. Most ehhez 4-et akarunk hozzádni, s az új értéket (5 a segítség kedvéért) újból az x változóba akarjuk írni.
  • Ennek folyamata úgy hajtódik végre, hogy az x + 4 helyére behelyettesítodik az 1 + 4 ezt kiszámolja a számítógép ez = 5, és ezt írja az x változóba.
  • Mondatszerűen úgy lehet leírni, hogy: x vegye fel azt az új értéket ami egyenlo az x régi értéke + 4-gyel.
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.
  • A beolvasás nem közvetlen módon meghatározott - ezen általában a standard input-ot értjük.
  • Egy számot beolvashatunk egy változóba, így a program futása közben a felhasználó adhat értéket egy változónak. Pl.: A fenti másodfokú egyenlet tényezoit (a, b, c) a felhasználó gépeli be, s ezzel számol a gép.
  • A BE művelet során egyszerre több változónak is adhatunk értéket.
Persze, nem csak beolvasni, hanem Kiírni is tudjuk a kiszámolt eredményeket:
  • a KI parancsban akár egy változó értékét is kiirathatjuk, ugyanúgy ahogy
  • kettoét vagy többét a képernyore (alapértelmezésben a képernyore)
  • A KIírásnál kifejezést (pl. matematikai m?veleteket tartalmazó kifejezést is megadhatunk), s elobb kiszámítódik a kifejezés éréke, s ezután ez írodik ki a képernyore.
  • Természetesen szöveget is kiírhatunk a képernyore, sot:
  • magyarázó szöveget, s utána vesszovel elválasztva egy változót - vagy kifejezést.
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övetkezo 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 kétágú szelekció (választás)

A feltétel helyen megadunk egy felételt, pl. van erom 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.

Bovebben következo számunkban folytatjuk, ugyanis nincs erom 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 elott elott 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övetkezo számban ...

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