С++ для начинающих




Переменные - часть 2


Вернемся к нашему примеру и попробуем “технологически усовершенствовать” его реализацию. Мы можем воспользоваться именованным объектом для хранения значения степени, в которую нужно возвести наше число. Кроме того, вместо повторяющейся последовательности литералов применим оператор цикла. Вот как это будет выглядеть:

#include <iostream>

int main()

{

// objects of type int

  int value = 2;

  int pow  = 10;

  cout << value << " в степени "

           << pow << ": \t";

  int res = 1;

  // оператор цикла:

  // повторить вычисление res

  // до тех пор пока cnt не станет больше pow

  for ( int cnt=1; cnt <= pow; ++cnt )

        res = res * value;

  cout << res << endl;

}

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;

    cout << "Степени 2\n";

    for ( int cnt=0; cnt <= exp; ++cnt )

          cout << cnt << ": "

               << pow( val, cnt ) << endl;

    return 0;

}

Конечно, наша функция pow() все еще недостаточно обобщена и недостаточно надежна. Она не может оперировать вещественными числами, неправильно возводит числа в отрицательную степень – всегда возвращает 1. Результат возведения большого числа в большую степень может не поместиться в переменную типа int, и тогда будет возвращено некоторое случайное неправильное значение. Видите, как непросто, оказывается, писать функции, рассчитанные на широкое применение? Гораздо сложнее, чем реализовать конкретный алгоритм, направленный на решение конкретной задачи.




Содержание  Назад  Вперед