- •Лабораторная работа 2 Циклы
- •Организация циклов с параметром Цикл while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Определение наибольшей степени целого числа 100, которую можно вычислить, пользуясь типом long
- •Подсчет количества цифр в числе n
- •Вычисление значений функции на отрезке
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Цикл do-while в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Калькулятор
- •Проверка входных данных
- •Вычисление значений функции на отрезке
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Цикл for в циклах с параметром Вычисление суммы чисел натурального ряда от 1 до 10
- •Вычисление на отрезке значений функции с условием и оформление результатов
- •Организация итерационных циклов Цикл while в итерационных циклах Вычисление числа π
- •Вложенные циклы
- •Вычисление значения многочлена на отрезке (схема Горнера)
- •Разложение функции на отрезке в ряд Тейлора
- •Организация работы с последовательностью чисел, вводимых с клавиатуры
- •Корректная организация циклов
- •Оптимизация программы
- •Алгоритм типа «развилка, вложенная в цикл с параметром»
- •Алгоритмы итерационных циклов Пример 1. Нахождение корня нелинейного уравнения методом итераций
- •Пример 2. Нахождение корня нелинейного уравнения методом половинного деления
- •Пример 3. Вычисление суммы членов бесконечного ряда.
- •Алгоритмы с вложенными циклами
- •Алгоритм вложенного цикла с развилкой
Корректная организация циклов
-
Для корректного входа в цикл необходимо до начала цикла сделать начальные установки переменных, управляющих условием выполнения цикла. В цикле for такая установка может быть сделана в заголовке цикла.
-
Необходимо позаботиться об инициализации переменной, в которой накапливается результат.
-
Для выполнения в теле цикла нескольких операторов необходимо использовать составной оператор.
-
В теле цикла должны присутствовать операторы, изменяющие значение переменной цикла так, чтобы цикл через некоторое число итераций завершился. В цикле for изменение значения параметра цикла выполняется в заголовке цикла.
-
Условие завершения цикла должно состоять из корректных выражений и значений, определенных еще до первого выполнения тела цикла.
-
Оператор break обеспечивает досрочное завершение выполнения действий в цикле. Оператор сontinue обеспечивает переход на следующую итерацию цикла, причем операторы в теле цикла, записанные после сontinue, игнорируются. Оператор return завершает выполнение функции. Нормальный ход выполнения действий в цикле может быть нарушен и оператором goto.
Оптимизация программы
Оптимизация – преобразование исходного текста программы, при котором:
-
результат выполнения остается неизменным,
-
улучшаются некоторые характеристики программы (время выполнения, затраты оперативной памяти, размер исходного кода).
Оптимальность программы в значительной степени определяется ее алгоритмом. При оптимизации программы необходимо выявить ее фрагменты, являющиеся «основными потребителями» ресурса, а затем перепрограммировать их: например, схема Горнера преобразовывает алгоритм с целью сокращения количества выполняемых операций.
Большинство компиляторов сегодня выполняют сами некоторые виды оптимизации программы. И тем не мене, отметим некоторые приемы:
-
Выделять общие подвыражения и вычислять их отдельно.
-
При вычислении сумм с использованием циклов, общий множитель (при его наличии) необходимо выносить из цикла: это уменьшает количество умножений и увеличивает точность вычислений:
-
summa=0;
for (j=1; j<=1000; j++) summa += a*x[i];
summa=0; for (j=1; j<=1000; j++) summa += x[i];
summa *= a;
Это лучше!!!!! Объяснить почему
-
При программировании вложенных циклов следует иметь в виду, что затраты процессорного времени на выполнение таких конструкций могут зависеть от порядка следования вложенных циклов. По возможности, следует делать цикл с наибольшим числом повторений самым внутренним, а цикл с наименьшим числом повторений – самым внешним:
-
for (j=1; j<=100000; j++) for (k=1; k<=1000; k++) a=1;
for (j=1; j<=1000; j++) for (k=1; k<=100000; k++) a=1;
Это лучше!!!!! Объяснить почему
-
Ветвящийся алгоритм описать как совокупность непересекающихся ветвей: описывать каждую из ветвей максимально структурировано и компактно, в частности, оформляя последовательности операторов, выполняющих некоторые алгоритмы, в виде составных операторов или в виде функций; завершать каждую из ветвей подходящим оператором завершения (break, continue, return, exit()).
Рассмотрим нахождение корней квадратного уравнения, как пример оптимизации алгоритма с ветвлением:
aх2 + bx + c = 0 (a, b, c – вещественные)
if (!a && !b && !c) выведем на экран: “Корней бесконечно много”;
if (!a && !b && c) выведем на экран: “Корней нет”;
if (!a && b) выведем на экран: “Один вещественный корень”;
d = b*b – 4*a*c; вычислим дискриминант
if (d >= 0) выведем на экран: “Вещественные корни:”;
и найдем корни:
d1= sqrt (d);
х1= (-b + d1) /(2 *a);
х2= (-b - d1) /(2 *a);
if (d < 0) выведем на экран: “Комплексные корни:”;
и вычислим их:
dk = -b / (2 * a); //действ.часть mk = sqrt (-d) / (2 * a); //мним. часть
Рассмотрим структуру программы:
//каждая ветвь завершается оператором return
double a, b, c, d, d1, x1, x2, dk, mk; ……….
/*_1_*/
if (!a && !b && !c) {
{
cout << “Корней бесконечно много”; _getch(); return 1; }
/*_2_*/
if (!a && !b && c)
{ ….
return 2;
}
/*_3_*/
if (!a && b)
{ ….
return 3;
}
d = b*b – 4*a*c; //вычисление дискриминанта
/*_4_*/
if (d >= 0) // действительные корни
{ ….
return 4 ;
}
/*_5_*/
//комплексные корни:*/ d = -b / (2 * a); //действ.часть m = sqrt (-d) / (2 * a); //мним. часть
Без оператора return последовательность прохождения операторов в каждой ветви будет: _1_ à _2_ à _3_ à _4_ à _5_
Примеры граф-схем алгоритмов
Циклические алгоритмы
Алгоритмы циклов с параметром
Пример 1. Вычисление произведения целых чисел
Вычислить и вывести на печать произведение целых чисел x и y в предположении, что операцией умножения пользоваться нельзя: в данном случае придется у раз выполнить операцию сложения (накапливать в переменной z у раз слагаемое х).
Пример 2. Нахождение суммы 100 чисел
Вариант а Вариант b
да
нет
да
нет
да