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

Cyklus s počtem opakování 1 až n (repeat)

Popis

Cyklus repeat použijeme, pokud počet jeho opakování není předem znám, ale víme, že musí proběhnout alespoň jedenkrát. Typická je reakce programu na uživatelský stisk klávesy (například výběr položky v menu).

Vývojový diagram

vyvojovy diagram prikazu repeat
Prováděj příkaz P1 dokud není splněna podmínka alfa.

Přirozený jazyk

Prováděj příkaz dokud není splněna podmínka.

JSA

  • Realizace pomocí instrukcí skoku:
    • opakování - nepodmíněný skok na začátek cyklu
    • ukončení - podmíněný skok za tělo cyklu při nesplněné podmínce


AT&T - do while cyklus[ gcc_dowhile.cpp ]
/*  - pocitani delky retezce (str)
 *  - retezec nesmi byt prazdny (do while)
 */

#include <stdio.h>  /* printf() */

char *str ="aaacba"; 

int main(int argc, char *argv[]) {
    int delka = 0;  /* pocet znaku v retezci */
    
    asm (
          "  movl $0, %%ecx ; "   /* ecx = 0  */   
          "  movl %1, %%esi ; "   /* nacteni retezce do (ds:esi) */
          "DO:  ;          "
          "  incl %%ecx ;     "   /* zvyseni poctu znaku o 1 (al!=0) */          
          "  lodsb ;          "   /* (al) = str[i]  */
          "  cmpb $0, %%al ;  "   /* porovnani znaku $0=='\0' s (al)*/
          "  jz ENDWHILE ;    "         
          "  jmp DO ;      "
          "ENDWHILE:  ;       "          
          "  movl %%ecx, %0 ; "   /*  delka = ecx  */
          
          :"=r" (delka)           /*  vystup do delka  */
          :"m" (str)              /*  vstup str */
          :"%eax","%esi", "%ecx"  /*  pouzite registry */
        ); 
             
        
    printf("delka (%s) je (%d) znaku", str, delka);
    
  return 0;
}

Pascal

  repeat
    p1; 
    p2; 
    ... 
    pN;
  until výraz;
  • 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é).
  • Opakování (provádění příkazů cyklu p1, p2, ... ,pn) končí vyhodnocením výrazu jako true.
  • Tělo cyklu repeat ... until tvoří složený příkaz.


čtení kláves[ repeat.pas ]
{ prikaz case - cteni klaves }
var
    ch : char; {nactena klavesa}
    konec : boolean;
begin
  konec := false;
  writeln('Stisknete znakovou klavesu a pote enter. ');
  writeln('Stisknete pouze enter pro ukonceni programu. ');

  repeat
    write('stisknete klavesu : ');
    readln(ch); {nacteni stisknute klavesy}
    case ch of
        ';' : writeln(' strednik ');
        '(', ')', '[', ']' : writeln(' zavorka ',ch);
        '0'..'9' : writeln(' cislice ',ch);
        'a'..'z' : writeln(' male pismeno ',ch);
        'A'..'Z' : writeln(' velke pismeno ',ch);
        else
            konec := true; {jina klavesa = konec}
    end;
  until konec;
end.

C/C++

do příkaz while (výraz)
  • Opakování (provádění příkazu) probíhá dokud je výraz vyhodnocen jako nenulový.
  • Příkaz continue přeskočí všechny ostatní příkazy posloupnosti příkazů cyklu a pokračuje další iterací nejbližšího cyklu.
  • Příkaz break předčasně ukončí nejbližší cyklus.


dowhile[ dowhile.cpp ]
// prikaz do ... while

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

int main (int argc, char *argv[]) {
    int i = 1;
    do {
        printf(" index %d\n", i);
        if(i==3)
            break; //ukonceni pri hodnote 3 
        i++; 
    } while (i <= 5);  
}

Java

do příkaz while (výraz)
  • Hodnotou výrazu musí být typ boolean (nebo Boolean): výsledek relačních operátorů nebo datový typ boolean.
  • Opakování (provádění příkazu) probíhá dokud je výraz vyhodnocen jako true.
  • Příkaz continue přeskočí všechny ostatní příkazy posloupnosti příkazů cyklu a pokračuje další iterací nejbližšího cyklu.
  • Příkaz break předčasně ukončí nejbližší cyklus.


cyklus do while[ testdowhile.java ]
/*
 * testdowhile.java
 */

package statements;

public class testdowhile {
    public testdowhile() {
    }
    public static void main(String[] args) {
        int i=1;
        do {
            System.out.println(" index: "+i);                         
            if(i==3)
                break; //ukonceni pri hodnote 3
            i++;                        
        } while(i<5);
    }                    
}

JavaScript

do příkaz while (výraz)
  • Opakování (provádění příkazu) probíhá dokud je výraz vyhodnocen jako nenulový.
  • Příkaz continue přeskočí všechny ostatní příkazy posloupnosti příkazů cyklu a pokračuje další iterací nejbližšího cyklu.
  • Příkaz break předčasně ukončí nejbližší cyklus.


do ... while[ dowhile.html ]
<html>            
  <head>
    <title>Cyklus while</title>
  </head>
  
  <body>
    <script type="text/javascript">
      var i = 0;
      
      do {
          i++;       
          if(i==3)
              continue; //preskoceni hodnoty 3
          document.write(" index: "+i+"<br/>");              
      } while(i < 5);
    </script>
  </body>
</html>

Matlab

PHP

do příkaz while (výraz)
  • Opakování (provádění příkazu) probíhá dokud je výraz vyhodnocen jako TRUE.
  • Příkaz continue přeskočí všechny ostatní příkazy posloupnosti příkazů cyklu a pokračuje další iterací nejbližšího cyklu.
  • Příkaz break předčasně ukončí nejbližší cyklus.


do ... while[ dowhile.php ]
<html>            
  <head>
    <title>Cyklus do...while</title>
  </head>
  
  <body>
    <?php
      $i=1;
      do {
        echo " i $i <br/>";             
        $i++;        
      } while ($i<=5);
    ?>
  </body>
</html>

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