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

Полученный таким образом адрес можно поместить в указатель на переменную того же

типа.

Поэтому вызов функции 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

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