Мой сайт
Среда, 22.01.2025, 04:32
» Меню сайта
» Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

Операторы повтора

   Если в программе возникает необходимость неоднократно выполнить некоторые операторы, то используются операторы повтора (циклы). В языке Паскаль используются три типа циклов: параметром, с постусловием и с предусловием.

   Любой цикл состоит из условия, определяющего число повторов, и тела цикла, т.е. блока операторов, которые необходимо выполнить заданное количество раз. Если тело цикла состоит из нескольких операторов, то оно помещается в операторные скобки begin-end.

1. Цикл с параметром

Цикл с параметром for используется в случаях, когда число повторений заранее известно. Число повторений задается переменной, называемой параметром, или управляющей переменной.

Формат блока:

for <параметр> := А to В do

<тело цикла>;

for <параметр> := А downto В do

<тело цикла>;

где А и В - выражения, определяющие начальное и конечное значения параметра цикла.

Цикл с параметром работает следующим образом:

  1. Параметру присваивается начальное значение.
  2. Выполняется тело цикла.
  3. Параметр автоматически увеличивается на 1 при использовании ключевого слова to (уменьшается на 1 при использовании ключевого слова downto).
  4. Если параметр превышает конечное значение, то происходит выход из цикла, иначе - переход к пункту 2.

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

  • управляющая переменная должна быть описана в текущем блоке программы;
  • начальное и конечное значение параметра могут быть представлены любым выражением порядкового типа, совпадающим с типом управляющей переменной;
  • в теле цикла запрещается изменять значения управляющей переменной;
  • после выполнения оператора for управляющая переменная не имеет определенного значения.

Приведем несколько примеров:

Задача 1. Вывести на экран натуральные числа от 1 до 9 в обратном порядке.

program z1;
var i:integer;

begin

       For i:=9 downto 1 do

       Writeln(i);

End.

 

Задача 2. Вычисление р = n! (n факториал).

