Переменные полезны не только для хранения и переиспользования информации, но и для упрощения сложных вычислений. Давайте рассмотрим пример: нужно перевести евро в рубли через доллары. Подобные конвертации через промежуточную валюту часто делают банки при покупках за рубежом.
Для начала переведем 50 евро в доллары. Допустим, что один евро — 1.25 доллара:
auto dollars_count { 50 * 1.25 };
std::cout << dollars_count;
В предыдущем уроке мы записывали в переменную конкретное значение. А здесь auto dollars_count { 50 * 1.25 };
справа от знака равно находится выражение. Программа вычислит результат — 62.5 — и запишет его в переменную. С точки зрения программы не важно, что написано: 62.5 или 50 * 1.25, эти оба варианта — выражения, которые надо вычислить. И они вычисляются в одно и тоже значение — 62.5.
Вы могли заметить, что появилось новое ключевое слово auto
. Поскольку мы еще не изучали типы данных в С++, мы указали компилятору с помощью auto
, что бы он сам определил тип данных у переменной dollars_count
.
Любая строка — выражение. Когда программа видит выражение, она вычисляет его и возвращает результат. Вот несколько примеров выражений, а в комментариях справа от каждого выражения — итоговое значение:
62.5 // 62.5
50 * 1.25 // 62.5
120 / 10 * 2 // 24
"Hexlet" // "Hexlet"
Правила построения кода таковы, что в тех местах, где ожидается выражение, можно поставить любое вычисление (не только математическое, но и, например, строковое — как конкатенация), и программа останется работоспособной. По этой причине невозможно описать и показать все случаи использования всех операций. Программы состоят из множества комбинаций выражений, и понимание этой концепции — один из ключевых шагов на вашем пути.
Вернемся к нашей валютной программе. Запишем стоимость доллара в рублях, как отдельную переменную. Вычислим цену 50 евро в долларах, умножив их на 1.25. Допустим, что 1 доллар — 60 рублей:
int main() {
auto rubles_per_dollar { 60 };
auto dollars_count { 50 * 1.25 }; // 62.5
auto rubles_count { dollars_count * rubles_per_dollar }; // 3750
std::cout << rubles_count; // => 3750
return 0;
}
А теперь давайте добавим к выводу текст:
int main() {
auto rubles_per_dollar { 60 };
auto dollars_count { 50 * 1.25 }; // 62.5
auto rubles_count { dollars_count * rubles_per_dollar }; // 3750
std::cout << "The price is " << rubles_count << " rubles" << std::endl; // => The price is 3750 rubles
}
Любая переменная может быть частью любого выражения. В момент вычисления вместо имени переменной подставляется её значение.
Значение dollars_count
вычисляется до того, как она начнет использоваться в других выражениях. Когда подходит момент использования переменной, C++ «знает» значение, потому что уже вычислил его.
Напишите программу, которая берет исходное количество евро, записанное в переменную euros_count
, переводит евро в доллары и выводит на экран. Затем полученное значение переводит в рубли и выводит на новой строчке. Не забудьте в конце вывода добавить перевод строки.
Пример вывода для 100 евро:
125.0 7500.0
Считаем, что:
Для перевода строчки можно использовать \n
или std::endl
между выводом долларов и рублей.
Если вы зашли в тупик, то самое время задать вопрос в «Обсуждениях». Как правильно задать вопрос:
Тесты устроены таким образом, что они проверяют решение разными способами и на разных данных. Часто решение работает с одними входными данными, но не работает с другими. Чтобы разобраться с этим моментом, изучите вкладку «Тесты» и внимательно посмотрите на вывод ошибок, в котором есть подсказки.
Это нормально 🙆, в программировании одну задачу можно выполнить множеством способов. Если ваш код прошел проверку, то он соответствует условиям задачи.
В редких случаях бывает, что решение подогнано под тесты, но это видно сразу.
Создавать обучающие материалы, понятные для всех без исключения, довольно сложно. Мы очень стараемся, но всегда есть что улучшать. Если вы встретили материал, который вам непонятен, опишите проблему в «Обсуждениях». Идеально, если вы сформулируете непонятные моменты в виде вопросов. Обычно нам нужно несколько дней для внесения правок.
Кстати, вы тоже можете участвовать в улучшении курсов: внизу есть ссылка на исходный код уроков, который можно править прямо из браузера.
Ваше упражнение проверяется по этим тестам
1#include "test_helper.h"
2
3TEST_CASE("testing solution") {
4 std::string expected = "125\n7500\n";
5 std::string actual = get_output(sizeof(expected));
6
7 CHECK(actual == expected);
8}
9
Решение учителя откроется через: