ТОР 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++; Этот цикл можно превратить в бесконечный, если после условия поставить точку с запятой: 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; } Это тоже приводит к появлению бесконечных циклов.
Не нашли, что искали? Воспользуйтесь поиском:
|