Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб С++_2.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
83.46 Кб
Скачать
  1. Программирование циклических структур. Использование операторов - циклов

Для многократного повторения одних и тех же действий в программе используют другую разновидность операторов управления - циклические операторы.

Рассмотрим стандартную математическую задачу (табулирование функции) с применением итерационного циклического оператора for.

Написать программу печати таблицы значений функции

д ля аргумента, изменяющегося в заданных пределах с заданным шагом. Если t>100, должны выводится целые значения функции.

Исходными данными являются начальное значение аргумента Xn, конечное значение аргумента Xk, шаг изменения аргумента dX и параметр t. Все величины – вещественные. Программа должна выводить таблицу, состоящую из двух столбцов – значений аргумента и соответствующих им значений функции.

В словесной форме алгоритм можно сформулировать так:

  1. Ввести исходные данные.

  2. Проверить принадлежит ли начальное значение аргумента Xn и конечное значение аргумента Xk интервалу [0;10].

  3. Если Xn и Xk введены корректно, продолжить программу. В противном случае, оповестить пользователя и вновь ввести эти значения.

  4. Взять первое из значений аргумента.

  5. Вычислить значение функции y по соответствующей формуле.

  6. Если t>100, преобразовать значение y в целое.

  7. Вывести строку таблицы.

  8. Перейти к следующему значению аргумента.

  9. Если оно не превышает конечное значение, повторить шаги 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).