====== Линейное исполнение и простейшая арифметика ====== Давным-давно, когда компьютеры были большие (и занимали огромные залы), основная задача, которая перед ними ставилась − это производить сложные математические вычисления. Времени с тех пор прошло много (относительно много), компьютеры "научились" решать множество других задач, но основная их функция осталась неизменной − так же, как и на заре "компьютерной эры", они складывают, умножают, вычитают и делят. Для проверки сего простого факта попробуем вывести на консоль таблицу умножения на число три. Сформулировать задачу можно следующим образом: **Программа должна вывести на консоль результат умножения на число 3 чисел от 1 до 10 и завершить свою работу.** В главе "[[..firstprog|Первая программа]]" мы уже выяснили − как именно можно вывести что-либо на консоль. Для решения же новой задачи нам необходимо ответить на несколько новых вопросов: 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 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 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. Также, как и соответствующие математические операции, арифметические операции в С++ могут обладать свойствами [[http://ru.wikipedia.org/wiki/%D0%9A%D0%BE%D0%BC%D0%BC%D1%83%D1%82%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C|коммутативности]], [[http://ru.wikipedia.org/wiki/%D0%90%D1%81%D1%81%D0%BE%D1%86%D0%B8%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F|сочетательности]] и [[http://ru.wikipedia.org/wiki/%D0%94%D0%B8%D1%81%D1%82%D1%80%D0%B8%D0%B1%D1%83%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D1%8C|дистрибутивности]], в том случае, если применяются к числовым аргументам (в общем случае эти операции такими свойствами могут не обладать).\\ 4. В случае необходимости записать отрицательное число, перед ним (как и в математике) ставится знак минус ('-'). Также перед числом можно поставить знак '+', в этом случае число останется положительным. При использовании этих знаков стоит помнить следующее: в C++ два подряд идущих плюса − "++" или минуса − "--" (не разделенных пробелом, табуляцией и т. п. символом) считаются отдельной операцией. И по этому запись 1 - - 2 и 1 -- 2 − совсем не одно и то же. В качестве упражнения вы можете модифицировать (или дополнить) приведенные здесь программы для вывода/расчета чего-либо еще, продолжив использование многогигагерцового процессора в качестве простейшего школьного калькулятора.