Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion modules/20-arithmetics/20-basic/ru/EXERCISE.md
Original file line number Diff line number Diff line change
@@ -1 +1 @@
Выведите на экран результат деления числа `81` на `9`.
Вы зашли в оптовый магазин и увидели упаковку из 9 батареек за 81 рубль. В обычном магазине одна батарейка стоит 12 рублей. Рассчитайте и выведите цену одной батарейки в оптовой упаковке, чтобы понять, где выгоднее покупать.
94 changes: 75 additions & 19 deletions modules/20-arithmetics/20-basic/ru/README.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,98 @@
На базовом уровне компьютеры оперируют только числами. Даже в прикладных программах на высокоуровневых языках внутри много чисел и операций над ними. К счастью, для старта достаточно знать обычную арифметику — с нее и начнем.
На базовом уровне компьютеры работают только с числами. Даже если вы пишете сложное приложение на современном языке программирования, внутри него всегда происходят многочисленные вычисления: сложение, вычитание, деление и т.д.

Для сложения двух чисел в математике мы пишем, например, `3 + 4`. В программировании — то же самое. Вот программа, складывающая два числа:
К счастью, чтобы начать программировать, достаточно знать обычную школьную арифметику. С нее мы и начнем.

## Сложение в JavaScript

В математике для сложения мы пишем 3 + 4. В JavaScript все точно так же:

```javascript
// Не забываем точку с запятой в конце,
// так как каждая строчка в коде - инструкция
3 + 4;
```

Инструкция `3 + 4;` заставит компьютер сложить числа и узнать результат. Если запустить эту программу, то ничего не произойдет. А если быть точными, то компьютер вычислит сумму, но на этом всё. Результат сложения никак не используется, и такая программа не представляет никакого интереса. Нам нужно попросить компьютер сложить `3 + 4` **и** дать команду сделать что-то с результатом. Например, вывести его на экран:
Этот код действительно можно запустить: интерпретатор выполнит вычисление. Но... он не сделает с результатом ничего. То есть 7 получится, но вы его не увидите.

## Чтобы увидеть результат, нужно его вывести

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

Для этого используем уже привычную команду `console.log()`:

```javascript
// Сначала вычисляется сумма,
// затем она передается в функцию печати
console.log(3 + 4);
```

После запуска на экране появится результат:
```text
console.log(3 + 4)
└─┬─┘
7

```text
7
```
console.log(7) → 7
```

Кроме сложения, доступны следующие операции:
Результат выполнения:

