Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






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




Как правило, некоторую цепочку операторов необходимо повторять не бесконечно, а до тех пор, пока выполняется некоторое условие:

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

Цепочка;

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

 

 

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

Цикл не выполняется ни разу, если условие было ложным с самого начала.

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

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

While (условие)

Оператор;

или

While (условие)

{

Оператор;

Оператор;

....

Оператор;

}

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

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

Если поставить точку с запятой после условия, то этот цикл, как правило, превращается в бесконечный, потому что в этом случае условие изменяться не будет.

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

Действия оператора while:

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

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

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

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

Примеры:

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

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

Пусть s – искомая сумма,

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

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

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

b. берем первое число: 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. вводим первое число 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 – это и будет условием продолжения цикла.

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

Первое число: 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("Введите первое число:");

n=Integer.parseInt(input);

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

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

//иначе

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

max = n; //первое введенное число

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;

}

Это тоже приводит к появлению бесконечных циклов.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных