ПОКА (условие) ВЫПОЛНЯТЬ

цепочка;

Таковой цикл именуется циклом с предусловием (циклом ПОКА) и изображается последующей схемой:

Условие – это логическое выражение, зависящее от переменных, входящих в цепочку. Цикл повторяется до того времени, пока условие поистине. Означает, данное условие является условиемпродолжения цикла. Выполнение цикла завершается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится неверным.

Цикл не производится никогда, если условие было ПОКА (условие) ВЫПОЛНЯТЬ неверным с самого начала.

Цикл ПОКА преобразуется в нескончаемый, если условие подобрано так, что оно всегда поистине.

В Java цикл с предусловием реализуется оператором цикла while:

While (условие)

оператор;

либо

While (условие)

{

оператор;

оператор;

. . . .

оператор;

}

Операторы, находящиеся меж фигурными скобками, именуются телом цикла.

Внимание!Условие всегда заключается в скобки и после него точка с запятой не ставится!

Если поставить точку с запятой после условия, то ПОКА (условие) ВЫПОЛНЯТЬ этот цикл, обычно, преобразуется в нескончаемый, так как в данном случае условие изменяться не будет.

Фигурные скобки употребляются в этом случае, если после условия должна следовать цепочка операторов.

Деяния оператора while:

1. проверяется выполнение условия,

2. если оно поистине, то производится оператор (цепочка), стоящий после него,

3. после его выполнения опять проверяется условие, и если оно опять поистине, то цикл повторяется ПОКА (условие) ВЫПОЛНЯТЬ,

4. если условие становится неверным, то цикл завершает работу.

Примеры:

1. вычислить сумму 100 первых натуральных чисел:

s = 1 + 2 + 3 + … + 98 + 99 + 100

Пусть s – разыскиваемая сумма,

i – еще одно число (меняется от 1 до 100).

Тогда метод решения задачки можно обрисовать последующим образом:

a. обнуляем сумму s = 0,

b. берем 1-ое число: i = 1,

c. добавляем в сумму это число: s = s + i,

d. увеличиваем еще одно ПОКА (условие) ВЫПОЛНЯТЬ число на единицу: i = i+ 1,

e. если оно не больше 100, то опять добавляем его в сумму и повторяем цикл.

Представим этот метод так:

s = 0;

i = 1;

ПОКА (i ≤ 100)

НАЧАЛО

s = s + i;

i = i + 1;

КОНЕЦ;

Схема метода:

Программка:


int i=1, s=0;

while (i<=100)

{

s+=i;

i++;

}

System.out.printf(“/ns ПОКА (условие) ВЫПОЛНЯТЬ=%d i=%d”,s, i);

Итог решения задачки:

s=5050 i=101

Таким макаром, выходим из этого цикла со значением i не 100, а 101.

Заместо цепочки:

s+=i;

i++;

можно использовать один оператор:

s+=i++;

Этот цикл можно перевоплотить в нескончаемый, если после условия поставить точку с запятой:
int i=1, s = 0;

while (i<=100);


{

s += i;

i ПОКА (условие) ВЫПОЛНЯТЬ++;

}

System.out.printf(“/ns=%d i=%d”,s, i);

Значение переменной i в данном случае изменяться не будет – она остается равной единице, и потому условие (i<=100)всегда поистине.

2. вычислить сумму s всех цифр данного натурального числа n

Пусть s – разыскиваемая сумма,

i – еще одна цифра числа.

Тогда метод решения задачки можно обрисовать последующим образом:

1. обнуляем сумму s=0,

2. берем ПОКА (условие) ВЫПОЛНЯТЬ последнюю цифру числа, зачем определяем остаток от деления начального числа на 10: i = n % 10,

3. добавляем в сумму найденную цифру: s = s + i,

4. уменьшаем число в 10 раз: n = n / 10,

5. повторяем цикл до того времени, пока n > 0 – это и будет условием продолжения цикла.

Схема метода:

Программка

int i, n, s = 0;

String input;

input=JOptionPane.showInputDialog("Введите целое ПОКА (условие) ВЫПОЛНЯТЬ положительное число:");

n=Integer.parseInt(input);

while (n>0)

{

i = n % 10;

s+=i;

n /= 10;

}

System.out.printf(“/ns=%d”,s);

3. ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Найти их сумму, наибольшее и малое число, количество введенных чисел и их среднее арифметическое.

Пусть s – разыскиваемая сумма,

min, max – малое и наибольшее ПОКА (условие) ВЫПОЛНЯТЬ из введенных чисел,

count – количество введенных чисел,

sred – среднее арифметическое,

n – еще одно число.

Тогда метод решения задачки можно обрисовать последующим образом:

1. обнуляем сумму s = 0,

2. вводим 1-ое число n,

3. если оно не равно нулю, то

4. принимаем его значение за min и max

5. количество введенных чисел count = 1

6. увеличиваем сумму на введенное число s = s + n

7. входим в ПОКА (условие) ВЫПОЛНЯТЬ цикл ввода:

8. вводим еще одно число n,

9. если оно не равно нулю, то

10. количество введенных чисел увеличиваем на 1: count = count+1

11. увеличиваем сумму на введенное число s = s + n

12. если оно меньше min, то min = n,

13. если оно больше max, то max = n,

14. повторяем цикл до того времени, пока n # 0 – это и будет условием продолжения цикла.

Сделаем интерфейс этой ПОКА (условие) ВЫПОЛНЯТЬ задачки – взаимодействие программки с юзером, другими словами что должно выводиться на экран:

1-ое число: 3

Еще одно число: 8

Еще одно число: 1

Еще одно число: -2

Еще одно число: 0

Сумма = 10

Количество чисел = 4

min = -2

max = 8

Среднее арифметическое = 2.50

Схема метода:

Программка

int min, max, n, count = 0;

double sred, s = 0.0;

String input;

input ПОКА (условие) ВЫПОЛНЯТЬ=JOptionPane.showInputDialog("Введите 1-ое число:");

n=Integer.parseInt(input);

if (n==0) //если введено число 0, то

return 0; //выход из программки с результатом 0

//по другому

min = n; // за минимум и максимум принимаем

max = n; //1-ое введенное число

count = 1; //введено одно число

s += n;

while (n!=0) // пока введенное число - не ноль

{ // делать цикл

input=JOptionPane.showInputDialog("Введите еще одно число:");

n=Integer ПОКА (условие) ВЫПОЛНЯТЬ.parseInt(input);

if (n==0)

break; // если введен ноль – выход из цикла ввода

count++; // количество введенных чисел

s += n; // сумма введенных чисел

if (n > max) // определение наибольшего числа

max = n;

if (n < min) // определение малого числа

min = n;

}

System.out.printf(“\nСумма = %4.2f”, s);

System.out.printf(“\nКоличество чисел = %d”, count);

System ПОКА (условие) ВЫПОЛНЯТЬ.out.printf(“\nmin = %d”, min);

System.out.printf(“\nmax = %d”, max);

sred = (double)s/count; // определение среднего арифм.

System.out.printf(“\n Среднее арифметическое = %6.2f”,sred);

Распространенные ошибки программирования:

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

int i=1, s = 0;

while (i<=100);

{

s += i;

i++;

}

2. Условие не заключено в ПОКА (условие) ВЫПОЛНЯТЬ скобки:

int i=1, s = 0;

while i<=100

{

s += i;

i++;

}

3. Отсутствие фигурных скобок, в которые заключается тело цикла:

int i=1, s = 0;

while (i<=100)

s += i;

i++;

Это может привести к возникновению безграничных циклов.

4.Отсутствие в теле цикла оператора, изменяющего условие:

int i=1, s = 0;

while (i<=100)

{

s += i;

}

Это тоже приводит к возникновению нескончаемых ПОКА (условие) ВЫПОЛНЯТЬ циклов.

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

У циклов с постусловием (циклов типа ДО) проверка условия продолжения цикла делается после выполнения операторов, составляющих тело цикла:

Делать

Цепочка

ДО (условие);

Таковой цикл повторяется до того времени, пока условие поистине. Выполнение цикла завершается, если операторы цепочки изменяют значения переменных, входящих в условие, и оно становится неверным.

В любом случае этот цикл производится хотя бы один раз. Цикл ПОКА (условие) ВЫПОЛНЯТЬ с постусловием преобразуется в нескончаемый, если условие подобрано так, что оно всегда поистине.

Таким макаром, условие в данном цикле является условием его продолжения, как и в цикле с предусловием.

В Java цикл с постусловием реализован оператором цикла do:

