- •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. Вывод результата вычислений и завершение работы приложения
Полученный таким образом адрес можно поместить в указатель на переменную того же
типа.
Поэтому вызов функции LinearFuncCalc может выглядеть следующим образом:
return LinearFuncCalc ( X, &(PFuncArray[i-1]), &(PFuncArray[i]));
Здесь i - счетчик элементов массива, использовавшийся на этапе циклического просмотра элементов массива (см. разделы 9.1.7.1. - 9.1.7.3. методических указаний).
Данная строка не только вызывает функцию LinearFuncCalc, но и завершает работу функции, внутри которой выполняется (функция MultyLinearFuncCalc), возвращая в качестве ее результата результат выполнения функции LinearFuncCalc.
9.1.8. Создание в файле заголовка прототипа функции
Данная операция уже рассматривалась при выполнении предыдущих лабораторных работ (см. раздел 8.1.3.).
9.1.9.Создание константного одномерного массива, содержащего параметры граничных точек линейных отрезков линеаризуемой функции
Массив является упорядоченной нумерованной последовательностью однотипных элементов. Доступ к каждому элементу массива осуществляется по его номерам (индексам).
Определение массива в C имеет следующий формат:
тип имя [размер1] [размер2] ... [размерN];
где:
тип |
тип элементов, из которых состоит массив; |
имя |
имя массива; |
размер1, размер2, ... размерN |
количество элементов по каждому из измерений массива. |
Пример одномерного массива, состоящего из 3 элементов:
int MyArray [3];
Нумерация элементов массива начинается с нуля, массив из предыдущего примера имеет элементы с индексами 0, 1 и 2.
При создании массива в него могут быть помещены начальные значения всех или части элементов, например:
float A [2] = {1.0, 2.0};
Здесь значение 1.0 помещается в элемент0 массива, значение 2.0 - в элемент 1 массива.
В случае, если при определении массива задаются все его начальные значения, указывать явно размер массива не обязательно - он будет определен компилятором по количеству начальных значений. Например, строка:
unsigned B [] = {7, 12, 28};
создаст массив из трех элементов.
В данной работе требуется создать константный одномерный массив с именем
73
ExampleArray, состоящий элементов - структур, без явного указания его размера. Рассмотрим
пример определения такого массива. Предположим, что ранее в файле заголовка определен следующий тип структуры:
typedef struct |
|
|
{ |
int A; |
// Поле типа int; |
|
||
} |
float B; |
// Поле типа float; |
ExampleStructType; |
|
Требуется создать массив структур этого типа, содержащий три элемента, значения которых содержит таблица 18.
Таблица 18. Значения полей элементов массива
Номер элемента массива (индекс массива) |
Значение поля A |
Значение поля B |
|
|
|
0 |
3 |
22.5 |
|
|
|
1 |
7 |
12.4 |
|
|
|
2 |
38 |
33.7 |
|
|
|
В этом случае определение массива будет иметь следующий вид:
ExampleStructType const ExampleArray [] =
{
{ |
// Элемент 0. |
3, |
// Значение поля A. |
22.5 |
// Значение поля B. |
}, |
// Элемент 1. |
{ |
|
7, |
// Значение поля A. |
12.4 |
// Значение поля B. |
}, |
// Элемент 2. |
{ |
|
38, |
// Значение поля A. |
33.7 |
// Значение поля B. |
} |
|
};
9.1.10. Определение размера массива
Размер любого объекта данных в байтах может быть определен с помощью функции sizeof, имеющей следующий формат:
sizeof (объект_данных)
Для определения количества элементов массива может быть использвано следующее выражение:
sizeof (массив) / sizeof (элемент_массива)
При этом в качестве аргументов функции могут выступать только константы - имена массивов. Использование, например, указателей, недопустимо.
Например, для массива, рассмотренного в предыдущем пункте, определение размера может
74
быть выполнено следующим образом:
const unsigned int ArraySize = \
sizeof (ExampleArray) / sizeof (ExampleArray [0]);
9.1.11. Объявление объекта данных как глобального
Для предоставления к объекту данных (переменной или массиву), созданному в одном файле исходного текста, доступа из других файлов исходного текста, его необходимо объявить как глобальный. Для этого необходимо подставить в файлы исходного текста, которые должны получить доступ к внешнему объекту данных, описание этого объекта с модифкатором extern.
Описание объекта должно содержать только его тип и имя, не включать такие параметры, как начальные значения. Например, массив, созданный в качестве примера в разделе 9.1.9. методических указаний, может быть объявлен как внешний следующей строкой:
extern ExampleStructType const ExampleArray [];
Объявление как внешней переменной, содержащей размер массива, созданной в качестве примера в разделе 9.1.10., будет иметь следующий вид:
extern const unsigned int ArraySize;
Удобнее не подставлять данные строки в каждый файл исходного текста, а разместить их в файле заголовка, который присутствует во всех этих файлах.
9.1.12. Вызов функции MultyLinearFuncCalc из файла main.cpp
Вызов данной функции почти не отличается от выполнявшихся ранее вызовов пользовательских функций. Единственной особенностью является использование в качестве ее параметров одномерного массива.
Поскольку имя массива является указателем на первый элемент массива, в качестве данного параметра достаточно подставить имя используемого массива без каких-либо дополнительных символов. В этом случае вызов функции MultyLinearFuncCalc будет выглядеть следующим
образом:
Result = MultyLinearFuncCalc ( SignalADC, \ LinearTableArray, \
LinearTableArraySize);
где Result - ранее определенная переменная,в которую помещается результат вычисления. Тип переменной должен совпадать с типом результата, возвращаемого функцией.
9.1.13. Вывод результата вычислений и завершение работы приложения
Данные действия уже рассматривались в предыдущих лабораторных работах.
75