Программирование на языке Java. Тема 15. Циклы с известным числом шагов

Содержание

Слайд 2

Программирование на языке Java Тема 15. Циклы с известным числом шагов

Программирование на языке Java

Тема 15. Циклы с известным числом шагов

Слайд 3

Циклы Цикл – это многократное выполнение одинаковой последовательности действий. цикл с

Циклы

Цикл – это многократное выполнение одинаковой последовательности действий.
цикл с известным числом

шагов
цикл с неизвестным числом шагов (цикл с условием)
Задача. Вывести на экран квадраты и кубы целых чисел от 1 до 8 (от a до b).
Особенность: одинаковые действия выполняются 8 раз.
Слайд 4

Алгоритм начало i, i2, i3 конец нет да i i =

Алгоритм

начало

i, i2, i3

конец

нет

да

i <= 8?

i = 1;

i ++;

i2 = i *

i;
i3 = i2 * i;

задать начальное значение переменной цикла

проверить, все ли сделали

вычисляем квадрат и куб

вывод результата

перейти к следующему i

Слайд 5

Алгоритм (с блоком «цикл») начало i, i2, i3 конец i2 =

Алгоритм (с блоком «цикл»)

начало

i, i2, i3

конец

i2 = i * i;
i3 =

i2 * i;

i=1;i<=8;i=i+1

блок «цикл»

тело цикла

Слайд 6

