english version while1 - stránky o programování

Úplný podmíněný příkaz (if else)

Popis

Úplný podmíněný příkaz umožňuje vybrat k realizaci jeden ze dvou příkazů na základě splnění nebo nesplnění podmínky. Podmínku tvoří výraz jehož výsledkem je nejčastěji logický typ (boolean) s hodnotou true (podmínka byla splněna) nebo false (podmínka nebyla splněna). Hodnotou výrazu může být i celočíselný typ s hodnotou 0 (podmínka nebyla splněna) nebo různé od 0 (podmínka byla splněna).

Vývojový diagram

vyvojovy diagram prikazu if else
provedení příkazu P1 nebo P2 podle výsledku podmínky alfa

Přirozený jazyk

Proveď příkaz pokud je podmínka splněna. Jinak proveď alternativní příkaz.

JSA

Hodnotu výrazu rozhodující o cestě řízení programu lze vytvořit libovolnou instrukcí ovlivňující registr příznaků. Část programu, kterou je potřeba vynechat při nesplnění podmínky přeskočíme některou z instrukcí podmíněných skoků.



Intel - přiřazení většího čísla[ asm_ifelse.cpp ]
// - zjisteni vetsiho cisla (se znamenkem na 32-bitu)
// - vetsi cislo bude ulozeno do registru (ecx)
#include <stdio.h>

int main(int argc, char *argv[]) {
    int a = 2;
    int b = -5;
    int c;     //maximum (a),(b)

    __asm 
    {
      mov  eax, a    // ulozeni (a) do registru (eax)
      mov  ebx, b    // ulozeni (b) do registru (ebx)
      cmp  eax, ebx  // porovnani (a) s (b)
      jge  IS_A      // (a) je vetsi nebo rovno (b) - skok na navesti IS_A
      mov  ecx, ebx  // else: (b) je vetsi nez (a)
      jmp  END_IF    // preskoceni prikazove casti if
    IS_A:
      mov  ecx, eax  // if:   (a) je vetsi nebo rovno (b)
    END_IF: 
      mov  c, ecx   //  ulozeni vetsiho cisla do (c)
    }

    printf(" vetsi z cisel %d a %d je %d \n", a, b, c);

    return 0;
}



AT&T - přiřazení většího čísla[ gcc_ifelse.cpp ]
/*  - soucet nebo rozdil dvou cisel (se znamenkem na 32-bitu)
 *  - vysledek
 */
#include <stdio.h> /* printf() */

int main(int argc, char *argv[]) {
    int a = 2;
    int b = 10;
    int result;  /* vysledek (a) {+,-} (b) */
    
    /* kod operace (op)
     *   + ... 0
     *   - ... 1
     */
    int op = 1;  
    
    asm (
          "  movl %3, %%eax ; "  /*  eax = op   */
          "  cmp  $1, %%eax ; "  /*  porovnani registru eax s 1 (eax-1)*/
          "  jz  MINUS ; "       /*  skok na navesti MINUS pri (eax==1) */
          
        /* else : soucet */    
          "  movl %1, %%eax ; "   /*  eax = a */   
          "  movl %2, %%ebx ; "   /*  ebx = b */   
          "  addl %%ebx, %%eax ; "/*  eax = eax + ebx */   
          "  jmp  ENDIF ; "       /*  skok na navesti ENDIF */          
          
        /* if : rozdil */        
          "MINUS:  ; "          
          "  movl %1, %%eax ; "   /*  eax = a */   
          "  movl %2, %%ebx ; "   /*  ebx = b */   
          "  subl %%ebx, %%eax ; "/*  eax = eax - ebx */   
          
          "ENDIF:  ; "
          "  movl %%eax, %0 ; "   /*  result = eax  */  
          
          :"=r"(result)            /*  vystup do result  */
          :"r"(a), "r"(b), "r"(op) /*  vstup a, b, op */
          :"%eax","%ebx"           /*  pouzite registry */
        ); 
             
        
    if(op)
      printf("vysledek %d - %d = %d", a, b, result);
    else
      printf("vysledek %d + %d = %d", a, b, result);
    
  return 0;
}

Pascal

if výraz then příkaz else příkaz
  • Hodnotou výrazu musí být typ boolean: výsledek relačních operátorů nebo datový typ boolean.
  • Vyhodnocení výrazu podle překladače (zkrácené/úplné).
  • Před else nesmí být středník (;).
  • else se váže k prvnímu if, které je zatím volné (bez alternativního else).


přiřazení většího čísla[ ifelse.pas ]
{ prikaz if else - zjisteni vetsiho cisla }
var
     a,b : integer;
     c   : integer; {maximum a,b}

begin
    a := 7;
    b := 5;

    if a > b then
        c:=a  {do c uloz hodnotu a, je-li a vetsi nez b}
    else
        c:=b; {jinak do c uloz hodnotu b (a neni vetsi nez b) }

    writeln('vetsi z ',a,' a ',b,' je ', c);
end.



