Papp Róbert

Vezérlési szerkezetek C/C++-ban és szerkezeti diagramon

Mi a vezérlési szerkezet neve, szerkezeti ábrája és kódolása C-ben a szerkezeti ábra jelöléseit használva?

Szekvenciális vezérlés

                      +-----+
                      |  P  |
                      +--+--+
                         |
     +----------------+--+--------------------+
     |                |                       |
 +---+--+         +---+--+                +---+--+
 |  M1  |         |  M2  |     . . .      |  Mn  |
 +------+         +------+                +------+
  C-ben
----------
{
   M1;
   M2;
   ...
   Mn;
}

Szelekciós vezérlések

Egyszerű szelekciós vezérlés egyébként ággal

                    +-------+
                    |   F   |
                    |---+---|
                    | i | h |
                    +-+-+-+-+
                      |   |
               +------+   +------+
               |                 |
            +--+--+           +--+--+
            |  A  |           |  B  |
            +-----+           +-----+
  C-ben
----------
if (F) {
    A;
} else {
    B;
}

Többszörös szelekciós vezérlés egyébként ággal

                  +---------+
                  |         |
                  |---------|
                  |    ?    |
                  +----+----+
                       |
        +------+-------+--------+------+
        |      |                |      |  
       F1     F2               Fn      |  
        |      |                |      |  
      +-+--+ +-+--+           +-+--+ +-+-+
      | A1 | | A2 |   . . .   | An | | B |
      +----+ +----+           +----+ +---+
  C-ben
----------
if (F1) {
    A1;
} else if (F2) {
    A2;
...
} else if (Fn) {
    An;
} else {
    B;
}

Esetkiválasztásos szelekciós vezérlés egyébként ággal

                  +---------+
                  |    K    |
                  |---------|
                  |    ?    |
                  +----+----+
                       |
        +------+-------+--------+------+
        |      |                |      |  
       H1     H2               Hn      |  
        |      |                |      |  
      +-+--+ +-+--+           +-+--+ +-+-+
      | A1 | | A2 |   . . .   | An | | B |
      +----+ +----+           +----+ +---+
  C-ben
----------
switch (K) {
case H1:
    A1;
    break;
case H2:
    A2;
    break;

...

case Hn:
    An;
    break;
default:
    B;
    break;
}
Ha a H1 halmaz nem egyelemű, hanem elemei x1,x2, ... ,xm
ekkor az első esetet így kódoljuk
  C-ben
----------
case x1:
case x2:
  ...
case xm:
   A1;
   break;

Ismétléses vezérlések

Kezdőfeltételes ismétléses vezérlés

          -----
         (  F  )
          --+--
            |
         +--+--+
         |  M  |
         +-----+
  C-ben
----------
while (F) {
    M;
}

Végfeltételes ismétléses vezérlés

          ---
         (  F  
          --+
            |
         +--+--+
         |  M  |
         +-----+
  C-ben
----------
do {
    M;
} while (!F);

Növekvő számlálásos ismétléses vezérlés

      -------------
     ( i := a -> b )
      ------+------
            |
         +--+--+
         |  M  |
         +-----+
  C-ben
----------
for ( i = a; i <= b; i++ ) {
    M;
}

Csökkenő számlálásos ismétléses vezérlés

      -------------
     ( i := a <- b )
      ------+------
            |
         +--+--+
         |  M  |
         +-----+
  C-ben
----------
for ( i = b; i >= a; i-- ) {
    M;
}

Hurok ismétléses vezérlés

                         ---------
                        (         )
                         ----+----
                             |
  +---------+--------+-------+----+-------------+--------+
  |         |        |            |             |        |
+-+--+   ---+---   +-+--+      ---+---       ---+---  +--+-+
| M0 |    \ F1 /   | M1 | ...   \ Fi /   ...  \ Fn /  | Mn |
+----+     \  /    +----+        \  /          \  /   +----+
            \/                    \/            \/  
          +-+--+                +-+--+        +-+--+     
          | K1 |                | Ki |        | Kn |
          +----+                +----+        +----+
  C-ben
----------
while (1) {
   M0; 
   if (F1) {
       K1; 
       break;
   }
   M1;

   ...

   if (Fn) {
       Kn;
       break;
   }
   Mn;
}

Diszkrét ismétléses vezérlés

                            --------
                           ( x in H )
                            ---+----
                               |
                             +-+-+
                             | M |
                             +---+

A diszkrét ismétléses vezérlésnek nincs közvetlen megvalósítása
C nyelvben. A megvalósítás elsősorban attól függ, hogy az ismétlési
feltételben megadott halmazt hogyan reprezentáljuk.
© All rights reserved by TWiStEr & PaulikR. Köszönöm -[PaulikR]-nek a segítséget!