ТОИ-ИМ 1. Использование промежуточной переменной (буфера) при обмене значениями двух переменных. 2. Сумматор для накопления результатов обработки переменной. 3. Вывод на печать текстов с одним изменяющимся словом. 4. Выделение цифр, входящих в целое число. 5. Проверка введённых данных. 6. Хитрости ЦИКЛевания. 1 АЛГОхитрости Типовые алгоритмические приёмы алгоритмические приёмы При разработке алгоритмов и программ можно выделить типовые алгоритмические приёмы – последовательности операций или действий, которые можно применять при алгоритмизации ситуаций или явлений, обладающих сходными характеристиками. Типовые приёмы наработаны многолетней практикой решения задач на ЭВМ и доведены до наиболее эффективного и экономичного вида. Рассмотрим некоторые из типовых алгоритмических приёмов
ТОИ-ИМ 1. Использование промежуточной переменной (буфера) при обмене значениями двух переменных: A = 3; B = 6; Надо поменять значения переменных местами, т.е. сделать: A = 6; B = 3; Для этого действия вводится буфер – переменная К – и выполняются следующие операции: K = A; A = B; B = K; 2. Сумматор – используется для накопления значений в какой либо изменяющейся в процессе обработки переменной, при этом вид обработки может быть самый разный (суммирование, умножение и пр.): S = S + n; D = D * h; 2 АЛГОхитрости Типовые алгоритмические приёмы
ТОИ-ИМ 3. Вывод на печать текстов с одним изменяющимся словом: Пример:- число является палиндромом, - число НЕ является палиндромом. 3 АЛГОхитрости Типовые алгоритмические приёмы Понятно, что в принципе не очень сложно распространить это приём на вывод в основном одинаковых текстов с несколькими изменяющимися частями Вывести "НЕ" ЕСЛИ X является палиндромом ТО ИНАЧЕ ЕСЛИ ВСЁ Вывести "Число X" Вывести "является палиндромом"
ТОИ-ИМ 4. Выделение цифр, входящих в целое число Для решения этой задачи надо: 1. Получить остаток от деления заданного числа на 10 – это будет правая (последняя) цифра числа (остаток от деления 123 на 10 = 3) 2. Убрать из числа последнюю цифру, для этого надо разделить число на 10 и взять целую часть результата деления (123 делить на 10 = 12,3 целая часть нового числа = 12) 3. Получить остаток от деления нового числа на 10 – это будет правая цифра нового числа (остаток от деления 12 на 10 = 2) 4. Убрать из числа последнюю цифру, для чего снова разделить новое число на 10 и взять целую часть результата деления (12 делить на 10 = 1,2 целая часть нового числа = 1) 5. Получить остаток от деления нового числа на 10 – это будет правая цифра числа (остаток от деления 1 на 10 = 1 – Пояснение: результат деления = 0, а остаток = 1 ) (последнее новое число в примере состоит из одной цифры, но без специальных операций это заранее неизвестно, лучше выполнять предыдущие операции) 6. Теперь надо уяснить как организовать последовательность описанных выше операций: НАДО организовать цикл, в котором: a) повторять тело цикла до тех пор пока целая часть результата деления нового числа на 10 не станет равна 0, b) получить остаток от деления текущего числа на 10, c) получить целую часть от деления текущего числа на 10, d) назначить целую часть результата деления текущим новым числом, e)перейти к пункту а). 4 АЛГОхитрости Типовые алгоритмические приёмы
ТОИ-ИМ 4. Выделение цифр, входящих в целое число– блок-схема Введём новые математические операции в псевдокоде: % или Остаток от деления – в результат записывается остаток от деления операнда_1 на операнд_2. Пример: А=243, B=10; r = A % B = 243 % 10 = 3 Целое( ) – в результат записывается целая часть выражения в круглых скобках. 5 АЛГОхитрости Типовые алгоритмические приёмы Конец r = n % 10 ИЛ Начало Запросить " Введите n = " Получить n i = 1 Вывести i,"- я справа цифра числа - ", r ПОКА ВСЁ Вывод на экран справа налево цифр из числа n n = Целое(n / 10) i = i + 1 ПОКА n <> 0
ТОИ-ИМ Условный оператор и цикл Ввести исходные данные, найти решение, вывести результат на экран (x >= -3) And (&&) (x <= 7) (x > 99) And (&&) (x <= 999) Использовать операции if и Mod (%) 1. Определить принадлежит ли x отрезку [-3,7] 2. Определить является ли x трёхзначным числом 3. Дано двузначное число. Определить кратно ли оно трём 4. Дано двузначное число x. Определить состоит ли оно из одинаковых цифр Использовать операции Div (/) и Mod (%), проверить совпадение 6 Практическое занятие 5. Дано целое число x. Определить состоит ли оно из одинаковых цифр if (x >= 10) and (x <= 99) then if x mod 10 = x div 10 then writeln ('Да') else writeln ('Нет'); else writeln(' ошибка ввода числа '); вариант 2-го if: if x mod 11 = 0 then
ТОИ-ИМ 5. Проверка введённых данных -- блок-схема Это действие осуществляется с использование структуры Цикл с постусловием 7 АЛГОхитрости Типовые алгоритмические приёмы Текст запроса на ввод надо формулировать так, чтобы при повторе он был грамотным и понятным Проверка введённых данных Конец И Л Начало Запросить " Введите целое число N больше нуля" Получить N ПОВТОРЯТЬ ПОКА N <> 0
ТОИ-ИМ Хитрости ЦИКЛевания Объяснить условие завершения цикла: base = 15; for (; base; base--) {тело цикла); Объяснить как можно завершить такой цикл: while (1) ………………… if ( ?????) break; ………………… ; 8 АЛГОхитрости Типовые алгоритмические приёмы Цикл будет выполняться пока значение переменной base не станет равно 0, что в С означает false Цикл может прерван только принудительно, с помощью операторов break или return, используемых при проверке (if, switch / case) условия завершения внутри цикла. Такой цикл может использоваться, когда нет возможности написать одно чёткое условие завершения цикла (например, надо продолжать цикл только в 5-и из 13 веток вложенного оператора switch).