Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
19
Добавлен:
15.04.2015
Размер:
181.4 Кб
Скачать

САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ МОРСКОГО И РЕЧНОГО ФЛОТА ИМ. АДМИРАЛА МАКАРОВА

КАФЕДРА ВЫЧИСЛИТЕЛЬНЫХ СИСТЕМ И ИНФОРМАТИКИ

Лабораторная работа № 2.4.

Разветвляющиеся программы. Циклы.

Таблица значений функции

Вариант № 100

Работу выполнила

студентка гр. ИС-11

Примерная Елена

Работу принял

доцент кафедры ВСиИ

Неклюдова С.А.

Санкт-Петербург

2012

  1. Условие задачи

Вычислить и вывести на экран в виде таблицы значения функции Fна интервале от Хнач.. доХкон. с шагом dX.

где a, b, c– действительные числа.

Функция Fдолжна принимать действительное значение, если выражение НЕ(Ац ИЛИ Вц И НЕ (Ац ИЛИ Сц) не равно 0 и целое значение в противном случае.

Через Ац, Вц и Сц обозначены целые части значений a, b, c, операции НЕ, И и ИЛИ – поразрядные. Значения a, b, c, Хнач., Хкон., dX ввести с клавиатуры.

  1. Таблица имен

Имя объекта в задаче

Имя объекта в программе

Тип объекта

Содержательный смысл

a

a

вещественное число

исходное данное

b

b

вещественное число

исходное данное

c

c

вещественное число

исходное данное

Хнач.

Xn

вещественное число

исходное данное

Хкон/.

Xk

вещественное число

исходное данное

dX

dX

вещественное число

исходное данное

x

x

вещественное число

расчетная переменная

F

F

вещественное число

расчетная переменная

whole

логическая переменная

при whole = True выводится целое число, при whole = False - вещественное

rupture

логическая переменная

rupture=True означает разрыв функции

  1. Блок-схема алгоритма

начало

ВводXn, Xk, dX,a, b, c

Вывод “шапки” таблицы

1

1

2

3

5

4

False

True

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

True

True

False

True

False

False

False

True

False

True

False

True

False

True

  1. Трассировочная таблица

№ шага

№ блока на блок-схеме

Результаты вычислений

1

ВводXn=1, Xk=1.5, dX=0.5, a=2, b=1, c=2

2

Вывод “шапки” таблицы

3

Ац=210=00102

Ац=210=00102

Bц=110=00012

Cц=210=11102

Ац ИЛИ Вц=00112

Ац ИЛИ Сц=11102

НЕ(Ац ИЛИ Вц)=11002

НЕ (Ац ИЛИ Сц)=00012

НЕ(Ац ИЛИ Вц) И НЕ (Ац ИЛИ Сц)=11002 И 00012=00002=0

5

whole = true

6

x=Xn=1

7

rupture=false

8

(x<0) (b≠0)

(1<0) (1≠0) True

9

cxa=0

(2)∙(1)2=0

22=0 True

10

rupture=true

19

rupture True

20

Выводстрокиx, “Разрыв” (1, Разрыв)

6

x=x+dX=1.0+0.5=0.5

7

rupture=false

8

(x<0)  ( b≠0)

(0.5<0) (1≠0) True

9

cxa=0

(2)∙(0.5)2=0

12=0 False

11

19

rupture False

21

whole True

22

Вывод строки x, Fцелое (0.5 1)

6

x=x+dX=0.5+0.5=0

7

rupture=false

8

(x<0)  ( b≠0)

(0<0) (1≠0) False

12

(x>0) (b=0)

(0>0) (1=0) False

16

(c=0)  (x=0)

(2=0)  (0=0) True

17

rupture=true

19

rupture True

20

Выводстрокиx, “Разрыв” (0, Разрыв)

6

x=x+dX=0+0.5=0.5

7

rupture=false

8

(x<0)  ( b≠0)

(0.5<0) (1≠0) False

12

(x>0) (b=0)

(0.5>0) (1=0) False

16

(c=0)  (x=0)

(2=0)  (0.5=0) False

18

19

rupture False

21

whole True

22

Вывод строки x, Fцелое (0.5 2)

6

x=x+dX=0.5+0.5=1

7

rupture=false

8

(x<0)  ( b≠0)

(1<0) (1≠0) False

12

(x>0) ( b=0)

  1. (1=0) False

16

(c=0)  (x=0)

(2=0)  (1=0) False

18

19

rupture False

21

whole True

22

Вывод строки x, Fцелое (1 1)

6

x=x+dX=1+0.5=1.5

7

rupture=false

8

(x<0)  ( b≠0)

(1.5<0)  (1≠0) False

12

(x>0) (b=0)

(0>0) (1=0) False

16

(c=0)  (x=0)

(2=0)  (1.5=0) False

18

19

rupture False

21

whole True

22

Вывод строки x, Fцелое (1.5 1)

6

x=x+dX=1.5+0.5=2 x>Xk (2>1.5)

24

Вывод “подвала” таблицы

25

Конец

  1. Код программы

#include<iostream>

#include<iomanip>

using namespace std;

int main()

{

setlocale(0,"Rus");

double Xn, Xk, dX, a, b, c, F;

bool whole;

// Ввод исходных данных

cout <<"Введите Xn="; cin >> Xn;

cout <<"Введите Xk="; cin >> Xk;

cout <<"Введите dX="; cin >> dX;

cout <<"Введите a="; cin >> a;

cout <<"Введите b="; cin >> b;

cout <<"Введите c="; cin >> c;

// Вывод “шапки” таблицы

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

cout<<"| X | F |"<< endl;;

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

// Выполнение побитовой операции НЕ(Ац ИЛИ Вц) И НЕ(Ац ИЛИ Сц) ≠ 0

whole = ((~(static_cast<int>(a) | static_cast<int>(b)) & ~(static_cast<int>(a) | static_cast<int>(c))) != 0) ? false: true;

// Вывод строк таблицы

for (double x = Xn; x <= Xk; x += dX)

{

bool rupture = false;

if ((x < 0) &&( b != 0))

if (c * x - a == 0)

rupture = true;

else

F = -(2 * x - c) / (c * x - a);

else

if ((x > 0) && (b == 0 ))

if (x - c == 0)

rupture = true;

else

F = (x - a)/(x - c);

else

if ((c == 0)||(x == 0))

rupture = true;

else

F = -(x / c) - c / 2 / x;

cout << fixed;

if (rupture)

cout <<"|"<< setw(6) << setprecision(1) << x << setw(2)<< "|" <<setw(9) << "Разрыв" << setw(2) << "|" << endl;

else

if (whole)

cout << "|" << setw(6) << setprecision(1) << x << setw(2) << "|" << setw(9) << static_cast<int>(F) << setw(2) << "|" << endl;

else

cout << "|" << setw(6) << setprecision(1) << x << setw(2) << "|" << setw(9) << setprecision(4) << F << setw(2) << "|" << endl;

}

// Вывод “подвала” таблицы

Cout << "--------------------" << endl;

return 0;

}

  1. Тестирование программы

Xn=1, Xk=1.5, dX=0.5, a=2, b=1, c=2

Ац=210=00102

Ац=210=00102

Bц=110=00012

Cц=210=11102

Ац ИЛИ Вц=00112

Ац ИЛИ Сц=11102

НЕ(Ац ИЛИ Вц)=11002

НЕ (Ац ИЛИ Сц)=00012

НЕ(Ац ИЛИ Вц) И НЕ (Ац ИЛИ Сц)=11002 И 00012=00002

 выводить Fцелое

x

F

Результаты расчета

1.0

Разрыв

Этот вариант проверен трассировкой, результаты совпадают.

0.5

1

0.0

Разрыв

0.5

2

1.0

1

1.5

1

Xn=1, Xk=2.5, dX=0.5, a=2, b=0, c=1

Ац=210=00102

Ац=210=00102

Bц=010=00002

Cц=110=00012

Ац ИЛИ Вц=00102

Ац ИЛИ Сц=00112

НЕ(Ац ИЛИ Вц)=11012

НЕ (Ац ИЛИ Сц)=11002

НЕ(Ац ИЛИ Вц) И НЕ (Ац ИЛИ Сц)=11012 И 11002=11002

 выводить Fвеществ.

x

F

Результаты расчета

1.0

1.5000

0.5

1.5000

0.0

Разрыв

Недопустимая операция – деление на 0

0.5

3.0000

1.0

Разрыв

Недопустимая операция – деление на 0

1.5

1.0000

2.0

0.0000

2.5

0.3333

  1. Результаты и выводы

Поскольку результаты трассировки и тестирования программы совпали с результатами выполнения программы на компьютере, алгоритм разработан верно.

Соседние файлы в папке Лб инф передел