A modell-ellenőrzés gyakorlata
|
|
- Gréta Orbán
- 8 évvel ezelőtt
- Látták:
Átírás
1 A modell-ellenőrzés gyakorlata SPIN modell-ellenőrző rendszer Gerard J. Holzmann 1991-től a rendszer elérhető 2002-ben ACM Szoftver Rendszer Díj; - ipari fejlesztésekben sikeres alkalmazás (pl. PathStar telefonközpont feldolgozó szoftver ellenőrzése, NASA űrkutatási projektekben missziókritikus szoftverek algoritmusainak ellenőrzése); - konkurens rendszerek (kommunikációs protokollok) ellenőrzésére készült; 1
2 Promela (Process Meta Language) - specifikációs nyelv véges állapotú rendszerek modellezésére; - folyamatok közötti kommunikáció: szinkron (randevú) vagy aszinkron (pufferelt); - folyamatok dinamikus létrehozása; - szintaxisában a C programozási nyelvre hasonlít (pl. boole és aritmetikai operátorok szintaxisa, értékadás (=), egyenlőség tesztelése (==), változó és paraméter deklarációk, változók kezdeti értékadása, megjegyzések, utasítás blokkok { } között); - nem-determinisztikus vezérlési szerkezetek; 2
3 - nem támogatja a számításokat;. nincsenek pl.: karakter típus (karaktert byte típusú változóhoz lehet rendelni, nyomtatása %c specifikációval); lebegőpontos változók; pointerek; függvényhívások; a kifejezések kiértékelésének mellékhatásai; Alap objektum típusok: - processzusok (folyamatok, mindig globális); - adat objektumok (pl. változók, lehet globális és lokális); - üzenet csatornák ; 3
4 Processzusok - létrehozás processzus típusok példányosításával; - proctype: processzus típus kulcsszava, pl. proctype producer () - active [darabszám] proctype: processzus deklarálás és példányosítás, pl. active [2] proctype producer () - run név : dinamikusan processzus példányosítás; - init { }: kezdeti processzus, ha nincs active kulcsszóval deklarált processzus, pl. init { print ( hello \n ) } - processzus törzse adat deklarációkból és egy vagy több utasításból áll; 4
5 pl. proctype main() {printf("hello world\n")} init { run main() } - processzus azonosító (pid): közötti szám, kiosztás a létrehozás szerint növekvő sorrendben (első létrehozott processzusé 0); - létrehozott processzus azonnal megkezdheti, de nem feltétlenül kezdi meg a futását; - processzus terminál az utolsó utasítást követően; - processzusok keletkezésükkel ellentétes sorrendben halhatnak meg (pid szám felszabadul); - proctype deklarációban provided kulcsszó szerepel, a processzus csak akkor futhat, ha a provided után szereplő feltétel igaz; 5
6 run operátor - run név() utasítás kifejezés, vagyis nem végrehajtódik, hanem kiértékelődik; - kiértékelés mellékhatása: értéke a létrehozott folyamat pid-je, illetve hibát jelez, ha több folyamat már nem hozható létre (már 255 van); - run kifejezések csak egyetlen run operátort tartalmazhatnak és más kifejezésekkel nem kombinálhatók; pl. run P() & run Q(),!run R() hibásak; 6
7 Adat objektumok alap adattípusok függnek az operációs rendszertől és a C fordítótól; 1 n
8 bit és bool szinonímák (0, 1 vagy false, true); chan, mtype, pid: bájt értékekkel reprezentált típusok; chan: csatornák megkülönböztetésére használható; csatorna mindig globális objektum, neve lehet lokális vagy globális változó; pl.: chan qcsat = [8] of (byte, int); /*puffer mérete 8*/ chan pcsat = [0] of (byte, int); /*randevú csatorna*/ mtype: szimbólumok használatát teszi lehetővé; szimbolikus név kiíratás: %e-vel vagy printm függvénnyel; pl.: mtype = {red, yellow, green}; mtype light = green; szimbolikus nevek alkalmazhatók szám helyett: pl. # define N 10; 8
9 tömbök pl. short b[4] = 6; /*4 elemű tömb, elemek értéke 6 kezdetben*/ saját adatstruktúra definiálás typedef kulcsszóval; pl. typedef Record { byte a = 3; short b }; Record r; byte t[10] = 5; init{ r.b = t[2] + r.a; printf("r.b=%d",r.b) }; /* r.b = 8*/ több dimenziós tömb pl. typedef tomb {short x[3]}; /*egydimenziós tömb típus*/ tomb y[5]; /*5 db tomb típusú változóból álló tömb*/ init { y[2].x[3] = 4}; 9
10 Operátorok (a C nyelvből öröklődnek) (), [] zárójelek, tömb zárójelpár (legmagasabb precedencia)!, ~, ++, -- tagadás, bitenkénti komplemens, 1-el növelés, ill. 1-el csökkentés (pl. a++) *, /, % szorzás, osztás, maradék képzés +, - összeadás, kivonás <<, >> bitenkénti balra, jobbra léptetés <, <=, >, >= relációk ==,!== egyenlő, nem egyenlő reláció &, ^, bitenkénti és, kizáró vagy, megengedő vagy &&, II logikai és művelet és a logikai vagy művelet ( -> : ) feltételes kifejezés: (kif -> kif_igaz : kif_hamis) = értékadás (legalacsonyabb precedencia) (operátorok precedenciája a legmagasabbtól csökkenve) 10
11 Kezdeti értékadás: - ha nincs kezdeti értékadás, a változó értéke 0; pl. unsigned a : 3 = 5; /*3 biten tárol, kezdetben értéke 5*/ short b[3] = 5; /*a b tömb elemeinek értéke 5*/ - azonos típusok deklarációja összevonható; pl. byte a, b[2] = 1, c = 3; - kifejezéseket int típusú egész számokra értékeli ki; - értékadáskor és üzenetátadáskor a célváltozó típusára konvertálás (csonkolás) megy végbe, a kifejezés teljes kiértékelése után; - szimulátor figyelmeztet a lehetséges információvesztésre; 11
12 Előre definiált változók - else : értéke igaz, ha a processzusnak nincs végrehajtható utasítása; - timeout : értéke igaz, ha a modellnek (rendszernek) nincs végrehajtható utasítása; - _ : csak írható változó, nem tárolja az értéket, üzenet fogadásnál lehet hasznos; - _pid : a processzus azonosítóját adja vissza; - _nr_pr : az aktív processzusok száma; - np_ : igaz, ha a modell nincs progress (előrehaladási) állapotban; - _last : az utoljára végrehajtott processzus azonosítója; - STIND : előre definiált csatorna (csak szimulációs módban); 12
13 példa: active [2] proctype szia() { printf("az azonosítóm: %d\n",_pid)} másként proctype you_run(byte x) { printf("x = %d, pid = %d\n", x, _pid)} init { pid p0, p1; p0 = run you_run(0); p1 = run you_run(1); printf("pids: %d and %d\n", p0, p1)} 13
14 Üzenet csatornák deklaráció: chan csat = [méret ] of {komp1,, kompi }; - aszinkron: méret 0 - szinkron: méret = 0 üzenetküldés: csat! kif1,, kifi; - kifejezések értékei a csatorna definíciójában megadott típusokra konvertálódnak; - végrehajtható, ha van hely a pufferben, egyébként blokkol; 14
15 üzenet fogadás: csat? var1,, vari; - végrehajtható, ha nem üres a csat nevű csatorna; - legrégebbi üzenet kerül a változókba; - ha konstans szerepel változó helyett, akkor csak az adott helyen megadott konstans értéket tartalmazó üzenet olvasható, egyébként blokkol az utasítás; - eval (var ) kifejezést kell írni, ha a var változó értékét használjuk konstansként; rövidítés: csat! kif1 (kif2,, kifi ); csat? var1 (var2,, vari ); (általában kif1 és var1 az üzenet típusát jelölő konstans) 15
16 szinkron csatorna esetén a küldés és fogadás egyszerre megy végbe, az üzenet nem tárolódik; küldő / fogadó blokkol, amíg egy az üzenetet fogadni/ küldeni képes párt nem talál; példa: mtype {ker, kuld}; chan csat = [8] of {mtype, int}; int valasz; active proctype P() { csat! ker(0); csat? kuld(valasz); } 16
17 egyéb csatorna műveletek: - len (q) értéke a q-ban levő üzenetek száma - empty (q) értéke igaz, ha q üres - nempty (q) értéke igaz, ha q nem üres - full (q) értéke igaz, ha q tele van - nfull (q) értéke igaz, ha van szabad hely q-ban rendezett küldés: q!! n, m, p ha q-ban az üzenetek rendezettek elsőként n, majd m és végül p értéke (üzenet komponensek sorrendje) szerint, akkor az új üzenet a legelső nála nagyobb értékeket tartalmazó üzenet elé kerül; 17
18 példa: (fel_rend_ch1.pml) init {chan q = [3] of {int}; int x; q!! 5; q!! 2; q? x -> printf ("%d\n", x); q? x -> printf ("%d\n", x);} (elsőként a 2 majd az 5 érték kerül kiírásra) 18
19 közvetlen fogadás: csat?? n, m, p - a csat csatorna bármelyik üzenete kiolvasható vele (nem feltétlenül az első), ha a konstansok által meghatározott feltételeket teljesíti; - ha n, m és p között nincsenek konstansok, akkor alkalmazása felesleges (ugyanaz mint a normál fogadó utasításnak); - mindig a legelső, a feltételeknek eleget tevő üzenetet olvassa ki, ami nem biztos, hogy a csatorna fejénél van; - a normál, a rendezett küldés, és a közvetlen fogadás utasítások egymással szabadon kombinálhatók; 19
20 egyéb csatorna utasítások csat? [n, m, p] - mellékhatás mentes Boole-kifejezés; - értéke igaz, ha csat? n, m, p végrehajtható; - kiértékelése nem változtatja meg csat csatornát; - a változók nem veszik fel az üzenet értékét; csat? <n, m, p> - ugyanaz, mint csat? n, m, p, vagyis a változók felveszik az üzenet értékét, ha az utasítás végrehajtható, de - az üzenet nem törlődik a csatornából, csat változatlan marad (észrevétlenül megnézhető a legrégebbi üzenetet a csat csatornában); 20
21 Alap utasítástípusok értékadás pl. x++, x--, x = x+1, x = run P() (b = a++ hibás) nyomtatás pl. printf ( x=%d\n, x), printm (x) kifejezések pl. x, 1, run P(), else, timeout, true, skip akkor hajthatók végre, ha az értékük igaz (nem 0); assertion assert (kifejezés) mindig végrehajtható, a kifejezés szimulációkor kiértékelődik, ha az érték igaz, akkor az adott processzusban az ezt követő utasítás lesz a következő végrehajtható, egyébként hibaüzenettel fejeződik be; pl. init {assert(false)} a program hibaüzenettel befejeződik 21
22 üzenetküldés végrehajtható, ha a célcsatorna nincs tele; üzenetfogadás végrehajtható, ha nem üres a csatorna és az első üzenet a konstansoknak megfelelő értéket tartalmaz; Összetett utasítások Ezekkel lehet szabályozni a végrehajtás sorrendjét, normál esetben az utasítások egymás után hajtódnak végre kivéve a goto-t de az igazából nem önálló utasítás, csak a következő vezérlési pontot jelzi, mint a break. 22
23 nem-determinisztikus választás if ::őrfeltétel 1 -> ut 11 ; ut 12 ;... ::őrfeltétel 2 -> ut 21 ; ut 22 ;... ::őrfeltétel n -> ut n1 ; ut n2 ;... fi - végrehajtható, ha van igaz értékű őrfeltétel; - ha több igaz értékű őrfeltétel is van, akkor nem-determinisztikusan választ; - ha egy igaz értékű őrfeltétel sincs, az utasítás blokkol; - őrfeltétel bármilyen alap- vagy összetett utasítás lehet; - else őrfeltétel akkor igaz, ha a többi őrfeltétel értéke hamis; 23
24 - őrfeltételt követő utasítás sorozat lehet üres is, ekkor az őrfeltétel igaz értéke esetén kilép az if utasításból; - skip, true és 1 értéke mindig igaz ; példa: (fel_max.pml) active proctype P() { int a = 5, b = 5, max, branch; if :: a >= b -> max = a; branch = 1 :: b >= a -> max = b; branch = 2 fi; printf("szamok: %d és %d max: %d ag: %d\n", a, b, max, branch)} 24
25 ciklikus nem-determinisztikus választás do ::őrfeltétel 1 -> ut 11 ; ut 12 ;... ::őrfeltétel 2 -> ut 21 ; ut 22 ;... ::őrfeltétel n -> ut n1 ; ut n2 ;... od - végtelen sokszor ismétlődik, egy menet olyan, mint az if.. fi utasítás ; - csak break vagy goto utasítással lehet kilépni belőle; - a break utasítás a ciklus utáni utasításra ugrik; - őrfeltétel bármilyen alap- vagy összetett utasítás lehet; 25
26 példa: x és y legnagyobb közös osztója (fel_lnk.pml) active proctype P() { int x = 15, y = 20; int a = x, b = y; do :: a > b -> a = a - b :: b > a -> b = b - a :: a == b -> break od; printf("szamok: %d és %d lnk: %d\n", x, y, a)} 26
27 Nincs ciklus számlálóval. példa: első N szám összege (fel_szamokosszege.pml) # define N 10 active proctype P() { int sum = 0; byte i = 1; do :: i > N -> break :: else -> sum = sum + i; i++ od; printf("elsö %d szám összege: %d\n", N, sum)} 27
28 példa: szerver és kliens közötti kommunikáció (Fel_13_ch2.pml) chan request = [4] of {byte}; chan reply = [4] of {byte, byte}; active [2] proctype Server() { byte client; do :: request? client -> printf ("Client %d processed by server %d\n", client, _pid); reply! _pid, client od } active [4] proctype Client() { byte server; request! _pid; reply?? server, eval(_pid); printf("reply received from server %d by client %d\n", server, _pid) } 28
29 megszakíthatatlan utasítás (atomic) atomic { őrfeltétel -> ut 1 ; ut 2 ;...; ut n } - akkor hajtható végre, ha az őrfeltétel igaz; - amíg az összes utasítás végre nem hajtódik más folyamat nem léphet; - bármely utasítás lehet őrfeltétel; - lehetnek benne nem-determinisztikus utasítások; - ha valamelyik belső utasítása blokkol, akkor a vezérlést megkaphatja más folyamat, ha közben a blokkolás megszűnik, akkor (nem feltétlenül azonnal) megszakítás nélkül folytatódik a blokk; 29
30 példa: - változók értékének cseréje: atomic { tmp = b, b = a, a = tmp }; - két folyamat elindítása egyszerre: init { atomic { run A(1,2); run B(3,4) } }; - felesleges használat: nfull(qname) -> qname!msg0 vagy qname?[msg0] -> qname?msg0 ; utasítások nem biztos, hogy nem blokkolnak, mert más folyamat telítheti közben a csatornát, vagy ellophatja az üzenetet; pl. atomic { qname?[msg0] -> qname?msg0 } felesleges, mert qname?msg0 hatása ugyanaz; 30
31 példa: (Provided.pml) byte n = 0; bool interrupt = false; proctype Compute() provided (!interrupt) {n = n + 1} proctype Interrupt() { byte temp; interrupt = true; temp = n + 1; n = temp; interrupt = false} init { atomic {run Interrupt(); run Compute()} (_nr_pr == 1); assert (n == 2)} 31
32 determinisztikus lépések d_step { őrfeltétel -> ut 1 ; ut 2 ;...; ut n } - ugyanaz, mint az atomic { }, de determinisztikusnak kell lennie; - biztosan megszakítás nélkül hajtódik végre; - nem lehetnek az őrfeltételen kívül blokkoló utasításai; - tilos bele vagy belőle goto-val be- vagy kiugrani; - lehetnek benne nem-determinisztikus utasítások, de ha nem-determinisztikusság áll elő, akkor ezt fix módon oldja fel a rendszer, pl. mindig a legelső lehetőséget választja (a választás módja nem ismert) 32
33 menekülő utasítás sorozat (escape sequences) { P } unless { Q }, ahol P és Q utasítás sorozatok - kivételkezelést lehet vele megvalósítani; - a rendszer elkezdi P utasításait végrehajtani, - minden P-beli utasítás végrehajtása előtt ellenőrzi a Q őrfeltételt (annak az első utasítását), hogy igaz-e ha igaz, akkor P további része helyett Q-t hajtja végre ha Q őrfeltétel P egész futása alatt hamis, akkor Q egyáltalán nem hajtódik végre. 33
34 példa: 0-val való osztás elkerülése az unless alkalmazásával active proctype divide() { int n = 1; end: do :: { ch? n; printf("%d\n", 100/ n)} unless {n == 0 -> printf("attempt to divide by zero\n")} od } 34
35 ugró utasítás goto label - hatására a következő végrehajtható utasítás a label címkéjű utasítása a folyamatnak ; Címkék - bármely utasítás elé írható (egy vagy több) címke; - a folyamattípuson belül egyedieknek kell lenniük; - az utasításokból a folyamat automatájának átmenetei lesznek, így az utasítás elé írt címke, azt az állapotot jelöli, ahonnan az átmenet kiindul; - ciklusnál az elágazás előtti állapotot lehet megjelölni, vagyis a do utasítás elé lehet tenni a címkét (őrfeltétel elé nem); 35
36 Helyességi kritériumok megadása állapot tulajdonság: - alapfeltételezések (basic assertions) - végállapot-címkék (end-state labels) út tulajdonság: - előrehaladási címkék (progress-state labels) - elfogadási címkék (accept-state labels) - soha-állítások (never claims) (ezek automatikusan generálhatók LTL formulákból) - út-feltételezések (trace assertions) 36
37 - helyességi ellenőrzés címke típusok: end kezdetű végállapot-címkék progress kezdetű előrehaladási címkék accept kezdetű elfogadási címkék végállapot-címkék end[a-za-z0-9_]*: utasítás - a rendszer végállapothoz ér, ha már nincs végrehajtható utasítása egyik folyamatnak sem (mindegyik véget ért vagy blokkolt); - alapértelmezés szerint a rendszernek csak azok a végállapotai megengedettek, melyben minden folyamat befejeződött (elérte a záró kapcsos zárójelet), különben holtpont (deadlock) állt elő; 37
38 - a végállapot címkékkel megadhatjuk, hogy mely állapotban való várakozás megengedett, azaz nem okoz holtpontot; példa: Dijkstra algoritmusa (fel_dijkstra.pml) mtype { p, v }; chan sema = [0] of { mtype }; active [3] proctype user() {sema?p; /* enter */ critical: skip; /* leave */ sema!v} active proctype Dijkstra() { byte count = 1; do :: (count == 1) -> end: sema!p; count = 0 :: (count == 0) -> sema?v; count = 1 od } 38
39 előrehaladási címkék progress[a-za-z0-9_]*: utasítás - azt jelzi, hogy az áltata jelölt állapotban előrehaladás történt (pl. belépett a kritikus állapotba); - azt nézi, hogy van-e olyan ciklusa a rendszernek, melyben sohasem történik előrehaladás, azaz az egész futás alatt csak véges sokszor (a ciklusba lépés előtt); - non-progress módban ciklusok keresése,mikor egy nem kívánatos esemény rendelkezik progress címkével; 39
40 példa: Dijkstra algoritmus progress címkével mtype { p, v }; chan sema = [0] of { mtype }; active proctype user_1() {do :: sema?p; /* enter */ progress_1: skip; /* leave */ sema!v od} active proctype user_2() {do :: sema?p; /* enter */ critical: skip; /* leave */ sema!v od} active proctype Dijkstra() { byte count = 1; do :: (count == 1) -> sema!p; count = 0 :: (count == 0) -> sema?v; count = 1 od } 40
41 elfogadási címkék accept[a-za-z0-9_]*: utasítás - az előrehaladási címkék,,szimmetrikus párja ; - vizsgálja, hogy van-e olyan ciklusa a rendszernek, melyben végtelen sokszor halad át elfogadási címkével jelölt állapoton (vagy végtelen sokáig ilyen állapotban tartózkodik); - ilyen,,rossz vagy csak számunkra érdekes ciklusok létezése kérdezhető; 41
42 példa: (fel_accept.pml) byte x = 2; active proctype A() {do :: x = 3 - x od} active proctype B() {do :: x = 3 - x; accept: skip od} (verifikálás acceptance módban) 42
43 Beillesztett definíció példa: inline request (x, y, z) {atomic { x == y -> x = z; who = _pid }} request(turn, P, N) ; - minden hívásnál a beillesztett definíció törzse a paraméterek kért értékeivel a hívás helyére helyettesítődik még a fordítás megkezdése előtt; pl. a request(turn, P, N) helyére az alábbi kerül atomic { turn == P -> turn = N; who = _pid } 43
44 Fair ciklusok Gyenge fair tulajdonság: Ha egy folyamat egy olyan utasításánál áll, amely végtelen sokáig (megszakítás nélkül) végrehajtható, akkor azt az utasítást a folyamat előbb utóbb végre is tudja hajtani. Erős fair tulajdonság: Ha egy folyamat egy olyan utasításánál áll, amely végtelen sokszor (esetleg megszakításokkal) végrehajtható, akkor azt az utasítást a folyamat előbb utóbb végre is tudja hajtani. A SPIN közvetlenül csak a gyenge fair tulajdonságot támogatja, az erős fair tulajdonság soha-állításokkal valósítható meg. 44
45 Soha-állítások - soha-állítások speciális folyamatok, csak kifejezéseket és vezérlő utasításokat tartalmaznak; - automatákat definiálnak, mint a többi folyamat, de nem változtathatják meg a rendszer állapotát, hanem lépésenként megfigyelik (ellenőrzik) azt; - a rendszer minden lépése előtt a soha állítások egyegy lépése hajtódik végre (felváltva léphetnek, de ha a rendszer működése véget ért a soha állítás még lépegethet; - minden modellben csak egy soha-állítás szerepelhet; 45
46 - az ellenőrzés azt jelenti, hogy keresi a rendszernek olyan végrehajtási sorozatait, melyek a soha állításban megfogalmazott tulajdonságot teljesítik; - ezekre a SPIN hibát jelez; - soha-állítással pontosan az általa lehetetlennek definiált működés kereshető, vagyis hiba, ha a sohaállítás véget ér (azaz eléri a záró kapcsos zárójelet) vagy elfogadó állapotot is tartalmazó végtelen ciklusba jut; - soha-állítás nem blokkol, ha nem tud lépni, akkor nincs hibás működés, a rendszer ezen a végrehajtási ágon nem keres tovább hibát, hanem másik ágat próbál; 46
47 példa: soha-állítások (biztonságos és élőségi tulajdonságokra) never { /*!([] mutex) */ T0_init: if :: (! ((mutex))) -> goto accept_all :: (1) -> goto T0_init fi; accept_all: skip } never { /*!(<>csp) */ accept_init: T0_init: if :: (! ((csp))) -> goto T0_init fi; } 47
48 LTL formulák - formula lehet egy kifejezést jelölő szimbolikus név (kisbetűvel kezdődő); példa: - #define p (a > b) : p értéke igaz, ha a zárójelben levő kifejezés értéke igaz; - #define q (root@label) : értéke igaz, ha a root folyamat következő végrehajtható utasítása a label címkéjű utasítás; - #define p (len(q) < 5) : értéke igaz, ha a q csatornában 5- nél kevesebb üzenet van; 48
49 Operátorok: egyváltozós operátorok: [] : always (a G jelölés helyett) <> : eventually (a F jelölés helyett)! : not (negáció) X : next kétváltozós operátorok: U : until V : release (az until duálisa vagyis p V q!(!p U!q) && : and (és) : or (vagy) -> : implikáció <-> : ekvivalencia (operátorok jele helyett az angol név is használható) 49
50 példa: tulajdonság formális megadása k: közelít v: áthalad, s: sorompó leengedve Ha egy vonat áthaladt a sorompót fel fogják emelni: [ ] ( ( v U!v ) -> ( <> (!v &&!s ) ) ) A sorompó sosem maradhat örökké lezárva:! (<> [ ] s ) = [ ] <>!s Minden vonat folyamatosan közelít az áthaladás kezdetéig: [ ] ( ( k -> ( k U v) ) Minden közelítő vonat át is halad a kereszteződésen, még mielőtt a következő vonat közelítene: [ ] ( k -> [ ( k &&!v ) U ( v && ( (v &&!k) U!v ) ) ] ) 50
51 A modell-ellenőrzés gyakorlata UPPAAL Uppsalai Egyetem + Aalborgi Egyetem közös fejlesztése; első verzió megjelenése; részei: - grafikus modellt leíró eszköz (System editor) - szimulátor (Simulator) - modell-ellenőrző (Verifier) - ingyenesen letölthető: - Uppaal rövid bemutatása 51
52 Modell megadása kiterjesztett időzített automata hálózat ; -kiterjesztett szó arra utal, hogy korlátos egész értékű változók is használhatók; - időzített arra utal, hogy az automatákban valós idejű órák alkalmazhatók (újraindíthatók, tesztelhetők); - több automata alkothat hálózatot, melyek csatornákon keresztül szinkronizálnak (üzenet! címkéjű (küldő) átmenet csak egy üzenet? (fogadó) átmenettel egyszerre hajtható végre); 52
53 Modell elemei: Globális és lokális deklarációk (C nyelvhez hasonlóak) - konstansok pl. const int a=1; - változók pl. int a; értékkészlet [-32768, 32767] - korlátozott egész értékű változók pl. int [0, 100] b=5; - csatornák pl. chan d; d? és d! használható szinkronizációhoz - órák pl. clock x, y; - tömbök pl. bool b[8], c[4]; - rekordok pl. struct {int a; bool b} s1={2, true}; - felhasználói típusok pl. typedef struct { int a; bool b; clock c} S; - skalárok pl. typedef scalar[3] set; set s; int a[set] (a tömb, set típus elemeivel indexelhető) 53
54 Sablonok (template): - processzus típusok megadása; - minden sablonnak van neve; - rendelkezhet lokális deklarációkkal; - paraméterezhetők; - paraméterátadás történhet: a konkrét paraméter megadásával (ekkor érték szerint (call by value), vagy a formális paraméter azonosítója előtti & jel használata esetén hivatkozás szerinti (call by reference); óra, csatorna, tömb csak hivatkozás szerinti paraméter lehet; 54
55 - időzített automata (processzus típus) megadásához grafikus felület: hely paraméterek: - kezdő (initial), sürgős (urgent), elkötelezett (committed), - hely-invariáns (invariant); átmenet paraméterek: - szelekció (select), - őrfeltétel (guard), - szinkronizáció (sync.), - értékadás (update) megadás; 55
56 invariánsok (invariant): - helyek rendelkezhetnek invariánssal; - mellékhatás mentes, Boole értékű kifejezés; - csak órákra, órák különbségére vonatkozó egyszerű kifejezések (csak felső korlát, ami egész értékű kifejezés) konjunkciói, illetve órákat nem tartalmazó Boole kifejezések lehetnek; - addig tartózkodhat az automata az adott helyen míg az invariáns feltétel teljesül; - invariáns feltétel nem válhat hamissá, vagyis ha hamissá válik, akkor nincs következő rendszer állapot és a futás véget ér; 56
57 sürgősség és elkötelezettség: helyek tulajdonsága lehet: - kezdő (initial) - sürgős (urgent): ilyen helyen nem telhet az idő, a többi automata várakozástól különböző átmeneteket csinálhat míg a sürgős helyet az automata el nem hagyja; - elkötelezett (committed): ilyen helyen nem telhet az idő, a következő átmenet innen vagy egy másik elkötelezett állapotból indulhat; sürgős és elkötelezett egyszerre nem lehet egy hely; 57
58 példa: normál, kezdő, sürgős, elkötelezett helyek az Uppaal-ban 58
59 őrfeltételek (guard): - átmenetek engedélyezése, ha az őrfeltétel értéke igaz a rendszer aktuális állapotában; - mellékhatás mentes, Boole értékre kiértékelhető; - óra változókra, egészekre és konstansokra (valamint azok tömbjeinek elemeire) lehet hivatkozni bennük; - óraváltozók, illetve azok különbsége csak egészekkel hasonlíthatók; - különböző órákra vonatkozó feltételek csak konjunkcióval köthetők össze, diszjunkcióval nem; példa: x >= 1 && x <= 2 : x az [1,2] intervallumba esik ; x < 100 or y == 50 nem megengedett; 59
60 szinkronizációk (sync.): - a szinkronizáció történhet bináris, üzenetszórásos, sürgős csatornán keresztül; - a szinkronizáció alapját képező csatornákat globálisan kell deklarálni; pl. chan c; broadcast chan d; urgent chan a; - bináris szinkronizáció: az egyik automata pl. c! és egy automata c? csatorna parancsa egyszerre hajtódik végre, tehát küldés csak akkor hajtható végre, ha van fogadó, különben az átmenet blokkol; 60
61 - üzenetszórásos (broadcast) csatornák: egy küldő és tetszőleges számú (0 is lehet) fogadó fél között jön létre, a küldés mindig végrehajtható; minden végrehajtható fogadóval (d?) szinkronizál a broadcast típusú csatornára küldő (d!); - sürgős (urgent) csatornák: ha a sürgős csatornán keresztül szinkronizálni lehet, sem a küldő sem a fogadó nem tehet várakozó átmenetet, egymást meg kell várniuk, órákra vonatkozó őrfeltétel nem lehet a szinkronizáló átmeneten; 61
62 példa:üzenetszórásos szinkronizáció az Uppaal-ban (declaration mezőben: broadcast chan ebreszto;) 62
63 értékadások (updata): - az átmenet végrehajtásának 3. lépése, megváltoztatja a modell állapotát; - típusokat egyeztetni kell, csak konstansra, órára, egész változóra (ezek tömbjeire) lehet hivatkozni; - nem csak az órák újra indítása, hanem az óraváltozóknak tetszőleges egész érték is adható; - más változónak is lehet értéket adni; - értékadások végrehajtása szekvenciálisan; példa: j = (i[1] > i[2]? i[1] : i[2] ) : j értéke az i[1] és i[2] maximuma lesz; x = 1, y = 2*x : x értéke 1, y értéke 2 lesz; 63
64 szelekció (select): - nem-determinisztikusan köthető érték azonosítóhoz adott értéktartományból; - az átmenet őrfeltételében, szinkronizációjában, értékadó részében a szelekcióban megadott változó a hozzákötött értéktartományból vesz fel értéket; példa: select: i : int [0,3] synchronization: a[i]? update expression: receive_a(i) (i-hez nem-determinisztikusan történik a [0-3]-ba tartozó valamely egész érték kötése, mely indexként jelenik meg az a csatorna tömbnél, a receive_a eljáráshívásnál pedig argumentumként); 64
65 Kifejezések szintaxisa, alkalmazható operátorok, operátorok precedenciája részletesen: Uppaal Help / language reference / expressions forall (id : type) Expr kifejezés: értéke igaz, ha az Expr értéke igaz bármely type típusba eső id érték esetén, egyébként az értéke hamis; exists (id : type) Expr kifejezés: értéke igaz, ha van olyan type típusba eső érték, melyet id felvéve az Expr értéke igaz, egyébként hamis; type típus korlátos egész vagy skalár halmaz lehet; 65
66 Rendszer definíció (system definition) - komponensek megadása az automata sablonok példányosításával; példa: lampa és embertipus egy-egy automata sablon; ember1 := embertipus (1000); ember2 := embertipus (2000); system lampa, ember1, ember2; - ha egy sablon korlátozott egész értékű paraméterekkel rendelkezik, akkor aktuális paraméter megadás hiányában automatikusan létrehozza a példányokat úgy, hogy a paramétereket az összes lehetséges módon az értékkészletből megválasztja; 66
67 példa: Uppaal-ban időzített automata sablonra (name mezőben: Train, parameters mezőben: const id_t id declarations mezőben: const int N = 6; typedef int[0,n-1] id_t; chan appr[n], stop[n], leave[n]; urgent chan go[n];) 67
68 Tulajdonság specifikáció Uppaal-ban CTL logika megszorított változata; - E<>P: van olyan futás, hogy valamikor a P igaz lesz (lehetségesség, EFP); - A[]P: minden futás minden állapotában P igaz (invariáns tulajdonság, AGP); - E[]P: van olyan futás, melynek minden állapotában P igaz (lehetséges invariáns, EGP); - A<>P: minden futás során valamikor P igaz lesz (előbbutóbb biztosan P igaz lesz, AFP); - P--> Q: minden úton, ha P teljesül, valamikor Q is teljesülni fog; 68
69 - P és Q nem lehetnek összetett formulák, csak Boole értékű, mellékhatás mentes kifejezések; - nem engedi a temporális operátorok egymásba ágyazását (pl. A[](E<>P) nem írható); - lehet kifejezésekben konstansokra, egész értékű változókra, órák értékeire, automaták aktuális állapotaira hivatkozni; - formulákban használhatók a not, or, and, imply Boole műveletek is; néhány azonosság: not A[]P = E<> not P not A<> P = A[] not P P --> Q = A[](P imply A<>Q) 69
70 példa: A[] 1<2: ez az invariáns mindig igaz; E<> (p1.cs and p2.cs): igaz, ha a rendszer valamikor elérhet egy olyan állapotot, melyben p1 és p2 processzus is a cs helyen van; A[] (p1.cs impy not p2.cs): invariáns tulajdonság, valahányszor p1 a cs helyen van, mindannyiszor p2 nincs a cs helyen (nem keverendő a --> operátorral, mely megengedi az időbeli eltolódást); 70
A modell-ellenőrzés gyakorlata UPPAAL
A modell-ellenőrzés gyakorlata UPPAAL Uppsalai Egyetem + Aalborgi Egyetem közös fejlesztése; 1995. első verzió megjelenése; részei: - grafikus modellt leíró eszköz (System editor) - szimulátor (Simulator)
Időzített rendszerek és az UPPAAL II
Időzített rendszerek és az UPPAAL II Dr. Németh L. Zoltán (zlnemeth@inf.u-szeged.hu) SZTE, Informatikai Tanszékcsoport 2008/2009 I. félév 2008.11.15 MODELL 11 1 Rendszerek leírása az UPPAAL-ban Modellelenőrzés
Alapszintű formalizmusok
Alapszintű formalizmusok dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék 1 Mit szeretnénk elérni? Informális tervek Informális követelmények Formális modell Formalizált követelmények
Az UPPAAL egyes modellezési lehetőségeinek összefoglalása. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék
Az UPPAAL egyes modellezési lehetőségeinek összefoglalása Majzik István BME Méréstechnika és Információs Rendszerek Tanszék Résztvevők együttműködése (1) Automaták interakciói üzenetküldéssel Szinkron
Alapszintű formalizmusok
Alapszintű formalizmusok dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék 1 Mit szeretnénk elérni? Informális tervek Informális követelmények Formális modell Formalizált követelmények
Occam 1. Készítette: Szabó Éva
Occam 1. Készítette: Szabó Éva Párhuzamos programozás Egyes folyamatok (processzek) párhuzamosan futnak. Több processzor -> tényleges párhuzamosság Egy processzor -> Időosztásos szimuláció Folyamatok közötti
BUDAPESTI MÛSZAKI EGYETEM Méréstechnika és Információs Rendszerek Tanszék. SPIN Mérési útmutató. Készítette: Jávorszky Judit
BUDAPESTI MÛSZAKI EGYETEM Méréstechnika és Információs Rendszerek Tanszék SPIN Mérési útmutató Készítette: Jávorszky Judit Tartalomjegyzék 1. Bevezetés. 2 1.1. Általános leírás. 2 1.2. Módszertan. 3 1.3.
Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések
Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések 1. Az informatikai rendszereknél mit ellenőriznek validációnál és mit verifikációnál? 2. A szoftver verifikációs technikák
Szoftvertervezés és -fejlesztés I.
Szoftvertervezés és -fejlesztés I. Operátorok Vezérlési szerkezetek Gyakorlás 1 Hallgatói Tájékoztató A jelen bemutatóban található adatok, tudnivalók és információk a számonkérendő anyag vázlatát képezik.
Java II. I A Java programozási nyelv alapelemei
Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2008. 02. 19. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve az annak
A SPIN használata, példák II
A SPIN használata, példák II Dr. Németh L. Zoltán (zlnemeth@inf.u-szeged.hu) SZTE, Informatikai Tanszékcsoport 2008/2009 I. félév 2008.10.18/2 MODELL 9 1 2. példa: Egy osztott algoritmus Pl. legyen ez
... S n. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak.
Párhuzamos programok Legyen S parbegin S 1... S n parend; program. A párhuzamos programszerkezet két vagy több folyamatot tartalmaz, melyek egymással közös változó segítségével kommunikálnak. Folyamat
Időzített átmeneti rendszerek
Időzített átmeneti rendszerek Legyen A egy ábécé, A = A { (d) d R 0 }. A feletti (valós idejű) időzített átmeneti rendszer olyan A = (S, T,,, ) címkézett átmeneti rendszert ( : T A ), melyre teljesülnek
Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések
Hardver és szoftver rendszerek verifikációja Röviden megválaszolható kérdések 1. Az informatikai rendszereknél mit ellenőriznek validációnál és mit verifikációnál? 2. A szoftver verifikációs technikák
Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós augusztus 29. Széchenyi István Egyetem, Gy r
Programozás alapjai (GKxB_INTM023) Széchenyi István Egyetem, Gy r 2019. augusztus 29. Feladat: írjuk ki az els 10 természetes szám négyzetét! #i n c l u d e i n t main ( v o i d ) { p r
Készítette: Nagy Tibor István
Készítette: Nagy Tibor István Operátorok Műveletek Egy (vagy több) műveleti jellel írhatók le A műveletet operandusaikkal végzik Operátorok fajtái operandusok száma szerint: egyoperandusú operátorok (pl.:
Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double
Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.10.10.. -1- Mit tudunk már? Típus fogalma char, int, float,
Java II. I A Java programozási nyelv alapelemei
Java2 / 1 Java II. I A Java programozási nyelv alapelemei Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2009. 02. 09. Java II.: Alapelemek JAVA2 / 1 A Java formalizmusa A C, illetve
Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)
Programozás alapjai C nyelv 4. gyakorlat Szeberényi Imre BME IIT Mit tudunk már? Típus fogalma char, int, float, double változók deklarációja operátorok (aritmetikai, relációs, logikai,
Formális verifikáció Modellezés és modellellenőrzés
Formális verifikáció Modellezés és modellellenőrzés Rendszertervezés és -integráció előadás dr. Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék
Osztott rendszer. Osztott rendszer informális definíciója
Osztott rendszer Osztott rendszer informális definíciója Egymástól elkülönülten létező program-komponensek egy halmaza. A komponensek egymástól függetlenül dolgoznak saját erőforrásukkal. A komponensek
Kiterjesztések sek szemantikája
Kiterjesztések sek szemantikája Példa D Integer = {..., -1,0,1,... }; D Boolean = { true, false } D T1... T n T = D T 1... D Tn D T Az összes függvf ggvény halmaza, amelyek a D T1,..., D Tn halmazokból
A C programozási nyelv I. Bevezetés
A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,
A C programozási nyelv I. Bevezetés
A C programozási nyelv I. Bevezetés Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv I. (bevezetés) CBEV1 / 1 A C nyelv története Dennis M. Ritchie AT&T Lab., 1972 rendszerprogramozás,
Programozás I. 3. gyakorlat. Szegedi Tudományegyetem Természettudományi és Informatikai Kar
Programozás I. 3. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Antal Gábor 1 Primitív típusok Típus neve Érték Alap érték Foglalt tár Intervallum byte Előjeles egész 0 8 bit
BASH script programozás II. Vezérlési szerkezetek
06 BASH script programozás II. Vezérlési szerkezetek Emlékeztető Jelölésbeli különbség van parancs végrehajtása és a parancs kimenetére való hivatkozás között PARANCS $(PARANCS) Jelölésbeli különbség van
Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás
Járműfedélzeti rendszerek II. 1. előadás Dr. Bécsi Tamás A tárgy órái Előadás hetente (St101) csüt. 8:15 Bécsi Tamás C elmélet Ajánlott irodalom Dennis Ritchie: A C programozási nyelv Gyakorlat hetente
Programozás BMEKOKAA146. Dr. Bécsi Tamás 2. előadás
Programozás BMEKOKAA146 Dr. Bécsi Tamás 2. előadás Szintaktikai alapok Alapvető típusok, ismétlés C# típus.net típus Méret (byte) Leírás byte System.Byte 1Előjel nélküli 8 bites egész szám (0..255) char
Webprogramozás szakkör
Webprogramozás szakkör Előadás 5 (2012.04.09) Programozás alapok Eddig amit láttunk: Programozás lépései o Feladat leírása (specifikáció) o Algoritmizálás, tervezés (folyamatábra, pszeudokód) o Programozás
Alapszintű formalizmusok
Alapszintű formalizmusok dr. Majzik István BME Méréstechnika és Információs Rendszerek Tanszék 1 Modellek a formális ellenőrzéshez Leképzések Mérnöki modellek Magasabb szintű formalizmusok PN, CPN, DFN,
AWK programozás, minták, vezérlési szerkezetek
10 AWK programozás, minták, vezérlési szerkezetek AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa
3 A C programozási nyelv szintaktikai egységei
3 A C programozási nyelv szintaktikai egységei 3.1 Azonosítók Betűk és számjegyek sorozata, betűvel vagy _ (aláhúzás) karakterrel kell kezdődnie. A nagy- és kisbetűk különbözőek. Az azonosítók tetszőleges
AWK programozás, minták, vezérlési szerkezetek
10 AWK programozás, minták, vezérlési szerkezetek AWK futtatási módok AWK parancs, közvetlen programkódmegadás: awk 'PROGRAMKÓD' FILE példa: ls -l awk '{print $1, $5}' a programkód helyére minden indentálás
Programozási nyelvek 6. előadás
Programozási nyelvek 6. előadás Szempontok Programozási nyelvek osztályozása Felhasználói kör (amatőr, professzionális) Emberközelség (gépi nyelvektől a természetes nyelvekig) Számítási modell (hogyan
A programozás alapjai
A programozás alapjai Változók A számítógép az adatokat változókban tárolja A változókat alfanumerikus karakterlánc jelöli. A változóhoz tartozó adat tipikusan a számítógép memóriájában tárolódik, szekvenciálisan,
OOP #14 (referencia-elv)
OOP #14 (referencia-elv) v1.0 2003.03.19. 21:22:00 Eszterházy Károly Főiskola Információtechnológia tsz. Hernyák Zoltán adj. e-mail: aroan@ektf.hu web: http://aries.ektf.hu/~aroan OOP OOP_14-1 - E jegyzet
1. Alapok. #!/bin/bash
1. oldal 1.1. A programfájlok szerkezete 1. Alapok A bash programok tulajnképpen egyszerű szöveges fájlok, amelyeket bármely szövegszerkesztő programmal megírhatunk. Alapvetően ugyanazokat a at használhatjuk
C programozási nyelv
C programozási nyelv Előfeldolgozó utasítások Dr Schuster György 2011 május 3 Dr Schuster György () C programozási nyelv Előfeldolgozó utasítások 2011 május 3 1 / 15 A fordítás menete Dr Schuster György
Függvények. Programozás alapjai C nyelv 7. gyakorlat. LNKO függvény. Függvények(2) LNKO függvény (2) LNKO függvény (3)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Függvények C program egymás mellé rendelt függvényekből áll. A függvény (alprogram) jó absztrakciós eszköz a programok
Programozás alapjai C nyelv 7. gyakorlat. Függvények. Függvények(2)
Programozás alapjai C nyelv 7. gyakorlat Szeberényi Imre BME IIT Programozás alapjai I. (C nyelv, gyakorlat) BME-IIT Sz.I. 2005.11.05. -1- Függvények C program egymás mellé rendelt függvényekből
Formális modellezés és verifikáció
Formális modellezés és verifikáció Rendszertervezés és -integráció előadás dr. Majzik István Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék BME-MIT Célkitűzések
Programozás II. 2. Dr. Iványi Péter
Programozás II. 2. Dr. Iványi Péter 1 C++ Bjarne Stroustrup, Bell Laboratórium Első implementáció, 1983 Kezdetben csak precompiler volt C++ konstrukciót C-re fordította A kiterjesztés alapján ismerte fel:.cpp.cc.c
Apple Swift kurzus 3. gyakorlat
Készítette: Jánki Zoltán Richárd Dátum: 2016.09.20. Apple Swift kurzus 3. gyakorlat Kollekciók: Tömb: - let array = [] - üres konstans tömb - var array = [] - üres változó tömb - var array = [String]()
Algoritmizálás + kódolás C++ nyelven és Pascalban
Algoritmizálás + kódolás nyelven és ban Motiváció A Programozási alapismeretek tárgyban az algoritmizáláshoz struktogramot, a kódoláshoz nyelvet használunk, a Közismereti informatikában (a közoktatásban
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezések Lexika Szintaktika Szemantika Lexika azonosítók (változó-, metódus-, típus- és csomagnevek) literálok operátorok, pl. + zárójelek: (), [], {},
Komputeralgebra Rendszerek
Komputeralgebra Rendszerek Programozás Czirbusz Sándor ELTE IK, Komputeralgebra Tanszék 2014. február 23. TARTALOMJEGYZÉK 1 of 28 TARTALOMJEGYZÉK I 1 TARTALOMJEGYZÉK 2 Értékadás MAPLE -ben SAGE -ben 3
Alapok. tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók
Haskell 1. Alapok tisztán funkcionális nyelv, minden függvény (a konstansok is) nincsenek hagyományos változók, az első értékadás után nem módosíthatók elég jól elkerülhetők így a mellékhatások könnyebben
Szkriptnyelvek. 1. UNIX shell
Szkriptnyelvek 1. UNIX shell Szkriptek futtatása Parancsértelmez ő shell script neve paraméterek shell script neve paraméterek Ebben az esetben a szkript tartalmazza a parancsértelmezőt: #!/bin/bash Szkriptek
Algoritmizálás és adatmodellezés tanítása 1. előadás
Algoritmizálás és adatmodellezés tanítása 1. előadás Algoritmus-leíró eszközök Folyamatábra Irányított gráf, amely csomópontokból és őket összekötő élekből áll, egyetlen induló és befejező éle van, az
C programozás. 1 óra Bevezetés
C programozás 1 óra Bevezetés A C nyelv eredete, fő tulajdonságai 1. Bevezető C nyelv alapelemei többsége a BCPL (Basic Combined Programming Language {1963}) Martin Richards B nyelv Ken Thompson {1970}
Java programozási nyelv
Java programozási nyelv 2. rész Vezérlő szerkezetek Nyugat-Magyarországi Egyetem Faipari Mérnöki Kar Informatikai Intézet Soós Sándor 2005. szeptember A Java programozási nyelv Soós Sándor 1/23 Tartalomjegyzék
1. Jelölje meg az összes igaz állítást a következők közül!
1. Jelölje meg az összes igaz állítást a következők közül! a) A while ciklusban a feltétel teljesülése esetén végrehajtódik a ciklusmag. b) A do while ciklusban a ciklusmag után egy kilépési feltétel van.
Mechatronika és mikroszámítógépek 2017/2018 I. félév. Bevezetés a C nyelvbe
Mechatronika és mikroszámítógépek 2017/2018 I. félév Bevezetés a C nyelvbe A C programozási nyelv A C egy általános célú programozási nyelv, melyet Dennis Ritchie fejlesztett ki Ken Thompson segítségével
Informatika terméktervezőknek
Informatika terméktervezőknek C# alapok Névterület (namespace) using Osztály (class) és Obejtumok Metódus (function, procedure, method) main() static void string[] arg Szintaxis // /* */ \n \t Névadások
Szoftvertechnológia alapjai Java előadások
Szoftvertechnológia alapjai Java előadások Förhécz András, doktorandusz e-mail: fandrew@mit.bme.hu tárgy honlap: http://home.mit.bme.hu/~fandrew/szofttech_hu.html A mai előadás tartalma: Miért pont Java?
Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész
3. előadás Protokollok Kommunikáció 2. rész RPC (Remote Procedure Call) távoli eljáráshívás RMI (Remote Method Invocation) távoli metódushívás MOM (Message-Oriented Middleware) üzenetorientált köztesréteg
Programozási nyelvek (ADA)
Programozási nyelvek (ADA) Kozsik Tamás előadása alapján Készítette: Nagy Krisztián 1. előadás Hasznos weboldal http://kto.web.elte.hu Program felépítése Programegységek (program unit) eljárások (procedure)
file./script.sh > Bourne-Again shell script text executable << tartalmat néz >>
I. Alapok Interaktív shell-ben vagy shell-scriptben megadott karaktersorozat feldolgozásakor az első lépés a szavakra tördelés. A szavakra tördelés a következő metakarakterek mentén zajlik: & ; ( ) < >
PHP. Telepítése: Indítás/újraindítás/leállítás: Beállítások: A PHP nyelv
PHP A PHP rövidítés jelentése hivatalosan: PHP Hypertext Preprocessor. Ez egy kiszolgáló-oldali parancsnyelv, amit jellemzően HTML oldalakon használnak. A különbség a két nyelv között az, hogy a kiszolgáló
Rekurzió. Dr. Iványi Péter
Rekurzió Dr. Iványi Péter 1 Függvényhívás void f3(int a3) { printf( %d,a3); } void f2(int a2) { f3(a2); a2 = (a2+1); } void f1() { int a1 = 1; int b1; b1 = f2(a1); } 2 Függvényhívás void f3(int a3) { printf(
Készítette: Nagy Tibor István
Készítette: Nagy Tibor István A változó Egy memóriában elhelyezkedő rekesz Egy értéket tárol Van azonosítója (vagyis neve) Van típusa (milyen értéket tárolhat) Az értéke értékadással módosítható Az értéke
Hardver leíró nyelvek (HDL)
Hardver leíró nyelvek (HDL) Benesóczky Zoltán 2004 A jegyzetet a szerzıi jog védi. Azt a BME hallgatói használhatják, nyomtathatják tanulás céljából. Minden egyéb felhasználáshoz a szerzı belegyezése szükséges.
Operációs rendszerek. 11. gyakorlat. AWK - szintaxis, vezérlési szerkezetek UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED
UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED AWK - szintaxis, vezérlési szerkezetek Operációs rendszerek 11. gyakorlat Szegedi Tudományegyetem Természettudományi és Informatikai Kar Csuvik
és az instanceof operátor
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán
Java VIII. Az interfacei és az instanceof operátor Krizsán Zoltán Miskolci Egyetem Általános Informatikai Tanszék Utolsó módosítás: 2005. 10. 24. Java VIII.: Interface JAVA8 / 1 Az interfészről általában
Programozás BMEKOKAA146. Dr. Bécsi Tamás 3. előadás
Programozás BMEKOKAA146 Dr. Bécsi Tamás 3. előadás Vezérlési szerkezetek Elágazás Gyakran előfordul, hogy meg kell vizsgálnunk egy állítást, és attól függően, hogy igaz vagy hamis, a programnak más-más
Bevezetés a C++ programozási nyelvbe
Bevezetés a C++ programozási nyelvbe Miskolci Egyetem Általános Informatikai Tanszék CPP0 / 1 Története A C++ programozási nyelv a C programozási nyelv objektum orientált kiterjesztése. Az ANSI-C nyelvet
Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606. Dr. Bécsi Tamás 2. előadás
Számítástechnika I. BMEKOKAA152 BMEKOKAA119 Infokommunikáció I. BMEKOKAA606 Dr. Bécsi Tamás 2. előadás Console I/O bővebben Lásd mintaprogram 2015.09.21. Számítástechnika I. 2. Előadás 2 Számábrázolásról
Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós február 18. Széchenyi István Egyetem, Gy r
Programozás (GKxB_INTM021) Széchenyi István Egyetem, Gy r 2018. február 18. Minimum és maximumkeresés u s i n g n a m e s p a c e s t d ; i n t main ( ) { c o u t
SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS
SZÁMÍTÓGÉPES PROBLÉMAMEGOLDÁS 2.ELŐADÁS A VB programozási nyelv Az Excel programozása 2 A VB programozási nyelv Adattípusok Adatok kezelése Vezérlőszerkezetek Adattípusok és műveletek Egész adattípusok
sallang avagy Fordítótervezés dióhéjban Sallai Gyula
sallang avagy Fordítótervezés dióhéjban Sallai Gyula Az előadás egy kis példaprogramon keresztül mutatja be fordítók belső lelki világát De mit is jelent, az hogy fordítóprogram? Mit csinál egy fordító?
AWK programozás Bevezetés
09 AWK programozás Bevezetés AWK adatvezérelt szkriptnyelv text processing, adat kiterjesztés, tagolt adatok automatizált soronkénti feldolgozása a forrásállományt soronként beolvassa és feldolgozhatóvá
Vezérlési szerkezetek
Vezérlési szerkezetek Szelekciós ok: if, else, switch If Segítségével valamely ok végrehajtását valamely feltétel teljesülése esetén végezzük el. Az if segítségével valamely tevékenység () végrehajtását
5. előadás. Programozás-elmélet. Programozás-elmélet 5. előadás
Elemi programok Definíció Az S A A program elemi, ha a A : S(a) { a, a, a, a,..., a, b b a}. A definíció alapján könnyen látható, hogy egy elemi program tényleg program. Speciális elemi programok a kövekezők:
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Az Integrált Fejlesztői Környezet C++ alapok Az Integrált Fejlesztői Környezet Visual Studio 2013 Community Edition Kitekintés: fordítás Preprocesszor Fordító
A C programozási nyelv II. Utasítások. A függvény.
A C programozási nyelv II. Utasítások. A függvény. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv II (Utasítások, fuggvények) CBEV2 / 1 Kifejezés utasítás Kifejezés utasítás, blokk
A C# programozási nyelv alapjai
A C# programozási nyelv alapjai Tisztán objektum-orientált Kis- és nagybetűket megkülönbözteti Ötvözi a C++, Delphi, Java programozási nyelvek pozitívumait.net futtatókörnyezet Visual Studio fejlesztőkörnyezet
Pénzügyi algoritmusok
Pénzügyi algoritmusok A C++ programozás alapjai Tömbök (3. rész) Konstansok Kivételkezelés Tömbök 3. Többdimenziós tömbök Többdimenziós tömbök int a; Többdimenziós tömbök int a[5]; Többdimenziós tömbök
Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás
Járműfedélzeti rendszerek II. 4. előadás Dr. Bécsi Tamás 6. Struktúrák A struktúra egy vagy több, esetleg különböző típusú változó együttese, amelyet a kényelmes kezelhetőség céljából önálló névvel látunk
Programozás C és C++ -ban
Programozás C és C++ -ban 2. További különbségek a C és C++ között 2.1 Igaz és hamis A C++ programozási nyelv a C-hez hasonlóan definiál néhány alap adattípust: char int float double Ugyanakkor egy új
Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok
Formális módszerek GM_IN003_1 Program verifikálás, formalizmusok Program verifikálás Konkurens programozási megoldások terjedése -> verifikálás szükséges, (nehéz) logika Legszélesebb körben alkalmazott
Karakterkészlet. A kis- és nagybetűk nem különböznek, a sztringliterálok belsejét leszámítva!
A PL/SQL alapelemei Karakterkészlet Az angol ABC kis- és nagybetűi: a-z, A-Z Számjegyek: 0-9 Egyéb karakterek: ( ) + - * / < > =! ~ ^ ; :. ' @ %, " # $ & _ { }? [ ] Szóköz, tabulátor, kocsivissza A kis-
Függvények. Programozás I. Hatwágner F. Miklós november 16. Széchenyi István Egyetem, Gy r
Programozás I. Széchenyi István Egyetem, Gy r 2014. november 16. Áttekintés kel kapcsolatos fogalmak deklaráció Több, kompatibilis változat is elképzelhet. Meg kell el znie a fv. hívását. Mindenképp rögzíti
Programozás alapjai gyakorlat. 4. gyakorlat Konstansok, tömbök, stringek
Programozás alapjai gyakorlat 4. gyakorlat Konstansok, tömbök, stringek Házi ellenőrzés (f0069) Valósítsd meg a linuxos seq parancs egy egyszerűbb változatát, ami beolvas két egész számot, majd a kettő
S z á m í t ó g é p e s a l a p i s m e r e t e k
S z á m í t ó g é p e s a l a p i s m e r e t e k 7. előadás Ami eddig volt Számítógépek architektúrája Alapvető alkotóelemek Hardver elemek Szoftver Gépi kódtól az operációs rendszerig Unix alapok Ami
7. fejezet: Mutatók és tömbök
7. fejezet: Mutatók és tömbök Minden komolyabb programozási nyelvben vannak tömbök, amelyek gondos kezekben komoly fegyvert jelenthetnek. Először is tanuljunk meg tömböt deklarálni! //Tömbök használata
Aritmetikai kifejezések lengyelformára hozása
Aritmetikai kifejezések lengyelformára hozása Készítették: Santák Csaba és Kovács Péter, 2005 ELTE IK programtervező matematikus szak Aritmetikai kifejezések kiértékelése - Gyakran felmerülő programozási
ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK
ALGORITMIKUS SZERKEZETEK ELÁGAZÁSOK, CIKLUSOK, FÜGGVÉNYEK 1. ELÁGAZÁSOK ÉS CIKLUSOK SZERVEZÉSE Az adatszerkezetek mellett a programok másik alapvető fontosságú építőkövei az ún. algoritmikus szerkezetek.
5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI
5. KOMBINÁCIÓS HÁLÓZATOK LEÍRÁSÁNAK SZABÁLYAI 1 Kombinációs hálózatok leírását végezhetjük mind adatfolyam-, mind viselkedési szinten. Az adatfolyam szintű leírásokhoz az assign kulcsszót használjuk, a
Kifejezések. Kozsik Tamás. December 11, 2016
Kifejezések Kozsik Tamás December 11, 2016 Kifejezés versus utasítás C/C++: kifejezés plusz pontosvessző: utasítás kiértékeli a kifejezést jellemzően: mellékhatása is van például: értékadás Ada: n = 5;
1. Template (sablon) 1.1. Függvénysablon Függvénysablon példányosítás Osztálysablon
1. Template (sablon) 1.1. Függvénysablon Maximum függvény megvalósítása függvénynév túlterheléssel. i n l i n e f l o a t Max ( f l o a t a, f l o a t b ) { return a>b? a : b ; i n l i n e double Max (
Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter
Adatszerkezetek Tömb, sor, verem Dr. Iványi Péter 1 Adat Adat minden, amit a számítógépünkben tárolunk és a külvilágból jön Az adatnak két fontos tulajdonsága van: Értéke Típusa 2 Adat típusa Az adatot
Programozási nyelvek a közoktatásban alapfogalmak I. előadás
Programozási nyelvek a közoktatásban alapfogalmak I. előadás Szempontok Programozási nyelvek osztályozása Felhasználói kör (amatőr, professzionális) Emberközelség (gépi nyelvektől a természetes nyelvekig)
A félév során előkerülő témakörök
A félév során előkerülő témakörök rekurzív algoritmusok rendező algoritmusok alapvető adattípusok, adatszerkezetek, és kapcsolódó algoritmusok dinamikus programozás mohó algoritmusok gráf algoritmusok
C programozási nyelv Pointerek, tömbök, pointer aritmetika
C programozási nyelv Pointerek, tömbök, pointer aritmetika Dr. Schuster György 2011. június 16. C programozási nyelv Pointerek, tömbök, pointer aritmetika 2011. június 16. 1 / 15 Pointerek (mutatók) Pointerek
Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás
Járműfedélzeti rendszerek II. 2. előadás Dr. Bécsi Tamás 4.11. A C előfeldolgozó rendszer A fordítás első lépése a C esetében a különböző nyelvi kiterjesztések feldolgozása: másik állomány tartalmának
Tömbök kezelése. Példa: Vonalkód ellenőrzőjegyének kiszámítása
Tömbök kezelése Példa: Vonalkód ellenőrzőjegyének kiszámítása A számokkal jellemzett adatok, pl. személyi szám, adószám, taj-szám, vonalkód, bankszámlaszám esetében az elírásból származó hibát ún. ellenőrző
Kifejezések. A programozás alapjai előadás. Operátorok. Kifejezések. Operátorok precedenciája. Operátorok precedenciája
A programozás alapjai 1 Kifejezések 5. előadás Híradástechnikai Tanszék Operandusok Literál Azonosító Kifejezés Kifejezések Precedencia Melyik hajtódik először végre? Asszociativitás Balról jobbra vagy
A C programozási nyelv III. Pointerek és tömbök.
A C programozási nyelv III. Pointerek és tömbök. Miskolci Egyetem Általános Informatikai Tanszék A C programozási nyelv III. (Pointerek, tömbök) CBEV3 / 1 Mutató (pointer) fogalma A mutató olyan változó,
SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók
SQL*Plus Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP dolgozó), DEPT osztály) "közönséges" felhasználók Adatszótár: metaadatokat tartalmazó, csak olvasható táblák táblanév-prefixek: