Слайд 1Теория алгоритмов.
Циклические алгоритмы
Учебное пособие по курсу
«Теория алгоритмов»
Преподаватель Алексеева Н.Н.
Санкт-Петербургский
колледж информационных технологий
Санкт-Петербург 2011
Слайд 2Циклический алгоритм
Циклический алгоритм - описание действий, которые должны повторяться указанное
число раз или пока не выполнено заданное условие.
Перечень повторяющихся действий
называют телом цикла.
Такие циклы называются - циклы с параметром.
Тело цикла - это многократно повторяющийся участок программы.
Параметр цикла - это переменная, которая принимает новые значения при каждом повторении цикла.
Слайд 3Цикл с параметром. Цикл FOR
Инициализация – присвоение параметру цикла начального
значения.
Условие – условие, при выполнении которого продолжается выполнение цикла.
Изменение параметра
– служит для изменения значения параметра цикла.
for (<инициализация>; <условие>; <изменение параметра>)
оператор;
for (<инициализация>; <условие>; <изменение параметра>)
{оператор1; оператор2;}
Пример1. Вывести на экран значения чисел от 1 до10.
#include
void main()
{
int I;
for (i=1; i<=10; i++)
cout<< I;
}
Слайд 4Примеры цикла FOR
for (int i=0; i
(int j=25; j>0; j--) {… }
for (int n=3; n
{… }
for (; ; ) {… }
for ( i=0, j=20; i<10; i++, j++) {… }
for (f=1, i=2; i<=n; f*=i++); // n!
Слайд 5Задание:
Вывести на экран числа в диапазоне от 10 до 20
Вывести
на экран четные числа в диапазоне от 15 до 50
Вывести
на экран числа, кратные 3, в диапазоне от 10 до 20
Вывести на экран все двухзначные числа, которые делятся на 12
Вычислить факториал числа n (n вводится с клавиатуры)
Слайд 6Вычисление суммы ряда
Задание1: вычислить сумму чисел в диапазоне от 1
до 100.
#include
#include
#include
int a,s;
void main()
{
clrscr();
s=0;
for (a=1;a
Слайд 7Вычисление суммы ряда
Задание2: вычислить сумму чисел в диапазоне от 1
до 200, которые кратны 7 и заканчиваются на цифру 9.
void
main()
{
int a,s;
clrscr();
s=0;
for (a=1; a<200; a++)
if ((a%7==0) && (a%10==9))
{s+=a;
cout<
}
cout<<"\nS="<getch();
}
Слайд 8Задание:
Вычислить сумму чисел в диапазоне от 10 до 20.
Вычислить сумму
четных чисел в диапазоне от 15 до 50.
Вычислить сумму чисел,
кратных 3, в диапазоне от 10 до 100, которые оканчиваются на цифру 1 (вывести их на экран).
Вычислить сумму всех двухзначных чисел, которые делятся на 12.
Найти сумму чисел в диапазоне от 20 до 100, кратных 4, и заканчивающихся на 2 или 8 (вывести их на экран).
Слайд 9Вычисление количества элементов по заданному условию
Задание3: вычислить количество чисел в
диапазоне от 100 до 200, которые кратны 17, вывести числа
на экран.
#include
#include
#include
void main()
{
int a,k;
clrscr();
k=0;
for (a=100;a<200;a++)
if (a%17==0)
{k++; cout< }
cout<<"\nk="<getch();
}
Слайд 10Алгоритм программы
конец
K=0
a=100; a
Слайд 11Задание:
Вычислить количество чисел в диапазоне от 100 до 300, которые
кратны 17 и оканчиваются на цифру 2.
Вычислить количество чисел в
диапазоне от 200 до 500, которые кратны 12 и 36.
Вычислить количество чисел, кратных 3, в диапазоне от 10 до 100, которые оканчиваются на цифру 1 (вывести их на экран).
Вычислить количество чисел в диапазоне от 20 до 100, кратных 4, и заканчивающихся на 2, 4 или 8 (вывести их на экран). Найти их сумму.
Найти все тройки чисел x, y, z из интервала от 10 до 50, для которых выполняется равенство: x2 + y2 - z= 0.
Слайд 12Цикл с предусловием WHILE
Цикл выполняется до тех пор, пока истинно
условие
while (условие)
{тело цикла}
Пример1: вычислить значение первой степени
тройки, превышающей 100.
int p=3;
while (p<=100)
p=p*3;
cout<<"\nP="<
Слайд 13Цикл с предусловием WHILE
Пример2: вычислить значение показателя первой степени тройки,
превышающей 100.
int p=3, k=1;
while (p
k=1
P<=100
p=p*3
k
начало
K++
Слайд 14Цикл с предусловием WHILE
Определите результат:
1. int k=1,
n=3, f=1;
while (k
f=f*k;
k++;
2. int x=1, t=1;
while (x<=3) {
t+=x;
x++;
}
3. int k=1;
while (k<=10) {
cout << (k % 2 ? “****” : “++++”);
k++;
}
Слайд 15Вычисление максимальной цифры числа
Пример3: вычислить максимальную цифру числа.
void main(void) {
int n, max_d = 0, d;
cout
";
cin >> n;
while (n > 0) {
d = n % 10;
if (d > max_d) { max_d = d; }
n /= 10;
}
cout << "Наибольшая цифра в числе " << n << " равна "
<< max_d ;
}
Слайд 16Задание:
1. Вычислить количество цифр числа n.
2. Вычислить количество четных цифр числа n.
3. Найти
сумму цифр числа n, меньших 5.
4. Вычислить, сколько раз встречается заданная цифра в числе n.
5. По данному натуральному числу n определите количество цифр в его десятичной записи. Определите сумму цифр числа n. Найдите наибольшую и наименьшую цифры.
Слайд 17Датчик случайных чисел
Последовательность действий:
Включить директиву : #include
Инициализировать случайную последовательность:
randomize();
Выбрать случайное число в диапазоне 0 – N-1 : random
(N);
Пример1:
#include
#include
#include
/* prints a random number in the range 0 to 99 */
void main(void)
{
randomize();
cout<<"\nRandom number in the 0-99 range: "<< random (100);
getch();
}
Слайд 18Случайные числа от M доN
Пример2: Получить 10 СВ в диапазоне
от 20 до 25 (включительно)
#include
#include
#include
void main(void)
{
randomize();
for (i=1; i<=10; i++)
cout<<“ "<< 20+random (6);
getch();
}
M+random (N-M+1)
Слайд 19Цикл с постусловием DO WHILE
В цикле с постусловием сначала
выполняются действия тела цикла, а затем проверяется условие. Таким образом,
тело цикла выполняется хотя бы один раз.
do
{тело цикла}
while (условие)
инициализация
условие
тело цикла
ложь
истина
Слайд 20Цикл с постусловием DO WHILE
Пример1: вычислить количество цифр числа случайного
числа n.
#include
#include
#include
void main(void)
{
clrscr();
int n, k=0;
randomize();
n=random(20000); cout<
do
{k++;
n/=10;
}
while (n!=0);
cout<<“ - в числе "<< k<<“ цифр \n”;
getch();
}
конец
n=random(100); k=0
n!=0
n=n/10
k
начало
k++
Randomize()
Слайд 21Задание:
1. Вычислить количество цифр числа n.
2. Вычислить количество четных цифр числа n.
3. Найти
сумму цифр числа n, меньших 5.
4. Вычислить, сколько раз встречается заданная цифра в числе n.
5. По данному натуральному числу n определите количество цифр в его десятичной записи. Определите сумму цифр числа n. Найдите наибольшую и наименьшую цифры.
Слайд 22Алгоритм Евклида. НОД
Задание: вычислить НОД двух чисел х и y.
#include
#include
#include
void main()
{
int x,y;
clrscr();
coutx>>y;
do
{if
(x>y) x=x%y;
else y=y%x;
}
while((x!=0)&&(y!=0));
cout<<"NOD="<<(x+y);
getch();
}
конец
x > y
x=x % y
k
начало
Вв. 2 числа:
x, y
x=0 или y=0
y=y % x
ложь
ложь
истина
истина
Слайд 23Задание:
1. Отладить программу алгоритма Евклида.
2. Вычислить сумму делителей случайного числа n.
3. Вычислить
количество делителей случайного числа n.
4. Вычислить количество четных делителей введенного с клавиатуры числа n.
Слайд 24Вложенные циклы. Программы перебора
При решении задач один цикл может быть
вложен в другой.
Такие конструкции называются вложенными циклами или программами
перебора. Используемые циклы называются внутренним и внешним. При использовании вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью исполняться за один шаг внешнего цикла. Допускается вложение циклов различных типов.
Переменные, выполняющие роль счетчика цикла не должны совпадать.
Слайд 25Вложенные циклы. Программы перебора
конец
K, n, пробел
начало
ложь
ложь
истина
Пример1: Что будет выведено на
экран?
for (k=0; k
cout<< k<
Пример2: Что будет выведено на экран?
for (k=0;k<=9;k++)
{
for (n=0;n<=9;n++)
cout< cout<<"\n";
}
K=0; k<=9; k++
n=0; n<=9; n++
истина
Слайд 26Вложенные циклы
начало
ложь
Пример3: Вывести на экран все простые числа в
интервале от 1 до N.
for (i=1; i
k=0;
for (d=1; d<=N; d++)
if (i%d==0) k++;
if (k==1 || k==2)
cout<< i<
}
конец
i
ложь
истина
i=1; i<=N; i++
d=0; d<=N; d++
истина
N
K=0
K++
i % d==0
k=2, k=1
Слайд 27Вложенные циклы
Пример 3. Полный код программы :
#include
#include
void main()
{
int
n,k,i,d;
clrscr();
cin>>n;
for (i=1;i
if (k==1 || k==2)
cout< }
getch();
}
Слайд 28Задание:
1. Найти все простые 2-значные числа. Простое число имеет
2 делителя.
2. Ввести число N. Найти
такие два числа x и y, для которых выполняется равенство x2 + y2 = N.
3. Вычислить количество таких пар для задания 2.
4. Ввести число N. Найти такие три числа x, y, z, для которых выполняется равенство x2 + y2 + z2 = N.