Программирование циклических алгоритмов

Содержание

Слайд 2

Зачем нужен цикл?

Задача. Вывести 5 раз «Привет!».

вывод 'Привет', нс
вывод 'Привет', нс
вывод 'Привет',

Зачем нужен цикл? Задача. Вывести 5 раз «Привет!». вывод 'Привет', нс вывод
нс
вывод 'Привет', нс
вывод 'Привет', нс

Цикл «N раз»:

нц 5 раз
вывод 'Привет', нс
кц

Слайд 3

Как работает цикл?

переменная-счётчик

счётчик:= 0
нц пока счётчик < 5
вывод 'Привет', нс
счётчик:=

Как работает цикл? переменная-счётчик счётчик:= 0 нц пока счётчик вывод 'Привет', нс
счётчик + 1
кц

ещё не делали

сделали ещё раз

Слайд 4

Как работает цикл?

счётчик:= 5
нц пока счётчик > ???
вывод 'Привет', нс
счётчик:=

Как работает цикл? счётчик:= 5 нц пока счётчик > ??? вывод 'Привет',
счётчик ???
кц

Идея: запоминать, сколько шагов осталось.

0

- 1

Слайд 5

Цикл с предусловием

условие проверяется при входе в цикл
как только условие становится ложным,

Цикл с предусловием условие проверяется при входе в цикл как только условие
работа цикла заканчивается
если условие ложно в самом начале, цикл не выполняется ни разу

нц пока условие
...
кц

тело цикла

нц пока да
...
кц

бесконечный цикл (зацикливание)

Слайд 6

Сумма цифр числа

Задача. Вычислить сумму цифр введённого числа.
123 → 1 +

Сумма цифр числа Задача. Вычислить сумму цифр введённого числа. 123 → 1
2 + 3 = 6

Выделить последнюю цифру числа в переменной N:

d:= mod(N, 10)

Отбросить последнюю цифру числа в переменной N:

N:= div(N, 10)

123 → 3

123 → 12

Добавить к переменной sum значение переменной d:

sum:= sum + d

sum = 6 → 6 + 4 = 10
d = 4

Слайд 7

Сумма цифр числа

выделяем последнюю цифру числа (mod)
увеличиваем сумму на значение цифры (sum:=sum+d)
отсекаем

Сумма цифр числа выделяем последнюю цифру числа (mod) увеличиваем сумму на значение
последнюю цифру числа (div)

начальные значения

Слайд 8

Сумма цифр числа

начало

конец

нет

да

N <> 0?

sum:= 0

d:= mod(N, 10)
sum:= sum + d
N:= div(N,

Сумма цифр числа начало конец нет да N 0? sum:= 0 d:=
10)

обнулить сумму

ввод N

выполнять 'пока N <> 0'

вывод sum

Слайд 9

Сумма цифр числа

алг Сумма цифр
нач
цел N, d, sum
вывод 'Введите целое

Сумма цифр числа алг Сумма цифр нач цел N, d, sum вывод
число', нс
ввод N
sum:= 0
вывод 'Сумма цифр числа ', N, ' равна', sum
кон

нц пока N<>0
d:= mod(N,10)
sum:= sum + d
N:= div(N,10)
кц

, N1

; N1:= N

N1,

Слайд 10

Задачи

«A»: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько

Задачи «A»: Напишите программу, которая получает с клавиатуры количество повторений и выводит
же раз какое-нибудь сообщение.
Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с клавиатуры натуральное число и определяет количество цифр в этом числе.
Пример:
Введите число? 12345
Цифр в числе:5

Слайд 11

Задачи

«C»: Напишите программу, которая получает с клавиатуры натуральное число и находит наибольшую

Задачи «C»: Напишите программу, которая получает с клавиатуры натуральное число и находит
цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом.
Пример:
Введите число: 553 Введите число: 535
Ответ: да. Ответ: нет.

Слайд 12

Алгоритм Евклида

Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел.

Евклид
(365-300 до. н.

Алгоритм Евклида Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел. Евклид
э.)

НОД(a,b)= НОД(a-b, b)
= НОД(a, b-a)

Заменяем большее из двух чисел разностью большего и меньшего до тех пор, пока они не станут равны. Это и есть НОД.

НОД (14, 21) = НОД (14, 21-14) = НОД (14, 7)

НОД (1998, 2) = НОД (1996, 2) = … = 2

Пример:

много шагов при большой разнице чисел:

= НОД (7, 7) = 7

Слайд 13

Алгоритм Евклида

a = b?

да

нет

a > b?

да

a:=a-b

нет

b:=b-a

начало

конец

Алгоритм Евклида a = b? да нет a > b? да a:=a-b нет b:=b-a начало конец

Слайд 14

Алгоритм Евклида

нц пока a <> b
если a > b
то

Алгоритм Евклида нц пока a b если a > b то a:=
a:= a - b
иначе b:= b - a
все
кц

Слайд 15

Модифицированный алгоритм Евклида

НОД(a,b)= НОД(mod(a,b), b)
= НОД(a, mod(b,a))

Заменяем большее из двух

Модифицированный алгоритм Евклида НОД(a,b)= НОД(mod(a,b), b) = НОД(a, mod(b,a)) Заменяем большее из
чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю. Тогда большее — это НОД.

НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7

