For цикл со счетчиком

For цикл со счетчиком thumbnail

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

Пример: Равномерность случайных чисел

Числа, генерируемые функцией rand(), имеют равномерное распределение.
Это значит, что если запускать функцию rand очень много раз и каждый раз записывать, какое число выпало, то различные числа выпадут примерно одинаковое число раз.
Например, если генерировать только числа 0 и 1, то через 100 запусков примерно 50 раз выпадет ноль и 50 раз единичка. Обратите внимание, что я говорю примерно. Может быть, например, 49 и 51, или 53 и 47.

Если рассматривать отношение этих чисел к общему количеству генераций, получим 49/100 и 51/100 или 53/100 и 47/100. Но чем больше экспериментов мы проведём, тем отношение количества единичек к количеству испытаний будет ближе к 1/2.

Проведите самостоятельно эксперимент с 10, 50 и 100 запусками. Это муторно и долго, если делать руками, но что поделать? В будущем мы напишем программу, чтобы проверить свойство равномерности распределения этих псевдослучайных чисел.

Давайте проведём подобный эксперимент. Пусть программа генерирует одно из трёх чисел: 0, 1 или 2.
Вот, посмотрите на её код.

Листинг 1.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {

srand(time(NULL));
// счётчики для сгенерированых чисел
// если выпадет 1, то увеличим на единицу count_1
int count_0 = 0, count_1 = 0, count_2 = 0;

int rand_number;

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}

printf(“0 – %dn1 – %dn2 – %dn”, count_0, count_1, count_2);

return 0;
}

Если вам непонятно, как работает данная программа, то проработайте уроки «Приручаем случайность» и «Оператор выбора».
Программа получилась объемной, но довольно простой. При этом легко видеть, что одни и те же операции (генерация случайного числа и оператор выбора) повторяются буквально без изменений. Результат работы этой программы на рисунке ниже.

Пример работы программы Листинг 1

Рис.1 Пример работы программы Листинг 1

Как видите, пока что-то не очень похоже на то, что все цифры выпадают одинаковое количество раз. Запустите программу у себя, возможно, у вас получится более хороший результат. Ну, а мы продолжим. Давайте увеличим количество опытов до 100. Можно было бы, конечно, ещё 90 раз скопировать эту конструкцию или запустить программу ещё 9 раз и вручную складывать результаты, но это не дело. Лучше воспользуемся циклической конструкцией for.

Общий шаблон цикла for

Листинг 2.

for (инициализация счетчика; условие; изменение счетчика)
оператор;

Цикл for состоит из двух частей: заголовок цикла (первая строка) и тело цикла (вторая строка).

Тело цикла – это команда, которую необходимо выполнить несколько раз. Если необходимо выполнить несколько команд, а не одну, то можно воспользоваться составным оператором {}. Мы уже проделывали такой трюк, когда изучали условный оператор.

В нашем случае тело цикла for будет выглядеть так:

Листинг 3.

{
rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}
}

Так как в теле цикла две команды (присваивание, оператор выбора), то пришлось использовать составной оператор.

Разберём подробно заголовок цикла for. В нём, кроме ключевого слова for и скобок, имеется ещё три выражения.

Первое выражение – инициализация счетчика.

В этой части нам нужно завести переменную-счетчик и присвоить ей какое-нибудь начальное значение. Например:

Листинг 4.

for (int i = 0; ; )
// или
for (int j = 13; ; )
// или
for (int k = -100; ; )
// или
for (int m = 255; ; )
// или
for (int q = 1; ; )

Второе выражение – условие.

В этой части необходимо записать условное выражение, при котором должно выполняться тело цикла. Цикл for будет работать, пока условие истинно. Например:

Листинг 5.

for (int i = 0; i <= 100; )
// или
for (int j = 13; j > 0; )
// или
for (int k = -100; k != 0; )
// или
for (int m = 255; m >= 0; )
// или
for (int q = 1; q < 1000; )

И последняя третья часть – изменение счетчика.

Здесь записывается то, что должно происходить после каждого выполнения тела цикла. Обычно здесь пишут то, как должен измениться счётчик после каждой итерации. Одно повторение тела цикла в серьёзных книгах иногда называют итерацией.

Например:

Листинг 6.

