Основы языка программирования JAVA. Циклы

Содержание

Слайд 2

Циклы (итерационные процедуры) Цикл с неизвестным количеством операций: У бабушки есть

Циклы (итерационные процедуры)

Цикл с неизвестным количеством операций:
У бабушки есть шкаф с

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

Цикл с известным количеством операций:
При переезде было собрано 98 коробок, которые нужно погрузить и перевезти в новый дом.
В данном случае известно сколько раз нужно выполнить операции!

да

нет

Шкаф с посудой
Есть не мытая
посуда?
Берем 1 единицу посуды
Моем 1 единицу посуды
Сушим, складываем в новый шкаф
Ура! Можно отдохнуть!
98 коробок, которые нужно
погрузить для перевозки;
Действия в цикле повторятся
98 раз
Берем 1 коробку,
несем, грузим
Ура! Все погрузили!

98
раз

Слайд 3

Циклы m = 0.025 i = 0; S = 0; Sn

Циклы

m = 0.025
i = 0;
S = 0;
Sn = (-1)i/2i;
while (|Sn| >

m)
S = S + Sn;
i++;
Sn = (-1)i/2i;
Вывести S

true

false

Постановка задачи:
Вычислить сумму первых 10 членов ряда. Ряд:
S = 0;
Sn = 0;
for ( i = 1 до 10 с шагом 1)
Sn = Sn + sin(i);
S = S + 1/Sn;
Вывести S

Слайд 4

Цикл While import static java.lang.System.out; import java.util.Scanner; public class CiclWhile {

Цикл While

import static java.lang.System.out;
import java.util.Scanner;
public class CiclWhile {
public static void

main(String args[]) {
Scanner scan = new Scanner(System.in);
out.println("Введите m");
double m = scan.nextDouble();
int i = 0;
double S = 0;
double Sn = Math.pow(-1, i)/Math.pow(2, i);
while (Math.abs(Sn) > m) {
S = S + Sn;
i++;
Sn = Math.pow(-1, i)/Math.pow(2, i);
}
out.printf("Сумма %d членов ряда S = %f", i, S);
}
}
Ответ:
Слайд 5

Цикл While Цикл с неизвестным количеством операций: Мама пытается накормить ребенка

Цикл While

Цикл с неизвестным количеством операций:
Мама пытается накормить ребенка блинами. С

каждой итерацией мама сокращает порцию в два раза. Посчитать сколько ребенок съест блинов до того, как наестся.
Слайд 6

Цикл While Цикл с неизвестным количеством операций: Мама пытается накормить ребенка

Цикл While

Цикл с неизвестным количеством операций:
Мама пытается накормить ребенка блинами. С

каждой итерацией мама сокращает порцию в два раза. Посчитать сколько ребенок съест блинов до того, как наестся.
Слайд 7

Слайд 8

Слайд 9

Слайд 10

Слайд 11

Циклы (итерационные процедуры) Цикл с неизвестным количеством операций: У бабушки есть

Циклы (итерационные процедуры)

Цикл с неизвестным количеством операций:
У бабушки есть шкаф с

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

да

нет

Шкаф с посудой
Есть не мытая
посуда?
Берем 1 единицу посуды
Моем 1 единицу посуды
Сушим, складываем в новый шкаф
Ура! Можно отдохнуть!

Цикл с неизвестным количеством операций:
У бабушки есть шкаф с посудой, которую нужно перемыть (сколько посуды в шкафу не известно даже бабушке) и переложить в новый шкаф.
В данном случае количество операций так же не известно! Но тело цикла выполниться хотя бы 1 раз!

да

нет

Шкаф с посудой
Берем 1 единицу посуды
Моем 1 единицу посуды
Сушим, складываем в новый шкаф
Есть не мытая
посуда?
Ура! Можно отдохнуть!

делать (do)

пока (while)

пока (while)

Слайд 12

Циклы While и Do m = 0.025 i = 0; S

Циклы While и Do

m = 0.025
i = 0;
S = 0;
Sn =

(-1)i/2i;
while (|Sn| > m)
S = S + Sn;
i++;
Sn = (-1)i/2i;
Вывести S

true

false

Цикл While

m = 0.025
i = 0;
S = 0;
Sn = (-1)i/2i;
S = S + Sn;
i++;
while (|Sn| > m)
Вывести S

false

Цикл Do … While

true

do

Слайд 13

Цикл Do (Do ... While) import static java.lang.System.out; import java.util.Scanner; public

Цикл Do (Do ... While)

import static java.lang.System.out;
import java.util.Scanner;
public class CiclDoWhile {

public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
out.println("Введите m");
double m = scan.nextDouble();
int i = 0;
double S = 0, Sn;
do {
Sn = Math.pow(-1, i)/Math.pow(2, i);
if (Math.abs(Sn) > m)
S = S + Sn;
i++;
} while (Math.abs(Sn) > m);
out.printf("Сумма %d членов ряда S = %f", i-1, S);
}
}
Ответ:
Слайд 14

