Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lection2.doc
Скачиваний:
9
Добавлен:
17.12.2018
Размер:
186.88 Кб
Скачать

3.9 Пример: применение оператора цикла while для суммирования рядов

Предположим, что нам требуется просуммировать бесконечный ряд:

При попытке прямого подсчета слагаемых вы столкнетесь с тем, что уже седьмое слагаемое требует вычисления 13!, а это превышает максимально представимое в компьютере число типа int.

Чтобы обойти эту проблему, обратим внимание на то, что каждое последующее слагаемое в ряду может быть получено из предыдущего по формуле:

Поэтому для суммирования ряда необходимо лишь задать первое слагаемое, а все последующие получать, используя рекуррентное соотношение, приведенное выше. Осталось только определить критерий остановки процесса суммирования. Будем считать, что процесс суммирования может быть остановлен, когда очередное слагаемое по модулю станет меньше заданного малого числа ε.

Блок-схема для суммирования ряда выглядит так:

Блок-схема суммирования бесконечного ряда с заданной точностью ε.

А вот пример программы, реализующей указанный алгоритм:

#include<iostream> // включить заголовки функций для ввода-вывода

#include<cmath> // включить заголовки математических функций

int main()

{

double x,a,s,eps;

int n=0;

cin>>x>>eps; // введите значения x,eps

a=x;

s=a;

while(fabs(a)>eps)

{

a=-a*x*x/((2*n+2)*(2*n+3));

s+=a;

n++;

}

cout<<s<<” “<<sin(x)<<endl;

return 0;

}

В программе использована функция fabs, заголовок которой описан в заголовочном файле <сmath> (математическая библиотека в C++), предназначенная для вычисления абсолютного значения переменной.

В конце программы на экран выводится подсчитанная сумма для заданного значения x и значение sin(x) для оценки точности вычисления суммы, т.к. приведенный ряд представляет разложение функции синус.

Упражнение

Написать программу для вывода на экран таблицы значений функции, заданной рядом:

4. Оператор выбора

4.1 Оператор switch - выбор на множестве условий

Как уже известно, условный оператор C++ if-else позволяет проверить несколько условий.

Для тех случаев, когда нужно проверить, какое значение из множества заданных принимает та или иная переменная, язык C++ предоставляет оператор switch, имеющий следующий формат:

switch (выражение)

{

case Constant 1: оператор_1;

case Constant_2: оператор_2;

case Constant_3: оператор_3;

;

};

Когда в программе встречается оператор switch, первым делом вычисляется его выражение. Затем результат вычисления сравнивается с каждым из постоянных значений, следующих за ключевыми словами case. При выявлении в одном из вариантов совпадающего с результатом значения выполняются операторы именно данного варианта.

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

4.2 Оператор switch - использование break

Нам уже известно, что оператор switch позволяет выполнять специфическую условную обработку. При этом с помощью этого оператора в программе определяются один или более возможных для совпадения вариантов (с помощью ключевого слова case). Для каждого варианта задаются соответствующие операторы. Для отделения операций одного case от операций другого используется оператор break.

Если оператор break опустить, то будут выполняться все последующие операторы, не считаясь с тем, к какому из вариантов они принадлежат. Например, рассмотрим следующий оператор switch:

int digit;

cin>>digit;

switch (digit)

{

case 1: cout<<”1”<<endl; break;

case 2: cout<<”2”<<endl; break;

case 3: cout<<”3”<<endl; break;

case 4: cout<<”4”<<endl; break;

case 5: cout<<”5”<<endl; break;

case 6: cout<<”6”<<endl; break;

case 7: cout<<”7”<<endl; break;

case 8: cout<<”8”<<endl; break;

case 9: cout<<”9”<<endl; break;

case 0: cout<<”0”<<endl; break;

default: cout<”It is not a digit!!!”<<endl; break;

};

Могут возникнуть такие ситуации, когда в программе необходимо пройти все варианты case. Например, в следующей программе оператор switch используется для подсчета гласных букв в латинском алфавите:

#include <iostream>

using namespace std;

int main()

{

char letter;

int count = 0;

for (letter = 'A'; letter <= 'Z'; letter++)

switch (letter)

{

case 'A' :

case 'E' :

case 'I' :

case 'O' :

case 'U' : count++;

};

cout<<"Число гласных равно ”<<count<<endl;

return 0;

}

В данном случае, если переменная letter содержит значения А, E, I или О, то происходит сравнение, и управление переходит к оператору, соответствующему букве U, где увеличивается значение целого счетчика count. Поскольку после варианта значения U инструкция case больше не используется, то оператор break может не задаваться.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]