do

{

оператор;

оператор;

оператор;

. . . . . .

оператор;

}

while (условие);

где do – служебное слово делать,

while – служебное слово пока.

Внимание! После слова do точка с запятой не ставится!

Перед закрывающей ПОКА (условие) ВЫПОЛНЯТЬ фигурной скобкой }поставить точку с запятой!

Деяния оператора do:

1. производится оператор (цепочка),

2. проверяется выполнение условия, стоящего после слова while,

3. если оно поистине, то цикл повторяется,

4. если условие становится неверным, то цикл завершает работу.

Примеры:

1. вычислить сумму 100 первых натуральных чисел:

s = 1 + 2 + 3 + … + 98 + 99 + 100

Пусть s – разыскиваемая сумма,

i – еще одно число (меняется от 1 до 100).

Тогда метод решения задачки можно ПОКА (условие) ВЫПОЛНЯТЬ обрисовать последующим образом:

a. обнуляем сумму s = 0 ,

b. берем 1-ое число: i = 1,

c. добавляем в сумму еще одно число s = s + i,

d. как еще одно число станет больше 100, цикл завершает работу.

Представим этот метод так:

s = 0;

i = 1;

Делать

s = s + i;

i = i + 1;

ПОКА (i <= 100);

Программка:


int i=1, s=0;

do

{

s+=i;

i++;

}

while (i ПОКА (условие) ВЫПОЛНЯТЬ <= 100);


System.out.printf(“/ns=%d i=%d”,s, i);

Итог решения задачки:

s=5050 i=101

2-ой вариант решения задачки:

do

s+=i++;

while (i <= 100);


2. вычислить сумму s всех цифр данного натурального числа n

Пусть s – разыскиваемая сумма,

i – еще одна цифра числа.

Тогда метод решения задачки можно обрисовать последующим образом:

1. обнуляем сумму s = 0 ,

2. берем последнюю цифру числа ПОКА (условие) ВЫПОЛНЯТЬ, зачем определяем остаток от деления начального числа на 10: i = n % 10,

3. добавляем в сумму найденную цифру: s = s + i,

4. уменьшаем число в 10 раз: n = n / 10,

5. повторяем цикл до того времени, пока n != 0 .

Схема метода:

Программка:

int i, n, s = 0;

String input;

input=JOptionPane.showInputDialog("Введите целое положительное число:");

n=Integer ПОКА (условие) ВЫПОЛНЯТЬ.parseInt(input);

do

{

i = n % 10;

s+=i;

n /= 10;

}

while (n != 0);

System.out.printf(“/ns=%d”,s);

3. ввести с клавиатуры по одному последовательность целых чисел (конец последовательности – число 0). Найти их сумму, наибольшее и малое число, количество введенных чисел и их среднее арифметическое.

Пусть s – разыскиваемая сумма,

min, max – малое и наибольшее из введенных чисел ПОКА (условие) ВЫПОЛНЯТЬ,

count – количество введенных чисел,

sred – среднее арифметическое,

n – еще одно число.

Тогда метод решения задачки можно обрисовать последующим образом:

a. обнуляем сумму s = 0,

b. вводим 1-ое число n,

c. если оно не равно нулю, то

· принимаем его значение за min и max

· количество введенных чисел count = 1

· увеличиваем сумму на введенное число s = s + n

· входим в цикл ввода:

d ПОКА (условие) ВЫПОЛНЯТЬ. вводим еще одно число n,

если оно не равно нулю, то

· количество введенных чисел увеличиваем на 1: count = count+1

· увеличиваем сумму на введенное число s = s + n

· если оно меньше min, то min = n,

· если оно больше max, то max = n,

e. повторяем цикл до того времени, пока n # 0 – это и будет условием продолжения цикла ПОКА (условие) ВЫПОЛНЯТЬ.

Сделаем интерфейс этой задачки – взаимодействие программки с юзером, другими словами что должно выводиться на экран:

1-ое число: 3

Еще одно число: 8

Еще одно число: 1

Еще одно число: -2

Еще одно число: 0

Сумма = 10

Количество чисел = 4

min = -2

max = 8

Среднее арифметическое = 2.50

Программка

int min, max, n, count = 0;

double sred, s = 0.0;

String input;

input=JOptionPane.showInputDialog("Введите ПОКА (условие) ВЫПОЛНЯТЬ 1-ое число:");

