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

Neúplný podmíněný příkaz (if)

Popis

Neúplný podmíněný příkaz umožňuje vybrat k realizaci jeden příkaz na základě splně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
provedení příkazu P na základě splnění podmínky alfa

Přirozený jazyk

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

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ů.

NASM



porovnání dvou čísel[ if2.asm ]
; porovnani dvou cisel (bez znamenka 0..9)

bits 16
        
segment code 
..start: 
  mov ax, data	
  mov ds, ax 
  mov ax, stack 
  mov ss, ax 
  mov sp, stacktop

; porovnani s ulozenim vetsiho cisla do reg (al)        
  mov  al, 1   ; ulozeni (a) do registru (al)
  mov  bl, 5   ; ulozeni (b) do registru (bl)
  cmp  al, bl  ; porovnani 
  jae  skip    ; (a) je vetsi nebo rovno (b) - skok na navesti skip
  mov  al, bl  ; (b) je vetsi nez (a), prepis obsahu registru (al)
skip:
        
; vypis vetsiho cisla jako jeden ASCII znak
  add al, '0'  ; pricteni ASCII 0 (48) pro znakovy vypis
  mov dl, al
  mov ah, 2
  int 21h
	
; vypsani zpravy 'je vetsi'
  mov dx, strres
  mov ah, 9 
  int 21h
         
; cekani na stisk klavesy po vypsani zpravy
; vypsani zpravy
  mov dx, strwait 
  mov ah, 9 
  int 21h
  
; nacteni klavesy
  mov ah, 8		
  int 21h

; navrat do OS
  mov ah, 4ch  
  int 21h

segment data 
strres    	db ' je vetsi', 13, 10, '$'
strwait   	db 'Stisknete klavesu...', 13, 10, '$'
        
segment stack stack 
        resb 64 
stacktop:

vkládaný Intel



Intel - přiřazení většího čísla[ asm_if.cpp ]
// - zjisteni vetsiho cisla (bez znamenka 0..255)
// - vetsi cislo bude ulozeno v registru (al)
#include <stdio.h>

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

    __asm
    {
      mov  al, a   // ulozeni (a) do registru (al)
      mov  bl, b   // ulozeni (b) do registru (bl)
      cmp  al, bl  // porovnani (a) s (b)
      jae  IS_A    // (a) je vetsi nebo rovno (b) - skok na navesti IS_A
      mov  al, bl  // (b) je vetsi nez (a), prepis obsahu registru (al)
    IS_A:
      mov  c, al   //  ulozeni vetsiho cisla do (c)
    }

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

    return 0;
}

vkládaný AT&T



AT&T - přiřazení většího čísla[ gcc_if.cpp ]
/*  - zjisteni vetsiho cisla (bez znamenka 0..255)
 *  - vetsi cislo bude ulozeno v registru (al)
 */
#include <stdio.h> /* printf() */

int main(int argc, char *argv[]) {
    unsigned char a = 1;
    unsigned char b = 250;
    unsigned char max;  /* maximum z (a),(b) */
    
    asm (
          "  movb %1, %%al ; "   /*  al = a   */
          "  movb %2, %%bl ; "   /*  bl = b   */
          "  cmp  %%bl, %%al ; " /*  porovnani registru al s bl */
          "  jae  MAX_A ; "      /*  skok na navesti MAX_A pri (al>=bl)  */
          "  movb %%bl, %%al ; " /*  al = bl (bl je vetsi) */   
          "MAX_A:  ; "          
          "  movb %%al, %0 ; "   /*  max = al  */   
             
          :"=r"(max)           /*  vystup do max  */
          :"r"(a), "r"(b)      /*  vstup a,b */
          :"%al","%bl"         /*  pouzite registry */
        ); 
             
        
    printf("vetsi z (%d, %d) je %d", a, b, max);
    
  return 0;
}

Pascal

if výraz then 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řiřazení většího čísla[ if.pas ]
{ prikaz if - zjisteni vetsiho cisla }
var
     a,b : integer;
     c   : integer; {maximum a,b}

begin
    a := 7;
    b := 5;
    c := b;   {inicializace hodnotou b}

    {prepis c hodnotou a, je-li a vetsi nez b}
    if a > b then c:=a;

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

C/C++

if (výraz) 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[ if.cpp ]
// prikaz if

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

int main (int argc, char *argv[]) {
   int a=2, b=3;
   int max = b;  //inicializace maxima druhym cislem (b)
   
   if(a > max)
       max = a;  //prepsani maxima prvnim cislem pokud je vetsi

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

Java

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


if[ testif.java ]
/*
 * testif.java
 */

package statements;

public class testif {
    public testif() {
    }
    
    public static void main(String[] args) {
        int a=2, b=3;
        int max=b; //inicializace maxima druhym cislem (b)
        
        if(a > max)
            max = a;  //prepsani maxima prvnim cislem pokud je vetsi

        System.out.println(" vetsi z cisel ("+a+", "+b+") je "+max);        
    }    
}

JavaScript

if (výraz) 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[ if.html ]
<html>            
  <head>
    <title>Neúplný podmíněný příkaz</title>
  </head>
  
  <body>
    <script type="text/javascript">
      var a=2, b=3; 
      var max = b; //inicializace maxima druhym cislem (b)
      
      if(a > max)
          max = a; //prepsani maxima prvnim cislem pokud je vetsi 
          
      document.write("vetsi z cisel "+a+" a "+b+" je "+max+" <br/>");
    </script>
  </body>
</html>

Matlab

  if logický_výraz  
      p1; 
      p2; 
      ...
      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[ mif.m ]
%prikaz if - zjisteni vetsiho cisla
a = 2;
b = 5;
max = a; %inicializace maxima prvnim cislem

if b > max
    max = b;
end

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

PHP

if (výraz) příkaz
if (výraz): p1; p2; ... pN; 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[ if.php ]
<html>            
  <head>
    <title>Neúplný podmíněný příkaz</title>
  </head>
  
  <body>
    <?php
      $a = 2;
      $b = 3;
      $max = $b; // inicializace maxima
      
      if($a > $max)
        $max = $a;

      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