Пример:

Слайд 16

Модифицированный алгоритм

нц пока a <> 0 и b <> 0
если a

Модифицированный алгоритм нц пока a 0 и b 0 если a >
> b то
a:= mod(a, b)
иначе
b:= mod(b, a)
все
кц

если a <> 0
вывод a
иначе
вывод b
все

вывод ???

a+b

Слайд 17

В других языках программирования

while a!=0 and b!=0:
if a > b:
a

В других языках программирования while a!=0 and b!=0: if a > b:
= a % b
else:
b = b % a

Python:

С:

while (a!=0 && b!=0)
{
if (a > b)
a = a % b;
else
b = b % a;
}

Паскаль:

while (a<>0) and
(b<>0) do
if a>b then
a:= a mod b
else
b:= b mod a;

Слайд 18

Задачи

«A»: Ввести с клавиатуры два натуральных числа и найти их НОД с

Задачи «A»: Ввести с клавиатуры два натуральных числа и найти их НОД
помощью алгоритма Евклида.
Пример:
Введите два числа:
21 14
НОД(21,14)=7

«B»: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью модифицированного алгоритма Евклида. Заполните таблицу:

Слайд 19

Задачи

«C»: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла

Задачи «C»: Ввести с клавиатуры два натуральных числа и сравнить количество шагов
для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1

Слайд 20

Обработка потока данных

Задача. На вход программы поступает поток данных — последовательность целых

Обработка потока данных Задача. На вход программы поступает поток данных — последовательность
чисел, которая заканчивается нулём. Требуется найти сумму элементов этой последовательности.

нц пока x<>0
| добавить x к сумме
| x := следующее число
кц

Слайд 21

Обработка потока данных

цел x, sum
sum:= 0
ввод x | ввести первое число
нц пока

Обработка потока данных цел x, sum sum:= 0 ввод x | ввести
x<>0
sum:= sum + x
ввод x | ввести следующее
кц
вывод 'Сумма ', sum

Слайд 22

Задачи

«A»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём.

Задачи «A»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается
Определить, сколько получено чисел, которые делятся на 3.
«B»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
«C»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.

Слайд 23

Цикл с постусловием

условие проверяется после завершения очередного шага цикла
цикл всегда выполняется хотя

Цикл с постусловием условие проверяется после завершения очередного шага цикла цикл всегда
бы один раз
как только условие становится истинным, работа цикла заканчивается

нц
вывод 'Введите N>0: '
ввод N
кц при N > 0

условие окончания работы цикла

Слайд 24

Задачи

«A»: Напишите программу, которая предлагает ввести пароль и не переходит к выполнению

Задачи «A»: Напишите программу, которая предлагает ввести пароль и не переходит к
основной части, пока не введён правильный пароль. Основная часть – вывод на экран «секретных сведений».
«B»: Напишите программу, которая получает с клавиатуры натуральное число, которое больше 1, и определяет, простое оно или нет. Для этого нужно делить число на все натуральные числа, начиная с 2, пока не получится деление без остатка.
«C»: Напишите программу, которая получает с клавиатуры два целых числа и вычисляет их произведение, используя только операции сложения.

Слайд 25

Задачи

«D»: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет целый

Задачи «D»: Напишите программу, которая получает с клавиатуры натуральное число и вычисляет
квадратный корень из него – наибольшее число, квадрат которого не больше данного числа.

Слайд 26

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

Задача. Вывести на экран степени числа 2 от 21 до

Цикл по переменной Задача. Вывести на экран степени числа 2 от 21
210.

k:= 1
N:= 2
нц пока k <= 10
вывод N, нс
N:= N*2
k:= k + 1
кц

Идея: собрать всё вместе.

N:= 2
нц для k от 1 до 10
вывод N, нс
N:= N*2
кц

k от 1 до 10

увеличение на 1 по умолчанию

Слайд 27

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

Задача. Найти сумму чисел от 1 до 1000.

цел sum, i
sum:=

Цикл по переменной Задача. Найти сумму чисел от 1 до 1000. цел
0
нц для i от 1 до 1000
sum:= sum + i
кц

Задача. Вывести квадраты чисел от 10 до 1 по убыванию.

нц для k от 10 до 1 шаг –1
вывод k*k, нс
кц

шаг –1

любое целое

Слайд 28

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

Задача. Найти сумму чётных чисел от 2 до 1000.

sum:= 0
нц

Цикл по переменной Задача. Найти сумму чётных чисел от 2 до 1000.
для i от 1 до 1000
если mod(i,2) = 0 то
sum:= sum + i
все
кц

sum:= 0
нц для i от 2 до 1000 шаг 2
sum:= sum + i
кц

шаг 2

Слайд 29

В других языках программирования

Sum = 0
for i in range(1, 1001):
Sum +=

В других языках программирования Sum = 0 for i in range(1, 1001):
i

Python:

С:

int sum, i;
sum = 0;
for (i=1; i<=1000; i++)
sum += i;

Паскаль:

sum:= 0;
for i:=1 to 1000 do
sum:= sum + i;

шаг только 1 или –1 (downto)

диапазон [1;1001)

i=i+1;

sum=sum+i;

Имя файла: Программирование-циклических-алгоритмов.pptx
Количество просмотров: 103
Количество скачиваний: 0