Программа public static void main(String args[]) { int i, i2, i3;

Программа

public static void main(String args[])
{
int i, i2, i3;
for (i=1; i<=8;

i++)
{
i2 = i*i;
i3 = i2*i;
System.out.printf(”%d %d %d”,i,i2,i3);
}
}

for (i=1; i<=8; i++)
{
i2 = i*i;
i3 = i2*i;
System.out.printf(”%d %d %d”,i,i2,i3);
}

циклическая переменная

начальное значение

условие нахождения в цикле

шаг цикла
i=i+1

цикл работает, пока это условие верно

цикл

начало цикла

конец цикла

заголовок цикла

for (i=1; i<=8; i++)

i2 = i*i;
i3 = i2*i;
System.out.printf(”%d %d %d”,i,i2,i3);

тело цикла

Слайд 7

Цикл с уменьшением переменной Задача. Вывести на экран квадраты и кубы

Цикл с уменьшением переменной

Задача. Вывести на экран квадраты и кубы целых

чисел от 8 до 1 (в обратном порядке).
Особенность: переменная цикла должна уменьшаться.
Решение:

for (i=8; i>=1; i--)
{
i2 = i*i;
i3 = i2*i;
System.out.printf( ... );
}

i--

i>=1

Слайд 8

Цикл с переменной for (начальные значения; условие продолжения цикла; изменение на

Цикл с переменной

for (начальные значения;
условие продолжения цикла;
изменение на каждом

шаге)
{
// тело цикла
}

Примеры:

for (a = 2; a < b; a+=2) { ... }

for (a = 2, b = 4; a < b; a+=2) { ... }

for (a = 1; c < d; x++) { ... }

for (; c < d; x++) { ... }

for (; c < d; ) { ... }

Слайд 9

Цикл с переменной Особенности: условие проверяется в начале очередного шага цикла,

Цикл с переменной

Особенности:
условие проверяется в начале очередного шага цикла, если оно

ложно цикл не выполняется;
изменения (третья часть в заголовке) выполняются в конце очередного шага цикла;
если условие никогда не станет ложным, цикл может продолжаться бесконечно (зацикливание)
если в теле цикла только один оператор, скобки {} можно не ставить:

for(i=1; i<8; i++) { i--; }

for (i = 1; i < 8; i++) a += b;

Слайд 10

for (i=8; i>=1; i--) System.out.print("Привет"); System.out.print(i); Цикл с переменной Особенности: после

for (i=8; i>=1; i--) System.out.print("Привет");
System.out.print(i);

Цикл с переменной

Особенности:
после выполнения цикла во многих

системах устанавливается первое значение переменной цикла, при котором нарушено условие:

for (i=1; i<=8; i++) System.out.print("Привет");
System.out.print(i);

i=9

i=0

Слайд 11

Использование циклов Советы: При написании программ используйте форматирование «лесенкой». Используйте отладку

Использование циклов

Советы:
При написании программ используйте форматирование «лесенкой».
Используйте отладку программ для поиска

логических ошибок в программах.

for (i=1; i<=8; i++) { System.out.print("Привет");
System.out.print(i);
}

for (i=1; i<=8; i++) { System.out.print("Привет");
System.out.print(i);
}

В NetBeans:
Ctrl + Shift + F

Слайд 12

Сколько раз выполняется цикл? a = 1; for(i=1; i a =

Сколько раз выполняется цикл?

a = 1;
for(i=1; i<4; i++) a++;

a = 4

a

= 1; b=2;
for(i=3; i >= 1; i--)a += b;

a = 7

a = 1;
for(i=1; i >= 3; i--)a = a+1;

a = 1

a = 1;
for(i=1; i<= 4; i--)a ++;

зацикливание

a = 1;
for(i=1; i<4; i++) a = a+i;

a = 7

Слайд 13

for (i=1; i if( ??? ) { i2 = i*i; i3

for (i=1; i<=9;i++) {
if( ??? ) {
i2 = i*i;

i3 = i2*i;
System.out.print( ... );
}
}

Как изменить шаг?

Задача. Вывести на экран квадраты и кубы нечётных целых чисел от 1 до 9.
Особенность: переменная цикла должна увеличиваться на 2.
Решение:

i % 2 == 1

i2 = i*i;
i3 = i2*i;
System.out.printf( ... );

выполняется только для нечетных i

Слайд 14

Как изменить шаг? – II Идея: Надо вывести всего 5 чисел,

Как изменить шаг? – II

Идея: Надо вывести всего 5 чисел, переменная

i изменяется от 1 до 9, с каждым шагом цикла i увеличивается на 2.
Решение:
for (i=1;i<=9; i = i+2 ) {
i2 = i*i;
i3 = i2*i;
System.out.printf( ... );
}

i = i+2

Слайд 15

Как изменить шаг? – III Идея: Надо вывести всего 5 чисел,

Как изменить шаг? – III

Идея: Надо вывести всего 5 чисел, переменная

k изменяется от 1 до 5. Зная k, надо рассчитать i.
Решение:

i = 2k-1

for (k=1; k<=5; k++) {
i2 = i*i;
i3 = i2*i;
System.out.printf( ... );
}

i = 2*k – 1;

Слайд 16

Задания 1. Ввести a и b и вывести квадраты и кубы

Задания

1. Ввести a и b и вывести квадраты и кубы чисел

от a до b.
Пример:
Введите границы интервала:
4 6
4 16 64
5 25 125
6 36 216
2. Вывести квадраты и кубы 10 чисел следующей последовательности: 1, 2, 4, 7, 11, 16, …
Пример:
1 1 1
2 4 8
4 16 64
...
46 2116 97336
Слайд 17

Задания 3. Ввести на экран таблицу умножения.

Задания

3. Ввести на экран таблицу умножения.

Слайд 18

Прием накопления суммы Задача. Просуммировать целые числа от 1 до 100.

Прием накопления суммы

Задача. Просуммировать целые числа от 1 до 100.
Идея: переменной,

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

Буратино подарили три яблока. Два он съел. Сколько яблок осталось у Буратино?
Неизвестно, сколько осталось, так как не сказано, сколько яблок было у него до того, как ему подарили три новых.
Мораль: не забывайте обнулить переменные.

S = 0;
for (i=1; i<=100;i++)
S = S + i;
System.out.print(S);

Обнуление переменной

Прибавление очередного элемента суммы

Слайд 19

P = 1; for (i = 2; i P = P

P = 1;
for (i = 2; i <= n; i++)
P

= P * i;
System.out.print(P);

Прием накопления произведения

Задача. Вычислить факториал числа n.
Факториалом целого числа n называется произведение всех целых чисел от 1 до n. Обозначается n!
n! = 1*2*3*…*n
Идея: переменной, в которую записывается произведение, присвоим значение 1. В цикле на каждом шаге умножим эту переменную на очередное число.
Решение:

Слайд 20

s = 0; for (i=1; i p = 1; for (k=1;

s = 0;
  for (i=1; i<=n; i++) {    
p = 1;
    for (k=1; k<=i;

k++)
p =p*k;
    s = s + p;
  }

Комбинация обоих приемов – 1

Задача. Вычислить значение выражения 1!+2!+3!+…+n!
Идея: в теле цикла, осуществляющего суммирование, производить вычисление факториала:

Вложенный цикл

Слайд 21

s = 0; p = 1; for (i=1; i p =

s = 0; p = 1;
  for (i=1; i<=n; i++) {    
p =

p * i;
    s = s + p;
  }

Комбинация обоих приемов – 2

Задача. Вычислить значение выражения 1!+2!+3!+…+n!
Идея: при вычислении факториала на каждом шаге получается факториал все большего целого числа. Эти «промежуточные» результаты однократного вычисления факториала и можно суммировать

Вычисляем очередное значение

Прибавляем его к сумме

Слайд 22

Задания 1. Найдите сумму нечетных чисел от 1 до N. Пример:

Задания

1. Найдите сумму нечетных чисел от 1 до N.
Пример:
Введите

N:
10
Сумма равна 25
2. Напишите программу, вычисляющую значение выражения
Пример:
Введите x:
2
Сумма равна 2047
Слайд 23

Рекуррентные соотношения Зачастую результат вычислений на каждом шаге цикла должен зависеть

Рекуррентные соотношения

Зачастую результат вычислений на каждом шаге цикла должен зависеть от

результата вычислений на предыдущем шаге. Обобщенным математическим выражением этой идеи являются рекуррентные соотношения.
Задача: задано рекуррентное соотношение
начальное значение . Найдите

s = 0;
  for (i=1; i<=5; i++) {    
    s = 2 – s * s;
  }

Слайд 24

Последовательности Примеры: 1, 2, 3, 4, 5, … 1, 2, 4,

Последовательности

Примеры:
1, 2, 3, 4, 5, …
1, 2, 4, 7, 11, 16,


1, 2, 4, 8, 16, 32, …

an = n

a1 = 1, an+1 = an+1

a1 = 1, an+1 = an + n-1

an = 2n-1

a1 = 1, an+1 = 2an

b1 = 1, bn+1 = bn+1

c1 = 2, cn+1 = 2cn

Слайд 25

Задания Придумайте рекуррентные соотношения для последовательностей: 0, 5, 10, 15, …

Задания

Придумайте рекуррентные соотношения для последовательностей:
0, 5, 10, 15, …
1, 1,

1, 1, …
1, -1, 1, -1, …
1, -2, 3, -4, 5, -6, …
2, 4, 16, 256, …
0, 1, 2, 3, 0, 1, 2, 3, 0, …
1!, 3!, 5!, 7!, …
Слайд 26

Перменные-флаги Переменная флаг – это, как правило, переменная логического типа, значение

Перменные-флаги

Переменная флаг – это, как правило, переменная логического типа, значение которой

сигнализирует о состоянии вычислительного процесса.
Задача: Пользователь вводит 10 чисел. Требуется проверить, упорядочены ли они по возрастанию, и передать эту информацию с помощью переменной флага.

int x, x2;
boolean isGrowing = true;
x = in.nextInt();
for (int i = 2; i <= 10; i++) {
x2 = x;
x = in.nextInt();
isGrowing = isGrowing && (x > x2);
}

Слайд 27

Перменные-счетчики Часто требуется подсчитать, сколько раз во время вычислений наступает то

Перменные-счетчики

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

иное событие.
Для этого вводится вспомогательная переменная, которой в начале присваивается нулевое значение, а после каждого наступления события она увеличивается на единицу. Такая переменная называется счетчиком.
Слайд 28

Перменные-счетчики. Задача Задача: Пользователь вводит 10 чисел. Определить, сколько из них

Перменные-счетчики. Задача

Задача: Пользователь вводит 10 чисел. Определить, сколько из них являются

одновременно четными и положительными.

int x, counter = 0;
for (int i = 1; i <= 10; i++) {
x = in.nextInt();
if (x%2 == 0 && x > 0)
counter++;
}
System.out.println(counter);

Обнуление счетчика

Увеличение значения счетчика