Данному образовательному сайту пришлось несколько раз менять свое имя. С 2022 года доступ к нему обеспечивается по URL
emc.km.ru (2001-2007) ==> educomp.org.ru (2007-2011) ==> educomp.runnet.ru (2011-2021) ==> emc.orgfree.com (2022-...)
Более подробно об истории сайта можно прочитать здесь.
|
"Кроха": примеры решения задач для ЭВМ "Кроха"1. Составить программу вычисления периметра прямоугольника по длинам сторон. (Задача N 3а из учебника) Р Е Ш Е Н И ЕОбозначим стороны прямоугольника a и b, а результат - P. Вычисления будем вести по формулам: P = a + b; P = P + P. Такая последовательность вычислений обеспечивает наиболее экономичную (с точки зрения использования числа ячеек памяти) программу, т.к. не требуется отводить специальную ячейку под число 2.
2. Составить программу вычисления половины полной поверхности параллелипипеда по длинам ребер. (Задача N 3в из учебника) Р Е Ш Е Н И ЕОбозначим ребра параллеллипипеда a, b и c, а результат - s. Вычисления будем вести по формуле: s = ab + bc + ac = b(a + c) + ac, что уменьшит количество арифметических действий, а значит и команд. Полученную формулу удобно разбить на две: r = b(a + c); s = ac + r
Особенностью данной задачи является нехватка ячеек памяти
для проведения вычислений. Поэтому приходится помещать рабочую переменную r и результат s на место уже отработавших команд программы. Нельзя сказать, что это удобно (перед каждым запуском первые команды приходится восстанавливать!), но другого способа решения для памяти из 8 ячеек нет. 3. Написать программу нахождения наибольшего из двух хранящихся в ячейках памяти чисел. (Задача N 4 из учебника) Р Е Ш Е Н И ЕОбозначим исходные числа a и b, а результат max.
Примечание. Вместо команды "стоп" по адресу 010 можно выполнить безусловный переход на команду 100. Казалось бы, команды безусловного перхода у "Крохи" нет. Но проанализируем команду 4. Написать программу деления двух чисел с учетом возможности деления на ноль (в последнем случае отобразить на экране все нули). Р Е Ш Е Н И ЕОбозначим исходные числа a и b, а результат d.
5. Заданы два числа a и b. Написать программу, которая большее из них делит на меньшее. Р Е Ш Е Н И ЕОбозначим результат d.
6. Написать программу вычисления n! Р Е Ш Е Н И ЕОбозначим k рабочую переменную, которая является текущим множителем для факториала и меняется от 1 до n. Начальное значение k придется задавать перед каждым запуском "вручную", т.к. для команды пересылки константы 1 из ячейки 7 в ячейку 4 уже не хватает памяти. То же самое можно сказать и про начальное значение n!, которое перед запуском естественно установить равным 1. Не забудьте также в ячейку 6 занести значение n + 1, которое является верхней границей цикла (цикл будет выполняться, пока k < n+1 и, следовательно, завершится после умножения на n).
При работе с программой полезно обратить внимание на эффект переполнения, который для быстрорастущего выражения типа факториал достигается довольно быстро. В самом деле, как подробно обсуждается в учебнике, максимально допустимое число для 12-разрядной "Крохи" равняется 4095. Таким образом, уже попытка вычислить 7! = 1*2*3*4*5*6*7 = 5040 приводит "Кроху" к непреодолимым вычислительным трудностям. Проверьте, как "Кроха" реагирует на переполнение. 7. Написать программу для вычисления выражения 1+2+3+4+...+n
Эта задача настолько похожа на предыдущую, что тратить силы на набор решения просто не поднимается рука. Отметим только, что начальное значение суммы (в отличие от факториала) надо задавать равным 0. 8. Написать программу вычисления выражения X*2n Р Е Ш Е Н И ЕДля того, чтобы программа поместилась в память "Крохи", придется исходное выражение преобразовать к виду
9. Вычислить выражение y=1*2*4*8*...*n Р Е Ш Е Н И ЕКак нетрудно видеть из формулы для y, программа должна суммировать последовательные степени числа 2. Обозначим очередную степень s. Особо отметим, что верхняя граница цикла в ячейке 7 переустанавливается программой. Вы перед пуском вводите в эту ячейку удобное для Вас значение n. Но машину это значение "не устраивает": ей требуется, чтобы верхняя граница равнялась 2 * n, только тогда последний учтенный сомножитель в цикле умножения будет равен n. Поэтому первой же командой ЭВМ удваивает 7-ю ячейку.
10. Вычислить выражение y=1+2+4+8+...+n
Задача решается аналогично. Отметим только, что верхняя граница цикла в ячейке 7 устанавливается равной n+1. Для проверки правильности результата полезно помнить, что для m слагаемых ответ может быть вычислен по формуле 11. Задача о самомодифицирующейся программе. Задано состояние памяти ЭВМ "Кроха" перед пуском (см. ниже). Определить, каков будет результат выполнения программы. КОММЕНТАРИЙ к условию. Данная задача представляет не столько практический, сколько теоретический интерес. Тем не менее, автор ее очень любит и считает важной. Дело в том, что в этой задаче отчетливо видно, что ЭВМ может сама формировать себе программу и что содержимое одной и той же ячейки памяти "Крохи" в разные моменты времени может быть и данными (числом), и командой. Не пожалейте времени на разбор этой задачи, если Вы действительно хотите глубоко понять принципы работы ЭВМ и передать свои знания ученикам !!!
Р Е Ш Е Н И Е
В результате выполнения программы на экран ЭВМ будет выведено
содержимое ячеек (1), (2) и (3), сформированное в ходе выполнения программы. 12*. Написать циклическую программу, заносящую 1 в ячейки (4)-(6). Р Е Ш Е Н И Е
Эта задача не зря помечена звездочкой. Она, по-видимому, самая трудная для понимания. В значительной мере это объясняется ее некоторой искусственностью в рамках учебной ЭВМ "Кроха". Тем не менее идея модификации адресов команд на "настоящих" ЭВМ при работе с массивами реализуется аналогично. Впрочем, если задача Вам не понравилась, можете смело ее пропустить. Для тех же, кто "вошел во вкус" или кому в наше нелегкое время посчастливилось иметь дело со способными учениками (для таких она и предназначается !), небольшой комментарий. Для проверки окончания цикла используется следующий прием. Перед запуском в ячейку (6) заносится 0, поэтому при проверке условия в команде (2) переход срабатывает: 1>0. Так продолжается до записи в ячейку (6) единицы. После этого условие перестает выполняться и цикл прекращается. © Е.А.Еремин, 1995 |