- `*`: умножение
- `/`: деление
- `-`: вычитание
- `%`: [остаток от деления](https://ru.wikipedia.org/wiki/Деление_с_остатком)
- `**`: возведение в степень
```text
7
```

Теперь давайте выведем на экран результат деления, а потом результат возведения в степень:
Если записать то же выражение в виде строки, мы получим совсем другой результат — на печать будет выведена строка «как есть»:

```javascript
console.log(8 / 2); // => 4
console.log('3 + 4'); // выводит: 3 + 4
console.log(3 + 4); // выводит: 7
```

## Другие арифметические операции

JavaScript поддерживает все привычные операции + несколько специфичных, связанных с тем, как хранятся и обрабатываются числа на компьютере:

| Операция | Символ | Пример | Результат |
|----------------------|--------|-----------|-----------|
| Сложение | `+` | `2 + 3` | `5` |
| Вычитание | `-` | `7 - 2` | `5` |
| Умножение | `*` | `4 * 3` | `12` |
| Деление | `/` | `8 / 2` | `4` |
| Возведение в степень | `**` | `3 ** 2` | `9` |
| Остаток от деления | `%` | `7 % 3` | `1` |

Вот как можно вывести результат деления и возведения в степень:

```javascript
console.log(8 / 2); // => 4
console.log(3 ** 2); // => 9
```

Иногда для удобства мы будем показывать в комментариях результат запуска строчек кода, вот так: `=> РЕЗУЛЬТАТ`. Например, `// => 4`.
## Что такое остаток от деления (`%`)

Эта операция называется **взятие остатка от деления**. Она показывает, **что «остается»**, когда одно число делится на другое *не полностью*. Пример:

```javascript
console.log(7 % 3); // => 1
```

Почему результат равен 1?

Первая инструкция выведет на экран `4` (потому что 8 / 2 это 4), а вторая инструкция выведет на экран 9 (потому что 3<sup>2</sup> это 9).
- 7 делится на 3 дважды: 3 * 2 = 6
- До 7 остается 1, и это является остатком.

Другие примеры:

```javascript
console.log(10 % 4); // => 2 (10 делится на 4 дважды: 4 * 2 = 8, остаток 2)
console.log(15 % 5); // => 0 (делится без остатка)
```

Операция `%` часто используется в программировании, например, чтобы проверить, делится ли число нацело (если остаток 0).

## Оформление арифметических выражений

С точки зрения JavaScript между `3+4` и `3 + 4` нет разницы. Интерпретатор поймет оба варианта одинаково. Разница только в оформлении кода. В программировании принято ставить пробелы вокруг арифметических операторов, потому что так выражения проще читать:

```javascript
console.log(3 + 4);
console.log(8 / 2);
console.log(7 % 3);
```
1 change: 1 addition & 0 deletions modules/20-arithmetics/25-operator/index.js
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
console.log(6 - -81);
console.log((6 - -81) / 3);
7 changes: 6 additions & 1 deletion modules/20-arithmetics/25-operator/ru/EXERCISE.md
Original file line number Diff line number Diff line change
@@ -1 +1,6 @@
Напишите программу, которая посчитает разность между числами `6` и `-81` и выведет ответ на экран.
Подводная лодка находится на глубине -81 м. Палуба спасательного корабля расположена на высоте +6 м над уровнем воды.

Рассчитайте и выведите на экран:

1. Полное расстояние всплытия в метрах.
2. Время подъема в минутах — лодка поднимается со скоростью 3 м/мин.
61 changes: 52 additions & 9 deletions modules/20-arithmetics/25-operator/ru/README.md
Original file line number Diff line number Diff line change
@@ -1,20 +1,63 @@
В математике и программировании мы часто используем знаки операций, такие как `+`, `-`, `*` и другие. В программировании такие знаки называются операторами.

Перед тем как двигаться дальше, разберем базовую терминологию. Знак операции, такой как `+`, называют **оператором**. Операторы выполняют операции над определенными значениями, которые называются **операндами**. Сами операторы, обычно, представлены одним или несколькими символами. Реже словом. Подавляющее большинство операторов соответствуют математическим операциям.
- Оператор представляет собой символ или слово, которое обозначает действие.
- Операнды — это значения, к которым применяется оператор.

Пример:

```javascript
console.log(8 + 2);
```

В этом примере `+` — это **оператор**, а числа `8` и `2` — это **операнды**.
Здесь:

- `+` является оператором
- `8` и `2` являются операндами
- результатом будет `10`

```text
операнд оператор операнд результат
8 + 2 → 10
5 - 3 → 2
4 * 3 → 12
```

## Унарные операторы

Существуют и унарные операции, которые работают с одним операндом. Пример:

```javascript
console.log(-3); // => -3
```

В этом случае `-` является унарным оператором, а `3` — операндом. Интерпретатор получает команду: «возьми число 3 и измени его знак».

Оператор `-` может использоваться по-разному. Когда он стоит **между двумя числами**, это операция вычитания:

```javascript
console.log(5 - 2); // => 3
console.log(10 - 7); // => 3
```

Эта разница особенно заметна при работе с отрицательными числами:

В случае сложения у нас есть два операнда: один слева, другой справа от знака `+`. Операции, которые требуют наличия двух операндов, называются **бинарными**. Если пропустить хотя бы один операнд, например, `3 + ;`, то программа завершится с синтаксической ошибкой.
```javascript
// минус на минус дает плюс
console.log(5 - -2); // => 7
```

Операции (не операторы) бывают не только бинарными, но и унарными (с одним операндом), и даже тернарными (с тремя операндами)! Причем операторы могут выглядеть одинаково, но обозначать разные операции.
Сначала мы видим операцию вычитания: `5 - (...)`. Но справа стоит унарный минус `-2`, который превращает `2` в отрицательное число. В итоге получается: `5 - (-2) = 7`.

```javascript
console.log(-3); // => -3
```
Таким образом, значение `-` зависит от контекста: если рядом стоит другое число — это вычитание, иначе — смена знака числа.

## Ошибки при вычислениях

Если воспринимать `-3` как единое число, можно не заметить, что `-` является отдельным оператором со своим приоритетом. Например:

```javascript
console.log(-3 ** 2); // => -9, а не 9!
```

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

Это немного может сбить с толку, потому что `-3` — это одновременно и число само по себе, и оператор с операндом, но у языков программирования такая структура.
Дело в порядке вычислений: сначала выполняется возведение в степень (`**`), а только потом применяется унарный минус. То есть: `-(3 ** 2) = -9`. Про приоритет операций поговорим подробнее в следующих уроках.
9 changes: 9 additions & 0 deletions modules/20-arithmetics/25-operator/ru/data.yml
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
---
name: Операторы
tips:
- >-
Всегда отбивайте арифметические операторы пробелами от своих операндов — это
хороший стиль программирования.
- >
[Операторы в
JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Expressions_and_Operators)
definitions:
- name: Арифметическая операция
description: сложение, вычитание, умножение и деление.
- name: Оператор
description: >-
специальный символ, создающий операцию. Например, `+` создает операцию
сложения.
- name: Операнд
description: 'объект, который участвует в операции. `3 * 6`: здесь 3 и 6 — операнды.'
- name: Унарная операция
description: >-
операция с одним операндом. Например, `-3` — унарная операция для
Expand Down
2 changes: 1 addition & 1 deletion modules/20-arithmetics/25-operator/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ test('hello world', async () => {

const firstArg = consoleLogSpy.mock.calls.join('\n');

expect(firstArg).toBe('87');
expect(firstArg).toBe('87\n29');
});
4 changes: 2 additions & 2 deletions modules/20-arithmetics/27-commutativity/index.js
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
console.log(3 ** 5);
console.log(-8 / -4);
console.log(2 ** 8);
console.log(9 / 3);
4 changes: 3 additions & 1 deletion modules/20-arithmetics/27-commutativity/ru/EXERCISE.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
Напишите программу, которая решает две задачи и выводит ответы на экран — каждый на отдельной строке.

Напишите программу, которая считает и выводит последовательно на экран значения следующих математических выражений: «3 в степени 5» и «-8 разделить на -4».
1. Художник хочет раскрасить 8 секций забора, каждую — в один из 2 цветов. Сколько уникальных вариантов раскраски существует? Используйте оператор возведения в степень `**`.
2. Вы с двумя друзьями (итого 3 человека) купили 9 пирожных и хотите разделить их поровну. Сколько достанется каждому? Используйте оператор деления `/`.
Loading
Loading