Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛР7-С++-05 апреля-2012.doc
Скачиваний:
19
Добавлен:
15.09.2019
Размер:
2.45 Mб
Скачать

2.5.2.2.Пример программы табулирования функции

Постановка задачи

Написать программу табулирования (печати таблицы значений) кусочно-заданной функции у = f(x) на интервале от хнач до хкон с шагом х. Таблицу снабдить заголовком и шапкой. Вид функции определяется формулой

Если а > 10, то значения функции должны выводиться в виде целых чисел. Значения параметра а, а также хнач, хкон и х вводятся с клавиатуры.

Описание алгоритма решения задачи в словесной форме

В словесной форме алгоритм решения задачи можно сформулировать сле­дующим образом:

1) Ввести с клавиатуры исходные данные: а, хнач, хкон и х.

2) Вывести заголовок и шапку таблицы.

3) Положить х = хнэч.

4) Вычислить значение функции у по вышеприведенной формуле.

5) Если а > 10, то привести значение функции у к целому типу.

6) Вывести на экран строку таблицы значений функции.

7) Увеличить значение х на величину х.

8) Если значение х не превышает хкон, то перейти к пункту 4, иначе за­кончить выполнение программы.

Так как пункты 4...7 алгоритма выполняются многократно, то для их вы­полнения необходимо организовать цикл. Напишем два варианта программы с использованием циклов while и for.

Использование цикла while

Ниже представлена программа табулирования функции с использованием цикла while:

#include <conio.h> // подключение библиотеки функций ввода-вывода

#include <iostream.h> // подключение библиотеки потокового ввода-вывода

#include <math.h> // подключение библиотеки математических функций

#include <iomanip.h> // подключение библиотеки средств манипулирования потоками

int main ()

// программа табулирования функции y=f(х)

// на интервале от хn ло xk с шагом dx

{

float а, // параметр

х, // аргумент функции у

хn, // начальное значение аргумента х

xk, // конечное значение аргумента х

dx, // шаг

у; // значение функции у

clrscr ();

// ввод а, хn, xk, dx

cout << "Bвeдите параметр а: "; cin >> a;

cout << "Bвeдите хn: " , cin >> xn;

cout << "Введите xk: ", cin >> xk;

cout << "Bвeдите шаг dx: ", cin >> dx;

// Вывод заголовка и шапки таблицы

cout << " Та6лица значений функции у = f (х) " << endl

<< " |-------------------------- -----------|" << endl

<< " | х | у |" << endl

<< " |-----------------|--------------------|" << endl;

// Табуляция функции у = f (x)

x=xn; // начальное значение аргумента х

{

// Вывод очередной строки таблицы

// Вывод аргумента x

cout << " I " << "x= "<< setw(9) << x << " I ";

// Вычисление значения функции y

(х<0) ? (у=а*а) : ((х<10) ? (у=а*х) : (у=5*а));

// Вывод значения функции y

if (а>10)

//Целочисленное значение у

cout << " " << setw(5) << "y= " << setw(10)<<(int)y << " I " << endl;

else

//Вещественное значение у

cout << " " << setw(5) << "y= " << setw(10)<<y << " I " << endl;

x+=dx; // приращение аргумента x

}

cout << " |-----------------|--------------------|" << endl;

cout << "Нажмите любую клавишу..." ;

getch();

return 0;

}

Поскольку формулы, определяющие функцию у, являются достаточно ко­роткими, то вычисление значения функции у целесообразно осуществлять не с помощью инструкции if … else, а с помощью условного выражения.

Вывод таблицы значений функции осуществляется операторами потокового ввода-вывода.

Использование цикла for

Ниже представлена программа табулирования функции с использованием цикла for:

#include <conio.h> // подключение библиотеки функций ввода-вывода

#include <iostream.h> // подключение библиотеки потокового ввода-вывода

#include <math.h> // подключение библиотеки математических функций

#include <iomanip.h> // подключение библиотеки средств манипулирования потоками

int main ()

// программа табулирования функции y=f(х)

// на интервале от хn ло xk с шагом dx

{

float а, // параметр

х, // аргумент функции у

хn, // начальное значение аргумента х

xk, // конечное значение аргумента х

dx, // шаг

у; // значение функции у

clrscr ();

// ввод а, хn, xk, dx

cout << "Bвeдите параметр а: "; cin >> a;

cout << "Bвeдите хn: " , cin >> xn;

cout << "Введите xk: ", cin >> xk;

cout << "Bвeдите шаг dx: ", cin >> dx;

// Вывод заголовка и шапки таблицы

cout << " Та6лица значений функции у = f (х) " << endl

<< " |-------------------------- -----------|" << endl

<< " | х | f (x) |" << endl

<< " |-----------------|--------------------|" << endl;

// Табуляция функции у = f (x)

cout.precision(3), cout.setf{ios::showpoint);

cout.setf(ios::left,ios::adjustfield);

cout.setf(ios::fixed,ios::floatfield);

for(x=xn;x<=xk;x+=dx)

{

// Вывод очередной строки таблицы

// Вывод аргумента x

cout << " I " << "x= "<< setw(9) << x << " I ";

// Вычисление значения функции y

(х<0) ? (у=а*а) : ((х<10) ? (у=а*х) : (у=5*а));

// Вывод значения функции y

cout << " " << setw(5) << "y= " << setw(10);

// Целочисленное или вещественное у

(а>10) ? cout << {int)y : cout <<y;

cout << " I " << endl;

}

//Целочисленное значение у

cout << " " << setw(5) << "y= " << setw(10)<<(int)y << " I " << endl;

else

//Вещественное значение у

cout << " " << setw(5) << "y= " << setw(10) <<y << " I " << endl;

x+=dx; // приращение аргумента x

}

cout << " |-----------------|--------------------|" << endl;

cout << "Нажмите любую клавишу..." ;

getch();

return 0;

}

В вышеприведенной программе ввод-вывод данных осуществляется с по­мощью объектов cin и cout. Последовательность инструкций cout.precision(3), cout.setf(ios::showpoint); cout.setf(ios::left,ios::adjustfield); cout.setf(ios::fixed,ios::floatfield);

задает формат для вывода значения аргумента х и значения функции у в стро­ке таблицы. Для установки ширины поля используется манипулятор потока setw. Функция-элемент объекта cout precision позволяет задать точность печатаемого вещественного числа (т.е. число разрядов справа от десятичной точки). Функция-элемент setf используется для управления флагами состоя­ния формата.

Флаг ios: : showpoint устанавливается для вывода чисел с обязатель­ной печатью десятичной точки и нулевых младших разрядов (нулей в конце числа). Так. например, значение 79.0 без установки ios : : showpoint будет напечатано как 79, а с установкой ios : : showpoint — как 79 . 00000 (количество нулей определяется заданной точностью).

Флаги ios : : left и ios : : right содержатся в статическом элементе данных ios : : adjustf ield и позволяют выравнивать печать соответственно по левой или правой границам поля.

Флаги ios : : fixed и ios: : scientific, управляющие форматы вы­вода вещественных чисел.

cout.setf{ios::scientific, ios::floatfield);

устанавливает экспоненциальный формат вывода вещественных чисел (формат с плавающей точкой). Для отображения чисел в формате с фиксированной точ­кой следует записать

cout.setf{ios::fixed, ios::floatfield);

Здесь функция-элемент setf объекта cout используется для управления установкой флагов формата вывода вещественных чисел ios: : scientific или ios: : fixed, которые содержатся в статическом элементе данных ios : : f loatf ield.