русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Циклы

Действие циклов заключается в последовательном повторении определённой части программы некоторое количество раз. Повторение продолжается до тех пор, пока выполняется соответствующее условие. Когда значение выражения, задающего условие, становится ложным, выполнение цикла прекращается, а управление передаётся оператору, следующему непосредственно за циклом. В С++ имеется три типа циклов: for, while и do while.

Цикл с параметром (for)

Цикл for организует выполнение программы фиксированное число раз. Как правило (хотя и не всегда), этот тип цикла используется тогда, когда число раз, за которое должно повториться исполнение кода, известно заранее. Рассмотрим пример программы, которая выводит на экран квадраты целых чисел.

int main() {

int j; // определение счетчика цикла

for (j=0; j<5; j++) // счетчик меняется от 0 до 4

cout << j * j << " "; // квадрат значения j выводится на экран (0 1 4 9 16)

cout << endl;

getch(); return 0;

}

Таким образом, цикл for имеет следующий формат:

for (инициализирующее выражение; условие выполнения; модифицирующее выражение)

оператор; // тело цикла состоит из одного оператора, который можно заключить в { }

или

for (инициализирующее выражение; условие выполнения; модифицирующее выражение) {

оператор; // тело цикла состоит из нескольких операторов - блок

оператор;

оператор;

}

Обратите внимание на то, что после оператора for отсутствует точка с запятой (;). Это объясняется тем, что оператор for вместе с телом цикла представляют из себя одну конструкцию (или один большой оператор).

Как видно из данного примера инициализирующее выражение выполняется только один раз – в начале выполнения цикла. В данном примере оно инициализирует счетчик цикла нулём. Как правило, условие выполнения цикла содержит в себе операции отношения. Условие проверяется каждый раз перед исполнением тела цикла и определяет, нужно ли исполнять цикл ещё раз или нет. Модифицирующее выражение предназначено для изменения значения счётчика цикла. Часто такое изменение сводится к инкрементированию или декрементированию счётчика (хотя совсем необязательно увеличение или уменьшение на 1). Модификация счётчика происходит после того, как тело цикла полностью выполнилось.

Рассмотрим следующий пример, который демонстрирует использование нескольких операторов в теле одного цикла.

#include <iostream>

#include <iomanip> //для setw

#include <conio>

using namespace std;

int main() {

int n; // счетчик цикла

for(n=1; n<=5; n++) { // цикл от 1 до 5

cout << setw(4) << n; // вывод первого столбца

int cub = n * n * n; // вычисление куба

cout << setw(6) << cub << endl; // вывод второго столбца

}

getch(); return 0;

}

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

1 1

2 8

3 27

4 64

5 125

В этой программе хорошо прослеживается момент, связанный с блоками и областью видимости переменных. Важной особенностью блока является то, что определённые внутри него переменные невидимы за его пределами. Здесь мы определили переменную cub внутри блока. Получить доступ к этой переменной вне блока невозможно – она видима лишь внутри фигурных скобок.

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

#include <iostream>

#include <conio>

using namespace std;

int main() {

unsigned int n;

unsigned long fact = 1; // тип long для результата

cout << "Vvedite celoe chislo: ";

cin >> n; // ввод числа

for(int j=n; j>0; j--) // умножение 1 на

fact = fact * j; // или fact *= j

cout << "Faktorial chisla raven " << fact << endl;

getch(); return 0;

}

