Материал: 17. Введение 18. Линейные программы 19. Ветвления 20. Программирование циклических алгоритмов

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Ещё один вариант

c = 5while c > 0: print("Привет") c -= 1счётчик = 5пока счётчик > ??? print("Привет") счётчик = счётчик ???Идея: запоминать, сколько шагов осталось.0- 1счётчик -= 1 Как записать иначе последнюю строку? ?

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

условие проверяется при входе в цикл как только условие становится ложным, работа цикла заканчивается если условие ложно в самом начале, цикл не выполняется ни разуwhile условие: ... тело цикла Если условие никогда не станет ложно? ?while True: ... бесконечный цикл (зацикливание)

Сколько раз выполняется цикл?

a = 4; b = 6while a < b: a += 12 разаa = 6a = 4; b = 6while a < b: a += b1 разa = 10a = 4; b = 6while a > b: a += 10 разa = 4a = 4; b = 6while a < b: b = a - b1 разb = -2a = 4; b = 6while 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 + dsum = 6  6 + 4 = 10d = 4sum += d

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

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

N


d


sum


123


0


12


3


3


1


2


5


0


1


6

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

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

начало конец нет даN != 0?sum= 0d = N % 10sum += dN = 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= NN1, Что плохо? ?

Задачи

«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 -= bb -= 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 = 0x = int(input()) # первое числоwhile x!=0: Sum += x x = int(input()) # ввести следующееprint("Сумма ", Sum) Как найти количество чисел? ? Как найти сумму положительных? ?

Задачи

«A»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено чисел, которые делятся на 3.«B»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Определить, сколько получено двузначных чисел, которые заканчиваются на 3.«C»: На вход программы поступает неизвестное количество чисел целых, ввод заканчивается нулём. Найти максимальное из введённых чётных чисел.
Источник: https://files.student-it.ru/previewfile/258784