Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование с нуля - это совсем просто! 29) Оператор цикла


Информационный Канал Subscribe.Ru

29) Оператор цикла

Наконец то мы добрались до третьего кита программирования - оператора цикла, команды многократного выполнения группы команд. Оператор присваивания рассчитывает значение и записывает его в переменную, условный оператор выполняет ту или другую группу операторов в зависимости от условия, а оператор цикла многократно выполняет группу команд (в которую, в свою очередь, могут входить те же операторы присваивания, условные и цикла :). Напомню, что комбинируя эти три оператора, можно запрограммировать любой алгоритм (из теоретически поддающихся программированию).

Этот оператор уже проще для изучения, нежели предыдущие два. Записывается он так:

  while условие do
    begin
    группа-команд;
    end;

Условие - то же самое логическое выражение, что и в условном операторе используется. Группа команд внутри begin / end выполняется, пока это условие истинно (равно true). Как только оно стало ложным, выполняется следующий за end оператор.

Пример. Надо сосчитать сумму всех чисел от 1 до 10.

  var i, sum: Integer;
  begin
  sum := 0; // сумма чисел, исходно ноль
  i := 1; // первое число из 1 .. 10
  while i <= 10 do // суммировать будем, пока число i не превысит
  верхний порог
    begin
    sum := sum + i; // увеличили сумму на текущее число
    i := i + 1; // в i записали следующее число
    end;
  writeln( sum );
  ...

Команды

sum := sum + i;

и

i := i + 1;

будут последовательно выполняться, пока i меньше или равно 10.

Ну вот собственно и все по циклу :)

В Си также схожая запись:

while( условие ) {
группа операторов;
}

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

Вот как программка суммирования запишется:

  int i, sum;
  sum = 0; // сумма чисел, исходно ноль
  i = 1; // первое число из 1 .. 10
  while( i <= 10 ) { // суммировать будем, пока число i не превысит
  верхний порог
    sum = sum + i; // увеличили сумму на текущее число
    i = i + 1; // в i записали следующее число
  }
  cprintf( "%d", sum );

Кстати, в Си есть сокращения для часто используемых форм оператора присваивания. Так, если надо значение увеличить или уменьшить на единицу, достаточно записать:

i ++; // эквивалентно i = i + 1;

i --; // эквивалентно i = i - 1;

А если надо увеличить/уменьшить значение некоторой переменной на заданное выражение, то так:

sum += i ; // эквивалентно sum = sum + i;

sum -= i ; // эквивалентно sum = sum - i;

На Бейсике - вот так оператор цикла записывается:

While условие

группа-команд

End While

While переводится как "пока". Пока условие истинно, выполнять...

Вот программа суммирования:

          Dim i, sum
          i = 1
          sum = 0

          while i <= 10

              sum = sum + i
              i = i + 1

          end while

          Console.WriteLine(sum)

Для тех, кто понял идею цикла сразу :) - еще одна, очень популярная форма оператора цикла. Она не такая общая, как первая, но всеми любимая.

Паскаль:

  for переменная := начальное значение to конечное-значение do
   begin
   группа-команд;
   end;

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

Наш пример с суммированием тогда запишется так:

  var i, sum: Integer;
  begin
  sum := 0; // сумма чисел, исходно ноль
  i := 1; // первое число из 1 .. 10
  for i := 1 to 10 do // суммировать будем от 1 до 10
    begin
    sum := sum + i; // увеличили сумму на текущее число
    end;
  writeln( sum );
  ...

Явно писать

i := 1 + 1;

теперь не надо!

В Си так данный оператор выглядит (он значительно более общий, чем в Паскале):

for( начальный оператор; условие; действие после каждой итерации ) {

группа-команд;

}

Перед выполнением группы команд один раз выполняется начальный оператор (присваивания). Затем проверяется условие, и если оно истинно, выполняется группа команд. После этого выполняется после-действие, затем - снова условие проверяется, если истинно - группа, итд.

Понятнее будет на практике :)

  sum = 0;
  for( i = 1; i <= 10; i ++ ) {
   sum += i;
  }

Один раз перед началом цикла выполняется оператор

i = 1;

Затем проверяется условие

i <= 10

Истинно оно? Значит, выполняется далее

sum += i;

после чего - команда

i ++;

Далее - снова условие смотрится, затем снова sum рассчитывается и так далее, пока i не превзошло десяти.

В Бейсике запись схожа с паскалевской:

For переменная = начальное значение to конечное-значение

группа-команд;

Next

Вот так программу перепишем:

          sum = 0
          for i = 1 to 10

              sum = sum + i

          Next

          Console.WriteLine(sum)


Теперь - задания. Пишите по каждому программу - исходный код высылаете мне. Алгоритм - по желанию. Если сразу представили, как решить, значит можете пропустить бумажный этап. Если не выходит, попробуйте сперва на листочке. И про отладчик не забывайте!

8. Найдите сумму первой тысячи нечетных положительных чисел.

9. Вычислите факториал числа - n! .
Вводится целое число n, в результате должно быть 1*2*3*...*n.
Если вводится неположительное значение, сообщите и ничего не делайте.

Проверочные значения:
10
0
69

10. Даны два числа x (дробное) и n (целое). Вычислите x в степени n, не пользуясь стандартными функциями. n может быть как положительным, так и нулем и отрицательным. Число в нулевой степени равно 1, число в отрицательной степени - единице, деленной на это число в положительной степени.

Проверочные значения:
3.14 2
100 0
-2 16
-5.5 -7

11. Найдите сумму первых n членов последовательности

1/a + 1/a3 (3 - это значит в 3-й степени - рассылки к сожалению блокируют надстрочный индекс!) + 1/a5 (в пятой степени) + ...

12. Вычислите для заданного n (n раз знаменатели считаются):

1 / (2 - 1/(4 + 1/ (6 - 1/8 +... )))
Проверьте при n = 10, 1, 100.

На этом изучение базовой части - ключевых операторов программирования, закончено! Можно отметить :)

Дальше - изучение принципов создания программ с графическим интерфейсом, создание собственных функций, понятие объектов, и параллельно - совершенствование общих навыков программирования.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.prognull
Отписаться

В избранное