Практикум - Алгоритмы, реализуемые с помощью циклов типа ПОКА (WHILE)

Написано: вторник, 22 марта 2016 г. автор Dmitry Volk
0

С помощью циклов типа пока можно запрограммировать любые повторяющиеся фрагменты алгоритмов. Но на практике цикл типа пока чаще всего используют в двух следующих случаях:
  • Число повторений заранее не известно (например, цикл до достижения требуемой точности результата, цикл до первого отрицательного элемента массива и т.п.). Такой цикл называется циклом типа пока с прерыванием.
  • Число повторений заранее известно, но шаг параметра цикла не равен 1 (в школьном АЯ) или 1, -1 (в Pascal). Такой цикл называется циклом типа пока без прерывания.

Цикл типа пока с прерыванием

Язык
Пример
Пояснения

Школьный АЯ
i:=1; Flag:="Нет"
нц пока (i<=N) и (Flag="Нет")
    если A[i]<0
        то Flag:="Да"; k:=i
        иначе i:=i+1
    все
кц
Решается задача:
определить номер первого отрицательного элемента массива A(N). Здесь Flag — "управляющая" переменная литерного типа (можно с успехом использовать также логический или целый типы)

Pascal
i:=1; Flag:=FALSE;
While (i<=N) and not Flag do
  If A[i]<0 
    then begin
           Flag:=TRUE; k:=i
         end
    else i:=i+1;
Здесь Flag — переменная логического типа, принимающая значение ТRUE (истина) или FALSE (ложь),
and - операция 'и', not - операция 'не'

QВasic
i=1 : Flag=0
WHILE (i <= N) AND (Flag = 0)
  IF A(i)<0 THEN
      Flag=1 : k=i
    ELSE i=i+1
  END IF
WEND
Здесь Flag — переменная целого типа (в некоторых версиях QBasic можно использовать и логический тип, что предпочтительнее)

Цикл типа пока без прерывания

Язык
Пример
Пояснения

Школьный АЯ
        i:=1; S:=0
        нц пока i<=N
           S:=S+A[i]
           i:=i+2
        кц
Вычисляется сумма элементов массива A(N) 
с нечетными индексами. Число таких элементов заранее известно. Шаг параметра цикла равендвум

Pascal
        i:=1; S:=0;
        While i<=N do
          begin S:=S+A[i];
                i:=i+2
          end;
QВasic
 Лучше использовать цикл FOR: 
        S=0
        FOR I=1 TO N STEP 2
          S=S+A(I) 
        NEXT I
 
Для организации циклов типа пока можно также использовать:
  • в языке Pascal оператор цикла с постусловием Repeat...until:
     
    Repeat
      тело цикла
    until <условие завершения>
    Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла.
     
  • в языке QBasic операторы цикла DO WHILE ... LOOP и  DO UNTIL ...  LOOP (англ. LOOP - виток, петля):
     
    DO WHILE <условие продолжения>
      тело цикла
    LOOP
    Пока выполняется условие продолжения цикла, повторять тело цикла.
    DO UNTIL <условие завершения> 
      тело цикла
    LOOP
    Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла.

0 коммент.: