Технология сборки библиотеки
Библиотека пользователя, как и любая стандартная библиотека языка С и С++, собирается из двух видов файлов: заголовочного файла и файла с кодами функций.
Заголовочный файл (иногда головной файл, англ. 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
{
/* m - число строк в матрице А;
n - число строк в матрице В и число столбцов в матрице А;
k - число столбцов в матрице В. */
for (int i=0; i< m; i++)
for (int j=0; j< k; j++)
{
С[i][j]=0;
for (int l=0; l< n; l++)
С[i][j] + = А[i][l]*В[l][j];
}
}
float fact(int N)//рекурсивная функция вычисления факториала числа N
{
if (N==0)
Дата добавления: 2015-02-10; просмотров: 710;