Цикл с предусловием ( while ) и постусловием ( repeat )

обучение PascalABC

При составлении программ часто возникает необходимость сократить запись кода при повторении однообразных команд. А когда количество их повторений заранее неизвестно и определяется некоторым условием, то можно использовать структуру — цикл с предусловием или цикл с постусловием.

Цикл — одна из форм управляющих конструкций в языках программирования. Используется для многократного выполнения набора команд.

Цикл с предусловием ( while do )

На рисунке ниже представлена блок-схема цикла с предусловием. Другие названия цикла: цикл-пока, цикл с заданным условием продолжения работы.

Особенность данного вида цикла while : операторы цикла будут повторяться до тех пор, пока условие истинно. Его проверка делается каждый раз перед выполнением операторов цикла. Цикл может ни разу не выполниться, если его условие ложно.

цикл с предусловием while pascal
Цикл while pascal

На рисунке показано два варианта записи данной структуры на языке программирования Паскаль:

  • с использованием операторных скобок (begin end), выполнение двух и более команд;
  • запись с одной командой.

Задачи на циклы Паскаль

Задание 1. Даны два положительных числа A и B (A > B). На отрезке длины A размещено максимально возможное количество отрезков длины B (без
наложений). Не используя операции умножения и деления, найдите длину незанятой части отрезка A.

Решение:
Вариант 1

program cycle1;
var a,b:real; {a,b - вещественные числа }
begin
  read(a,b); { ввод исходных значений длин отрезков }
    while a > b do a:=a-b; { цикл - вычисление остатка отрезка А }
  write(a); { вывод остатка отрезка А }
end.

Вариант 2 (с подсказками)

program cycle1;
var a,b:real;
begin
  write('Введите длину отрезка А '); { вывод текстовой подсказки на экран }
  readln(a); { ввод исходного значения длины отрезка А }
  write('Введите длину отрезка В '); { вывод текстовой подсказки на экран }
  readln(b); { ввод исходного значения длины отрезка В }
    while a > b do a:=a-b; { цикл - вычисление остатка отрезка А }
  write('Длина незанятой части отрезка А равна ',a); { вывод остатка отрезка А }
end.

Задание 2.  Найти сумму ряда чисел с точностью (ε=10**-6).

  • 1 ряд: 1/1*2 + 1/2*4 +1/3*6…
  • 2 ряд: 1/1*2*3 + 1/2*3*4 + 1/3*4*5….
  • 3 ряд: 1/1*3 + 1/2*4 +1/3*5…

Решение для 1 ряда:

var a,ap,s:real;{а - текущий элемент, ар - предыдущий элемент}
   i:integer;{счетчик элементов ряда}
begin
   s:=0;{первоначальная сумма}
   i:=1;{начинаем ряд с первого элемента}
   a:=0;{ это значение нужно для запуска цикла}
   ap:=1;{это значение нужно для запуска цикла}
while Abs(a-ap)>1e-6 do {модуль разницы между соседними должен быть больше заданной точности для работы цикла}
 begin
   ap:=a;{запоминаем предыдущий элемент}
   a:=1/(i*i*2);{вычисляем текущий элемент}
   s:=s+a;{считаем сумму}
   i:=i+1;{переходим к следующему}
 end;
write('Сумма ряда = ',s);{вывод результата}
end.

Формула текущего элемента для второго ряда a:=1/(i*(i+1)*(i+2)); для третьего — a:=1/(i*(i+2));

Вычисление суммы ряда с определенной точностью ε означает, что сумма ряда вычисляется до тех пор, пока модуль разности между текущим и предыдущим членом последовательности больше ε. В виде формулы это утверждение можно записать так:|a – aр| > ε, то есть пока это выражение истинно, вычисления продолжаются.
 

Цикл с постусловием ( repeat )

На рисунке ниже представлена блок-схема цикла с постусловием. Другие названия цикла: цикл-до, цикл с заданным условием окончания работы.

Особенность данного вида цикла ( repeat ) — операторы цикла будут повторяться до тех пор, пока условие ложно. Его проверка делается каждый раз после выполнения операторов цикла. Команды, входящие в тело цикла, всегда выполняются хотя бы один раз.

цикл repeat паскаль
Цикл с постусловием Паскаль

Задание 3. Дано целое число N (>0). Найти наименьшее целое положительное число K, квадрат которого превосходит N: K2 > N. Функцию извлечения квадратного корня не использовать.

Решение:

program cycle2;
var n,k:integer; { n - заданное целое, k - искомое число}
begin
read(n); { ввод значения числа N }
 repeat
   k:=k+1; { вычисление проверяемого числа }
 until k*k > n; { проверка найденного числа на соответствие условию завершения цикла}
write(k); { вывод найденного числа }
end.

Задание 4. Дано натуральное число N. Найти сумму первой и последней цифры этого числа

Решение:

var a,c1,c2:int64;
begin
 write('Введите исходное число => ');
 readln(a);
 c1:=a mod 10;
 if a>9 then  
    while a>0 do
    begin
      c2:=a;
      a:=a div 10;
    end;
 write('Сумма первой и последней цифры = ',c1+c2);
end.

Задача 5. Покупатель должен заплатить в кассу S руб. У него есть купюры номиналом: 1,2,5,10,50,100,500. Сколько купюр разного номинала отдаст покупатель, если он начинает платить с самых крупных?

Посмотреть решение

var s,k500,k100,k50,k10,k5,k2,k1:integer;
begin
 read (s);
 while s>0 do
 begin
   if s>=500 then begin k500:=k500+1; s:=s-500;end else
    if s>=100 then begin k100:=k100+1; s:=s-100;end else
      if s>=50 then begin k50:=k50+1; s:=s-50;end else
        if s>=10 then begin k10:=k10+1; s:=s-10;end else
           if s>=5 then begin k5:=k5+1; s:=s-5;end else
             if s>=2 then begin k2:=k2+1; s:=s-2;end else
               if s>=1 then begin k1:=k1+1;s:=s-1;end;
 end;
 writeln('Купюра 500 - ',k500);
 writeln('Купюра 100 - ',k100);
 writeln('Купюра 50 - ',k50);
 writeln('Купюра 10 - ',k10);
 writeln('Купюра 5 - ',k5);
 writeln('Купюра 2 - ',k2);
 writeln('Купюра 1 - ',k1);
end.

Следующая тема для изучения Цикл с параметром

 

Рейтинг
( 29 оценок, среднее 4.59 из 5 )
Понравилась статья? Поделиться с друзьями:
Инфоучка
Добавить комментарий

15 − six =

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: