English version is in beta. All contents of the site should be already translated (mostly using machine translation), and everything should work properly. However, if you find any problems, please contact me.

Про "странные числа" в коде

Иногда в ваших программах вам может быть нужно использовать какие-то фиксированные числа, возникающие из смысла задачи. Например, если вы решаете задачу про часы, то, скорее всего, у вас в программе появятся числа типа 60 (минут в часах) или 24 (часов в сутках). Тогда вы прямо указываете это число в программе, как, например, в задаче "Электронные часы - 1" с уровня 1А:

b = a % 60  # питон
b := a mod 60;  // паскаль

Это абсолютно нормально. (Если вы будете потом писать серьезные большие программы, то от вас могут потребовать заводить специальные переменные-"константы" под эти числа, но сейчас речь не об этом, и в наших задачах это не обязательно.)

Но бывает так, что в программе вам нужно какое-то число, которое вы с ходу не знаете, которое вам надо как-то вычислять. Например, вам надо в программе знать, на какой угол (сколько градусов) сдвигается минутная стрелка за одну минуту. Вряд ли вы это число назовете с ходу из головы. Зато понятно, как его считать: надо полный угол (360 градусов) поделить на 12 часов и то, что получится, поделить на 60 минут.

Что вы в таком случае делаете? Вы берете калькулятор и на нем считаете, сколько будет 360/12/60. Вы получаете 0.5 и прямо так и оставляете это число (0.5) прямо в коде программы:

b = a * 0.5  # питон
b := a * 0.5;  // паскаль

Вот это уже неправильный подход.

Любой язык программирования прекрасно работает как калькулятор. Поэтому не надо использовать внешний калькулятор. Просто напишите в программе прямо полностью выражение:

b = a * 360 / 12 / 60  # питон
b := a * 360 / 12 / 60;  // паскаль

Вот так — намного лучше. Почему?

  • Во-первых, так проще. Вам не надо лезть в калькулятор, считать там что-то, и вводить результат число в программу. Вы сразу тут вводите формулу, и компьютер делает работу за вас.
  • Во-вторых, так надежнее. Вы можете случайно ввести в калькулятор не то число, или ошибиться при вводе результата в программу. Частая ситуация — если результат получается в виде длинной десятичной дроби, то вы вручную можете ввести слишком мало знаков. А компьютер посчитает за вас настолько точно, насколько он только может.
  • Наконец, так понятнее. Если вы вернетесь к своей программе через неделю, вы вряд ли сразу вспомните, что такое 0.5 и откуда вы его взяли. А если вы увидите формулу 360/12/60, все сразу станет понятнее, т.к. 360, 12 и 60 — вполне понятные в этой задаче числа, и скорее всего вы сразу вспомните, почему что и на что вы делили. Аналогично, программа будет понятнее для других людей, кто ее будет смотреть. Наконец, если у вас в формуле на самом деле ошибка (как простейший пример — вы разделили на 24 вместо 12), то заметить ее намного проще, чем если бы у вас в программе был только результат.

Аналогичные соображения относятся и к другим ситуациям. Например, вам в программе может потребоваться код символа A. Вы можете посмотреть в таблицу символов и увидеть, что это 65. А можете написать ord('A'). Вот второй вариант намного лучше первого — пусть компьютер сам за вас считает, преимущества все те же, что описаны выше. Если вам надо знать, насколько коды заглавных букв отличаются от маленьких — тоже пишите формулу. И т.д.

Вообще, общее правило:

Если вам в программе нужно использовать число, которое вы сразу называете из головы (например, количество минут в часе), то просто пишите это число. Если же вам нужно число, которые вы как-то вычисляете, то не пишите его в программе, а пишите формулу.