Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodicheskie_ukazania_po_C.pdf
Скачиваний:
37
Добавлен:
07.03.2015
Размер:
2.9 Mб
Скачать

Рис. 35. Фрагмент файла исходного текста, содержащий файл-заголовок пользовательской функции

Вызов пользовательской функции в функции main выполняется в этом случае так же, как и в предыдущей лабораторной работе.

8.1.4. Вывод на дисплей результата вычисления

Данная операция уже была рассмотрена в предыдущей лабораторной работе.

8.1.5. Ввод с клавиатуры произвольного символа и завершение работы приложения

Данные действия рассматривались в предыдущих лабораторных работах.

9. Лабораторная работа №7. Использование массивов, структур и указателей

Целью данной лабораторной работы является создание проекта, содержащего функцию линеаризации нелинейной таблично заданной функции путем преобразования ее в последовательность линейных отрезков.

Консольное приложение, разрабатываемое в данной лабораторной работе, должно имитировать преобразование сигнала нелинейного датчика (например - датчика температуры). Поскольку АЦП в данной системе реально отсутствует, пользователь должен имитировать его работу, вводя сигнал АЦП с клавиатуры.

Пример функции зависимости измеряемого физического параметра от сигнала АЦП представлен на рис. 36. Вся функция разбита на линейные отрезки. График на рис. 36 соответствует табличному представлению функции, приведенному в таблице 10.

Работа должна выполняться в соответствии с Вашим вариантом. Описания вариантов выполнения работы содержит таблица 9.

При выполнении лабораторной работы необходимо сделать следующее:

1.Создать Ваш проект консольного приложения, разместив его в папке CLab7.

2.Создать и разместить в папке Вашего проекта консольного приложения файл-заголовок, имеющий имя LinearFunc.h. Включить данный файл в файл main.cpp вашего проекта.

3.Создать в файле заголовка LinearFunc.h пользовательский тип данных - структуру, содержащую следующие поля:

Xаргумент линеаризуемой функции для заданной точки;

60

Yзначение линеаризуемой функции для заданной точки.

Типы полей - float или int - выбираются в соответствии с Вашим вариантом (столбец "Тип данных" таблицы 9).

Присвойте созданному Вами типу данных - структуре имя LinearArrayType.

4. Создать, разместить в папке Вашего проекта и подключить к Вашему проекту файл исходного текста с именем LinearFunc.cpp. Данный файл будет содержать функции, выполняющие вычисление искомого значения физического параметра по входному сигналу. Поместить в данном файле ссылку на файл-заголовок LinearFunc.h, созданный ранее.

5. Создать в файле LinearFunc.cpp функцию, выполняющую вычисление значения функции на одном линейном отрезке. Функция должна иметь имя LinearFuncCalc.

Функция должна возвращать значение функции для заданного значения аргумента. Тип возвращаемого значения определяется в соответствии с Вашим вариантом (столбец "Тип данных" таблицы 9).

Функция должна иметь следующие параметры:

Xаргумент функции,для которого вычисляется значение функции. Тип данного параметра определяется в соответствии с Вашим вариантом (столбец "Тип данных" таблицы 9);

Point1

указатель на структуру типа LinearArrayType с модификатором const (см.

 

пункт 3. задания), поля которого содержат аргумент и значение начальной точки

 

линейного отрезка функции;

Point2

указатель на структуру типа LinearArrayType с модификатором const (см.

 

пункт 3. задания), поля которого содержат аргумент и значение конечной точки

 

линейного отрезка функции.

Используя аргументы и значения функции в начальной и конечной точках отрезка, функция должна вычислить коэффициент наклона и смещение для данного линейного отрезка, и далее с их помощью определить значение функции для аргумента X.

6. Создать в файле LinearFunc.cpp функцию, определяющую линейный отрезок, на котором находится аргумент функции, и вызывает функцию LinearFuncCalc для вычисления

значения функции для данного аргумента (см. пункт 5. задания). Функция должна иметь имя

MultyLinearFuncCalc.

Функция должна возвращать значение функции для заданного значения аргумента. Тип возвращаемого значения определяется в соответствии с Вашим вариантом (столбец "Тип данных" таблицы 9).

Функция должна иметь следующие входные параметры:

Xаргумент функции,для которого вычисляется значение функции. Тип данного параметра определяется в соответствии с Вашим вариантом (столбец "Тип данных" таблицы 9);

PFuncArray

указатель на структуру типа LinearArrayType, в которую заносится имя

 

массива, состоящего из элементов - структур типа LinearArrayType с

 

модификатором const - аргументов и значений функции для крайних

 

точек отрезков линеаризации. Элементы массива должны располагаться в

 

порядке возрастания аргумента функции;

61

FuncArraySize размер (количество элементов) массива, имя которого заносится в параметр

PFuncArray функции.

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

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

использовать параметры соответствующего начального или конечного отрезка линеаризации. Ограничивать значение функции не требуется.

7.Создать в файле заголовка LinearFunc.h прототип функции MultyLinearFuncCalc с тем, чтобы обеспечить доступ к ней из других файлов исходного текста Вашего приложения.

8.Создать в папке Вашего приложения и подключить к Вашему проекту файл исходного текста LinearTable.cpp. Данный файл будет содержать массив - таблицу значений граничных точек линеаризуемой функции. Поместить в данном файле ссылку на файл-заголовок LinearFunc.h,

созданный ранее.

9. Создать в файле LinearTable.cpp одномерный массив с именем LinearTableArray,

содержащий аргументы и значения конечных точек линейных отрезков линеаризуемой функции. Значения точек находятся в таблице, номер которой для каждого варианта содержит столбец "Таблица данных" таблицы 9.