výpis většího čísla nebo stejných čísel[ ifelse2.pas ]
{ prikaz if else - zjisteni vetsiho nebo stejneho cisla }
var
     a,b : integer;

begin
    a := 2;
    b := 5;

    if a = b then
        writeln('cisla ',a,' a ',b,' jsou si rovna')
    else
    if a > b then
        writeln('vetsi z ',a,' a ',b,' je ', a)
    else
        writeln('vetsi z ',a,' a ',b,' je ', b);
end.

C/C++

if (výraz) příkaz1 else příkaz2
  • Příkaz1 je proveden pokud je hodnota výrazu nenulová (výraz!=0), jinak je proveden alternativní příkaz za else.
  • Relační operátory vrací hodnotu 1, když je srovnání pravdivé, jinak vrací hodnotu 0.
  • Ve výrazu lze použít:
    • operátor přiřazení (=), jehož hodnotou bude přiřazovaná hodnota (pozor na ozávorkování kvůli precedenci operátorů )
    • samostatnou celočíselnou proměnnou nebo konstantu
    • nebo jiný aritmetický výraz s celočíselným výsledkem


if else[ ifelse.cpp ]
// prikaz if else

#include <stdio.h> //knihovna s funkci printf() 

int main (int argc, char *argv[]) {
   int a=2, b=3;
   int max;
   
   if(a > b)
       max = a;  
   else
       max = b;  

   printf(" vetsi z cisel (%d, %d) je %d", a, b, max);
}

Java

if (výraz) příkaz else příkaz
  • Hodnotou výrazu musí být typ boolean (nebo Boolean): výsledek relačních operátorů nebo datový typ boolean.


if else[ testifelse.java ]
/*
 * testifelse.java
 */

package statements;

public class testifelse {
    public testifelse() {
    }
    
    public static void main(String[] args) {
        int a=2, b=3;
        int max;
        
        if(a > b)
            max = a; 
        else
            max = b; 
        
        System.out.println(" vetsi z cisel ("+a+", "+b+") je "+max);        
    }    
}

JavaScript

if (výraz) příkaz else příkaz
  • Příkaz je proveden pokud je hodnota výrazu nenulová (výraz!=0).
  • Relační operátory vrací hodnotu 1, když je srovnání pravdivé, jinak vrací hodnotu 0.
  • Ve výrazu lze použít:
    • operátor přiřazení (=), jehož hodnotou bude přiřazovaná hodnota (pozor na ozávorkování kvůli precedenci operátorů )
    • samostatnou celočíselnou proměnnou nebo konstantu
    • nebo jiný aritmetický výraz s celočíselným výsledkem


if else[ ifelse.html ]
<html>            
  <head>
    <title>Úplný podmíněný příkaz</title>
  </head>
  
  <body>
    <script type="text/javascript">
      var a=2, b=3; 
      var max;
      
      if(a > b)
          max = a; 
      else    
          max = b; 
          
      document.write("vetsi z cisel "+a+" a "+b+" je "+max+" <br/>");
    </script>
  </body>
</html>

Matlab

  if logický_výraz  
      p1; 
      ...
      pN; 
  else    
      e_p1; 
      ...
      e_pN;   
  end
  • Hodnotou výrazu musí být typ logical : výsledek relačních operátorů nebo datový typ logical.
  • Jiné typy než logical budou na tento typ převedeny. Hodnotu true (1) mají typy jejichž všechny prvky jsou nenulové. Prázdné pole bude vyhodnoceno jako false (0).


výběr většího čísla[ mifelse.m ]
%prikaz if else - zjisteni vetsiho cisla
a = 2;
b = 5;

if a > b
    max = a;
else
    max = b; 
end

disp(sprintf('vetsi cislo z %d a %d je %d', a, b, max));

  • Další alternativní podmínka if se zapisuje elseif.


výpis většího nebo stejného čísla[ mifelseif.m ]
%prikaz if elseif - vypis vetsiho nebo stejneho cisla
a = 7;
b = 5;

if a == b
    disp(sprintf('cisla %d a %d jsou si rovna', a, b));
elseif a > b
    disp(sprintf('cislo %d je vetsi nez %d', a, b));
else
    disp(sprintf('cislo %d je vetsi nez %d', b, a));
end

PHP

if (výraz) příkaz else příkaz
if (výraz): příkazy elseif: příkazy else: příkazy endif;
  • Hodnotou výrazu musí být typ boolean : výsledek relačních operátorů nebo datový typ boolean.
  • Jiné typy než boolean budou na tento typ převedeny.


html[ ifelse.php ]
<html>            
  <head>
    <title>Úplný podmíněný příkaz</title>
  </head>
  
  <body>
    <?php
      $a = 2;
      $b = 3;

      
      if($a > $b)
        $max = $a;
      else  
        $max = $b;

      echo "vetsi z cisel $a a $b je $max";
    ?>
  </body>
</html>

Kontakt
Prohlášení o dostupnosti
Tisk stránky
Autor: Václav Bubník © 2005
vbubnik@post.cz
XHTML 1.0| CSS