Главная

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

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

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

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

ТОР 5 статей:

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

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

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

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

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

КАТЕГОРИИ:






Циклы с постусловием. У циклов с постусловием (циклов типа ДО) проверка условия продолжения цикла производится после выполнения операторов




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

 

ВЫПОЛНЯТЬ

Цепочка

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

 

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

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

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

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

Do

{

Оператор;

Оператор;

Оператор;

......

Оператор;

}

While (условие);

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

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

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

Перед закрывающей фигурной скобкой }поставить точку с запятой!

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

1. выполняется оператор (цепочка),

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

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. как только очередное число станет больше ста, цикл заканчивает работу.

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

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

Второй вариант решения задачи:

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

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

Первое число: 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; // в сумме – введенное число

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; // первый член ряда

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

Do

{

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

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

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

}

while (Math.abs(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 < 1) || (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 циклы с параметром реализуются оператором цикла:






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

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