КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Технология сборки библиотеки
Библиотека пользователя, как и любая стандартная библиотека языка С и С++, собирается из двух видов файлов: заголовочного файла и файла с кодами функций. Заголовочный файл (иногда головной файл, англ. header file), или подключаемый файл, в языках программирования С и C++ - это файл с расширением .h. Заголовочный файл в общем случае может содержать любые конструкции языка программирования, но на практике в него помещают объявления идентификаторов, которые должны быть объявлены более чем в одном файле вашей программы, объявления структур, прототипы функций, перечисления, макросы препроцессора. Основная цель использования заголовочных файлов — вынесение описания нестандартных типов и функций за пределы основного файла с кодом. Заголовочный файл используется путём включения его текста в использующий его файл директивой препроцессора #include. Чтобы избежать повторного включения одного и того же кода, используются директивы #ifndef, #define, #endif. На этом же принципе построены стандартные библиотеки языка С и С++: в заголовочном файле перечисляются содержащиеся в библиотеке функции и используемые ею структуры/типы. При этом исходный текст библиотеки может находиться отдельно от текста программы, использующей функции библиотеки или вообще быть недоступным. Пусть создаваемая нами библиотека состоит из заголовочного файла mylib.h и файла mylib.cpp. В заголовочном файле mylib.h содержатся прототипы функций, которые описаны в данном параграфе. Перечислим все эти функции: · maximum(). Находит и возвращает наибольшее из двух чисел. · Form_matrix(). Заполняет матрицу, адрес которой передается ей в качестве параметра, случайными числами. · ST(). Возводит любое число в степень n. · Z(). Меняет значение переданного ей параметра на случайное число. · Sum(). Вычисляет среднее арифметическое вектора, адрес и размер которого передаются в качестве параметров. · Product(). Вычисляет произведение двух матриц, адреса и размеры которых передаются в качестве параметров. Возвращает матрицу соответствующего размера. · SM().Безтиповая функция вычисляет симметричную матрицу из исходной матрицы. · PK(). Безтиповая функция переводит декартовые координаты точки в полярные. · CP().Типизированная функция для подсчета количества положительных элементов в любой матрице. · Mod_Otk(). Типизированная функция находит максимальный компонент и среднее значение в любом массиве. · fact().Рекурсивная функция вычисляет факториал числа n.
Текст файла mylib.h: #ifndef MYLIB_H // если MYLIB_H еще не определили, то определяем #define MYLIB_H const nmax = 50; // максимальная размерность матрицы int maximum(int a, int b);//прототип функции maximum void Form_matrix(int A[][M], int m, int n);/*прототип функции Form_matrix */ float ST(float x, int n);//прототип функции ST void Z (int у);//прототип функции Z void Z (int *у);//прототип функции Z int Sum ( int A[], int N ); //прототип функции Sum void product(int А[][nmax], int В[][nmax],int С[][nmax], int m, int n, int k);//прототип функции product void SM(float Y[4][4], int n, float X[4][4]);/*прототип функции SM */ void PK(float a, float b, float *ro, float *fi);/*прототип функции PK */ int CP(float D[7][7], int m, int n);//прототип функции CP float Mod_Otk(float *a, int n);//прототип функции Mod_Otk float fact(int N);//прототип функции fact #endif /* MYLIB_H */
Файл mylib.cpp является созданной нами библиотекой, в которой содержатся реализации всех перечисленных выше функций. В целях экономии текст файла mylib.cppприведем не полностью. Текст файла mylib.cpp: #include "stdafx.h" #include "stdlib.h" { int Sum ( int A[], int N )//заголовок функции Sum { int i, sum;//локальные переменные sum = 0; for ( i = 0; i < N; i ++ ) sum += A[i]; return sum/N;//возвращаемое значение } void product(int А[][nmax], int В[][nmax],int С[][nmax], int m, int n, int k)//заголовок функции product { for (int i=0; i< m; i++) { С[i][j] + = А[i][l]*В[l][j]; float fact(int N)//рекурсивная функция вычисления факториала числа N { if (N==0)
|