Ú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:
-
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 áttekinthetô 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 kettôvel foglalkozunk !
2/b, mivel a kezdôk olvassák
e lépéseket: nekik ha nem óriási project-rôl van szó minden képen
a fejben nem elvégezhetô rutinokat - programrészeket - algoritmusokat úgymond
kötelezô 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 elôszö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 meglehetôs önkritika mellet úgy
érzik megfelelnek azok olvassák el a haladók programtervezési lépéseit
!
(Megjegyezném, hogy majd az elsô 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 kezdôk 3 lépését, megszívlelendô
!
1, Elsô lépés - mint a kezdôkné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épernyôn 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
elôtt 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 ellenôrizni,
ha elsôre megy hibátlanul a beolvasott adatok leellenôrné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, mezôivel 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-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
-
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étôl. 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ü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:
-
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 értelmezhetô cselekményt nem kaptunk. Biztosan felépíthetô bármilyen
nehézség? probléma ezekbôl az alaptevékenységekbôl. (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
fô 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:
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:
-
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ülrôl 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.:
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.
Értéket adhatunk a bet?vel (de lehet
bet?kkel) megnevezett elemnek amit a számítástechnikában változónak
nevezük.
-
Mielôtt 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ítôdik 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 egyenlô 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ényezôit (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
-
kettôét vagy többét a képernyôre (alapértelmezésben
a képernyôre)
-
A KIírásnál kifejezést (pl. matematikai
m?veleteket tartalmazó kifejezést is megadhatunk), s elôbb kiszámítódik
a kifejezés éréke, s ezután ez írodik ki a képernyôre.
-
Természetesen szöveget is kiírhatunk a
képernyôre, sôt:
-
magyarázó szöveget, s utána vesszôvel 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ö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 kétágú szelekció (választás)
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 !)
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.
