- •1. Общие правила выполнения лабораторных работ
- •2. Программное обеспечение, используемое для выполнения лабораторных работ
- •3. Лабораторная работа № 1. Создание простейшего консольного приложения C
- •3.1. Задание
- •3.2. Методические указания по выполнению лабораторной работы
- •3.2.1. Создание проекта консольного приложения
- •3.2.2. Открытие существующего проекта
- •3.2.3. Редактирование функции main Вашего проекта
- •3.2.4. Компиляция и сборка проекта
- •3.2.5. Пробный запуск проекта из интегрированной среды CodeBlocks
- •3.2.6. Запуск откомпилированного исполнительного файла проекта непосредственно из операционной системы
- •4.1. Задание
- •4.2. Методические указания по выполнению лабораторной работы
- •4.2.1.1. Создание переменных
- •4.2.1.2. Ввод значения входной переменной с клавиатуры
- •4.2.1.3. Выполнение арифметических вычислений
- •4.2.1.4. Вывод результата вычисления
- •4.2.1.5. Пример исходного текста программы
- •4.2.2. Использование переменных с модификатором const в исходных текстах приложений
- •5. Лабораторная работа № 3. Использование оператора выбора и преобразования типов значений переменных
- •5.1. Задание
- •5.2. Методические указания по выполнению лабораторной работы
- •5.2.1. Создание проекта приложения
- •5.2.3. Преобразование сигнала АЦП из целочисленного формата в формат с плавающей десятичной точкой и его масштабирование
- •5.2.4. Вычисление значения физического параметра (температуры) по значению напряжения на выходе датчика
- •5.2.5. Вывод вычисленного значения физического параметра (температуры) на дисплей
- •6. Лабораторная работа № 4. Использование оператора переключателя switch
- •6.1. Задание
- •6.2. Методические указания по выполнению лабораторной работы
- •6.2.1. Создание проекта консольного приложения
- •6.2.2. Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
- •6.2.3. Преобразование ASCII-символа шестнадцатеричной цифры в числовой формат
- •6.2.4. Вывод результата преобразования
- •6.2.5. Ввод с клавиатуры произвольного символа и завершение работы приложения
- •7. Лабораторная работа № 5. Создание и использование пользовательских функций
- •7.1. Задание
- •7.2. Методические указания по выполнению лабораторной работы
- •7.2.1. Создание проекта консольного приложения
- •7.2.2. Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
- •7.2.3. Создание и вызов функции преобразования кода ASCII-символа в число
- •7.2.3.1. Общий порядок создания и вызова функции
- •7.2.3.2. Использование функции для получения числового значения шестнадцатеричной цифры
- •7.2.4. Вывод на дисплей результата вычисления
- •7.2.5. Ввод с клавиатуры произвольного символа и завершение работы приложения
- •8.1. Методические указания по выполнению лабораторной работы
- •8.1.1. Создание проекта консольного приложения
- •8.1.2. Ввод с клавиатуры символа - шестнадцатеричной цифры, которую требуется преобразовать в числовой формат
- •8.1.3. Создание и вызов функции, размещенной в отдельном файле исходного текста
- •8.1.3.1. Создание нового файла исходного текста и размещение в нем пользовательской функции
- •8.1.3.2. Создание нового файла заголовка и подключение его к проекту
- •8.1.4. Вывод на дисплей результата вычисления
- •8.1.5. Ввод с клавиатуры произвольного символа и завершение работы приложения
- •9. Лабораторная работа №7. Использование массивов, структур и указателей
- •9.1. Методические указания по выполнению лабораторной работы
- •9.1.1. Создание проекта приложения
- •9.1.3. Создание пользовательского типа данных - структуры
- •9.1.4. Подключение файла-заголовка к проекту
- •9.1.5. Создание файла исходного текста и подключение его к проекту
- •9.1.6. Создание функции, выполняющей вычисление значения линейной функции по значению ее аргумента
- •9.1.7. Создание функции, выполняющей поиск линейного отрезка, на котором находится аргумент линеаризуемой функции, и вычисление ее (линеаризуемой функции) значения
- •9.1.7.1. Оператор итерационного цикла for
- •9.1.7.2. Оператор цикла с предусловием while
- •9.1.7.3. Оператор цикла с постусловием do while
- •9.1.7.4. Передача функции вычисления значения линейной функции указателей на используемые элементы массива
- •9.1.8. Создание в файле заголовка прототипа функции
- •9.1.9. Создание константного одномерного массива, содержащего параметры граничных точек линейных отрезков линеаризуемой функции
- •9.1.10. Определение размера массива
- •9.1.11. Объявление объекта данных как глобального
- •9.1.12. Вызов функции MultyLinearFuncCalc из файла main.cpp
- •9.1.13. Вывод результата вычислений и завершение работы приложения
Рис. 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