program z2;
var p, i, n: integer;
begin
       write ('
введите целое n = ');
       readln (n);
       p: = 1;
       for i: = 1 to n do
              p: = p * i;
             write (n, '!
= ',p)
end.

 

Задача 3. Составить программу вычисления значения выражения y=1+1/2+1/3+... +1/20.

{В данном случае целесообразно организовать цикл с параметром, изменяющимся от 1 до 20, то есть шаг изменения параметра равен +1. Обозначим: у - очередное значение суммы дробей; n - параметр цикла. Учитывая это, составим программу: }
program z3;
uses crt;
var n: integer; y: real;
begin
       clrscr;
       {Задаем начальное значение, равное нулю.}
        y:=0;
        {Организовываем цикл с параметром от 1 до 20.}
       for n:=1 to 20 do
       begin
               {Находим очередную сумму.}
              y:=y+1/n;
              {Выводим на экран очередную сумму.}
              writeln('y=',y);
        end;
end.

 

Задача 4. Из чисел от 10 до 99 вывести те, сумма цифр которых равна S(0 < S < 18).

{Обозначим: k - это просматриваемое число; p1 - это первая цифра числа k, р2 - это вторая цифра числа k; s - это сумма цифр данного числа k. Число k будем выписывать только в том случае, когда сумма p1 и р2 будет равна s.}
program z4;
uses crt;
var k,n,p1,p2,s:integer;
begin
       clrscr;

       writeln(' целое число n='); {Задаем целое число.}
       readln(n);
       for k:=10 to 99 do {Организовываем цикл с параметром от 10 до 99.}
       begin
             p1:=k div 10; {Выделяем первую цифру.}
             р2:=к mod 10; {Выделяем вторую цифру.}
             s:=p1+p2; {Находим сумму цифр.}
             if s=n then writeln('k= ',k);{Если сумма цифр равна заданному числу N, то выводим К.}
       end;
end.

 

Задача 5. Дано натуральное число n (1000<=N<=9999). Определить, является ли оно палиндромом ("перевертышем"), с учетом четырех цифр. Например, палиндромами являются числа: 2222, 6116, 1441.

{Обозначим: n - вводимое число; m - дубликат числа n; а - перевертыш числа n; i - переменная цикла для создания перевертыша.}
program z5;
uses crt;
var n, m, a, i: integer;
begin
      clrscr;

      {Введем четырехзначное целое число.}
       writeln('N<=9999');

       readln(n)
       {Запоминаем введенное целое число и задаем начальное значение перевертыша.}
        m:=n;

        а:=0;
        {Организуем цикл с параметром от 1 до 4.}
        for i:=l to 4 do
        {Находим перевертыш числа N}
        begin
              а:=а*10+ m mod 10;

              m:= m div 10;
        end;
        {Если A=N, то данное число является перевертышем.}
        if a=n then writeln('DA!')
        else writeln('NO');
end.

2  Цикл с предусловием

     Этот оператор применяется в случае, когда число повторений цикла заранее не известно, а задано условие его повторения. Оператор While (пока) называют оператором цикла с предусловием, т.к. проверка условия выполнения тела цикла производится до начала цикла в самом начале оператора.

Формат блока:

While <условие> do

   <тело цикла>;

где условие - выражение логического типа.

Перед каждым выполнением тела цикла вычисляется значение условия. Если результат равен True, выполняется тело цикла, а затем снова вычисляется значение логического выражения (условия). Если результат равен False, происходит выход из цикла и переход к первому оператору после While.

Приведем несколько примеров:

Задача 6Считать сумму введенных с клавиатуры чисел  до тех пор, пока не будет введен ноль.

Решение данной задачи основывается на использовании цикла WHILE, т.к. мы не знаем, когда будет введен ноль и мы перестанем вводить числа.

program z6;
var a,s:integer;
begin
 s:=0;//обнуляем сумму
 writeln('Введите число');
 readln(a);
 while(a<>0) do begin
 s:=s+a; //подсчет суммы S
 writeln('Введите число');
 readln(a); 
 end;
writeln(s);
end.

Задача 7. Сколько слагаемых должно быть в сумме 2+4+6+8+…., чтобы эта сумма оказалась больше некоторого   данного     натурального числа N.

Program z_7;
var i,x,sum,n:integer; {i - счетчик слагаемых, в переменную x будут записываться слагаемые, в переменной sum будет накапливаться сумма}
begin
 x:=2;
 i:=0;
 sum:=2;
  write ('n=');
 readln(n); {ввод числа n}
 while sum<=n do {пока sum<=n выполнить тело цикла}
 begin
 x:=x+2;{следующее слагаемое на 2 больше предыдущего}
 i:=i+1; {увеличение счетчика слагаемых на 1}
 sum:=sum+x; {прибавление очередного слагаемого к сумме}
  end;
 writeln (i,' слагаемых');
end.

Задача 8. Программа получения частного q и остатка r от деления целого числа х на целое число y без использования операции деления.


program n_8;
 var x, y, q, r: integer;
begin
 writeln ('Частное и остаток');
  write ('Введите делимое x>>');
 readln (x);
 write ('Введите делитель y>>');
 read (y);
 r:=x;// перекидываем значение х, чтобы не потерять
 q:=0;
 while r>=y do
; begin
 r:=r-y;// получаем промежуточное частное
 q:=q+1;// считаем количество делений, т.е, частное
 end;
 writeln ('Частное q=', q);// выводим частное
  writeln ('Остаток r=', r); // выводим остаток отделения
end.

3. Цикл с постусловием

    Оператор Repeat (повторять до тех пор, пока) отличается от оператора While тем, что условие проверяется после очередного выполнения тела цикла. Тело цикла выполняется хотя бы один раз. Повторение тела цикла продолжается до тех пор, пока логическое выражение (условие) не примет значение True (истина). Оператор состоит из заголовка Repeat, тела цикла и условия окончания цикла until.

Repeat
<оператор 1>;
<оператор 2>;
….
<оператор n>;
Until <логическое выражение>;

  • Перед первым выполнением оператора Repeat логическое выражение должно быть определено.
  • Хотя бы один из операторов тела цикла должен влиять на изменение значения условия, иначе цикл будет бесконечным.
  • Логическое выражение должно принять в конечном итоге значение True.

Приведем несколько примеров:

Задача 9. О тренировках. В 1-й день - спортсмен пробегает 10 км; каждый следующий день увеличивает на 10% от нормы предыдущего дня. Как только достигнет или превысит 25 км, необходимо прекратить увеличение и пробегать 25 км. Начиная с какого дня спортсмен будет пробегать 25 км?

program z_8;

var i: integer; x: real;
begin
    writeln ('График тренировок');
    i:=1;
    x:=10;
    repeat
       i:=i+1;
       x:=x+0.1*x;
    until x>=25;
    writeln ('Начиная с ', i, '-го    дня спортсмен будет пробегать 25 км')
end.

Задача 10. Составить программу планирования закупки товара в магазине на сумму, не превышающую заданную величину.

program z_9;
uses crt;
var c,k,p,s:integer;
begin
        clrscr;
       {Вводим наличие денежных средств с клавиатуры}
       writeln ('Предельная сумма – ');

       readln(p);
       s:=0; {вводим начальное значение суммы}
       REPEAT;
              writeln('Цена товара – ');

              readln(c); {вводим цену товара}
              writeln('Количество товара – ');

              readln(k); {вводим количество товара}
              s:=s+c*k; {Находим стоимость приобретенных товаров}
              {Выводим на экран стоимость определенных товаров}
               writeln('Стоимость покупки =',s);
       UNTIL s>p; {Повторяем до превышения наличия денег}
      writeln('Не хватило!');
end.

» Вход на сайт
» Поиск
» Календарь
«  Январь 2025  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
» Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • База знаний uCoz

  • » Инфознайка
    Copyright MyCorp © 2025uCoz