Давным-давно, когда компьютеры были большие (и занимали огромные залы), основная задача, которая перед ними ставилась − это производить сложные математические вычисления. Времени с тех пор прошло много (относительно много), компьютеры «научились» решать множество других задач, но основная их функция осталась неизменной − так же, как и на заре «компьютерной эры», они складывают, умножают, вычитают и делят. Для проверки сего простого факта попробуем вывести на консоль таблицу умножения на число три. Сформулировать задачу можно следующим образом:
Программа должна вывести на консоль результат умножения на число 3 чисел от 1 до 10 и завершить свою работу.
В главе «Первая программа» мы уже выяснили − как именно можно вывести что-либо на консоль. Для решения же новой задачи нам необходимо ответить на несколько новых вопросов:
1. Можно ли в тексте программы на С++ записать число?
Да. Можно. Число можно записать в наиболее привычном для нас виде − в десятичной системе счисления (но это не единственная возможная форма записи). При этом, если в записи числа используется только целая часть (например: 10, 20, 23422), то такое число считается «целым». Если используется десятичный разделитель - символ '.' (например, 10., 23.5, 3.141, .0001), то число считается вещественным или «с плавающей точкой». Подробнее об этом будет рассказано позже, сейчас же достаточно знать, что форма записи числа оказывает существенное влияние на результат операций с ним.
2. Можно ли в тексте программы записать операцию умножения двух величин?
Да. Можно. Операция умножения двух величин записывается с помощью символа '*'. Например: 2 * 3, или 10 * 100. Оба этих выражения означают ровно тоже самое, что и их аналоги в математической записи (2∙3 или 10∙100).
Кроме операции умножения в C++ существуют аналоги следующих математических операций: сложения ('+'), вычитания ('-'), деления ('/') и взятия остатка или, иначе, деления по модулю ('%'). Операции возведения в степень в языке C++ не существует (она заменяется функцией из стандартной библиотеки).
3. Можно ли вывести на консоль результат выполнения некоей операции?
Да. Можно. Делается это точно таким же образом, как и вывод строкового литерала − с помощью операции вывода в поток.
Например:
std::cout << 2 * 3 << std::endl; std::cout << 10 * 100 << std::endl;
Записав подряд несколько таких инструкций (иначе называемых «выражениями») в результате компиляции и запуска результата, мы получим последовательное их выполнение ровно в том порядке, в котором они записаны в тексте программы. На основании этих знаний можно составить законченную программу, выполняющую озвученную в начале главы задачу:
#include <iostream> int main() { std::cout << 1 * 3 << std::endl; std::cout << 2 * 3 << std::endl; std::cout << 3 * 3 << std::endl; std::cout << 4 * 3 << std::endl; std::cout << 5 * 3 << std::endl; std::cout << 6 * 3 << std::endl; std::cout << 7 * 3 << std::endl; std::cout << 8 * 3 << std::endl; std::cout << 9 * 3 << std::endl; std::cout << 10 * 3 << std::endl; }
Результат работы этой программы должен выглядеть следующим образом:
3 6 9 12 15 18 21 24 27 30
В следующем примере демонстрируется разница между формами записи числа:
#include <iostream> int main() { std::cout << "Integer numbers: " << 1 / 3 << std::endl; std::cout << "Floating point numbers:" << 1.0 / 3.0 << std::endl; }
Integer numbers: 0 Floating point numbers:0.333333
Результат его работы говорит сам для себя. Этого примера должно быть вполне достаточно, чтобы сразу уяснить для себя, что всегда необходимо четко осознавать − какого рода операции (целочисленные или с плавающей точкой) требуются в том или ином случае. Смешения этих типов операций либо использование операций одного типа там, где требуются операции другого − может иметь фатальные последствия.
Проводя дальнейшие сравнения арифметических выражений в языке C++ с их математическими аналогами можно выделить следующие общие моменты:
1. Арифметические выражения в C++ учитывают приоритет операций. И приоритет этот соответствует приоритету операций в математике. Т. е. операции '*', '/' и '%' имеют более высокий приоритет, чем операции '+' и '-'.
2. Арифметические выражения в C++ (да и выражения вообще) допускают группировку с помощью круглых скобок (также, как и математические выражения). При этом, то, что записывается в скобках, имеет более высокий приоритет и вычисляется в первую очередь.
3. Также, как и соответствующие математические операции, арифметические операции в С++ могут обладать свойствами коммутативности, сочетательности и дистрибутивности, в том случае, если применяются к числовым аргументам (в общем случае эти операции такими свойствами могут не обладать).
4. В случае необходимости записать отрицательное число, перед ним (как и в математике) ставится знак минус ('-'). Также перед числом можно поставить знак '+', в этом случае число останется положительным. При использовании этих знаков стоит помнить следующее: в C++ два подряд идущих плюса − «++» или минуса − «--» (не разделенных пробелом, табуляцией и т. п. символом) считаются отдельной операцией. И по этому запись 1 - - 2 и 1 -- 2 − совсем не одно и то же.
В качестве упражнения вы можете модифицировать (или дополнить) приведенные здесь программы для вывода/расчета чего-либо еще, продолжив использование многогигагерцового процессора в качестве простейшего школьного калькулятора.