© Данная статья была опубликована в № 09/2007 журнала "Информатика" издательского дома "Первое сентября". Все права принадлежат автору и издателю и охраняются.      Главная страница "Первого сентября"
     Главная страница журнала "Информатика"
     Содержание № 09/2007
 Ответы, решения, разъяснения

В мир информатики # 91 (1-15 мая).
Задачник

 Ответы, решения, разъяснения

к заданиям, опубликованным ранее

1. Статья “Восемь задач” (“В мир информатики” № 83/“Информатика” № 24/2006)6

Задача “Временной интервал”

Обозначим временные характеристики момента начала промежутка времени час1, мин1, сек1, момента конца — час2, мин2, сек2.

Первый способ

Количество секунд, прошедших с начала суток до момента начала исследуемого промежутка времени, можно определить как час1 * 3600 + мин1 *
* 60 + сек1, до момента конца промежутка —
час
2 * 3600 + мин2 * 60 + сек2, а длительность исследуемого промежутка в секундах — как разность этих значений.

Зная эту длительность, можно найти искомые значения:

количество_часов := длительность

div 3600

количество_минут := длительность

mod 3600 div 60

количество_секунд := длительность

mod 60

Второй способ

Этот способ состоит в попарном использовании значений величин сек2 и сек1, мин2 и мин1, час2 и час1, с учетом того, имели ли место переход на следующую минуту (величина переход_минуты) и на следующий час (величина переход_часа):

количество_секунд := (сек2 — сек1 + 60) mod 60

переход_минуты := (сек2 — сек1 + 60) div 60

количество_минут := (мин2 — мин1 + 60 +

(переход_минуты — 1)) mod 60

переход_часа:= (мин2 — мин1 + 60 +

(переход_минуты — 1)) div 60

количество_часов := час2 — час1 +

(переход_часа — 1)

Задача “Округленное время”

Обозначим переменные, характеризующие текущий момент времени, час, мин, сек7.

Требуемое округление можно проводить “вручную”:

если сек < 30

то

округл_мин := мин

иначе

округл_мин := мин + 1

все

если округл_мин < 30

то

округл_час := час

иначе

округл_час := час + 1

все

или с использованием функции, возвращающей округленное значение своего аргумента.

В языке Паскаль такая функция называется Round:

округл_мин := мин + Round(сек/60);

округл_час := час + Round(округл_мин/60)

В школьном алгоритмическом языке и в языке Бейсик (вариант QBasic) такой функции нет. Можно использовать следующий прием — прибавлять к исследуемому значению 30 и брать целую часть частного от деления полученной суммы на 60:

округл_мин := мин + цел((сек + 30)/60);

округл_час := час + цел((округл_мин + 30)/60)

Задача “Угловое время”

Обозначим заданный угол (между часовой стрелкой и линией, соединяющей центр циферблата и точку, соответствующую 12 часам) — Yч и примем, что 0 < Yч 2p. С учетом рассуждений, сделанных в статье, можно определить, что значение угла для минутной стрелки в этот момент, который назовем начальным, равно Yм = Yч mod 30 * 12. Определим углы часовой и минутной стрелок через некоторое время t минут. Так как за одну минуту часовая стрелка поворачивается на 30 : 60 = 0,5 градуса, а минутная — на 360 : 60 = 6 градусов, то через t минут эти углы станут равны Yчt = Yч + 0,5t, Yмt = Yм + 6t.

Главную роль в дальнейшем будет играть угол между минутной и часовой стрелками Y. Он равен Y = Yмt – Yчt = Yм + 6t – (Yч + 0,5t) = Y0 + 5,5t, где Y0 = Yм – Yч.

Удобно считать все углы неотрицательными. Поэтому при Y0 < 0 полагаем Y0 = Y0 + 360. Наименьшее время t1, через которое стрелки часов совпадут, находится следующим образом: если Y0 = 0, то t1 = 0; иначе (при Y0 > 0): Y = Y0 + 5,5t1 = 360 и t1 = (360 – Y0)/5,5 (будем использовать целую часть от этой величины — число полных минут).

