Файл: 17. Введение 18. Линейные программы 19. Ветвления 20. Программирование циклических алгоритмов.ppt
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 10.01.2024
Просмотров: 600
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Направления в программировании
Вывод данных с текстом (f-строки)
Ввод двух чисел в одной строке
Выбор наибольшего из двух чисел
Выбор наибольшего из двух чисел-2
Задачи (без функций min и max!)
Хорошее решение (операция «И»)
Программирование экспертной системы
Модифицированный алгоритм Евклида
Задачи на циклы (дополнительные)
Вывод массива на экран (Python)
Сумма элементов массива (Python)
Подсчёт элементов по условию (Python)
Среднее арифметическое (Python)
Перестановка элементов массива
Ещё один вариант
c = 5
while c > 0:
print("Привет")
c -= 1
счётчик = 5
пока счётчик > ???
print("Привет")
счётчик = счётчик ???
Идея: запоминать, сколько шагов осталось.
0
- 1
счётчик -= 1
Как записать иначе последнюю строку?
?
Цикл с предусловием
условие проверяется при входе в цикл как только условие становится ложным, работа цикла заканчивается если условие ложно в самом начале, цикл не выполняется ни разу
while условие:
...
тело цикла
Если условие никогда не станет ложно?
?
while True:
...
бесконечный цикл (зацикливание)
Сколько раз выполняется цикл?
a = 4; b = 6
while a < b: a += 1
2 раза
a = 6
a = 4; b = 6
while a < b: a += b
1 раз
a = 10
a = 4; b = 6
while a > b: a += 1
0 раз
a = 4
a = 4; b = 6
while a < b: b = a - b
1 раз
b = -2
a = 4; b = 6
while a < b: a -= 1
зацикливание
Сумма цифр числа
Задача. Вычислить сумму цифр введённого числа.
123 1 + 2 + 3 = 6
Выделить последнюю цифру числа в переменной N:
d = N % 10
Отбросить последнюю цифру числа в переменной N:
N = N // 10
123 3
123 12
Добавить к переменной sum значение переменной d:
sum = sum + d
sum = 6 6 + 4 = 10
d = 4
sum += d
Сумма цифр числа
выделяем последнюю цифру числа (%)
увеличиваем сумму на значение цифры (sum+=d)
отсекаем последнюю цифру числа (//)
N | d | sum |
123 | 0 | |
12 | 3 | 3 |
1 | 2 | 5 |
0 | 1 | 6 |
начальные значения
Сумма цифр числа
начало
конец
нет
да
N != 0?
sum= 0
d = N % 10
sum += d
N = N // 10
обнулить сумму
ввод N
выполнять "пока N != 0"
вывод sum
Сумма цифр числа
N = int(input("Введите целое число"))
sum = 0
print("Сумма цифр числа", N, " равна", sum)
while N != 0:
d = N % 10
sum += d
N = N // 10
; N1= N
N1,
Что плохо?
?
Задачи
«A»: Напишите программу, которая получает с клавиатуры количество повторений и выводит столько же раз какое-нибудь сообщение.
Пример:__Сколько_раз_повторить_3__Привет!__Привет!__Привет!__«B»'>Пример:
Сколько раз повторить? 3
Привет!
Привет!
Привет!
«B»: Напишите программу, которая получает с клавиатуры натуральное число и определяет, сколько раз в его десятичной записи встречается цифра 1.
Пример:
Введите число? 311
Единиц: 2
Задачи
«C»: Напишите программу, которая получает с клавиатуры натуральное число и находит наибольшую цифру в его десятичной записи.
Пример:
Введите число: 311
Наибольшая цифра: 3
«D»: Напишите программу, которая получает с клавиатуры натуральное число и определяет, есть ли в его десятичной записи одинаковые цифры, стоящие рядом.
Пример:
Введите число: 553 Введите число: 535
Ответ: да. Ответ: нет.
Алгоритм Евклида
Задача. Найти наибольший общий делитель (НОД) двух натуральных чисел.
Евклид
(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
Алгоритм Евклида
a = b?
да
нет
a > b?
да
a=a-b
нет
b=b-a
начало
конец
Алгоритм Евклида
while a != b:
if a > b:
a = a - b
else:
b = b - a
Где будет НОД? Как его вывести?
?
Как вывести НОД в формате НОД(14,21) = 7?
?
А без дополнительных переменных?
?
a -= b
b -= a
как заменить?
Модифицированный алгоритм Евклида
НОД(a,b)= НОД(a % b, b)
= НОД(a, b % a)
Заменяем большее из двух чисел остатком от деления большего на меньшее до тех пор, пока меньшее не станет равно нулю. Тогда большее — это НОД.
НОД (14, 21) = НОД (14, 7) = НОД (0, 7) = 7
Пример:
Модифицированный алгоритм
while a != 0 and b != 0:
if a > b:
a = a % b
else:
b = b % a
Где будет НОД? Как его вывести?
?
if a != 0:
print(a)
else:
print(b)
print( ??? )
a+b
В стиле Python
while b!=0: a, b = b, a % b print(a)
Почему работает?
?
заменить a на b и b на (a % b)
a | b |
21 | 14 |
14 | 7 |
7 | 0 |
a | b |
14 | 21 |
21 | 14 |
14 | 7 |
7 | 0 |
a > b!
!
С++:
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;
Задачи
«A»: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью алгоритма Евклида.
Пример:
Введите два числа:
21 14
НОД(21,14)=7
«B»: Ввести с клавиатуры два натуральных числа и найти их НОД с помощью модифицированного алгоритма Евклида. Заполните таблицу:
a | 64168 | 358853 | 6365133 | 17905514 | 549868978 |
b | 82678 | 691042 | 11494962 | 23108855 | 298294835 |
НОД(a,b) |
Задачи
«C»: Ввести с клавиатуры два натуральных числа и сравнить количество шагов цикла для вычисления их НОД с помощью обычного и модифицированного алгоритмов Евклида.
Пример:
Введите два числа:
1998 2
НОД(1998,2)=2
Обычный алгоритм: 998
Модифицированный: 1
Обработка потока данных
Задача. На вход программы поступает поток данных — последовательность целых чисел, которая заканчивается нулём. Требуется найти сумму элементов этой последовательности.
while x!=0:
# добавить x к сумме
# x = следующее число
Откуда возьмётся x в первый раз?
?
Обработка потока данных
Sum = 0
x = int(input()) # первое число
while x!=0:
Sum += x
x = int(input()) # ввести следующее
print("Сумма ", Sum)
Как найти количество чисел?
?
Как найти сумму положительных?
?
Задачи
«A»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.
«B»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.
«C»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.