Д/З Напишите программу, которая подсчитывает факториал введённого пользователем числа, а в операторе цикла используется инкрементирование счётчика цикла.
Ответ int main() { unsigned int n; unsigned long fact=1; // тип long для результата cout << "Vvedite celoe chislo: "; cin >> n; // ввод числа for(unsigned int j=1; j<=n; j++) // умножение 1 на fact = fact * j; // или fact *= j cout << "Faktorial chisla raven " << fact << endl; getch(); return 0; }

Цикл с предусловием (while)

Цикл while как правило применяется в том случае, если заранее неизвестно, сколько раз понадобится выполнить цикл. Внешне цикл while напоминает упрощённый вариант цикла for. Он содержит условие для продолжения цикла, но не содержит ни инициализирующих, ни модифицирующих выражений. Приведём синтаксис цикла while:

while (условие выполнения)

оператор; // тело цикла состоит из одного оператора, который можно заключить в { }

или

while (условие выполнения) {

оператор; // тело цикла состоит из нескольких операторов - блок

оператор;

оператор;

}

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

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

int main() {

int n=1; // n не должна быть равна 0 перед началом цикла

while(n != 0 ) // цикл, пока значение n не равно 0

cin >> n; // считывание n с клавиатуры

cout << endl;

getch(); return 0;

}

Эта программа будет работать до тех пор, пока пользователь не введёт 0. Необходимо помнить, что тело цикла должно содержать оператор, изменяющий значение переменной цикла, иначе цикл будет бесконечным. Здесь таким оператором является: cin >> n;.

Любой цикл while может быть приведён к эквивалентному ему циклу for и наоборот по следующей схеме:

  for (b1; b2; b3) { оператор; } b1; while (b2) { оператор; b3; }

Рассмотрим программу, продемонстрированную нами ранее и предназначенную для вывода квадратов чисел. Только теперь цикл организуем с помощью while.

int main() {

int j=0; // определение счетчика цикла

while (j<5) { // счетчик меняется от 0 до 4

cout << j * j << " "; // квадрат значения j выводится на экран (0 1 4 9 16)

j++; // до тех пор, пока выполняется условие j<5

}

cout << endl;

getch(); return 0;

}

Д/З Используя цикл while, напишите программу, которая подсчитывает факториал введённого пользователем числа.
Ответ int main() { unsigned int n, j=1; unsigned int fact=1; // для результата cout << "Vvedite celoe chislo: "; cin >> n; // ввод числа while(j<=n) { fact = fact * j; // или fact *= j j++; } cout << "Faktorial chisla raven " << fact << endl; getch(); return 0; }

Рассмотрим пример программы, которая генерирует последовательность чисел Фибоначчи. Первыми членами такой последовательности являются числа 0 1 1 2 3 5 8 13 21 34 55. Каждый новый член получается путём сложения двух предыдущих: 1+1=2, 1+2=3, 2+3=5 и т.д. Одним из наиболее интересных применений чисел Фибоначчи является их связь с так называемым "золотым сечением". Чем больше номера членов последовательности чисел Фибоначчи, тем ближе отношение последних двух членов к золотому сечению (0.61803).

#include <iostream>

#include <conio>

using namespace std;

int main() {

unsigned int pred = 1; // предпоследний член

unsigned int posl = 1, sum; // последний член и сумма

while(posl < 100) { // хотим, чтобы последовательность не была слишком большой

cout << posl << " "; // вывод последнего члена

sum = pred + posl; // сложение двух последних членов

pred = posl; // обновление предпоследнего

posl = sum; // и последнего членов

}// 1 2 3 5 8 13 21 34 55 89

cout << endl << "Zolotoe sechenie: "

<< (static_cast<float>(pred))/(static_cast<float>(posl)) << endl; // 0.618056

getch(); return 0;

}

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

Цикл с постусловием (do while)

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

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

do {

оператор; // тело цикла состоит из нескольких операторов - блок

оператор;

оператор;

} while (условие выполнения);

Сначала выполняются операторы, составляющие тело цикла, а затем вычисляется условное выражение. Если оно истинно, тело цикла выполняется ещё раз, если оно ложно, цикл завершится. Рассмотрим пример.

#include <iostream>

using namespace std;

int main() {

float a, b;

char answer;

do { // начало действия цикла do

cout << "\nVvedite dva chisla cherez probel: ";

cin >> a >> b;

cout << "Proizvedenie chisel: " << a*b << endl;

cout << "\nProdolgite?(y/n): ";

cin >> answer;

} while(answer != 'n'); // условие цикла

return 0;

}

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

Просмотров: 568


Вернуться в оглавление



Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.