for (int i = 0; i <= 100; i = i + 1) // увеличиваем счётчик на единицу
// или
for (int j = 13; j > 0; j = j / 2) // уменьшаем вдвое
// или
for (int k = -100; k != 0; k = k – 1) // уменьшаем счётчик на единицу
// или
for (int m = 255; m >= 0; m = m – 5) // уменьшаем счётчик на 5
// или
for (int q = 1; q < 1000; q = q * 2) //увеличиваем счётчик в два раза

Читайте также:  Есть ли возможность забеременеть при менструационном цикле

Давайте перепишем нашу программу с использованием цикла for.

Листинг 7.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
srand(time(NULL));
// счётчики для сгенерированных чисел
// если выпадет 0, то увеличим на единицу count_0
// аналогично для count_1 и count_2
int count_0 = 0, count_1 = 0, count_2 =0;

int rand_number;

// i = 0 начинаем отсчёт с нуля
// i < 100 повторяем, пока i меньше 100
// i = i + 1 на каждом шаге увеличиваем счётчик на единицу
// итого тело цикла выполнится 100 раз
for (int i = 0; i < 100; i = i + 1){
rand_number = rand()%3;
switch (rand_number){
case 0 : count_0 = count_0 + 1; break;
case 1 : count_1 = count_1 + 1; break;
case 2 : count_2 = count_2 + 1; break;
}
}

printf(“0 – %dn1 – %dn2 – %dn”, count_0, count_1, count_2);
return 0;
}

Гораздо понятнее и нагляднее, не так ли? Вот-вот. Опишем подробно алгоритм работы цикла for.

  1. Программа встречает ключевое слово for, а значит дальше идёт циклическая конструкция.
  2. Сначала создаётся переменная счетчик (выражение 1).
  3. Проверяется условие выполнение цикла (выражение 2).
  4. Если условие ЛОЖЬ, то программа выходит из цикла for и продолжает свое выполнение.
  5. Если условие ИСТИНА, то выполняется тело цикла.
  6. Когда тело цикла выполнится, программа возвращается к заголовку и выполняет инструкции из третьей части заголовка. Изменяется значение переменной-счетчика (выражение 3).
  7. Возвращаемся к пункту три.

А теперь то же самое для нашей программы. Встречаем цикл for.

  • Инициализируем переменную счётчик i = 0;
  • Проверяем условие i < 100. Т.к. i = 0, то условие ИСТИНА;
  • Выполняем тело цикла. Генерируем число от 0 до 2. В операторе switch определяем, какое число было сгенерировано, и увеличиваем соответствующий счётчик;
  • Т.к. тело цикла закончено, то выполняем Выражение 3. Теперь i = 1.
  • Возвращаемся к условию;
  • Проверяем условие i < 100. Т.к. i = 1, то условие ИСТИНА
  • Выполняем тело цикла. Генерируем число от 0 до 2. В операторе switch определяем, какое число было сгенерировано, и увеличиваем соответствующий счётчик;
  • Изменяем счётчик. Теперь i = 2. Возвращаемся к условию.

И так далее, пока i не станет равным 100. В этом случае при проверке условия получим ЛОЖЬ. Выполнение цикла прекратится. Программа продолжит выполнять инструкции, расположенные за циклом.

Давайте посмотрим ещё на один пример.

Напишем программу, которая выводит на экран сумму натуральных чисел из промежутка [A;B]. Числа A и B (B>A) вводятся пользователем.

Листинг 8.

#include <stdio.h>

int main(void) {

int a = 0, b = 0;
scanf(“%d %d”, &a, &b);

// сюда будем записывать результат
int sum = 0;

// k++ эквивалентно k = k + 1, но короче
// ++ оператор инкремента

for (int k = a; k <= b; k++){
sum = sum + k;
// на каждой итерации добавляем к уже имеющейся сумме
// очередное число
}

printf(“%dn”, sum);

return 0;
}

Все неясные моменты я постарался отразить в комментариях к программе. Если возникнут вопросы, то задавайте их в комментариях к уроку.

Источник

Циклы с предусловием (while), с постусловием (repeat), циклы со счетчиком (for)

