Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
ЛАБОРАТОРНА РОБОТА №11-12
СКЛАДАННЯ ТА ВІДЛАГОДЖЕННЯ ПРОГРАМ З ВИКОРИСТАННЯМ
ОПЕРАТОРІВ FOR ТА SWITCH, З ВИВЕДЕННЯМ ТАБЛИЦЬ
Мета: придбати практичні навички з складання та відлагодження програм циклічних алгоритмів з використанням операторів switch та for.
Теоретичні відомості:
Операторы цикла
Операторы цикла используются для организации многократно повторяющихся вычислений. Любой цикл состоит из тела цикла, то есть тех операторов, которые выполняются несколько раз, начальных установок, модификации параметра цикла и проверки условия продолжения выполнения цикла.
Один проход цикла называется итерацией. Проверка условия выполняется на каждой итерации либо до тела цикла (тогда говорят о цикле с предусловием), либо после тела цикла (цикл с постусловием). Разница между ними состоит в том, что тело цикла с постусловием всегда выполняется хотя бы один раз, после чего проверяется, надо ли его выполнять еще раз. Проверка необходимости выполнения цикла с предусловием делается до тела цикла, поэтому возможно, что он не выполнится ни разу.
а
Стру
схемы операторов цикла: а цикл с предусловием; б цикл с постусловием
Переменные, изменяющиеся в теле цикла и используемые при проверке условия продолжения, называются параметрами цикла. Целочисленные параметры цикла, изменяющиеся с постоянным шагом на каждой итерации, называются счетчиками цикла.
Начальные установки могут явно не присутствовать в программе, их смысл состоит в том, чтобы до входа в цикл задать значения переменным, которые в нем используются.
Цикл завершается, если условие его продолжения не выполняется. Возможно принудительное завершение как текущей итерации, так и цикла в целом. Для этого служат операторы break, continue, return и goto (см. раздел «Операторы передачи управления»). Передавать управление извне внутрь цикла не рекомендуется.
Для удобства, а не по необходимости, в C++ есть три разных оператора цикла -
while, do while и for.
Цикл с параметром (for)
Цикл с параметром имеет следующий формат:
for (инициализация; выражение; модификации) оператор;
Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой (операцией «последовательное выполнение»), например, так:
for (int i = 0, j = 2; ...
int k, m;
for (k = 1, m = 0; ...
Областью действия переменных, объявленных в части инициализации цикла, является цикл1. Инициализация выполняется один раз в начале исполнения цикла.
Выражение определяет условие выполнения цикла: если его результат, приведенный к типу bool , равен true, цикл выполняется. Цикл с параметром реализован как цикл с предусловием.
Модификации выполняются после каждой итерации цикла и служат обычно для изменения параметров цикла. В части модификаций можно записать несколько операторов через запятую. Простой или составной оператор представляет собой тело цикла. Любая из частей оператора for может быть опущена (но точки с запятой надо оставить на своих местах!).
Пример (оператор, вычисляющий сумму чисел от 1 до 100):
for (Int i = 1, s = 0; 1<=100; i++) s += i;
Пример (программа печатает таблицу значений функции у=х2+1 во введенном диапазоне):
#Include <stdio.h>
Int main(){
float Xn, Xk, Dx, X;
printf (“Введите диапазон и шаг изменения аргумента: ");
scanf (“%f%f%f”, &Xn, &Xk, &Dx );
printf (“| X | Y |\n");
for (X = Xn; X<=Xk; X+=Dx)
printf (" | %5.2f | %5.2f |\n”, X*X + 1);
return 0;
}
Пример (программа находит все делители целого положительного числа):
#Include <iostream.h> Int main(){
Int num, half, div;
cout << “\n Введите число : "; cin >> num;
for (half = num / 2, div = 2; div <= half; div++)
if (!(num %div))cout << div <<"\n";
return 0;
}
Два последних примера выполняют те же действия, что и примеры для цикла с предусловием, но записаны более компактно и наглядно: все действия, связанные с управлением циклом, локализованы в его заголовке.
Любой цикл while может быть приведен к эквивалентному ему циклу for и наоборот по следующей схеме:
for (b1: b2; bЗ) оператор b1;
while (b2){ оператор; bЗ;}
Часто встречающиеся ошибки при программировании циклов использование в теле цикла неинициализированных переменных и неверная запись условия выхода из цикла.
Чтобы избежать ошибок, рекомендуется:
Операторы цикла взаимозаменяемы, но можно привести некоторые рекомендации по выбору наилучшего в каждом конкретном случае.
Оператор do while обычно используют, когда цикл требуется обязательно выполнить хотя бы раз (например, если в цикле производится ввод данных).
Оператором whiIe удобнее пользоваться в случаях, когда число итераций заранее не известно, очевидных параметров цикла нет или модификацию параметров удобнее записывать не в конце тела цикла.
Оператор for предпочтительнее в большинстве остальных случаев (однозначно для организации циклов со счетчиками).
Операторы передачи управления
В C++ есть четыре оператора, изменяющих естественный порядок выполнения вычислений:
Оператор goto
Оператор безусловного перехода goto имеет формат:
goto метка; В теле той же функции должна присутствовать ровно одна конструкция вида:
метка: оператор;
Оператор goto передает управление на помеченный оператор. Метка это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.
Применение goto нарушает принципы структурного и модульного программирования, по которым все блоки, из которых состоит программа, должны иметь только один вход и один выход.
В любом случае не следует передавать управление внутрь операторов if, switch и циклов. Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int k; ...
goto metka; ...
{int a = 3, b = 4;
k = a + b;
metka: int m = k + 1; ...
}
После выполнения этого фрагмента программы значение переменной m не определено.
Оператор break
Оператор break используется внутри операторов цикла или switch для обеспечения перехода в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.
Пример. Программа вычисляет значение гиперболического синуса вещественного аргумента х с заданной точностью eps с помощью разложения в бесконечный ряд.
sh х = 1 + х3/3! + х5/5! + х7/7! + ...
Вычисление заканчивается, когда абсолютная величина очередного члена ряда, прибавляемого к сумме, станет меньше заданной точности.
#include<iostream.h>
#include<math.h>
int main () {
const int MaxIter = 500; //ограничитель количества итераций
double x, eps;
cout<<”\n Введите аргумент и точность: ”;
cin>> x >> eps;
bool flag = true; //признак успешного вычисления
double y = x, ch = x; //сумма и первый член ряда
for (int n = 0; fabs(ch) > eps; n++) {
ch *= x * x / (2 * n + 2)/(2 * n + 3); //очередной член ряда
y += ch;
if (n>MaxIter) {
cout<<”/n Ряд расходится !”;
flag = false; break; }
}
if (flag) cout<<”/n Значение функции: ”<<y;
return 0;
}
Оператор перехода к следующей итерации цикла continue пропускает все операторы, оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор return
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора:
return [ выражение ];
Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.
Завдання. Обчислити та вивести на екран у видгляді таблиці значення функції F на інтервалі від початкового значення змінної, від якої залежить розгалуження, до кінцевого її значення з кроком її зміни. Початкове значення, кінцеве значення, крок та усі інші змінні ввести з клавіатури на початку програми 1 раз. Варіанти завдань дивись у лабораторній роботі №8-9.