Главная->Інформатика та програмування->Содержание->Приоритеты арифметических операцій и операций отношения

ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ В C++ (4-Е ИЗДАНИЕ) (часть 3) онлайн

Приоритеты арифметических операцій и операций отношения

Следующая программа затронет вопрос старшинства операций. В этой програм- ме генерируется последовательность чисел Фибоначчи. Первыми членами такой последовательности являются числа

1 1 2 3 5 8 13 21 34 55

Каждый новый член получается путем сложения двух предыдущих: 1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, 3 + 5 = 8 и т. д. Числа Фибоначчи проявляют себя в таких различных ситуациях, как методы сортировки и подсчет числа спиралей у цвет- ков подсолнуха.

Одним из наиболее интересных применений чисел Фибоначчи является их связь с так называемым «золотым сечением». Золотое сечение — это идеальные пропорции в архитектуре и искусстве, воплощенные при строительстве древне- греческих храмов. Чем больше номера членов последовательности чисел Фибо- наччи, тем ближе отношение последних двух членов к золотому сечению. Текст программы FIBO приведен ниже.

// fibo.cpp

// генерирование чисел Фибоначчи с помощью цикла while #include <iostream> using namespace std;

int main() {

//граница типа unsigned long const unsigned long limit = 4294967295; unsigned long next = 0; // предпоследний член unsigned long last = 1; // последний член

while(next < limit / 2) // результат не должен быть слишком большим {

cout << last << " ";    // вывод последнего члена long sum = next + last; // сложение двух последних членов next = last;         // обновление предпоследнего

last = sum;          // и последнего членов

}

cout << endl;

return 0;

}

Вывод программы выглядит следующим образом:

1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765 10946 17711 28657 46368 75025 121393 196418 317811 514229 832040 1346269 2178309 3524578 5702887 92274655 14930352 24157817 39088169 63245986 102334155 165580141 267914296 433494437 701408733 1134903170 1836311903 2971215073

Отношение последних двух членов последовательности равно 0,618033988, что очень близко к «золотому сечению».

В программе FIBO используется тип unsigned long с максимальным среди це- лых типов диапазоном представления положительных чисел. Условие, прове- ряемое перед началом исполнения тела цикла, выводит программу из цикла до

того, как произойдет переполнение. Мы определяем величину, равную предель- ному значению переменной типа unsigned long, как константу, поскольку эта ве- личина не меняется в ходе выполнения программы. Цикл должен прекратиться в том случае, если значение переменной next станет больше половины допусти- мой для данного типа границы. Значение переменной sum может достигать лю- бых допустимых значений для данного типа. Условие продолжения цикла со- держит две операции:

(next < limit / 2)

Нам необходимо сравнить значение next с limit/2, а значит, деление должно произойти перед сравнением. Для того чтобы быть уверенными в том, что про- изойдет именно это, мы можем использовать круглые скобки:

(next < (limit / 2))

На самом деле скобки не нужны. Почему? Потому что арифметические опе- рации имеют более высокий приоритет, чем операции отношения. Таким обра- зом, мы можем быть уверенными в том, что деление имеет более высокий при- оритет, нежели операция «больше», и будет выполнено первым. Мы рассмотрим старшинство операций в полном объеме после того, как расскажем о логических операциях.

 

19