Цикл Do While Цикл с неизвестным количеством операций: Пользователь вводит целое

Цикл Do While

Цикл с неизвестным количеством операций:
Пользователь вводит целое число и

хочет узнать сколько в нем цифр.

import java.util.Scanner;
public class Chislo {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
System.out.println("Введите целочисленное число");
int x = scan.nextInt();
System.out.println("В числе " + kolichestvo_cifr(x) + " цифр" );
}
public static int kolichestvo_cifr(int x) {
int sch = 0;
do{
x = x/10;
sch++;
} while(x!=0);
return sch;
}
}

Основной метод класса

Метод класса для определения
количества цифр в числе

Слайд 15

Слайд 16

Математическая постановка задачи Уравнение прямой 1 Уравнение прямой 2 Уравнение прямой

Математическая постановка задачи

Уравнение прямой 1

Уравнение прямой 2

Уравнение прямой 3

Проверка попадания точки

в область в цикле

Класс, в который входит проверка попадания точки в область

! В основной программе мы будем использовать метода данного класса (наследовать его)

Слайд 17

Слайд 18

Слайд 19

Цикл For - Инициализация – это присвоение счетчику начального значения. Всегда

Цикл For

- Инициализация – это присвоение счетчику начального значения. Всегда выполняется

только один раз, когда программа начинает
выполнять инструкцию for .
- Условие оценивается многократно перед каждой итерацией цикла .
- Инкремент счетчика выполняется многократно после каждой итерации цикла.

for ( i=0; i <10;) – счетчик можно увеличивать в
теле цикла.
for ( ; ; ) – цикл будет выполнятся вечно.
В теле цикла можно использовать оператор break,
тогда программа немедленно выходит из цикла и
выполняет инструкции, находящуюся после цикла

Реализация аналогичного тела цикла с использованием while
i = 1;
while ( i <= 10) {
out.print("Знaчeниe счетчика равно ");
out.print(i);
out.println(".");
i++;
}

Пример записи for
for ( int i = 1; i <= 10; i++) {
out.print("Знaчeниe счетчика равно ");
out.print(i);
out.println(".");
}

Постановка задачи
Вывести в цикле как изменяется «Значение счетчика».

Слайд 20

Пример использования цикла For Постановка задачи: Вычислить сумму первых 10 членов

Пример использования цикла For

Постановка задачи:
Вычислить сумму первых 10 членов ряда.
Ряд:
1)
2)
3)
4)
5)

5,6766044231303825
6) -9,684869036403398
7) 1,8059253305182494
8) 0,6480499218978222
9) 0,51145414808554
10) 0,7086226193437877 → Сложив все 10 компонентов получим такой же ответ.

import static java.lang.System.out;
public class CiclFor {
public static void main(String args[]) {
double S = 0, Sn = 0;
for (int i = 1; i <= 10; i++) {
Sn = Sn + Math.sin(i);
S = S + 1/Sn;
}
out.println("Сумма 10 членов ряда S = " + S);
}
}
Ответ:

Слайд 21

Цикл For Постановка задачи: Пользователь вводит целое двоичное число, найти его

Цикл For

Постановка задачи:
Пользователь вводит целое двоичное число, найти его значение в

10-ой системе счисления с использованием цикла for?

