
- •Конспект лекций по дисциплине «алгоритмизация и программирование»
- •Лекция № 1. Основные понятия
- •Использование ключевого слова using
- •2: Int main()
- •4: Using std::cout; // Вместо этих двух строк можно записать
- •5: Using std::endl; /* одну: using namespace std;*/
- •20: Return 0;
- •Комментарии
- •Функции
- •Переменные
- •Лекция № 3. Операторы
- •Математические операторы
- •Математические функции
- •Логические операторы
- •Операторы отношения
- •Операторы переходов по условию
- •Лекция № 4. Циклы
- •Оператор goto
- •Оператор цикла while
- •Операторы break и continue
- •Оператор цикла do..While
- •Оператор цикла for
- •Int main ()
- •Лекция № 5. Массивы
- •Одномерные массивы
- •Int main()
- •Многомерные массивы
- •Массивы символов (строки)
- •Int main()
- •Лекция № 6. Некоторые простые алгоритмы
- •Поиск максимального (или минимального) числа из выборки чисел
- •Int main()
- •Пузырьковая сортировка (bubble sort)
- •Void exch(double &a, double &b)
- •Лекция № 7. Численное решение уравнений
- •Теоретические основы
- •Метод простого перебора
- •Int RootSearch (double p[], int n, double a, double b, double dx);
- •Int main ()
- •Int RootSearch (double p[], int n, double a, double b, double dx)
- •Метод половинного деления
- •Метод Ньютона-Рафсона
- •Лекция № 8. Основы объектно-ориентированного программирования
- •Введение
- •Void Meow();
- •Закрытые и открытые члены класса
- •Void Meow();
- •Int main()
- •Void Meow();
- •Лекция № 9. Конструкторы и деструкторы
- •Определение
- •Int Weight;
- •Файлы заголовков
- •Встраиваемые функции
- •Лекция № 10. Классы, содержащие другие классы как данные-члены
- •Сложные классы
- •Структуры
Лекция № 4. Циклы
-
Оператор goto
Для решения ряда задач требуется многократное повторение одних и тех же действий. На практике это реализуется либо с помощью рекурсии, либо с помощью итерации. Итерация – это повторение одних и тех же действий определенное количество раз. Основным методом итерации является цикл. На заре компьютерной эры программы были простыми, жесткими и короткими. Циклы состояли из метки, нескольких команд и оператора безусловного перехода.
В С++ метка представляет собой имя, за которым следует двоеточие (:). Метка размещается слева от того оператора С++, к которому будет выполнен переход по оператору goto с соответствующим именем метки.
Листинг 4.1. Цикл на основе оператора goto
1: #include <iostream>
2: int main()
3: {
4: using namespace std;
5: int counter=0; // инициализировать счетчик
6: loop: //метка – начало цикла
7: counter ++; //инкрементируем счетчик
8: cout << “counter: “ << counter << “\n”;
9: if (counter < 5) //проверка значения
10: goto loop; //перейти к началу
11:
12: cout << “Complete. Counter: ” << counter << “.\n”;
13: return 0;
14: }
РЕЗУЛЬТАТ
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5
Complete. Counter: 5.
Как правило, программисты избегают оператора goto, и на то есть причины. Оператор goto позволяет перейти в любую точку программы – как вперед, так и назад. Беспорядочное использование операторов goto приводит к сознанию запутанного, трудно читаемого кода, прозванного «спагетти».
Чтобы избежать оператора goto, используют более сложные, управляемые операторы цикла: for, while, do..while.
-
Оператор цикла while
Оператор while создает в программе цикл, который будет повторять последовательность операторов до тех пор, пока условие в начале цикла остается истинным.
Рис. 4.1. Обозначение цикла while на блок-схеме алгоритма программы
Листинг 4.2. Цикл на основе оператора while
1: #include <iostream>
2: int main()
3: {
4: using namespace std;
5: int counter=0; // присвоить начальное значение
6: while (counter < 5) //проверка истинности условия
7: {
8: counter ++; //инкрементируем счетчик
9: cout << “counter: “ << counter << “\n”;
10: }
11:
12: cout << “Complete. Counter: ” << counter << “.\n”;
13: return 0;
14: }
РЕЗУЛЬТАТ
counter: 1
counter: 2
counter: 3
counter: 4
counter: 5
Complete. Counter: 5.
Следует заметить, что заключать в фигурные скобки выполняемый в цикле блок кода имеет смысл всегда, даже когда это только одна строка кода. Такая привычка позволит избежать весьма распространенной ошибки, когда в конце оператора цикла оказывается символ точки с запятой, приводящий к возникновению бесконечного цикла.
-
Операторы break и continue
Иногда необходимо перейти к началу цикла еще до завершения выполнения всех операторов тела цикла. Для этого используется оператор continue. Однако в ряде случаев требуется выйти из цикла еще до проверки условия продолжения цикла. Для этого используется оператор break.
Операторы continue и break следует использовать осторожно. Это наиболее опасные команды после оператора goto. Программы, которые внезапно меняют свое поведение, тяжело понять, а свободное применение операторов continue и break способно запутать даже маленький цикл while и сделать его непонятным. Необходимость в операторе безусловного выхода из цикла зачастую свидетельствует о плохо продуманной логике условия выхода из цикла. Как правило, внутри тела цикла можно использовать оператор if, чтобы пропустить несколько строк кода, а не прибегать к оператору break.