Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Языки программирования (пособие).doc
Скачиваний:
6
Добавлен:
01.07.2025
Размер:
965 Кб
Скачать
☆

2.2.3Условие, вложенное в цикл

Тело цикла не обязано состоят из элементарных команд. В нем могут присутствовать и другие операторы, например, условия. В следующей программе выводятся не все числа из диапазона от 1 до 100, а только четные, поэтому вывод заключен в условие.

#include <iostream>

using namespace std;

int main() {

int i=0;

while (i<100) {

if (i%2==0) {

cout << i << " ";

}

i++;

}

system("pause");

return 0;

}

2.2.4Обработка данных в цикле

Циклы применяются не только для вывода данных на экран, но и для проведения вычислений. Продемонстрируем это на примере вычисления суммы целых чисел от 1 до 100.

#include <iostream>

using namespace std;

int main() {

int i=1, sum=0;

while (i<=100) {

sum += i;

i++;

}

cout << sum << endl;

system("pause");

return 0;

}

Переменная sum инициализируется нулем, а затем на каждой итерации цикла к ней прибавляется номер итерации: на первой итерации – 1, на второй – 2 и т.д. Таким образом, после окончания всех 100 итераций к переменной sum окажутся прибавленными числа от 1 до 100.

Описанный алгоритм используется для вычисления и других сумм, например, суммы 1+1/2+1/3+ … +1/(N-1)+1/N. В этой задаче к переменной sum прибавляется не i, а 1/i.

#include <iostream>

using namespace std;

int main() {

int i=1;

double sum=0;

while (i<=100) {

sum += 1.0/i; //вещественное деление

i++;

}

cout << sum << endl;

system("pause");

return 0;

}

Нужно не забыть объявить sum как вещественную переменную и написать 1.0, поскольку иначе оператор деления работает как целочисленное деление. Число итераций можно не задавать в коде (мы задали 100), а ввести с клавиатуры.

#include <iostream>

using namespace std;

int main() {

int n;

cout << "n=";

cin >> n;

int i=1;

double sum=0;

while (i<=n) {

sum += 1.0/i;

i++;

}

cout << sum << endl;

system("pause");

return 0;

}

Рассмотрим пример вычисления еще одной суммы: 1/20+1/21+1/22+…+1/2N.

#include <iostream>

using namespace std;

int main() {

cout << "Введите число N:\n";

int N;

cin >> N;

double result = 0;

//Denominator – это знаменатель

int i=1;

double denominator = 2;

while (i<=N) {

result += 1/denominator;

denominator *= 2;

i++;

}

cout << "Результат равен " << result << "\n";

system("pause");

return 0;

}

2.2.5Неизвестное число итераций

В рассмотренных примерах число итераций цикла указывалось точно, однако не всегда условие работы цикла связано с достижением указанного числа итераций.

Напишем программу «Говорящая копилка», которая позволяет периодически класть деньги и сообщает, когда будет накоплена нужная сумма, например 500 000 рублей на покупку автомобиля. Здесь заранее неизвестно, сколько итераций потребуется: может быть человек сразу положит нужную сумму, или же ему потребуется для этого несколько вложений. Описанную ситуацию моделирует код, использующий цикл while:

#include <iostream>

using namespace std;

int main() {

setlocale(LC_ALL, "Russian");

const int price = 500000; //Цена автомобиля

cout << "Машина стоит " << price << " руб.\n";

int total = 0; //Накопленная сумма

//Принимем деньги, пока их меньше 500000

while (total < price) {

cout << "\nВ копилке " << total << " руб.\n";

cout << "Сколько еще положить?\n";

int money;

cin >> money;

total += money;

}

//Требуемая сумма накоплена

cout << "\nВ копилке " << total << " рублей\n";

cout << "Вы накопили на машину.\n";

system("pause");

return 0;

}