import java.util.Scanner;
public class Dvoichnoe_chislo{
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
Chislo ch = new Chislo(); // для взаимосвязи с классом Chislo
System.out.println("Введите целое число в 2-ой системе счисления");
long x = scan.nextLong(), Chislo10 = 0;
if(ch.proverka_na_2ost(x)) { //в скобках обращение к методу класса Chislo, который
делает проверку является ли введенное число 2-ым
int n = ch.kolichestvo_cifr(x); //обращение к методу возвращающему количество цифр класса Chislo
for(int i = 0; i < n; i++){
Chislo10 += (int)(x%10*Math.pow(2, i));
x = x/10;
} // цикл for для перевода числа из 2-ой системы счисления в 10-ю
System.out.println("Число в 10-ой системе счисления = " + Chislo10);
} else {
System.out.println("Введено число не в 2-ой системе счисления");
}
}
}

Слайд 22

Слайд 23

Слайд 24

Слайд 25

Много кратное использование цикла For Постановка задачи: Вычислить значение выражения: For

Много кратное использование цикла For

Постановка задачи:
Вычислить значение выражения:
For i = 1

до 8 с шагом 1
For j = 1 до 3 с шагом 1
i = 1 → пробегаем весь цикл j
Sj = (1+1)*(2+1)*(3+1) = 24
вышел из j прибавил Sj к Si, приравнял Sj =1
i = 2 → пробегаем весь цикл j
Sj = (1+2)*(2+2)*(3+2) = 60
вышел из j прибавил Sj к Si, приравнял Sj =1…

import static java.lang.System.out;
public class ForFor {
public static void main(String args[]) {
double Si = 0, Sj = 1;
for (int i = 1; i <= 8; i++) {
for (int j = 1; j <= 3; j++) {
Sj = Sj*(j+i);
}
Si = Si + Sj;
Sj = 1;
}
out.println("Сумма произведения = " + Si);
}
}
Ответ:

Слайд 26

Сочетание циклов For и While Постановка задачи: Вычислить значение выражения: For

Сочетание циклов For и While

Постановка задачи:
Вычислить значение выражения:
For i = 1

до 10 с шагом 1
Пока j <= i тогда
i = 1 (при входе в цикл j = 1) → j <= 1
Sj = (2*1+1)=3 вышел из цикла Пока
прибавил Sj к Si, приравнял Sj = 0,
i = 2 (при входе в цикл j = 1) → j <= 1
Sj = (2*2+1)+(2*2+2) = 11 вышел из цикла Пока
прибавил Sj к Si, приравнял Sj = 0, …

import static java.lang.System.out;
public class CiclForWhile {
public static void main(String args[]) {
double Si = 0, Sj = 0;
int j;
for (int i = 1; i <= 10; i++) {
j = 1;
while (j<=i) {
Sj = Sj + (2*i+j);
j++;
}
Si = Si + Sj;
Sj = 0;
}
out.println("Сумма сумм = " + Si);
}
}
Ответ:

Слайд 27

Как сделать проверку задач с вычислениями типа Вычислить значение выражения: -

Как сделать проверку задач с вычислениями типа

Вычислить значение выражения:
- В

С3 вводится формула «=$B3+C$2», т.е. суммируются индексы i и j, которые заданны в столбце В и строчке 2 соответственно, формула растягивается на весь диапазон i и j;
В ячейку F3 вводится формула «=ПРОИЗВЕД(C3:E3)», т.е. идет перемножение слагаемых при одинаковых значениях i, что соответствует заданной формулой, затем формула растягивается на весь диапазон i;
В ячейка F11 формируется итоговая сумма произведений при помощи формулы «=СУММ(F3:F10)».

Вычислить значение выражения:
В С3 вводится формула «=ЕСЛИ(C$2<=$B3;2*$B3+C$2;0)», т.е. если номер j <= i , тогда находится сумма 2*i+j, иначе 0, формула растягивается на весь диапазон i и j;
! При суммировании 0 задаются компоненты, которых не существует для данной задачи, при произведении компоненты которые не существуют для данной задачи задаются 1.
В ячейка L11 формируется итоговая сумма cсумм формулой «=СУММ(C3:L12)».
! Внимательно следите за логикой математических операций чтобы избежать ошибок вычисления.

