Teoria_algoritmov-tsikl-k.pptx
- Количество слайдов: 28
Санкт-Петербургский колледж информационных технологий Теория алгоритмов. Циклические алгоритмы Учебное пособие по курсу «Теория алгоритмов» Преподаватель Алексеева Н. Н. Санкт-Петербург 2011
Циклический алгоритм - описание действий, которые должны повторяться указанное число раз или пока не выполнено заданное условие. Перечень повторяющихся действий называют телом цикла. Такие циклы называются - циклы с параметром. Тело цикла - это многократно повторяющийся участок программы. Параметр цикла - это переменная, которая принимает новые значения при каждом повторении цикла.
Цикл с параметром. Цикл FOR for (<инициализация>; <условие>; <изменение параметра>) оператор; for (<инициализация>; <условие>; <изменение параметра>) {оператор1; оператор2; } Инициализация – присвоение параметру цикла начального значения. Условие – условие, при выполнении которого продолжается выполнение цикла. Изменение параметра – служит для изменения значения параметра цикла. Пример1. Вывести на экран значения чисел от 1 до 10. #include <iostream. h> void main() { int I; for (i=1; i<=10; i++) cout<< I; }
Примеры цикла FOR • • • for (int i=0; i<25; i++) {… } for (int j=25; j>0; j--) {… } for (int n=3; n<52; n+=2) {… } for (; ; ) {… } for ( i=0, j=20; i<10; i++, j++) {… } for (f=1, i=2; i<=n; f*=i++); // n!
Задание: 1. Вывести на экран числа в диапазоне от 10 до 20 2. Вывести на экран четные числа в диапазоне от 15 до 50 3. Вывести на экран числа, кратные 3, в диапазоне от 10 до 20 4. Вывести на экран все двухзначные числа, которые делятся на 12 5. Вычислить факториал числа n (n вводится с клавиатуры)
Вычисление суммы ряда Задание 1: вычислить сумму чисел в диапазоне от 1 до 100. #include <iostream. h> #include <conio. h> #include <math. h> int a, s; void main() { clrscr(); s=0; for (a=1; a<100; a++) s+=a; cout<<"S="<<s<<"n"; getch(); }
Вычисление суммы ряда Задание 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<<a<<" "; } cout<<"n. S="<<s; getch(); }
Задание: 1. Вычислить сумму чисел в диапазоне от 10 до 20. 2. Вычислить сумму четных чисел в диапазоне от 15 до 50. 3. Вычислить сумму чисел, кратных 3, в диапазоне от 10 до 100, которые оканчиваются на цифру 1 (вывести их на экран). 4. Вычислить сумму всех двухзначных чисел, которые делятся на 12. 5. Найти сумму чисел в диапазоне от 20 до 100, кратных 4, и заканчивающихся на 2 или 8 (вывести их на экран).
Вычисление количества элементов по заданному условию Задание 3: вычислить количество чисел в диапазоне от 100 до 200, которые кратны 17, вывести числа на экран. #include <iostream. h> #include <conio. h> #include <math. h> void main() { int a, k; clrscr(); k=0; for (a=100; a<200; a++) if (a%17==0) {k++; cout<<a<<"n"; } cout<<"nk="<<k<<"n"; getch(); }
Алгоритм программы начало K=0 a=100; a<200; a++ k a%17=0 K++ a конец
Задание: 1. Вычислить количество чисел в диапазоне от 100 до 300, которые кратны 17 и оканчиваются на цифру 2. Вычислить количество чисел в диапазоне от 200 до 500, которые кратны 12 и 36. 3. Вычислить количество чисел, кратных 3, в диапазоне от 10 до 100, которые оканчиваются на цифру 1 (вывести их на экран). 4. Вычислить количество чисел в диапазоне от 20 до 100, кратных 4, и заканчивающихся на 2, 4 или 8 (вывести их на экран). Найти их сумму. 5. Найти все тройки чисел x, y, z из интервала от 10 до 50, для которых выполняется равенство: x 2 + y 2 - z= 0.
Цикл с предусловием WHILE Цикл выполняется до тех пор, пока истинно условие while (условие) {тело цикла} Пример1: вычислить значение первой степени тройки, превышающей 100. int p=3; while (p<=100) p=p*3; cout<<"n. P="<<p<<"n“;
Цикл с предусловием WHILE Пример2: вычислить значение показателя первой степени тройки, превышающей 100. int p=3, k=1; while (p<=100) {p=p*3; k++; } cout<<"nk="<<k<<"n“; начало p=3; k=1 K++ p=p*3 P<=100 k конец
Цикл с предусловием WHILE Определите результат: 1. int k=1, n=3, f=1; while (k<=n) 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++; }
Вычисление максимальной цифры числа Пример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 ; }
Задание: 1. Вычислить количество цифр числа n. 2. Вычислить количество четных цифр числа n. 3. Найти сумму цифр числа n, меньших 5. 4. Вычислить, сколько раз встречается заданная цифра в числе n. 5. По данному натуральному числу n определите количество цифр в его десятичной записи. Определите сумму цифр числа n. Найдите наибольшую и наименьшую цифры.
Датчик случайных чисел Последовательность действий: 1. Включить директиву : #include <STDLIB. H> 2. Инициализировать случайную последовательность: randomize(); 3. Выбрать случайное число в диапазоне 0 – N-1 : random (N); Пример1: #include <iostream. h> #include <conio. h> #include <stdlib. h> /* prints a random number in the range 0 to 99 */ void main(void) { randomize(); cout<<"n. Random number in the 0 -99 range: "<< random (100); getch(); }
Случайные числа от M до. N M+random (N-M+1) Пример2: Получить 10 СВ в диапазоне от 20 до 25 (включительно) #include <iostream. h> #include <conio. h> #include <stdlib. h> void main(void) { randomize(); for (i=1; i<=10; i++) cout<<“ "<< 20+random (6); getch(); }
Цикл с постусловием DO WHILE В цикле с постусловием сначала выполняются действия тела цикла, а затем проверяется условие. Таким образом, тело цикла выполняется хотя бы один раз. do {тело цикла} while (условие) инициализация тело цикла истина условие ложь
Цикл с постусловием DO WHILE Пример1: вычислить количество цифр числа случайного числа n. #include <iostream. h> #include <conio. h> #include <stdlib. h> void main(void) { clrscr(); int n, k=0; randomize(); n=random(20000); cout<<n; do {k++; n/=10; } while (n!=0); cout<<“ - в числе "<< k<<“ цифр n”; getch(); } начало Randomize() n=random(100); k=0 k++ n=n/10 n!=0 k конец
Задание: 1. Вычислить количество цифр числа n. 2. Вычислить количество четных цифр числа n. 3. Найти сумму цифр числа n, меньших 5. 4. Вычислить, сколько раз встречается заданная цифра в числе n. 5. По данному натуральному числу n определите количество цифр в его десятичной записи. Определите сумму цифр числа n. Найдите наибольшую и наименьшую цифры.
Алгоритм Евклида. НОД Задание: вычислить НОД двух чисел х и y. #include <iostream. h> #include <conio. h> #include <stdlib. h> void main() { int x, y; clrscr(); cout<<"Vv. 2 chisla"; cin>>x>>y; do {if (x>y) x=x%y; else y=y%x; } while((x!=0)&&(y!=0)); cout<<"NOD="<<(x+y); getch(); } начало Вв. 2 числа: x, y истина x > y x=x % y истина ложь y=y % x x=0 или y=0 ложь k конец
Задание: 1. Отладить программу алгоритма Евклида. 2. Вычислить сумму делителей случайного числа n. 3. Вычислить количество делителей случайного числа n. 4. Вычислить количество четных делителей введенного с клавиатуры числа n.
Вложенные циклы. Программы перебора При решении задач один цикл может быть вложен в другой. Такие конструкции называются вложенными циклами или программами перебора. Используемые циклы называются внутренним и внешним. При использовании вложенных циклов необходимо соблюдать следующее условие: внутренний цикл должен полностью исполняться за один шаг внешнего цикла. Допускается вложение циклов различных типов. Переменные, выполняющие роль счетчика цикла не должны совпадать.
Вложенные циклы. Программы перебора Пример1: Что будет выведено на экран? for (k=0; k<=9; k++) for (n=0; n<=9; n++) cout<< k<<n<<’ ‘; начало ложь K=0; k<=9; k++ истина n=0; n<=9; n++ Пример2: Что будет выведено на экран? for (k=0; k<=9; k++) { for (n=0; n<=9; n++) cout<<k<<n<<" "; cout<<"n"; } ложь истина K, n, пробел конец
Вложенные циклы Пример3: Вывести на экран все простые числа в интервале от 1 до N. for (i=1; i<=N; i++) { k=0; for (d=1; d<=N; d++) if (i%d==0) k++; if (k==1 || k==2) cout<< i<<endl; } начало N ложь i=1; i<=N; i++ конец K=0 ложь d=0; d<=N; d++ i % d==0 истина K++ k=2, k=1 истина i
Вложенные циклы Пример 3. Полный код программы : #include <iostream. h> #include <conio. h> void main() { int n, k, i, d; clrscr(); cin>>n; for (i=1; i<=n; i++) { k=0; for (d=1; d<=n; d++) if (i%d==0) k++; if (k==1 || k==2) cout<<i<<endl; } getch(); }
Задание: 1. Найти все простые 2 -значные числа. Простое число имеет 2 делителя. 2. Ввести число N. Найти такие два числа x и y, для которых выполняется равенство x 2 + y 2 = N. 3. Вычислить количество таких пар для задания 2. 4. Ввести число N. Найти такие три числа x, y, z, для которых выполняется равенство x 2 + y 2 + z 2 = N.
Teoria_algoritmov-tsikl-k.pptx