Массив должен состоять из элементов - структур типа LinearArrayType (см. пункт 3. задания) с модификатором const (массив должен быть недоступен для редактирования).

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

10.Создать в файле LinearTable.cpp переменную типа const unsigned int с именем LinearTableArraySize. При создании вычислить с помощью функции sizeof и поместить в нее количество элементов массива LinearTableArray, (см. пункт 9. задания).

11.Объявить в файле LinearFunc.h массив LinearTableArray (см. пункт 9. задания) и переменную LinearTableArraySize (см. пункт 10. задания) как глобальные, сделав их доступными из других файлов исходного текста.

12.Ввести в файл main.cpp Вашего проекта исходный текст, выполняющий стандартные действия по выводу заголовка приложения.

13.Ввести в файл main.cpp исходный текст, выводящий на дисплей строку приглашения "InputSignal" и ввод с клавиатуры в переменную SignalADC значения, имитирующего

сигнал напряжения АЦП. Переменная SignalADC должна быть создана в файле main.cpp и должна иметь тип, соответствующий Вашему варианту (см. столбец "Тип данных" таблицы 9).

14. Вызвать функцию MultyLinearFuncCalc для вычисления значения линеаризуемой функции. В качестве параметров функции использовать переменную SignalADC (аргумент линеаризуемой функции, см. пункт 13. задания), имя массива LinearTableArray,

содержащего граничные точки линейных отрезков линеаризуемой функции (см. пункт 9. задания) и переменную LinearTableArraySize - размер массива (см. пункт 10. задания).

Функция должна возвращать вычисленное значение в переменную Result, которая должна быть создана в файле main.cpp. Тип переменной определяется в соответствии с Вашим вариантом работы (см. столбец "Тип данных" таблицы 9).

15.Вывести на дисплей строку "Result =" и значение функции из переменной Result (см. пункт 14. задания).

16.Вывести на дисплей приглашения ввести любой символ, ожидать его ввода и нажатия

62

клавиши Enter, после чего завершить работу приложения.

 

Значение

 

 

 

 

функции

 

 

 

 

(Y)

 

 

 

 

40

 

 

 

 

20

 

 

 

 

0

1

2

3

Аргумент

 

 

 

 

 

 

 

 

функции

-20

 

 

 

(X)

 

 

 

 

Рис. 36. Пример линеаризации функции

 

 

Запустите приложение, убедитесь, что расчет значения линеаризуемой функции

выполняется правильно. Продемонстрируйте работу приложения преподавателю.

63

Таблица 9. Варианты выполнения лабораторной работы

№ варианта

Тип данных

Оператор цикла

Таблица данных

 

 

 

 

1

float

while

10

2

float

do while

10

3

float

for

10

4

int

while

11

5

int

do while

11

6

int

for

11

7

float

while

12

8

float

do while

12

9

float

for

12

10

int

while

13

11

int

do while

13

12

int

for

13

13

float

while

14

14

float

do while

14

15

float

for

14

16

int

while

15

17

int

do while

15

18

int

for

15

19

float

while

16

20

float

do while

16

21

float

for

16

22

int

while

17

23

int

do while

17

24

int

for

17

Таблица 10. Таблица зависимости физического параметра от заданного сигнала, варианты 1 - 3

Сигнал АЦП

Значение физического

 

Сигнал АЦП

Значение физического

 

параметра

 

 

параметра

 

 

 

 

 

0

-20

 

2

17.5

 

 

 

 

 

0.5

0

 

2.5

22.5

 

 

 

 

 

1

10

 

3

30

 

 

 

 

 

1.5

15

 

3.5

45

 

 

 

 

 

64

Таблица 11. Таблица зависимости физического параметра от заданного сигнала, варианты 4 - 6

Сигнал АЦП

Значение физического

 

Сигнал АЦП

Значение физического

 

параметра

 

 

параметра

 

 

 

 

 

0

-200

 

200

175

 

 

 

 

 

50

0

 

250

225

 

 

 

 

 

100

100

 

300

300

 

 

 

 

 

150

150

 

350

450

 

 

 

 

 

Таблица 12. Таблица зависимости физического параметра от заданного сигнала, варианты 7 - 9

Сигнал АЦП

Значение физического

 

Сигнал АЦП

Значение физического

 

параметра

 

 

параметра

 

 

 

 

 

-2.5

-200

 

1.5

175

 

 

 

 

 

-1.5

0

 

2.5

225

 

 

 

 

 

-0.5

100

 

3.5

300

 

 

 

 

 

0.5

150

 

4.5

450

 

 

 

 

 

Таблица 13. Таблица зависимости физического параметра от заданного сигнала, варианты 10 - 12

Сигнал АЦП

Значение физического

 

Сигнал АЦП

Значение физического

 

параметра

 

 

параметра

 

 

 

 

 

-250

-2000

 

150

1750

 

 

 

 

 

-150

0

 

250

2250

 

 

 

 

 

-50

1000

 

350

3000

 

 

 

 

 

50

1500

 

450

4500

 

 

 

 

 

Таблица 14. Таблица зависимости физического параметра от заданного сигнала, варианты 13 - 15

Сигнал АЦП

Значение физического

 

Сигнал АЦП

Значение физического

 

параметра

 

 

параметра

 

 

 

 

 

-2.5

-200

 

0.5

300

 

 

 

 

 

-2

0

 

1

450

 

 

 

 

 

-1.5

100

 

1.5

475

 

 

 

 

 

-1

150

 

2

490

 

 

 

 

 

-0.5

175

 

2.5

500

 

 

 

 

 

0

225

 

 

 

 

 

 

 

 

65

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]