КуМир - разговор с компьютером

Линейные алгоритмы

Разделы:
Задачи для самостоятельного решения

Во многих задачах искомые результаты из исходных данных можно получить без проверки выполнения или невыполнения каких бы то ни было условий.

Алгоритмы решения таких задач получили название линейных алгоритмов. Линейный алгоритм реализуется на языке КуМир следующим образом:

  1. Ввод исходных данных производится или с использованием команды присваивания, или команды ввод.
  2. Получение промежуточных данных, искомых результатов производится при помощи команды при-сваивания.
  3. Искомый результат выводится на экран дисплея при помощи команды вывод.

Рассмотрим некоторые задачи, для решения которых достаточно использовать линейные алгоритмы.

Пример 1.
Записать два числа в переменные a и b. Поменять местами содержимое a и b. Результат вывести на экран.
Решение 1.
Для решения поставленной задачи мы можем использовать вспомогательную переменную c. В c записать значение a, в a записать значение b, и b записать значение c.
алг Обмен_1
нач
. цел a
. цел b
. цел c
. вывод "a= "
. ввод a
. вывод "b= "
. ввод b
. c:=a
. a:=b
. b:=c
. вывод "a= ",a,нс
. вывод "b= ",b
кон

Решение 2.
Если задаться целью решить задачу без использования дополнительной переменной, то программа будет иной:
алг Обмен_2
нач
. цел a,b
. вывод "a= "
. ввод a
. вывод "b= "
. ввод b
. a:=a+b
. b:=a-b
. a:=a-b
. вывод "a= ",a,нс
. вывод "b= ",b
кон

Предположим, что мы в переменную a записали число 3, а в переменную b - 7. После выполнения команды
a:=a+b
в a будет записано число 10, а в b останется 7. После выполнения команды
b:=a-b
в переменную b будет записано число 3.
После выполнения команды
a:=a-b
в переменную a будет записано число 7.

Пример 2.
Дана десятичная дробь. Округлить её с точностью до двух знаков после десятичной точки.
Решение.
Пусть нам дано, например, число 4.6238. Умножим это число на 100. Получим 462.38. Прибавим 0.5, получим 462.88. Отбросим дробную часть и разделим на 100. Получаем нужный результат округления. Можно показать, что применительно к любой десятичной дроби описанный алгоритм дает требуемый результат. Отбросить дробную часть числа можно при помощи функции int (вспомните описание этой функции). На языке КуМир этот алгоритм запишется следующим образом:
алг Округление
нач
. вещ a,b
. вывод "a= "
. ввод a
. b:=a*100
. b:=b+0.5
. b:=int(b)
. b:=b/100
. вывод "b= ",b
кон

Пример 3.
Найти наибольшее и наименьшее из двух заданных чисел a и b.
Решение.
Решить эту задачу нам поможет описанная выше функция abs. Для записи наибольшего из данных чисел выделим переменную макс, а наименьшего – мин. Легко проверить, что макс определится по формуле

Действительно, если a ≥ b, то a-b ≥ 0 и |a-b| = a-b. Тогда

Если a < b, то a-b < 0, |a-b| = -(a-b) = b-a и

Наименьшее из заданных чисел определится по формуле


Проверка правильности этого утверждения производится подобно тому, как было сделано выше. На языке КуМир соответствующий алгоритм записывается следующим образом:
алг Наибольшее_и_наименьшее
нач
. вещ a,b
. вещ макс,мин
. вывод "a= "
. ввод a
. вывод "b= "
. ввод b
. макс:=(abs(a-b))+a+b)/2
. мин:=(a+b-abs(a-b))/2
. вывод "Макс= ",макс,нс
. вывод "Мин= ",мин
кон

Пример 4.
Вспомните рассказ А.П.Чехова «Репетитор». Репетитор, гимназист 7 класса Егор Зиберов задает своему ученику Пете Удодову задачу – «Купец купил 138 аршин чёрного и синего сукна за 540 рублей. Спрашивается, сколько аршин купил он того и другого, если синее стоило 5 рублей за аршин, а чёрное 3 рубля?» – и сам не может с ней справиться. Отец Пети щелкает на счётах и у него получается 75 и 63, что и нужно было. Предположим, что в распоряжении Петиного отца имеется компьютер, на котором он хочет осуществить ту же последовательность действий, что и на счётах. Как составить соответствующую программу на языке Кумир?
Решение.
Давайте представим себе, как рассуждал Удодов - старший. Если бы всё купленное сукно было синим, то ему пришлось бы заплатить 138x5=690 руб., т.е. переплатить 690-540=150 руб. За каждый аршин он переплачивал бы 5-3=2 руб. Следовательно, чёрного сукна было 150/2=75 аршин, а синего 138-75=63 аршин.

Соответствующая программа на языке Кумир имеет вид
алг Задача
нач
. вещ k,a,b,c,x,y,c1,c2
. вещ макс,мин
. вывод "Количество закупленного сукна - аршин: "
. ввод k
. вывод "Стоимость одного аршина синего сукна: "
. ввод a
. вывод "Стоимость одного аршина черного сукна: "
. ввод b
. вывод "Стоимость купленного сукна: "
. ввод c
. c1:=a*k
. c2:=c1-c
. x:=c2/(a-b)
. y:=k-x
. вывод "Черного сукна закуплено - аршин: ",x,нс
. вывод "Синего сукна закуплено - аршин: ",y
кон

Переделайте программу без использования переменных c1 и c2.

Задачи для самостоятельного решения

Задача 1.
В языке Кумир, кроме обычных арифметических операций, имеется ещё одна, предназначенная для вычисления остатка от деления целого числа a на целое число b. Обозначается оно так:
mod(a,b)
Например, если в a мы запишем 9, и b – 4, а в x – mod(a, b), то в x будет записано число 1. Используя описанную операцию, определите число единиц, десятков и сотен заданного трёхзначного целого числа.

Задача 2. (Старинная задача)
Три брата попросили хозяйку приготовить на ужин картофель. Пока хозяйка варила картофель, братья уснули; через час проснулся старший брат и. увидев на столе картофель, съел свою долю и опять заснул; через некоторое время проснулся второй и, не зная, что старший брат уже ел картофель, так же съел свою Долю и заснул; наконец, проснулся младший брат и сделал тоже, что и старшие братья. Когда старший брат опять проснулся, то разбудил своих братьев, и тогда все выяснилось; оставшиеся 8 картофелин поделили между собой средний и младший братья.
Сколько штук картофеля подала хозяйка?
Сколько из оставшихся 8 штук картофеля взял средний и сколько взял младший брат?
Составьте компьютерную программу решения этой задачи.

Задача 3.
– Почему ты так печален? – спросил прохожий старика, ехавшего медленно на старой лошади.
– Да как же мне не печалиться? – ответил старик. – Половину моего табуна и ещё пол-лошади угнали на юг, половину остатка и еще пол-лошади забрали на восток, половина нового остатка и ещё пол-лошади ушли на запад; наконец, половину последнего остатка и ещё пол-лошади я продал на север, и только моя старая кляча Карагез осталась со мной.
Сколько лошадей было первоначально в табуне старика?

Наверх