Для нахождения наименьшего времени t2, через которое стрелки расположатся перпендикулярно друг другу, рассмотрим три случая:

1) Y0 90;

2) 90 < Y0 270;

3) Y0 > 270.

В первом случае:

Y0 + 5,5t2 = 90 и t2 = (90 – Y0)/5,5;

во втором:

Y0 + 5,5t2 = 270 и t2 = (270 – Y0)/5,5;

в третьем:

Y0 + 5,5t2 = 360 + 90 и t2 = (450 – Y0)/5,5.

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

Для задачи нахождения наименьшего времени t3, через которое стрелки часов образуют прямую линию (угол в 180 градусов), рассуждения аналогичные.

Задача “Автомобиль, движущийся без топлива”

Нет, конечно, — в любом случае какое-то количество бензина машина будет расходовать. Но какое? Простое суммирование или нахождение среднего значения исходных данных дадут нам неверный результат. Можно рассуждать так. Пусть до приобретения новых деталей расход топлива составлял Р л/100 км. Благодаря использованию нового карбюратора расход уменьшится на 50% и составит

Р – Р = Р(1 – ) л/100 км. Новая система зажигания сэкономит 30% от этой (!) величины, и расход топлива станет равен Р(1 – ) (1 – ) л/100 км. Аналогично после установки новых поршневых колец расход топлива будет составлять
Р
(1 – ) (1 – ) (1 – ) л/100 км. Например, при Р = 20 л/100 км (это и все другие значения — условные) новый расход будет равен 5,6 л/100 км, т.е. общая экономия составит 72%.

Можно также использовать формулу сложных процентов.

Задача “Старинные русские единицы длины”

На школьном алгоритмическом языке программа решения задачи выглядит следующим образом:

алг Задача_4

нач цел расст_м, вершков, аршин, саженей, верcт, расст_вершках, остаток_вершков

вывод нс, "Задайте длину отрезка в метрах"

ввод расст_м

расст_вершках := расст_м/44.45 * 1000

верcт := div(расст_вершках, 16*3*500)

остаток_вершков:=mod(расст_вершках,

16*3*500)

саженей := div(остаток_вершков, 16*3)

остаток_вершков := mod(остаток_вершков, 16*3)

аршин := div(остаток_вершков, 16)

остаток_вершков := mod(остаток_вершков,16)

вывод нс, "Эта длина равна ", верcт,

"верcт"

вывод саженей, "саженей", аршин,

"аршин"

вывод остаток_вершков, "вершков"

кон

— где div и mod — функции, возвращающие целочисленное частное и остаток от деления их аргументов (в других языках программирования для расчета этих значений используются не функции, а специальные операции).

Смысл переменных величин ясен из их имен. Обращаем внимание на то, что окончание слов — названий старинных единиц длины — не всегда будет соответствовать числовым значениям.

Задача “Хитрая степень”

Можем записать, что искомое значение степени y = xn. Прологарифмировав (по основанию натурального логарифма e) обе части равенства, получим: lny = n * lnx. Тогда по определению логарифма имеем: y = en * lnx. В программе для расчета следует использовать имеющиеся в языке программирования функции exp и ln (в Бейсике — log). Например, в программе на языке Паскаль:

y := exp(n * ln(x))

Задача “Деньги, деньги…”

Количество рублей равно целой части частного от деления заданного значения на 100, а количество копеек — остатку от такого деления.

Программы прислали:

— Баженов Василий и Баженов Михаил, средняя школа села Горелово Тамбовской обл., учитель Шитова Л.А.;

— Бутеев Дмитрий, Ершова Светлана, Коренев Вадим, Праслов Ярослав, Смирнова Мария, Спирина Ольга, Стафеева Алена и Суворова Виктория,
г. Сегежа, Республика Карелия, школа № 5, учитель Меньшиков В.В.;

— Деминцев Борис, средняя школа села Сердар, Республика Марий Эл, учитель Чернова Л.И.;

— Колтаков Роман, г. Красноярск, школа № 5, учитель Заболотникова Е.Ю.;

— Скробов Сергей, средняя школа поселка Старопетровский Рузского р-на Московской обл., учитель Семеновский В.И.;

