Kihagyás

Folyamatábra és struktúradiagram kapcsolata

Folyamatábra és struktúradiagram

Az eddigiekben minden vezérlési szerkezetre megadtuk azt a folyamatábrát, amely megadta, hogy a vezérlési folyam információ hogyan adódik át egyik utasításról a másikra. A struktúradiagramban pedig megadtuk azt, hogy az adott feladat hogyan darabolható fel részproblémákra.

A két diagram az adott probléma megoldását két külön nézőpontból írja le, ugyanakkor be lehet bizonyítani, hogy egyenértékűek olyan szempontból, hogy minden algoritmus, amely szerkezeti ábrával leírható, az leírható folyamatábrával is, és fordítva.

Szerkezeti ábrához folyamatábra

Minden vezérlési szerkezetet meg tudtunk adni folyamatábrával is. Ezek után viszont egy szerkezeti ábrát a hierarchia mentén át lehet írni folyamatábrává: amikor a szerkezeti ábrán egy P problémát valamilyen vezérlés szerint részproblémákra bontunk, akkor a folyamatábrán a P-hez tartozó egyetlen M műveletet helyére a vezérlési szerkezetnek megfelelő folyamatábrát kötjük be, az M bemenő éleit a részletező folyamatábra Start utáni első, azM kimenő éleit pedig a Stop előtti utolsó elemhez hozzákötve.

Mivel egy-egy eljárás szerkezeti ábrája megadható csupán a szekvenciális, egyszerű szelekciós és kezdőfeltételes ismétléses vezérlések használatával (ahogy azt korábban láttuk), elegendő lenne ehhez a háromhoz megadni a megfelelő folyamatábrát. Ezt pedig megtettük mindhárom esetben.

A szekvenciális vezérlés folyamatábrája:

kep

A szelekciós vezérlés folyamatábrája:

kep

Az ismétléses vezérlés folyamatábrája:

kep

Folyamatábrához szerkezeti ábra

Megmutatjuk, hogy fordítva is igaz, tehát a folyamatábrával leírt algoritmusok megadhatók a megismert vezérlési módokat használva, vagyis készíthető hozzájuk szerkezeti ábra. Legyen G egy folyamatábra (M, F) felett, amely pontjainak száma n. Azaz G egy olyan gráf, amely csomópontjait az M műveletei és az F feltételei alkotják. Sorszámozzuk meg a gráf pontjait úgy, hogy a Start pont sorszáma 0, a Stop pont sorszáma n legyen legyen, és a Start pontból kivezető él az 1. pontba vezessen. A pont legyen egy, a leírt algoritmusban nem használt új, egész típusú változó.

Tekintsük az alábbi C programot:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
{
    int pont = 0;
    while (pont != n) {
        switch (pont) {
        case 0  : pont = 1; break;
        case 1  : U1; break;
        ...
        case i: Ui; break;
        ...
        case n  : /* Stop */ break;
        } /* switch */
    } /* while */
}

Az Ui utasítás alakja legyen a következő!

  • Ha az i. pontban a folyamatábrán egy Mi művelet volt, és a belőle kiinduló pont a a j. pontba vezetett, akkor Ui helyére írjuk az {Mi;pont = j;} utasításokat.
  • Ha az i. pontban az Fi feltétel volt, és az igennel címkézett él a j., a nemmel címkézett él pedig a k. pontba vezetett, akkor Ui helyére az if (Fi§) { pont = j; } else { pont = k; } utasítás kerüljön.

Ezzel az átírással a G gráffal megadott algoritmussal ekvivalens kódot kapunk, amire felírható a megfelelő szerkezeti ábra.


Utolsó frissítés: 2022-11-25 15:25:14