К концу этого поста вы узнаете некоторые из основных принципов логики, которые помогут нам решить проблему, на которую пока не может ответить даже Google.

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

Советую использовать консоль вашего браузера для написания кодов. В Chrome вы можете получить доступ с помощью Ctrl + shift + J, но если это не сработает, вы можете быстро найти это в Google.

Логика программирования

Думайте о логике программирования как о строительных блоках чего-то большего. Представьте себе LEGO или головоломку, которая представляет собой группу из нескольких маленьких частей, которые помогают создать один конечный объект. У каждой из этих маленьких частей в программировании есть название, и я покажу вам каждую из них, которая нам понадобится для разработки нашей задачи кода, в конце поста.

Комментарии

Комментарии - это коды, которые не выполняются программой. Это форма, в которой мы можем передавать сообщения нам, людям, не нарушая выполнение нашего кода. В JavaScript самый простой способ объявить комментарий - использовать «//» в каждой строке. Например:

// this is a comment
// this is another comment

Переменные

Переменные помогают нам хранить некоторые данные, которые нам могут понадобиться в будущем. Это могут быть числа, тексты, функции и несколько других типов значений. Самая простая форма объявления переменной - использование оператора «var». Также следует отметить, что мы не можем допускать пробелов между именами переменных, поэтому мы группируем слова с заглавной буквы. Например:

// for texts we need to use '' or "" around the text
var myName = "Alison Cassis"
var internetCostByMonth = 100 // set a value of 100 to our variable
// but how much does it cost in a whole year?
internetCostByMonth * 12
// the console should print 1200 to you

Операторы отношения

Это помогает проверить связь между двумя значениями.

Условия

Это помогает проверить, является ли утверждение истинным или ложным. Чаще всего используются «if» и «else»,, и их область действия ограничена символы «{« и «}». Вот пример использования операторов отношения, которые мы только что видели:

var myAge = 24 
var myBrotherAge = 10 
if (myAge < myBrotherAge) { 
    //  "I'm younger than my brother" 
} else { 
    //  "I'm older than my brother"
}

Повторение петель

Это поможет вам выполнить один и тот же код N раз. Как и условия, их область действия также ограничивается символами «{« и «}» . Примером циклов является «для», которому для работы требуются 3 значения в следующем порядке: базовое значение, условие остановки цикла, и новое базовое значение для следующего выполнения цикла.

var minutesInADay = 0 
for (var hourOfTheDay = 0; hourOfTheDay < 24; hourOfTheDay = hourOfTheDay + 1) { 
  minutesInADay = minutesInADay + 60 
  //for each hour in a day we want to sum 60 in our variable
} 
minutesInADay 
// the console should print 1440 to you

Списки

Это помогает сгруппировать несколько значений в одну переменную. Особенность в том, что списки начинаются с 0. Элементы списка хранятся внутри символов «[» и «]» и разделяются запятая. Например:

var monthsFromFirstSemester = ['January', 'February', 'March', 'April', 'May', 'June']
monthsFromFirstSemester[0]
// the console should print "January" to you

Функции

Это форма для группировки частей вашего кода в блок, который мы можем выполнить в другой момент. Чтобы объявить эту функцию, мы должны использовать оператор «function ()». Как и условия, их область действия также ограничена символами «{« и «}» . Когда мы решаем выполнить нашу функцию, мы должны ввести ее имя и затем « () », иначе она не будет выполнена. Например:

var willNotBeExecuted = function () { 
  return 'some text' 
} 
var willBeExecuted = function () { 
  return 'It works' 
} 
willBeExecuted() 
// the console should print 'It works' to you
// take a look how we did not execute the first function, only the second one

Теперь, когда мы знаем основы программирования, давайте приступим к нашей задаче:

Сколько у нас было пятницы 13-го в 2000 году?

Я знаю, это кажется глупым и простым, но я посоветовал вам найти простой ответ на этот вопрос. При поиске в Google вы можете найти несколько связанных ссылок, но ничего слишком простого или очень надежного. Итак, я предлагаю:

Давайте создадим код, который ответит на этот вопрос.

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

var calculateTotal = function () {  
  var total = 0
  var initialYear = 2000 
  var currentYear = new Date().getFullYear() // should get your current year
}

Мы будем выполнять одну и ту же логику для каждого года, начиная с 2000 года, поэтому мы можем использовать для этого цикл.

var calculateTotal = function () {  
  var total = 0
  var initialYear = 2000 
  var currentYear = new Date().getFullYear() // should get your current year
  for (var baseYear = initialYear; baseYear <= currentYear; baseYear = baseYear + 1) {  
  //here comes our next code
  }
}

Теперь, когда мы выполняем цикл для каждого года, пришло время проверить, есть ли в каждом из месяцев пятница, 13-е, и мы можем добиться этого с помощью другого цикла, но на этот раз для месяцев каждого года. Особенность заключается в том, что данные типа «даты» обрабатываются как списки, например [«Январь», «Фев»,…, «Декабрь»], поэтому нам нужно использовать переменную месяца как 0 в нашем цикле.

var calculateTotal = function () {  
  var total = 0
  var initialYear = 2000 
  var currentYear = new Date().getFullYear() // should get your current year
  for (var baseYear = initialYear; baseYear <= currentYear; baseYear = baseYear + 1) {  
    for (var month = 0; month < 12; month = month + 1) {
      // here we have access to each month in a year
    }
  }
}

Поскольку мы зацикливаемся на каждом месяце в году, нам просто нужно проверить, является ли 13-й день пятницей, и для этого мы будем использовать оператор Дата, который поможет нам справиться со всеми аспекты переменных даты. Мы можем создать дату, передав 3 параметра в Дата в следующем порядке: год, месяц и день. После этого мы можем использовать getDay, чтобы узнать, какому дню недели соответствует это значение даты. Проверить это:

var calculateTotal = function () {  
  var total = 0
  var initialYear = 2000 
  var currentYear = new Date().getFullYear() // should get your current year
  for (var baseYear = initialYear; baseYear <= currentYear; baseYear = baseYear + 1) {  
    for (var month = 0; month < 12; month = month + 1) {
      var dayOfTheWeek = new Date(baseYear, month, 13).getDay()
    }
  }
}

Теперь нам просто нужно проверить, равна ли переменная dayOfTheWeek пятнице. Но здесь есть еще одна особенность. getDay возвращает нам номер этого конкретного дня в неделе с учетом недели, начинающейся с воскресенья, поскольку это был список с воскресенья по понедельник, а поскольку это список, мы уже знаем, что он начинается в 0. Итак, если воскресенье равно 0, нам нужно проверить, будет ли результат getDay равен 5, потому что для нас это будет означать пятницу. После этого нам просто нужно увеличить нашу переменную total и выполнить нашу функцию. Нравится:

var calculateTotal = function () {  
  var total = 0
  var initialYear = 2000 
  var currentYear = new Date().getFullYear() // should get your current year
  for (var baseYear = initialYear; baseYear <= currentYear; baseYear = baseYear + 1) {  
    for (var month = 0; month < 12; month = month + 1) {
      var dayOfTheWeek = new Date(baseYear, month, 13).getDay()
      if(dayOfTheWeek == 5) { 
        total = total + 1 
      }
    }
  }
  return total
}
calculateTotal()

Вот и все!

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

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

Увидимся в следующий раз!