n=Integer.parseInt(input);

if (n==0) //если введено число 0, то

return 0; //выход из программки с результатом 0

//по другому

min = n; // за минимум и максимум принимаем

max = n; //1-ое введенное число

count = 1; //введено одно число

s += n; // в сумме – введенное число

do (n!=0)

{

input=JOptionPane.showInputDialog("Введите еще одно число:");

n=Integer ПОКА (условие) ВЫПОЛНЯТЬ.parseInt(input);

if (n==0)

break;

count++;

s += n;

if (n > max)

max = n;

if (n < min)

min = n;

} while(n!=0);

System.out.printf(“\nСумма = %4.2f”, s);

System.out.printf(“\nКоличество чисел = %d”, count);

System.out.printf(“\nmin = %d”, min);

System.out.printf(“\nmax = %d”, max);

sred = (double)s/count;

System ПОКА (условие) ВЫПОЛНЯТЬ.out.printf(“\n Среднее арифметическое = %6.2f”,sred);

Схема метода:








4. вычислить s – сумму членов нескончаемого ряда:

s = 1 + x/ 1! + x2 / 2! + x3 / 3! + … + xk / k! + …

с погрешностью ε0.

Каждый следующий член ряда можно найти через предшествующий, используя рекуррентную формулу:

yk+1 = yk·x / k

Текущая погрешность вычислений ε определяется последним просуммированным членом ряда:

ε =|yn|

Эту погрешность нужно сопоставить ПОКА (условие) ВЫПОЛНЯТЬ с данной погрешностью ε0 для реализации условия окончания суммирования:

- если ε > ε0 , то данная точность еще не достигнута, и суммирование ряда нужно продолжить, прибавив к имеющейся сумме очередной член,

- если ε <= ε0 , то данная точность достигнута, и суммирование нужно закончить.

Пусть s – разыскиваемая сумма,

y – очередной член ряда,

k - номер члена ряда,

eps_0 – данная точность вычислений,

x – вводимый ПОКА (условие) ВЫПОЛНЯТЬ аргумент.

Программка:


Public final double EPS_0 = 0.001;

int k = 0;

double x, y, s;

String input;

input=JOptionPane.showInputDialog("x=");

x=Double.parseDouble(input);

y = 1.0; // 1-ый член ряда

s = y; // в сумме – он же

do

{

k++; // номер члена ряда увеличиваем на единицу

y *= x / k; // очередной член ряда

s += y; // добавляем его в сумму

}

while (Math.абс ПОКА (условие) ВЫПОЛНЯТЬ(y)>EPS_0);

System.out.printf(“\nСумма = %5.3f”, s);

Схема метода:

Циклы с постусловием обычно употребляются в фильтрах входных данных – начальные данные вводятся до того времени, пока они не будут корректными, а неправильные начальные данные отвергаются.

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

Схема фильтра (month – номер месяца)

Программка:

int month ПОКА (условие) ВЫПОЛНЯТЬ;

String input;

do

{

input=JOptionPane.showInputDialog("Введите номер месяца:");

month=Integer.parseInt(input);

} while ((month 12));

Switch (month)

{

case 1: case 3: case 5:

case 7: case 8: case 10:

case 12: System.out.printf(“\n31 денек”);

break;

case 4: case 6: case 9:

case 11: System.out.printf(“\n30 дней”);

break;

case 2: System.out.printf(“\n28 дней”);

break;

default: System.out.printf(“\nТакого ПОКА (условие) ВЫПОЛНЯТЬ месяца нет\n”);

}

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

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

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

Циклы этого типа получили более обширное распространение ПОКА (условие) ВЫПОЛНЯТЬ в алгоритмических языках.

Схему цикла с параметром можно представить в последующем виде:

где x – параметр цикла – неважно какая переменная,

x_нач – его изначальное значение,

x_кон – его конечное значение,

x_шагшаг его конфигурации (не только лишь целое число).

В Java циклы с параметром реализуются оператором цикла:


pokazateli-i-kriterii-ocenivaniya-kompetencij-po-etapam-ih-formirovaniya.html
pokazateli-i-kriterii-tekushego-i-promezhutochnogo-kontrolya-po-kursu-pedagogika.html
pokazateli-i-modeli-ocenki-imushestvennogo-polozheniya.html