Язык Си в примерах/Библиотека complex: различия между версиями

Материал из Викиучебника — открытых книг для открытого мира
Содержимое удалено Содержимое добавлено
Строка 84: Строка 84:




$ gcc -с complex.c -o libcomplex.a # создание динамически подключаемой библиотеки
$ gcc -с complex.c -o libcomplex.a # создание статически подключаемой библиотеки
$ gcc test_complex.c -L. -lcomplex -o test_complex # компиляция тестовой программы
$ gcc test_complex.c -L. -lcomplex -o test_complex # компиляция тестовой программы
$ ./test_complex # запуск тестовой программы
$ ./test_complex # запуск тестовой программы

Версия от 09:00, 11 октября 2011

Язык Си в примерах


  1. Компиляция программ
  2. Простейшая программа «Hello World»
  3. Учимся складывать
  4. Максимум
  5. Таблица умножения
  6. ASCII-коды символов
  7. Верхний регистр
  8. Скобочки
  9. Факториал
  10. Степень числа
  11. Треугольник Паскаля
  12. Корень уравнения
  13. Система счисления
  14. Сортировка
  15. Библиотека complex
  16. Сортировка на основе qsort
  17. RPN-калькулятор
  18. RPN-калькулятор на Bison
  19. Простая грамматика
  20. Задача «Расчёт сопротивления схемы»
  21. Простая реализация конечного автомата
  22. Использование аргументов командной строки
  23. Чтение и печать без использования stdio
  24. Декодирование звукозаписи в формате ADX
  25. Другие примеры

Создание библиотек. Библиотека для работы с комплексными числами.

Создание библиотеки

Библиотека у нас будет иметь два исходных файла: complex.h и complex.c

/*
   complex.h
 */
 typedef struct 
    {
     double a,b;
    } complex_t;
 complex_t mul(complex_t x, complex_t y);
 /*
    complex.c
 */
 #include "complex.h"
 complex_t mul(complex_t x, complex_t y)
 {
     complex_t t;
     t.a = x.a * y.a - x.b * y.b;
     t.b = x.a * y.b + x.b * y.a; 
     return t;
 }

Пример использования библиотеки

Теперь несложно использовать эту библиотеку.

Для этого нужно:

  • добавить в заголовок c/cpp-файла строчку #include <complex.h> ;
  • сделать так, чтобы компилятор находил complex.h ;
  • сделать так, чтобы сборщик (linker) находил файл библиотеки complex .
 /*
    test_complex.c
 */
 #include <stdio.h>
 #include "complex.h"
 int main()
 {
     complex_t x = {1,2};
     complex_t y = {3,4};
     complex_t z = mul(x,y);
     printf ("z = (%lf, %lf)\n", z.a, z.b );
     return 0;
 }

Создание и использование библиотек в GNU C

Подключение библиотеки в виде исходников

Есть простой способ подключения библиотеки функций прямо в виде исходников:

$ gcc test_complex.c complex.c -o test_complex   


В итоге получается запускаемый файл test_complex.


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

$ gcc -shared complex.c -o libcomplex.so           # создание динамически загружаемой библиотеки  
$ gcc test_complex.c -L. -lcomplex -o test_complex # компиляция тестовой программы
$ export LD_LIBRARY_PATH=.; ./test_complex         # запуск тестовой программы


  • Есть ряд стандартных путей (), где система ищет динамически загружаемые библиотеки. Текущая директория по умолчанию не является таким местом, поэтому мы явно указываем, что библиотеки могут лежать также и в текущей директории.
    Переменная LD_LIBRARY_PATH содержит дополнительный список путей (разделённых двоеточием), где система будет искать библиотеки.
  • Расширение .so соответствует shared objects, то есть библиотека объектов общего доступа.

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

Для компилятора Gnu C команды создания статически подключаемой библиотеки и подключения её к проекту выглядят следующим образом


$ gcc -с complex.c -o libcomplex.a                 # создание статически подключаемой библиотеки  
$ gcc test_complex.c -L. -lcomplex -o test_complex # компиляция тестовой программы
$ ./test_complex                                   # запуск тестовой программы

Задачи

  • Напишите расширенную версию библиотеки функций для работы с комплексными числами. Реализуйте операции сложения, вычитания, умножения и деления, а также функции, вычисляющие аргумент и модуль комплексного числа. Реализуйте функции комплексного аргумента sinc, cosc, expc, logc, asinc , acosc. Чему равен арккосинус двух (acosc(2) = ?) ? Напишите программу, тестирующую вашу библиотеку.
  • Напишите библиотеку функций по теме "аналитическая геометрия"
    • Решать задачи на плоскости
      • вычислять расстояние для пар (точка, точка), (точка, прямая)
      • находить площадь многоугольника
      • проверять, пересекаются ли две прямые и находить точку их пересечения
      • проверять, пересекаются ли два отрезка и находить точку их пересечения
    • Решать задачи в пространстве
      • вычислять расстояние для пар (точка, точка), (точка, прямая), (прямая, прямая), (точка, плоскость)
      • находить точку пересечения трёх попарно непараллельных плоскостей
      • находить объем тетраэдра