- •Лабораторная работа 4 Структуры повторения
- •4.1. Оператор цикла while
- •4.2. Оператор цикла do. .While
- •Using namespace std;
- •Int main()
- •Return 0;
- •4.3. Оператор цикла for
- •Int main()
- •Return 0;
- •4.4. Операторы break и continue
- •Return 0;
- •Using namespace std;
- •Return 0;
- •4.5. Вложенные циклы
- •Using namespace std;
- •Int main()
- •Return 0;
- •4.6. Пример решения задачи. Вычисление синуса
- •Int main () {
- •4.7. Задачи для самостоятельного решения
#include <iostream>
int main()
{
using namespace std;
unsigned short small;
unsigned long large;
unsigned long skip;
unsigned long target;
const unsigned short MAXSMALL=6553 5;
cout << "Enter a small number: ";
cin >> small;
cout << "Enter a large number: ";
cin >> large;
cout << "Enter a skip number: " ;
cin >> skip;
cout << "Enter a target number: ";
cin >> target;
cout << endl;
// проверить два условия выхода
while (small < large && small < MAXSMALL)
{
sma11 + +;
if(small%skip==0)// пропустить декремент?
cout << "skipping on " << small << endl ;
continue;
}
if (large == target) // результат угадан?
{
cout << "Target reached!";
break;
}
large-=2;
} // конец цикла while
cout << "\nSmall: " << small <<
" Large: " << large << endl;
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
#include <iostream>
Using namespace std;
Int main()
{
int rows, columns;
char theChar;
cout << "How many rows? ";
cin >> rows;
cout << "How many columns? ";
cin >> columns;
cout << "What character? ";
cin >> theChar;
for (int i=0; i<rows; i++)
{
for (int j=0; j<columns; j++)
cout << theChar;
cout << endl;
}
Return 0;
}
Результат
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 снова присваивается нулевое значение, и все операции внутреннего цикла повторяются сначала.
Принцип вложенных циклов заключается в том, что при каждой итерации внешнего цикла внутренний выполняется полностью. Таким образом, отображаемый символ выводится по колонкам для каждой строки.
