Пример 3. Алгоритм Евклида. Чтобы найти НОД двух натуральных чисел, нужно вычитать из большего числа меньшее до тех пор, пока
Пример. Число вводится с клавиатуры. Определить, является ли оно простым.
Пример. Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой
Операторы continue и break
Операторы continue и break
Отсутствие части цикла
Цикл без тела
Применение нескольких переменных управления циклом
Вложенные циклы
Пример. Вывести на экран: 102234465870 2133455769 32445668 435567 5466 65
Вложенные циклы
Вложенные циклы
Пример. Написать программу, которая будет спрашивать правильный пароль до тех пор, пока он не будет введен (правильный пароль –
Ограничим количество попыток ввода пароля
Результат работы программы
Пример 1. Вычислить приближенное значение суммы
Пример программы
Пример 2. Вычислить сумму ряда с заданной точностью
Пример программы
Построение таблицы функции
13.25M
Категория: ПрограммированиеПрограммирование

Циклические алгоритмы и программы. Тема 13

1.

13. Циклические
алгоритмы и программы

2.

3.

4.

Цикл с предусловием («пока»)
Блок-схема
НП – блок
начальных
присваиваний
У – условие
(булевское
выражение)
ТЦ – тело цикла
ИП – блок
изменения
управляющей
переменной
цикла

5.

6.

Ручной расчет работы программы
i (i++)
i < 5
Вывод
0
0 < 5 = true
0
0+1 = 1
1 < 5 = true
1
1+1 = 2
2 < 5 = true
2
2+1 = 3
3 < 5 = true
3
3+1 = 4
4 < 5 = true
4
4+1 = 5
5 < 5 = false
При выполнении ручного расчета таблица формируется таким образом,
чтобы ее заполнение происходило слева направо сверху вниз

7.

int a = 5;
while (a > 0)
{
a = a * 1;
Console.WriteLine(a);
}

8.

9.

x=5
s
k
s <= x
0
1
0 <= 5 = true
0+1 = 1
1+1 = 2
1 <=5 = true
1+2 = 3
2+1 = 3
3 <=5 = true
3+3 = 6
3+1 = 4
6<=5 = false
//Сумма равна 6, число слагаемых 3

10.

11.

12.

13.

14. Пример 3. Алгоритм Евклида. Чтобы найти НОД двух натуральных чисел, нужно вычитать из большего числа меньшее до тех пор, пока

они не
станут равны. Это число и есть НОД исходных
чисел.
Console.WriteLine("введите первое число");
int a = Convert.ToInt16(Console.ReadLine());
Console.WriteLine("введите второе число");
int b = Convert.ToInt16(Console.ReadLine());
Console.Write("НОД чисел {0} и {1} равен ",a,b);
while (a!=b)
if (a>b) a-=b;
else b-=a;
Console.WriteLine(a);
Console.ReadLine();

15.

Цикл с постусловием («до»)
Блок-схема
НП – блок
начальных
присваиваний
У – условие
(булевское
выражение)
ТЦ – тело цикла
ИП – блок
изменения
управляющей
переменной
цикла

16.

17.

В отличие от цикла «пока», в этом цикле
тело цикла выполняется хотя бы один раз
всегда
Пример программы, которая не завершит
работу, пока с клавиатуры не будет
введено число 5:

18.

19.

20.

Цикл с параметром («для»)
Блок-схема
НЗ – начальное значение
КЗ – конечное значение
ТЦ – тело цикла

21.

Управление циклом осуществляется с помощью
переменной, которую еще называют параметром
цикла.

22.

23.

Пример 1
Первая часть объявления цикла i = 0 - инициализация
счетчика i. Счетчик необязательно должен представлять
тип int. Это может быть и другой числовой тип, например,
float. И перед выполнением цикла его значение будет равно
0. В данном случае это то же самое, что и объявление
переменной. Вторая часть - условие, при котором будет
выполняться цикл. Пока условное выражение возвращает true,
будет выполняться цикл. В данном случае цикл будет
выполняться, пока счетчик i не достигнет 6. И третья часть
- приращение счетчика на единицу. Опять же необязательно
увеличивать на единицу. Можно уменьшать: i--.

24.

Пример 2

25. Пример. Число вводится с клавиатуры. Определить, является ли оно простым.

Console.WriteLine("введите число");
int a=Convert.ToInt16(Console.ReadLine());
int kol = 0;
if (a == 1) Console.WriteLine("число не
является ни простым, ни составным");
else
{
for (int i = 2; i < a / 2; i++)
if (a % i == 0) kol += 1;
if (kol == 0) Console.WriteLine("число "
+ a + " простое");
else Console.WriteLine("число " + a + "
составное");
}

26. Пример. Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой

последовательности больше предыдущего
элемента.
int p1 = Convert.ToInt16(Console.ReadLine());
int kol=0,p2;
while (p1 != 0)
{
p2 = Convert.ToInt16(Console.ReadLine());
if (p2!=0 && p2>p1) kol++;
p1=p2;
}
Console.WriteLine("больше предыдущ. элемента: "+ kol);

27. Операторы continue и break

Иногда возникает ситуация, когда требуется
выйти из цикла, не дожидаясь его завершения.
В этом случае мы можем воспользоваться
оператором break.
for (int i = 0; i < 9; i++)
{
if (i == 5) break;
Console.WriteLine(i);
}

28. Операторы continue и break

Если мы хотим, чтобы при проверке цикл не
завершался, а просто пропускал текущую
итерацию. Для этого мы можем воспользоваться
оператором continue:
for (int i = 0; i < 9; i++)
{
if (i == 5) continue;
Console.WriteLine(i);
}

29.

Ручной расчет работы программы
i
Вывод i
i > 2.1
i == 3.5
3.8 > 2.1 = true
3.8 == 3.5 = false
3.8
3.8-0.3=3.5 3.5 > 2.1 = true
3.5 == 3.5 = true
3.5
3.8
3.5

30.

i
I < 7.2
i < 4.5
Вывод
2
2 < 7.2 = true
2 < 4.5 = true
2+0.7 = 2.7
2.7 < 7.2 = true
2.7 < 4.5 = true
2.7+0.7 = 3.4
3.4 < 7.2 = true
3.4 < 4.5 = true
3.4+0.7 = 4.1
4.1 < 7.2 = true
4.1 < 4.5 = true
4.1+0.7 = 4.8
4.8 < 7.2 = true
4.8< 4.5 = false
4.8
4.8+0.7 = 5.5
5.5 < 7.2 = true
5.5< 4.5 = false
5.5
5.5+0.7 = 6.2
6.2 < 7.2 = true
6.2< 4.5 = false
6.2
6.2+0.7 = 6.9
6.9 < 7.2 = true
6.9< 4.5 = false
6.9
6.9+0.7 = 7.6
7.6 < 7.2 = false
7.6

31. Отсутствие части цикла

int k = 0;
for (; k < 10; )
{
k++;
Console.Write(" "+k);
}

32. Цикл без тела

int sum = 0;
for (int i = 1; i <= 5; sum += ++i) ;
Console.WriteLine("Значение суммы: {0}", sum);

33. Применение нескольких переменных управления циклом

for (byte i = 0, j = 20; i <= j; i += 5, j -= 5)
Console.WriteLine("i = {0}, j = {1}", i, j);

34. Вложенные циклы

35. Пример. Вывести на экран: 102234465870 2133455769 32445668 435567 5466 65

int a = 10, s = 6;
for (int i=0; i<6;i++)
{
for (int j=0;j<(s - i);j++)
Console.Write(a + i * 11 + j * 12);
Console.WriteLine();
}

36.

Пример. Написать программу, выводящую
на экран таблицу умножения размерностью
nxn
Console.WriteLine("Введите число n");
int n = Convert.ToInt16(Console.ReadLine());
Console.WriteLine("Таблица умножения {0} x {0}\n", n);
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
Console.Write("{0}\t", j * i);
Console.WriteLine();
}

37. Вложенные циклы

Пример. Вычислить сумму от 1 до N, возведенных в
целую положительную степень M: 1M 2M ... N M
int i, j, p, s = 0, N = 2, M = 3;
for (i = 1; i <= N; i++)
{
p = 1;
for (j = 1; j <= M; j++) p = p * i;
i
s = s + p;
1
}
Console.WriteLine(" s = {0}", s);
Console.ReadLine();
р используется для возведения
числа в степень M
j
p
s
1
0
1
1
2
1
3
1
2
1
1
1
2
2
4
3
8
9

38. Вложенные циклы

Если инструкции break и continue содержатся
внутри нескольких вложенных циклов, то они
влияют лишь на исполнение самого внутреннего
цикла.
for (int i=0; i<3;i++)
for (int j=0; j<5;j++)
{
if (j >= i) break;
Console.WriteLine("{0},{1}",i,j);
}
for (int i=0; i<3;i++)
for (int j=0; j<5;j++)
{
if (j >= i) continue;
Console.WriteLine("{0},{1}",i,j);
}

39. Пример. Написать программу, которая будет спрашивать правильный пароль до тех пор, пока он не будет введен (правильный пароль –

ПИ1курс)
string s = "";
while (s != "ПИ1курс")
{
Console.WriteLine("Введите пароль:");
s = Console.ReadLine();
Цикл «пока»
}
Console.WriteLine("Вы ввели верный пароль");

40.

string s;
Цикл «до»
do
{
Console.WriteLine("Введите пароль:");
s = Console.ReadLine();
}
while (s != "ПИ1курс");
Console.WriteLine("Вы ввели верный
пароль");

41.

string s;
Цикл «для»
for (int i = 0; i < 1;)
{
Console.WriteLine("Введите пароль:");
s = Console.ReadLine();
if (s == "ПИ1курс") break;
}
Console.WriteLine("Вы ввели верный пароль");

42. Ограничим количество попыток ввода пароля

string s; byte m = 0;
Ограничим количество
for (int i = 0; i < 5; i++) попыток ввода пароля
{
Console.WriteLine("Введите пароль:");
s = Console.ReadLine();
if (s == "ПИ1курс")
{
Console.WriteLine("Вы ввели верный пароль");
m = 1;
break;
}
}
if (m == 0 )
Console.WriteLine("Вы превысили число допустимых
попыток (5)");

43.

Пример. С клавиатуры вводится 10 целых
чисел. Необходимо вывести количество
положительных и отрицательных чисел
среди введенных (самостоятельно).
Решение:
int a; byte k = 0, p = 0;
for (int i = 0; i < 10; i++)
{
Console.WriteLine("Введите целое число:");
a = Convert.ToInt32(Console.ReadLine());
if (a > 0) k += 1;
else if (a != 0) p += 1;
}
Console.WriteLine("Количество положительных чисел равно:"+k);
Console.WriteLine("Количество отрицательных чисел равно:" + p);

44. Результат работы программы

45. Пример 1. Вычислить приближенное значение суммы

x x 2 x3
xn
1 ...
1! 2! 3!
n!

46. Пример программы

double e = 0.001, a = 1, summa = 0, x = 0.5;
int n = 1;
while (Math.Abs(a) > e)
{
summa += a;
n++;
a *= x / n;
}
Console.WriteLine("Приближенное значение
суммы равно {0:f5}",summa);
Console.WriteLine("Последний член ряда равен
{0:f5}", a);

47. Пример 2. Вычислить сумму ряда с заданной точностью

2(n!) 2
an
3(2n)!
10 4
1.При определении суммы членов ряда следует
использовать рекуррентную формулу для получения
следующего члена ряда.
2.Вычислим отношение следующего члена ряда к
текущему: a
2((n 1)!)2 3(2n)! 2(n!)2 (n 1)2 3(2n)!
n 1
an
3(2(n 1))!2(n!)
2
3(2n 2)!2(n!)
2
2(n!) 2 (n 1) 2 3(2n)!
(n 1) 2 (2n)!
n 1
2
3(2n 2)!2(n!)
(2n)!(2n 1)( 2n 2) 2(2n 1)
n 1
3.Получаем an 1 an
2(2n 1)
4.При составлении программы считать, что точность
достигнута при a
n

48. Пример программы

double e = 0.0001, an = 1.0/3, summa = 0;
int n = 1;
while (Math.Abs(an) > e)
{
summa += an;
an = an*(n+1) / 2 / (2*n+1);
n++;
}
Console.WriteLine("Сумма ряда равна
{0:f2}",summa);
Console.WriteLine("Последний член ряда равен
{0:f6}", an);
Console.WriteLine("Его номер" + n);

49. Построение таблицы функции

Построить таблицу значений функции
y = 3sinx + cos2x
на интервале [-1 ; 1] с шагом Δх = 0,1.
double x= -1, dx=0.1, y;
while (x<=1)
{
y= 3*Math.Sin(x) + Math.Cos(2*x);
Console.Write("x= {0:f2} \t y={1:f2}",x,y);
Console.WriteLine();
x+=dx;
}
English     Русский Правила