Журнал удивительных идей


Совместный проект учителей и учеников 192 школы










Системный подход

Решите числовые ребусы.

Буквы и плюсы необходимо заменить цифрами так, чтобы получилось верное равенство. Разные знаки могут быть заменены на одинаковые цифры, но не наоборот. По условию при записи чисел ведущие нули не используются.

1. АААB = AA16

2. C++ − ++ = С

Уверены ли вы, что второй ребус не имеет решения? На самом деле оба ребуса имеют решения! И, видимо, не единственные. Самым недогадливым читателям мы расскажем их в следующем номере.

Ну а догадливые могут получить приз, отправив решения в редакцию.

JavaScript: много из ничего

Когда начинаешь рассказывать о JavaScript, на ум сразу приходит обычное, но в случае этого языка абсолютно бесполезное document.write("Hello,World"). Естественно, в ответ слышишь "ну и зачем писать это самое document.write, ведь без него работает точно также!" В этот момент сразу хочется предложить что-нибудь вроде
for (i=0; i<10; i++)
  document.write("Hello,World<br>");
,
но сам понимаешь - в этом варианте JavaScript и его циклы кажутся еще бесполезней...

А так ли нужны циклы в JavaScript? Конечно, как и в любом алгоритмическом языке программирования. Вот пример задачи, в которой применение циклов в решении очень полезно.

Изготовим страничку для вебдизайнера. Она будет содержать гиперссылки - шестнадцатеричные коды цветов по модели RGB, и при нажатии на них фон страницы будет меняться на задаваемый этим кодом. 

Вот фрагмент странички

Посмотреть в новом окне работу страницы

Я не знаю, кто писал этот текст. Программисты обычно так не делают. Они час отлаживают скрипт, который затем генерит текст, который можно было бы набрать за полчаса. Просто программисты не умеют по-другому.

А вот фрагмент со скриптом:

И работает точно так же!

Не правда ли, покороче немного? А ведь ничего сложного нет - три вложенных цикла. Объект colors - это просто массив из 6 элементов, а переменные red, green, blue - целые его индексы, последовательно принимающие в своих циклах значения от 1 до 6. Можно было бы, конечно, использовать и более привычные формы массива и циклов.

Вспомним программистскую шутку: "Каждую программу можно сократить хотя бы на одну команду". Если задача уменьшить размеры этого скрипта покажется вам слишком сложной, то попробуйте сократить скрипт, о котором шла речь в предыдущем номере.

Скажем несколько слов о передаче параметров. Это не имеет непосредственного отношения к теме статьи, но представляет интерес. Оказывается, параметры (данные после знака вопроса) умеют принимать не только серверные скрипты, к этому мы привыкли, но и обычные HTML-файлы. Наш скрипт перезагружает сам себя, передавая параметром цвет фона (для этого можно использовать такие же гиперссылки выбора цвета, как в первом фрагменте).

Вот как это делается:

<script>
  param = location.search.substr(1);
  // Получаем параметр цвета
  // location.search - это URL, начиная со знака '?'
  // substr(1) - то же без первого символа (без '?');
  
  var bgcol = '"default"';
  eval(param);
  //Выполняем команду, записанную в строке param
  //(там либо ничего не лежит, тогда bgcol остается 
  //равным 'default',либо команда присваиваивания 
  //bgcol = 'значение цвета'

  if( bgcol=='"default"' )
    document.write("<body>");
  else
    document.write("<body bgcolor=#",bgcol,">");
</script>

Впрочем, "профессионал", разумеется, упростит и этот код, использовав свойство bgColor объекта document:

<script>
  bgcol="";
  eval(location.search.substr(1));
  if(bgcol != "")
   document.bgColor = "#" + bgcol;
</script>

Скрипты предложены
Маргулевым А.И.

М
а
т
е
м
а
т
и
к
а
Ф
и
з
и
к
а
Х
и
м
и
я
Б
и
о
л
о
г
и
я
И
н
ф
о
р
м
а
т
и
к
а