Цикл с предусловием (while) в Pascal abc.net

    Синтаксис цикла while:

    while <условие> do // заголовок цикла
    <оператор> // тело цикла

    ::=

    Цикл while на блок-схеме

    Цикл с предусловием (while) в Pascal abc.net

  • Итерация — однократное повторение тела цикла.
  • В цикле while тело может не выполниться ни разу.

Пример: Вычислить сумму четных чисел от 2 до 20.

✍ Решение: 

    sum := 0;
    x := 2;
    while x <= 20 do
    begin
    sum += x;
    x += 2;
    end;

Задание: Определите наименьшее натуральное число, квадрат которого больше заданного целого числа. Стандартную функцию извлечения квадратного корня не использовать.

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

✍ Решение: 

Begin
var (a,b):=readInteger2;
assert(a>=b);
var k:=0;
var s:=0;
while s<=a do begin
inc(k);
s+=b
end;
writeln(k-1)
End.

Оператор break в цикле while

Оператор break предназначен для экстренного выхода из цикла. Обычно используется в условном операторе: при выполнении условия — выход из цикла.

Как работать с последовательностями чисел?

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

begin
// …
while True do // бесконечный цикл
begin
// ввод очередного элемента последовательности
var b := ReadInteger; // или ReadReal
if b = 0 then
break; // выход из цикла при вводе элемента, равного нулю
// обработка очередного элемента последовательности
end;
// вывод результатов
end.

Задание: Дана последовательность целых чисел, признак завершения которой — число (оно не считается элементом последовательности). Вывести номера чётных чисел последовательности (числа нумеровать с 1). Если последовательность не содержит чётных элементов, выводить ничего не нужно.

Цикл с постусловием (repeat) в Pascal abc.net

    Синтаксис цикла repeat:

    repeat // заголовок цикла
    <операторы> // тело цикла
    until <условие>

    Цикл repeat на блок-схеме

    Цикл с постусловием (repeat) в Pascal abc.net

  • В цикле repeat тело выполнится хотя бы один раз.

Пример: Вычислить сумму четных чисел от 2 до 20.

✍ Решение: 

    sum := 0;
    x := 2;
    repeat
    sum += x;
    x += 2;
    until x = 22;

Оператор цикла со счетчиком (for) в Pascal abc.net

    Синтаксис цикла for:

    выглядит так:
    for := do

    выглядит так:

    выглядит так:
    to | downto

  • переменная-счетчик должна иметь порядковый тип (целый, символьный или перечислимый);
  • переменная-счетчик цикла for не должна меняться внутри цикла for;
  • Новое в Pascal abc.net:

  • описание переменной цикла в его заголовке:
  • for [var] i: integer := 1 to 5 do
    <оператор>
  • автоопределение типа при описании:
  • for var i := 1 to 5 do
    <оператор>

    Значение переменной цикла после завершения цикла будет не определено (локальная).

Пример: Даны целые числа A и B (A ). Вывести в порядке возрастания все целые числа, расположенные между A и B (не включая сами числа A и B), а также количество N этих чисел.

✍ Решение: 

    begin
    var (a, b) := readinteger2(‘Введите два целых числа. Первое должно быть меньше второго:’);
    assert(a < b); // проверка действительно ли a < b
    for var i := (a + 1) to (b – 1) do
    println(i);
    println(b – a – 1); // количество чисел
    end.

Задание: Даны два целых числа A и B. Выведите квадраты всех целых чисел, расположенных между A и B, в порядке возрастания чисел и включая сами эти числа.

Читайте также:  Фув новосибирская медакадемия расписание циклов

Задание: Дано вещественное число — цена 1 кг конфет. Вывести стоимость 1.2, 1.4, …, 2 кг конфет.

Пример: Используя один цикл, вычислить значение суммы, заданной следующей формулой (N > 0):

✍ Решение: 

    Begin
    var n:=readInteger(‘N = ‘);
    assert(n>0);
    var x:=readReal(‘X = ‘);
    var sum:=0.0;
    var f:=-1.0;
    var num:=1.0;
    for var i:=1 to n do begin
    num*=x;
    sum+=(x+f*num)/i;
    f*=-1.0;
    end;
    writeln(sum)
    End.

Задание: Используя один цикл, вычислить значение суммы, заданной следующей формулой (N > 0):

Не забудьте, что использование функции возведения в степень запрещено.

Как работать с последовательностью чисел?

