Конспект лекций по программированию для начинающих. Гладков В.П. - 48 стр.

UptoLike

Составители: 

50
отрезки друг под другом (рис.8.1). Примем для определенности a>b. Из рисунка
видно, что длина большего отрезка больше длины меньшего отрезка на |a-b|.
Если найти сумму длин отрезков a, b, |a-b|, то полученное число будет равно
удвоенному максимальному. Отсюда a+b+|a-b|=2·max. Тогда программа для
робота будет иметь вид: max(a,b) = пол(сум(сум(a,b),мод(раз(a,b)))).
Пример 8.13. Написать программу для
робота, определяющую минимальное
из двух заданных чисел: min(a,b).
Решение. Рассуждая аналогично предыдущему, можно получить формулу, а
затем в соответствии с ней написать программу:
min(a,b) = пол(раз(сум(a,b),мод(раз(a,b)))).
Упражнение
. Восстановите формулу, по которой была написана эта
программа.
Попытаемся найти другое решение поставленной задачи, применяя часто
используемый прием построения алгоритмов, когда решение новой задачи
сводится к уже решенной. К настоящему моменту мы умеем находить
максимум. Исходных чисел у нас два, поэтому оставшееся будет минимальным.
Отсюда следующая формула: min(a,b)=a+b-max(a,b), и программа по
этой
формуле: min(a,b)=раз(сум(a,b),max(a,b)).
Еще один вариант программы можно получить, если заметить, что
min(a,b)=-max(-a,-b). Перепишем формулу в удобном для составления
программы виде: min(a,b)=0-max(0-a,0-b).
Упражнение
. Проверьте справедливость последней программы, подставив
в нее числа, например: a=-5, b=9 или a=11, b=2.
Программа, построенная по последней формуле, имеет вид
min(a,b)=раз(0,max(раз(0,а),раз(0,b))).
Пример 8.14. Написать программу для робота, упорядочивающую три
заданных числа.
Решение. Составим спецификацию задачи.
Исходные данные: три произвольных числа. Обозначим их: a, b, c.
Результат: эти же числа, расположенные
в порядке: минимальное, среднее,
максимальное.
Решая задачу, будем рассуждать так. Предположим, что у нас есть готовые
программы для нахождения нужных значений. Назовем их: min(a,b,c) -
минимальное из трех, ср(a,b,c) - среднее из трех, max(a,b,c) - максимальное из
трех. Тогда поставленную задачу можно решить с помощью, например, такой
программы: !(min(a,b,c),ср(a,b,c),max(a,b,c)).
Получив это решение, мы свели сложную
исходную задачу к трем более
простым. Решим их последовательно.
Для нахождения минимального из трех можно использовать программу
min(a,b,c)=min(min(a,b),c)). Здесь дважды использовалась написанная ранее
программа нахождения минимального из двух.
Аналогично можно построить программу для нахождения максимума из
трех: max(a,b,c)=max(max(a,b),c)). Но можно построить эту программу,
используя ранее построенную: max(a,b,c) = раз(0, min(раз(0,a), раз(0,b),
раз(0,c))).
                                       50

отрезки друг под другом (рис.8.1). Примем для определенности a>b. Из рисунка
видно, что длина большего отрезка больше длины меньшего отрезка на |a-b|.
Если найти сумму длин отрезков a, b, |a-b|, то полученное число будет равно
удвоенному максимальному. Отсюда a+b+|a-b|=2·max. Тогда программа для
робота будет иметь вид: max(a,b) = пол(сум(сум(a,b),мод(раз(a,b)))).
    Пример 8.13. Написать программу для робота, определяющую минимальное
из двух заданных чисел: min(a,b).
    Решение. Рассуждая аналогично предыдущему, можно получить формулу, а
затем в соответствии с ней написать программу:
                   min(a,b) = пол(раз(сум(a,b),мод(раз(a,b)))).
    Упражнение. Восстановите формулу, по которой была написана эта
программа.
    Попытаемся найти другое решение поставленной задачи, применяя часто
используемый прием построения алгоритмов, когда решение новой задачи
сводится к уже решенной. К настоящему моменту мы умеем находить
максимум. Исходных чисел у нас два, поэтому оставшееся будет минимальным.
Отсюда следующая формула: min(a,b)=a+b-max(a,b), и программа по этой
формуле: min(a,b)=раз(сум(a,b),max(a,b)).
    Еще один вариант программы можно получить, если заметить, что
min(a,b)=-max(-a,-b). Перепишем формулу в удобном для составления
программы виде: min(a,b)=0-max(0-a,0-b).
    Упражнение. Проверьте справедливость последней программы, подставив
в нее числа, например: a=-5, b=9 или a=11, b=2.
    Программа,     построенная     по     последней  формуле,      имеет  вид
min(a,b)=раз(0,max(раз(0,а),раз(0,b))).
    Пример 8.14. Написать программу для робота, упорядочивающую три
заданных числа.
    Решение. Составим спецификацию задачи.
    Исходные данные: три произвольных числа. Обозначим их: a, b, c.
    Результат: эти же числа, расположенные в порядке: минимальное, среднее,
максимальное.
    Решая задачу, будем рассуждать так. Предположим, что у нас есть готовые
программы для нахождения нужных значений. Назовем их: min(a,b,c) -
минимальное из трех, ср(a,b,c) - среднее из трех, max(a,b,c) - максимальное из
трех. Тогда поставленную задачу можно решить с помощью, например, такой
программы: !(min(a,b,c),ср(a,b,c),max(a,b,c)).
    Получив это решение, мы свели сложную исходную задачу к трем более
простым. Решим их последовательно.
    Для нахождения минимального из трех можно использовать программу
min(a,b,c)=min(min(a,b),c)). Здесь дважды использовалась написанная ранее
программа нахождения минимального из двух.
    Аналогично можно построить программу для нахождения максимума из
трех: max(a,b,c)=max(max(a,b),c)). Но можно построить эту программу,
используя ранее построенную: max(a,b,c) = раз(0, min(раз(0,a), раз(0,b),
раз(0,c))).