Слайд 28

Постановка задачи: Ежемесячная стипендия студента составляет A руб., студент откладывает стипендию

Постановка задачи: Ежемесячная стипендия студента составляет A руб., студент откладывает стипендию

на покупку ноутбука, который стоит В руб. Стипендия индексируется на 6 % каждые три месяца, при этом стоимость ноутбука увеличивается раз в пол года на 10 %. Определить через сколько месяцев студент сможет купить ноутбук.

Пример реализации задачи с использованием циклов

import java.util.Scanner;
public class Cicl {
public static void main(String args[]) {
Scanner scn = new Scanner(System.in);
System.out.println("Введите сумму стипендии, которую получае студент");
double A = scn.nextDouble();
System.out.println("Введите стоимость компьютера, на который студент копит");
double B = scn.nextDouble();
int i = 0;
double S = 0;
while (S if (i%3==0 & i!=0)
A = A+0.06*A;
if (i%6==0 & i!=0)
B = B+0.1*B;
S +=A;
i++;
}
System.out.printf("Стуенту понадобиться %d месяцев копить на компьютер \n", i);
System.out.printf("Текущий размер стипендии = %.4f руб. \n", A);
System.out.printf("Текущая стоимость компьютера = %.4f руб.", B);
}
}

Ответ

Слайд 29

Вычисление корня р-й степени в рамках итерационной процедуры Остановка итерационной процедуры

Вычисление корня р-й степени в рамках итерационной процедуры

Остановка итерационной процедуры

Начальное

значение для итерационной процедуры

Итерационная процедура

– функция, приближенное значение которой мы ищем

Слайд 30

Метод для отыскания корней нелинейных уравнений f(x) – нелинейное уравнение, которое

Метод для отыскания корней нелинейных уравнений

f(x) – нелинейное уравнение, которое от

-∞ до + ∞, может обладать большим количеством корней.

Метод
Аналитические Численные

Графические

С использованием прикладных программ

Половинного деления
Простых итераций
Ньютона
Хорд
и т.д.

Слайд 31

Метод половинного деления Остановка итерационной процедуры Половина отрезка Условие проверки есть

Метод половинного деления

Остановка итерационной процедуры

Половина
отрезка

Условие проверки есть ли корень на

отрезке, который ввел пользователь

Условие проверки есть ли корень на половине отрезка (необходимо для реализации метода)

Разделим отрезок [a,b] пополам точкой c. Если f(c) ≠ 0 (что практически наиболее вероятно), то возможны два случая:
f(x) меняет знак на [a,с], т.е. f(a)*f(c) < 0. Тогда отрезок [a,b] сокращается в два раза, это значит, что мы отсекаем отрезок [с,b] или b=c.
f(x) меняет знак на [с,b], т.е. f(c)*f(b) < 0. Тогда отрезок [a,b] сокращается в два раза, это значит, что мы отсекаем отрезок [a,c] или a=c.

Слайд 32

Найти корень уравнения методом половинного деления с точностью ε=0,01 и ε=0,0001 . ε ε

Найти корень уравнения методом половинного деления с точностью ε=0,01 и ε=0,0001

.

ε<0,01 x = -1,32421875

ε<0,0001 x = -1,32473755

Слайд 33

Проверка корня уравнения с помощью «Поиск решения» Данные -> Поиск решения

Проверка корня уравнения с помощью «Поиск решения»

Данные -> Поиск решения
Настраиваем поиск

решения:
Целевая ячейка это функция B2 (f)
Равной: 0
Изменяя ячейки А2 (x)
Ограничения x>=- 2 и x <=- 1

В итоге получаем корень уравнения на заданном отрезке
При этом решение задачи в MS Excel так же получено с
погрешностью, но мы можем настроить «Параметры» таким образом чтобы она была минимальна.

Слайд 34

Метод Ньютона (метод касательной) Остановка итерационной процедуры Необходимо чтобы производная функции

Метод Ньютона (метод касательной)

Остановка итерационной процедуры

Необходимо чтобы производная функции не равнялась

0 на отрезке

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

Первое приближение корня находят по формуле