Например, если необходимо как-то обработать последовательность чисел с заданным количеством элементов, то примерный код может быть таким:

begin
// предварительные действия
N := ReadInteger; // или Read(N);
for var i := 1 to N do
begin
// ввод очередного элемента
var b := ReadInteger; //или ReadReal, или Read(b);
// обработка очередного элемента
end;
// вывод результатов обработки
end.

Задание: Дано целое число N (N ≥ 0) и последовательность из N целых чисел. Найти количество отрицательных чисел в этой последовательности.

Упрощенный цикл LOOP

Для того, чтобы реализовать цикл с конкретным числом итераций, не используя счетчик цикла, возможен упрощенный вариант:
  

Пример:

// Выводить 5 раз слово “Привет!”
loop 5 do
begin
println(‘Привет!’);
end;
// …

Обработка цифр числа

О том, как выделять из числа отдельные его разряды Вы ознакомились в предыдущем уроке.
Теперь рассмотрим более сложный вариант с обработкой цифр числа.

Пример: Дано натуральное число N — количество цифр и последовательность из N цифр. Сформировать положительное число, состоящее из этих цифр, начиная со старшего разряда.

Пример:

кол-во; цифры => результат
N = 3; 3,7,0 => M = 370
N = 1; 0 => M = 0
N = 5; 0,7,0,1,6 => M = 7016
N = 1; 2 => M = 2
N = 2; 0,2 => M = 2

Замечание: В решении должен использоваться один цикл, запрещено использовать математические функции наподобие power или ln.

✍ Решение: 

    begin
    var n := readinteger(‘Введите количество цифр N:’);
    var num := 0;
    assert(n > 0);
    println(‘Введите цифры:’);
    loop n do
    begin
    var a := readinteger;
    num += a;
    num := num * 10;
    end;
    println(num div 10);
    end.

Задание: Дано целое число. Найти количество его цифр и их сумму.
  

Пример:

N = 1205 => Count = 4, Sum = 8
N = -111 => Count = 3, Sum = 3
N = 0 => Count = 1, Sum = 0

Замечание: В решении должен использоваться только один цикл, запрещено использовать математические функции наподобие power или ln.

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

Пример:

N = 1205 => M = 5021
N = -950 => M = -59
N = 0 => M = 0
N = -4 => M = -4

✍ Решение: 

    begin
    println(‘Введите целое число:’);
    var n := readinteger;
    var (newnum, sign) := (0, sign(n));
    n := abs(n);
    while n > 0 do
    begin
    newnum += (n mod 10);
    newnum *= 10;
    n := n div 10;
    end;
    println(sign * (newnum div 10));
    end.

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

Пример:

N1 = 29, N2 = -31 => M = 39
N1 = 111, N2 = 103 => M = 113
N1 = -50, N2 = 20 => M = 50

Вложенные циклы

Пример: Дано целое число K > 0, а также K наборов ненулевых целых чисел. Признак завершения каждого набора — число . Для каждого набора вывести количество его элементов. Вывести также общее количество элементов во всех наборах.
  

Пример:

Введите число: 3
7 8 6 0
4 5 4 3 1 0
4 5 6 9 0
Кол-во элементов для каждого: 3 5 4
Всего элементов: 12

✍ Решение: 

    begin
    var k:=ReadInteger(‘Введите число’);
    assert(k>0);
    var st:=”;
    assert(k>0);
    var c:=0;
    for var i:=1 to k do
    begin
    var count:=0;
    var x:=ReadInteger;
    while x<>0 do
    begin
    count+=1;
    read(x);
    end;
    st+=count.ToString+’ ‘;
    c+=count;
    end;
    Println(‘Кол-во элементов для каждого =’,st);
    println(‘Всего элементов’,c);
    end.

Задание: Даны целые числа K > 0, N ≥ 0, а также K наборов целых чисел по N элементов в каждом наборе. Найти количество наборов, содержащих число 2. Если таких наборов нет, то вывести .
 

Пример:

K = 3, N = 5;
набор 1: 6 4 2 -3 2
набор 2: -1 5 6 3 49
набор 3: 31 7 7 -8 12

Правильный ответ: 1 набор.

Источник

Проблемы никогда нельзя разрешить
с тем же образом мыслей, который их породил.

А. Эйнштейн.

