
Программирование циклических структур. Использование операторов - циклов
Для многократного повторения одних и тех же действий в программе используют другую разновидность операторов управления - циклические операторы.
Рассмотрим стандартную математическую задачу (табулирование функции) с применением итерационного циклического оператора for.
Написать программу печати таблицы значений функции
д
ля
аргумента, изменяющегося в заданных
пределах с заданным шагом. Если t>100,
должны выводится целые значения функции.
Исходными данными являются начальное значение аргумента Xn, конечное значение аргумента Xk, шаг изменения аргумента dX и параметр t. Все величины – вещественные. Программа должна выводить таблицу, состоящую из двух столбцов – значений аргумента и соответствующих им значений функции.
В словесной форме алгоритм можно сформулировать так:
Ввести исходные данные.
Проверить принадлежит ли начальное значение аргумента Xn и конечное значение аргумента Xk интервалу [0;10].
Если Xn и Xk введены корректно, продолжить программу. В противном случае, оповестить пользователя и вновь ввести эти значения.
Взять первое из значений аргумента.
Вычислить значение функции y по соответствующей формуле.
Если t>100, преобразовать значение y в целое.
Вывести строку таблицы.
Перейти к следующему значению аргумента.
Если оно не превышает конечное значение, повторить шаги 4-7, иначе закончить выполнение.
Проверка исходных данных – необходимая процедура практически в любых «хорошо написанных» программах. Это следствие того, что чаще всего корректность работы алгоритма зависит именно от исходных данных. Для организации их проверки будет использоваться цикл – цикл с предусловием while.
В каждый момент времени требуется хранить одно значение функции, поэтому для него достаточно завести одну переменную вещественного типа. Шаги 4-7 повторяются многократно, поэтому для их выполнения надо организовать цикл. Выбор оператора цикла – оператора for-определяется тем, что пределы изменения аргумента, как и шаг, заданы!
Программа для решения задачи выглядит следующим образом:
#include <stdio.h>
#include <iostream.h>
#include <math.h>
int main()
{
double Xn, Xk, dX, t, y;
printf("Enter Xn, Xk, dX, t \n");
scanf("%lf%lf%lf%lf",&Xn, &Xk, &dX, &t);
// Проверка введённых данных
while (Xn<0 || Xk>10)
{
printf("Enter Xn>=0 and Xk<=10 \n");
scanf("%lf%lf",&Xn, &Xk);
}
printf(" --------------------------------------------- \n");
printf(" | X | Y | \n");
printf(" --------------------------------------------- \n");
for ( double x = Xn; x<= Xk; x += dX)
{
y = t*x;
if( t > 100 )
printf(" | x = %5.2lf | y = %d | \n", x, int(y));
else
printf(" | x = %5.2lf | y = %4.2lf | \n", x, y);
}
printf(" --------------------------------------------- \n\n");
return 1;
}
Обратите внимание, что в приведённом тексте программы были использованы функции ввода и вывода (scanf и printf) в стиле языка С. Это потребовалось не только для ознакомительных целей. Известно, что ввод/вывод в стиле С удобнее использовать при форматированном вводе/выводе в программах, не использующих объектно-ориентированную технику. А в данном случае необходим форматированный вывод.
Форматирование в функции printf осуществляется с помощью модификаторов формата. [Модификаторы – это одно или два числа, первое из которых задаёт минимальное количество позиций, отводимых под число, а второе – сколько из этих позиций отводится под дробную часть числа или точность.] Т.к. значение х не может быть больше 10, а значение dX вводится с точностью порядка 10 -2 (это предположение!), то под выводимое значение x требуется не более 5 позиций. Увеличение точности вывода значения x (фактически уменьшение шага dX) приведёт к увеличению количества позиций, указываемых в модификаторе. Но изменения в программном коде выполнять не обязательно, т.к. если указанного количества позиций для размещения значения недостаточно, то автоматически выделяется большее количество позиций.
- Разработать проект Практика_cicle типа Console Application. Содержимым основного модуля (*.срр) должна являться приведённая выше тестовая программа. Произведя компиляцию и компоновку проекта, получить работающее приложение. Выполнить тестирование с различными наборами исходных данных. Убедиться в неэффективности использования “вещественного” цикла for (отсутствие расчёта значения y при x=Xk в некоторых случаях) - (количество баллов за данный вид работ = 2).
- Модифицировать в основном модуле проекта Практика_cicle цикл for. В качестве итерационной циклической переменной использовать беззнаковую целую переменную i. Количество итераций цикла определить по формуле:
Сохранить проект с именем Практика_cicle_i. Выполнить тестирование. Оформить результаты - (количество баллов за данный вид работ = 4).