В общем виде k приближение корня находят по формуле

Метод Ньютона (метод касательных) является одним из наиболее популярных численных методов. Он быстро сходится (имеет квадратичную сходимость). Однако этот метод эффективен при весьма жестких ограничениях на характер функции f(x).
Геометрическая интерпретация метода Ньютона состоит в следующем. Задается начальное приближение х0. Далее проводится касательная к кривой y = f(x) в точке х0, т.е. кривая заменяется прямой линией. В качестве следующего приближения выбирается точка пересечения этой касательной с осью абсцисс. Процесс построения касательных и нахождения точек пересечения с осью абсцисс повторяется до тех пор, пока приращение не станет меньше заданной величины ε.

Слайд 35

! Можно отметить, что решения методом Ньютона требует намного меньше итераций

! Можно отметить, что решения методом Ньютона требует намного меньше итераций

для достижения требуемой погрешности между двумя соседними решениями.

Решение задачи методом Ньютона

Найти корень уравнения методом Ньютона.

Слайд 36

Метод простой итерации Необходимо уравнение f(х) = 0 равносильным преобразованием привести

Метод простой итерации

Необходимо уравнение f(х) = 0 равносильным преобразованием привести к

виду х = ϕ(х).
При этом задача сводится к нахождению абсциссы точки пересечения прямой y=x и кривой y = ϕ(х).

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

Первое приближение корня находят по формуле

В общем виде k приближение корня находят по формуле

Остановка итерационной процедуры

Способ определения ϕ(х)
1. Выразить из f(х) = 0 x, таким образом преобразовать уравнение к виду х = ϕ(х). При этом | ϕ '(х) | < 1.
2. Записать ϕ(х) через формулу x=g(x)f(x)+x ≅ ϕ(х). g(x) часто берут константой, которую можно определить как g(x)=±1/f′(x0). При этом | ϕ '(х) | < 1.

Слайд 37

Решение задачи методом простых итераций Найти корень уравнения методом простых итераций.

Решение задачи методом простых итераций

Найти корень уравнения методом простых итераций.
ϕ 1

– это ϕ(х) = x3 + 1 при этом ϕ'(х) = 3x2 тогда |ϕ'(a)| = |ϕ'(-2)|=3*4=12>1.
// Такая функция нам не подходит
Тогда делаем преобразование по другому тогда ,
при этом
тогда . // Такая функция нам подходит
2. ϕ 2 – это ϕ(х) = 0,09*(x3 – x + 1) + x при этом ϕ'(х) = 0,09(3x2 – 1) + 1 тогда
|ϕ'(a)| = |ϕ'(-2)|=|0,09*(3*4-1)+1|=|0,09(12-1)+1|=1,99 > 1. // Такая функция нам не подходит
ϕ 2 – это ϕ(х) = -0,09*(x3 – x + 1) + x при этом ϕ'(х) = -0,09(3x2 – 1) + 1 тогда
|ϕ'(a)| = |ϕ'(-2)|= |-0,09*(3*4-1)+1|=|-0,09(12-1)+1|=0,01 < 1. // Такая функция нам подходит
!!! От выбора функции ϕ(х) зависит получите вы или нет сходящуюся итерационную процедуру
Слайд 38

Решение задачи методом простых итераций

Решение задачи методом простых итераций

Слайд 39

Слайд 40

Алгоритм приближённого вычисления интеграла трапеция прямоугольники парабола

Алгоритм приближённого вычисления интеграла

трапеция

прямоугольники

парабола

Слайд 41

Алгоритм приближённого вычисления интеграла (трапеция) Пример интеграла Площадь (интеграл) вычисляется по формуле Площадь одного кусочка кривой

Алгоритм приближённого вычисления интеграла (трапеция)

Пример интеграла

Площадь (интеграл) вычисляется по формуле

Площадь

одного кусочка кривой
Слайд 42

Алгоритм приближённого вычисления интеграла (прямоугольники) Площадь (интеграл) вычисляется по формуле Площадь одного кусочка кривой

Алгоритм приближённого вычисления интеграла (прямоугольники)

Площадь (интеграл) вычисляется по формуле

Площадь одного

кусочка кривой