Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб 4_Структуры повторения.doc
Скачиваний:
6
Добавлен:
01.05.2025
Размер:
250 Кб
Скачать
☆
  1. #include <iostream>

  2. int main()

  3. {

  4. using namespace std;

  5. unsigned short small;

  6. unsigned long large;

  7. unsigned long skip;

  8. unsigned long target;

  9. const unsigned short MAXSMALL=6553 5;

  10. cout << "Enter a small number: ";

  11. cin >> small;

  12. cout << "Enter a large number: ";

  13. cin >> large;

  14. cout << "Enter a skip number: " ;

  15. cin >> skip;

  16. cout << "Enter a target number: ";

  17. cin >> target;

  18. cout << endl;

  19. // проверить два условия выхода

  20. while (small < large && small < MAXSMALL)

  21. {

  22. sma11 + +;

  23. if(small%skip==0)// пропустить декремент?

  24. cout << "skipping on " << small << endl ;

  25. continue;

  26. }

  27. if (large == target) // результат угадан?

  28. {

  29. cout << "Target reached!";

  30. break;

  31. }

  32. large-=2;

  33. } // конец цикла while

  34. cout << "\nSmall: " << small <<

  35. " Large: " << large << endl;

  36. Return 0;

39. }

Результат

Enter a small number: 2

Enter a large number: 20

Enter a skip number: 4

Enter a target number: 6

skipping on 4

skipping on 8

Small: 10 Large: 8

Анализ

Как можно заметить, игра закончилась поражением пользователя, поскольку меньшее значение превысило большее, а результат оказался равен 8-ми, а не 6-ти.

В строке 22 проверяются условия выхода из цикла. Если значение переменной small меньше значения large и не превышает максимально допустимое значение, то тело цикла выполняется.

В строке 25 вычисляется остаток от деления значения переменной small на значение skip. Если значение small кратно skip, то оператор continue возвращает выполнение программы к началу цикла (строка 22), пропуская декремент переменной large и ее проверку на соответствие ставке игрока.

В строке 29 значение переменной target сравнивается со значением переменной large. Если игрок угадал, и эти значения равны, то игра заканчивается победой пользователя. В этом случае программа выводит сообщение о победе, работа цикла прерывается оператором break и управление передается строке 36.

4.5. Вложенные циклы

Цикл, организованный в теле другого цикла, называют вложенным. В этом случае внутренний цикл полностью выполняется на каждой итерации внешнего. Листинг 4.6 демонстрирует заполнение элементов матрицы с помощью вложенного цикла for.

Листинг 4.6. Вложенный цикл for

  1. #include <iostream>

  2. Using namespace std;

  3. Int main()

  4. {

  5. int rows, columns;

  6. char theChar;

  7. cout << "How many rows? ";

  8. cin >> rows;

  9. cout << "How many columns? ";

  10. cin >> columns;

  11. cout << "What character? ";

  12. cin >> theChar;

  13. for (int i=0; i<rows; i++)

  14. {

  15. for (int j=0; j<columns; j++)

  16. cout << theChar;

  17. cout << endl;

  18. }

  19. Return 0;

  20. }

Результат

How many rows? 4

How many columns? 12

What character? x

xxxxxxxxxxxx

xxxxxxxxxxxx

xxxxxxxxxxxx

Анализ

В начале программы пользователю предлагается ввести количество строк и столбцов, а также символ, которым будет заполнена матрица. Первый, внешний цикл for в строке 13, инициализирует счетчик (i) значением 0. Затем следует его тело.

В первой строке тела внешнего цикла (строка 15) инициализируется еще один цикл. Переменной j присваивается значение 0, и начинается выполнение тела внутреннего цикла. В строке 16 на экран выводится символ, введенный в начале программы. Заметьте, что внутренний цикл for содержит только один оператор (вывод символа). Затем проверяется условие (j<columns) и, если оно истинно, значение переменной j увеличивается на единицу, а на экран выводится следующий символ. Так продолжается до тех пор, пока значение переменной j не станет равно количеству столбцов.

После вывода на экран 12-ти символов х условие внутреннего цикла оказывается ложным, и управление передается в строку 16, где на экран выводится символ новой строки. После этого проверяется условие внешнего цикла (i<rows) и, если оно истинно, то значение счетчика i увеличивается, и тело внешнего цикла выполняется снова.

При второй итерации внешнего цикла опять выполняется внутренний цикл. Переменной j снова присваивается нулевое значение, и все операции внутреннего цикла повторяются сначала.

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