— Яценко Сергей, основная школа села Кубайка, Красноярский край, учитель Дорджиева Б.Р.

От редакции

1. Учащиеся из Сегежской школы, как приславшие лучшие программы, будут награждены дипломом.

2. Предлагаем читателям по приведенным разъяснениям разработать программы и прислать их в редакцию.

2. Статья “Перемещаем карточки, или Как апельсин превратить в собаку” (“В мир информатики” № 84 / “Информатика” № 1/2007)

Основные промежуточные состояния при решении показаны на рис. 1–3, а результат — на рис. 4.

Один остроумный человек, долго мучившийся с этой головоломкой, сказал: “Решая эту задачу, я ПАСИНЕЛЬ” :).

Ответы прислали:

— Алексашин Вячеслав, Барашова Анастасия, Бирюкова Татьяна, Буренина Юлия, Зеленин Андрей, Калиниченко Михаил, Лукьянов Михаил, Объедков Александр и Шикунова Алена, г. Балашов Саратовской обл., гимназия им. Ю.А. Гарнаева, учитель Сухорукова Е.В.;

— Антипина Анна, Далада Марина, Диденко Оксана, Занозин Михаил, Здорова Наталия и Пахомов Сергей, г. Нижний Новгород, школа № 77, учитель Занозина Г.В.;

— Гайсина Галия, г. Уфа, Республика Башкортостан, школа № 18, учитель Искандарова А.Р.;

— Васильев Никита, Венедиктов Андрей, Чеботарева Екатерина и Юнак Евгения, участники компьютерного кружка Дворца детского творчества
им. В.П. Чкалова, г. Нижний Новгород, педагог Занозина Г.В.;

— Голик Екатерина, г. Струнино Владимирской обл., школа № 11, учитель Волков Ю.П.;

— Гордиенко Евгений, Глюз Юлия, Еремеева Светлана, Ерещенко Ольга и Чалина Анна, средняя школа села Гилевка Алтайского края, учитель Збарах В.Ф.;

— Граждан Артем, Клипов Игорь и Коваленко Роман, г. Балашов Саратовской обл., гуманитарно-педагогический лицей-интернат, учитель Сухорукова Е.В.;

— Исакова Олеся, поселок Лимбяяха Новоуренгойского р-на Тюменской обл., школа № 1, учитель Исакова И.С.;

— Конькова Анастасия, г. Фролово Волгоградской обл., школа № 5, учитель Конькова Е.Д.;

— Кузнецова Евгения, г. Ярославль, школа № 33, учитель Головина Л.И.;

— Першина Арина, г. Новокузнецк Кемеровской обл., гимназия № 44, учитель Дубовицкая Н.В.;

— Ерош Татьяна, Колосов Владимир, Малышева Елена и Мельник Кристина, г. Лесосибирск Красноярского края, поселок Стрелка, школа
№ 8 им. Константина Филиппова, учитель Лопатин М.А.;

— Шалимов Василий, основная школа села Самарга Тернейского р-на Приморского края, учитель Рагимов М.А.

Учащиеся из г. Балашова представили также рисунки, два из которых приведены ниже.

В статье предлагалось также сделать из слова муха слово слон, последовательно заменяя лишь одну букву (поpядок следования букв пpи этом менять нельзя).

Кратчайший (по мнению редакции) вариант:

МУХА — муpа — туpа — таpа — каpа —

каpе — кафе — кафр — каюp — каюк — кpюк —

уpюк — уpок — сpок — сток — стон — СЛОН.

Ребята из Нижнего Новгорода нашли такой вариант:

МУХА — муза — луза — лоза — коза — кора —

кара — каре — кафе — кафр — каюр — каюк —

крюк — урюк — урок — срок — сток — стон —

СЛОН

Ответ, в котором используется слово паут, представила Першина Арина из г. Новокузнецка, слово коан — учащиеся из поселка Стрелка.


6 Решения задач подготовил автор статьи А.В. Ремнев, учитель информатики гимназии № 1, г. Тараз, Республика Казахстан.

7 В условии задачи использованы другие имена. — Ред.