Similar presentations:
Циклические алгоритмы и программы. Тема 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=5s
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.
Пример 225. Пример. Число вводится с клавиатуры. Определить, является ли оно простым.
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.
iI < 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 x3xn
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!) 2an
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;
}