Хотелось бы отнести приведенный урок к
Методике развития критического мышления. По
моему скромному мнению весь процесс изучения
предмета “Информатика” должен быть построен
на принципе “конструирования собственных
знаний в рамках своей собственной поисковой
деятельности”. И главный акцент я ставлю на
построение (создание) алгоритмов. Аспект этот
сложный, но весьма заманчивый, с точки зрения
развития логического мышления и воображения.
Хотя в последнее время наблюдается “суровая
алгоритмизация” всех школьных предметов. Дабы
облегчить процедуру восприятия учителя
прибегают к самым различным способам и методам.
Главное при этом, на мой взгляд, чувство меры –
играя, не “заигрывать”. В приведенном
примере все эмоции опущены, и я постаралась
изложить его максимально “сухо”.

Почему цикл? Согласно практике (моей) – анализ
циклов вызывает затруднения и наибольшее число
ошибок, поэтому делается акцент на цикл. Почему
со счётчиком? А если с ним разобраться сразу и
основательно, остальные даются “легко и
непринуждённо”.

Зададим структуру урока.

Предположим, урок содержит три основных этапа
(таких родных и близких).

  1. Актуализация знаний.
  2. Изучение нового материала.
  3. Применение приобретенных знаний и отработка
    навыков.

1. Актуализация.

Пытаемся пробудить (вызвать из памяти),
систематизировать и конкретизировать то, что
ученики уже знают. Контекстом (направлением)
является тема урока. На обилие (или отсутствие)
высказываний делаем свои уточнения, дополнения,
ставим акценты, привлекаем внимание к
содержательной линии урока всеми доступными
средствами.

Читайте также:  2 менструальных цикла за месяц

2. Новая информация.

Выдаём по иерархическому принципу, то есть
“потомок может иметь только одного родителя, а
родитель может иметь множество потомков”.
Здесь, пожалуйста, и кластеры, и домены, и
суффиксы, и префиксы. А в терминах ООП
(объектно-ориентированного программирования) –
классы, образцы класса, наследуемые признаки, и
т.д. и т.п. Ещё иногда называют “маяковый”
метод – “в темную большую комнату кидают
факелы, а затем разглядывают, что вокруг них”.
Главное – каждый сам для себя фиксирует нужную
информацию, и разные записи конспектов
приветствуются, как и разные формулировки.

3. Закрепление.

Главное, на мой взгляд, дать почувствовать
каждому ученику уверенность в совершаемых
действиях. Решающим являются навыки
самоконтроля и самопроверки – всегда есть
множественность выбора (хотя бы два). Если выбора
нет, это должно вызвать подозрение на
ошибочность рассуждений. Хорошо, если один
высказывается, а другой ищет слабые места или
нечто аналогичное. Возможен похожий диалог с
компьютером. И даже интерактив здесь будет
уместен.

Попробуем примерить сказанное к циклу со
счётчиком. Предполагается, что ученикам известен
графический способ записи алгоритмов, линейные
алгоритмы и алгоритмы с ветвлением, но
циклические структуры ещё не знакомы. Кроме того,
они знают операции присваивания и сравнения,
основные алгебраические действия.

Первый вопрос зададим в лоб: — Какие образы,
впечатления, ассоциации у вас вызывает слово
“цикл”? (Высказывания учеников).

— Попробуйте сформулировать определение
цикла на основе того, что мы только что услышали. (Высказывания
учеников).

— Цикл, дословно с греческого – круг. Какие
действия можно назвать циклом? (Высказывания
учеников).

— Итак, цикл – повторяющееся действие. А может
действие повторяться бесконечно? Что бы нам ещё
хотелось? (Высказывания учеников).

— Итак, цикл – повторяющееся действие +
условие.

Можно вспомнить сказки – дед тянул репку,
позвал бабку, позвал внучку, позвал Жучку и т.д.
Какое действие? Тянул. Какое условие? Пока не
вытянул. Другие примеры циклов.

— А теперь вспомните “семь раз отмерь – один
раз отрежь”. Какое условие? (Высказывания
учеников).

— Да, здесь считаем. Для счёта надо задать
начало и конец – от .. и до .. (Высказывания
учеников).

— Начинать можно с “0”, с “1”, да и
вообще с чего угодно! Как Робинзон Крузо считал
дни? (Ставил зарубки).

