Страницы

6. Цикл с постусловием do...while


Цикл do ... while

Данный цикл выполняется пока условие истинно. Если условие оценивается как false, цикл завершается.

Общий вид цикла:

do
   {
    оператор 1;
    оператор 2;
    ...

    оператор n; 
   }
while (логическое выражение);


Оператор do (делать) - while (до тех пор, пока) содержит логическое выражение (после while), которое управляет повторением выполнения последовательности операторов, записанных между do и  while. Повторение продолжается до тех пор, пока логическое выражение не примет значение false!

Последовательность операторов тела цикла выполняется не менее одного раза.!!!

При использовании оператора do...while (цикла с постусловием) необходимо учитывать следующее:
  • перед первым выполнением оператора логическое выражение его окончания (или продолжения) должно быть определено;
  • последовательность операторов должна содержать хотя бы один оператор, влияющий на значение логического выражения, иначе оператор do...while  будет работать бесконечно долго;
  • логическое выражение в конечном итоге должно принять значение false.
Пример бесконечной по времени работы цикла:

do
cout << "Hello";
while (10 < 100);


Принципиальное отличие оператора do...while от оператора while в том, что проверка условия производится не перед началом выполнения тела цикла, а после его выполнения, когда решается вопрос, повторить ли еще раз действия. Поэтому тело цикла всегда выполняется по крайней мере один раз.

Пример 1. Дано число n. Составить программу ввода чисел и найти количество чисел, введенных до первого нуля, если количество введенных чисел превысит n, закончить подсчет.

Входные данные:
  число n - заданное число
Выходные данные:
  число - количество введенных чисел до первого нуля

kol - количество чисел
i - число, которое вводится


#include <iostream>
using namespace std;

int main()
{
   int n, i, kol = 0;
   cin >> n;

   do
      {
      cin >> i;
      kol++;
      }
   while (i != 0 && n > kol);

   if (kol == n && i != 0)
      cout << "net 0";
     else cout << kol - 1;

   return 0;
}

Задание 1. Вводится последовательность чисел, 0 - конец последовательности. Определить содержит ли последовательность хотя бы два равных соседних числа.

Задание 2. Дано натуральное число N. Определить К - количество делителей этого числа.

Тесты               Посмотреть решение

Экспериментальный раздел работы

Вывести делители числа на экран.

Задание 3. Целое положительное число N называется простым, если оно имеет только два делителя, а именно 1 и N. По соглашению 1 не считают простым числом. Начало последовательности простых чисел имеет вид:

2, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,

Научимся устанавливать факт: является ли число N простым?

Считаем, что делители числа находятся в интервале от 2 до n / 2, точнее в интервале от 2 до целой части sqrt(n) - корня из числа N.

Тесты            Посмотреть решение

Экспериментальный раздел работы

1. Решите эту задачу с использованием оператора while.
2. Измените программу так, чтобы осуществлялся вывод всех делителей числа n.

Основная теорема арифметики

Всякое натуральное число n разлагается на произведения простых чисел. Это разложение однозначно с точностью до порядка записи простых чисел в произведении.

Пример 2. Составить программу, которая вычисляет последовательно все действия арифметического выражения до тех пор, пока в выражении не встретится знак равенства.

Входные данные:
  последовательно вводятся все элементы арифметического выражения
Выходные данные:
  число - результат последовательного вычисления

Рассмотрим математические операции умножения, сложения, деления и вычитания, которые обозначаются символами: '*', '+', '/', '-'. Будем использовать новый тип char - символьный. '*', '+', '/', '-', '=' - символы. Обозначим x - число, которое является компонентом действия, y - значение выражения, o - арифметическая операция.

double - вещественный тип данных

#include <iostream>
using namespace std;

int main()
{
   double  x, y = 0 ;
   int f = 1;
   char o = '+';

   do
      {
      cin >> x;

      switch (o)

      {

      case '+' :  {y  += x; break;}

      case '-' :  {y  -= x; break;}

      case '*' :  {y  *= x; break;}

      case '/' :  {y  /= x; break;}

      default: {cout << "mistake"; f = 0;}

      }
      cin >> o;

      }
   while (o != '=' && f == 1);

   if (f != 0) cout << y;

   return 0;
}

Задания

1. Билет называют "счасливым", если в его номере сумма первых трёх цифр равна сумме последних трёх. Найти количество счастливых билетов.

Тесты        Посмотреть решение

2. Билет называют "счасливым", если в его номере сумма первых трёх цифр равна сумме последних трёх. Подсчитать число тех "счастливых" билетов, у которых сумма трёх цифр равна 13.

Тесты    

Задания для самостоятельной работы

1. Составить программу вывода на экран всех простых делителей числа.

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

3. Произведение нескольких первых нечетных чисел равно р. Сколько сомножителей взято?

2. Составить программу нахождения наибольшего общего делителя (НОД) двух натуральных чисел.

Указание:
Алгоритм нахождения (НОД) двух целых неотрицательных чисел, основан на следующих свойствах: пусть х и у неравные 0, целые неотрицательные числа и пусть х≥у, тогда если у=0, то НОД(х,у)=х, а если у≠0, то для чисел х, у и r, где r – остаток от деления на х на у выполняется равенство НОД(х,у)= НОД(у, r).