Практикум - Алгоритмы, реализуемые с помощью циклов типа ПОКА (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
    Повторять тело цикла до тех пор, пока не выполнится условие завершения цикла.

Вложенные циклы и их особенности

Написано: пятница, 4 марта 2016 г. автор Dmitry Volk
0

Возможны случаи, когда внутри тела цикла необходимо повторять некоторую последовательность операторов, т. е. организовать внутренний цикл. Такая структура получила название цикла в цикле или вложенных циклов. Глубина вложения циклов (то есть количество вложенных друг в друга циклов) может быть различной.
При использовании такой структуры для экономии машинного времени необходимо выносить из внутреннего цикла во внешний все операторы, которые не зависят от параметра внутреннего цикла.

Пример вложенных циклов   для  

Вычислить сумму элементов заданной матрицы А(5,3).
 
            Матрица А          

 S := 0;
 нц для i от 1 до 5
   нц для j от 1 до 3
     S:=S+A[i,j]
   кц
 кц

Пример вложенных циклов   пока  

Вычислить произведение тех элементов заданной матрицы A(10,10), которые расположены на пересечении четных строк и четных столбцов.
 
 i:=2; P:=1
 нц пока i <= 10
   j:=2
   нц пока j <= 10
     P:=P*A[i,j]
     j:=j+2
   кц
   i:=i+2
 кц