— А начал он с какого числа? (С того, когда
попал на остров).

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

— Это называется шагом. Можно считать
десятками, сотнями, любым удобным шагом.

— Итак, действие, выполняемое определенное
количество раз – это цикл со счётчиком. Здесь
нужен помощник, который следит от какого до
какого
и через сколько. Вот этот помощник и
есть счётчик. Вы сдаёте норматив по подтягиванию
на перекладине, а кто-то стоит рядом и считает.
Изобразим:

For цикл со счетчиком

— Для записи на языке программирования нам
понадобитсяпеременная счётчика, а
что ещё? (Начальное её значение, конечное
значение и шаг).

— А какой минимум служебных слов? (Высказывания
учеников).

— Минимум 4 служебных слова: “для” For,
“до” To, “шаг” Step, “следующий”
Next.

Синтаксис:

For x=1 To 10 Step 2
<действие>
Next x

Читаем: для икс от 1 до 10 с шагом 2
делаем <действие> следующий икс.

Если шаг равен единице (что бывает очень часто),
то Step не пишется (говорят “по умолчанию —
default — шаг равен единице”). Теперь рассмотрим
пример:

For x=3 To 10 Step 5
y= x*x
Next x

— Проанализируем, сколько шагов сделает цикл?
Какое значение икс получит по завершении
цикла? (Ответ: 2 шага, x=13).

— А какое значение будет у игрек? (Ответ:
y=64).

— Переменная цикла может изменяться в цикле.
Сами считаем:

For x=2 To 6 Step 2
x= x+x
Next x

(Ответ: 2 шага, x=14).

— Подробно (кто-нибудь, кто быстро въехал):

Шаг 1

x=2 (присвоили переменной цикла начальное
значение).

x=2+2 (теперь x=4).

x=4+2 (Next к x прибавляется шаг, теперь x=6).

6>6 (сравниваем переменную цикла с конечным
значением) – нет – возврат.

Шаг 2

x=6+6 (новое значение x=12).

x=12+2 (Next к x прибавляем шаг, теперь x=14).

14>6 (сравниваем x с конечным значением)
– да – стоп, выход из цикла.

Теперь сами пыхтим над заданиями. Разбиваемся
на группы (например, по два человека).

— Я вам даю ответ примера с отрицательным
шагом, а вы сами определите (догадайтесь здесь
нехорошее слово – нужна уверенность), что здесь
меняется и выполните упражнения.

For x=9 To 2 Step -5
x= x+1
Next x

— Цикл совершит 2 шага, а переменная цикла на
выходе будет =1.

Делают упражнения по карточкам.

— Следующий раз разберём выход из цикла по
условию и рассмотрим циклы с пост- и
предусловием.

Подводим итоги. Награждаем хвалебными словами.
Высказываем замечания. Задаём и, при
необходимости, поясняем домашнее задание.

Один из вариантов самостоятельной
работы

  1. Определите, какое количество раз выполняются
    операторы цикла?
  2. FOR X = 10 TO 12 STEP 2
    Y = X*X
    NEXT X

  3. Определите, какое значение примет переменная
    цикла:
  4. FOR X = 3 TO 5
    X = X+1
    NEXT X

  5. Определите, какое значение примет переменная
    цикла:
  6. FOR X = 1 TO 12 STEP 5
    X = 2*X
    NEXT X

  7. Определите, какое значение примет переменная
    цикла:
  8. FOR X = -2 TO 1
    X = -X
    NEXT X

  9. Определите, какое значение примет переменная
    цикла:
  10. FOR X = 3 TO 1 STEP –2
    X = X-2
    NEXT X

  11. Определите, какое значение примет переменная
    цикла:
  12. FOR X = 14 TO 19 STEP 6
    X = 6*X
    NEXT X

  13. Какое значение выдаст программа на экране
    монитора?
  14. FOR X = 4 TO 12 STEP 5
    X = 2*X
    IF X>7 THEN EXIT FOR
    NEXT X

  15. Какое значение выдаст программа на экране
    монитора?

FOR X = 1 TO 17 STEP 9
IF X>12 THEN EXIT FOR
X = 2*X
NEXT X

Ответы

12345678
27193-190831

Источник