3.2. ПеременныеПредставим себе, что мы решаем задачу возведения 2 в степень 10. Пишем: #include <iostream> Задача решена, хотя нам и пришлось неоднократно проверять, действительно ли
10 раз повторяется литерал 2. Мы не ошиблись в написании этой длинной последовательности
двоек, и программа выдала правильный результат – 1024. cout << "2 в степени X\t"; cout << 2 * ... * 2; где Х последовательно увеличивается на 1, а вместо отточия подставляется нужное число литералов? Да, мы справились с задачей. Заказчик вряд ли будет вникать в детали, удовлетворившись полученным результатом. В реальной жизни такой подход достаточно часто срабатывает, более того, бывает оправдан: задача решена далеко не самым изящным способом, зато в желаемый срок. Искать более красивый и грамотный вариант может оказаться непрактичной тратой времени. В данном случае “метод грубой силы” дает правильный ответ, но как же неприятно и скучно решать задачу подобным образом! Мы точно знаем, какие шаги нужно сделать, но сами эти шаги просты и однообразны. Привлечение более сложных механизмов для той же задачи, как правило, значительно
увеличивает время подготовительного этапа. Кроме того, чем более сложные механизмы
применяются, тем больше вероятность ошибок. Но даже несмотря на неизбежные ошибки
и неверные ходы, применение “высоких технологий” может принести выигрыш в скорости
разработки, не говоря уже о том, что эти технологии значительно расширяют наши
возможности. И – что интересно! – сам процесс решения может стать привлекательным. #include <iostream> value, pow, res и cnt – это переменные, которые позволяют хранить, модифицировать
и извлекать значения. Оператор цикла for повторяет строку вычисления результата
pow раз. int pow( int val, int exp ) { for ( int res = 1; exp > 0; --exp ) res = res * val; return res; } Теперь получить любую степень нужного числа не составит никакого труда. Вот как реализуется последняя наша задача – напечатать таблицу степеней двойки от 0 до 15: #include <iostream> extern int pow(int,int); int main() { int val = 2; int exp = 15; Конечно, наша функция pow() все еще недостаточно обобщена и недостаточно надежна. Она не может оперировать вещественными числами, неправильно возводит числа в отрицательную степень – всегда возвращает 1. Результат возведения большого числа в большую степень может не поместиться в переменную типа int, и тогда будет возвращено некоторое случайное неправильное значение. Видите, как непросто, оказывается, писать функции, рассчитанные на широкое применение? Гораздо сложнее, чем реализовать конкретный алгоритм, направленный на решение конкретной задачи. Назад ВпередСодержание |
Нет комментариев. Оставить комментарий: |