Как сделать модуль в си шарп

Обновлено: 04.07.2024

Модульное программирование — это организация программы как совокупности небольших независимых блоков, называемых модулями.

Модуль — функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом. Модули проектируются таким образом, чтобы предоставлять программистам удобную для многократного использования функциональность (интерфейс) в виде набора функций, классов, констант. Модули могут объединяться в пакеты и, далее, в библиотеки. Удобство использования модульной архитектуры заключается в возможности обновления (замены) модуля, без необходимости изменения остальной системы.

Использование модульного программирования позволяет упростить тестирование программы и обнаружение ошибок. Модульность часто является средством упрощения задачи проектирования программы и распределения процесса разработки между группами разработчиков. При разбиении программы на модули для каждого модуля указывается реализуемая им функциональность, а также связи с другими модулями.

Выделение функций в модуль

Модуль в языке Си состоит из интерфейса (заголовочого файла . h ) и реализации (файла . c ) .

Реализация модуля должна полностью реализовывать указанный интерфейс, поэтому она также включает свой заголовочный файл.

Итого, пример проекта из основного файла и одного модуля, может выглядеть так:

Операторы +,-,* и / действуют так, как предполагает их обозначение. Их можно применять к любому встроенному числовому типу данных.

Результат работы данной программы:

Использование арифмитических операторов

Операторы инкремента и декремента

Оператор инкремента (++) увеличивает свой операнд на 1, а оператор декремента (--) уменьшает операнд на 1. Следовательно, операторы:

Следует, однако, иметь в виду, что в инкрементной или декрементной форме значение переменной x вычисляется только один, а не два раза. В некоторых случаях это позволяет повысить эффективность выполнения программы.

Обa оператора инкремента и декремента можно указывать до операнда (в префиксной форме) или же после операнда (в постфиксной форме). Давайте разберем разницу записи операции инкремента или декремента на примере:

Операция инкремента в префиксной и постфиксной форме

Т.е. операция инкремента в префиксной форме происходит раньше, нежели в постфиксной форме, в результате чего числа из второго ряда получаются на единицу больше. Отмечу, что возможность управлять моментом инкремента или декремента дает немало преимуществ при программировании.

Пожалуйста, приостановите работу AdBlock на этом сайте.

Математические вычисления не ограничиваются лишь арифметическими действиями. Кроме них, можно ещё встретить корни, модули, логарифмы, тригонометрические функции и пр. Научимся же использовать подобные функции в своих программах.

Для использования математических функций нужно подключить заголовочный файл math.h . В ней определено много различных функций, но мы пока рассмотрим следующие:

Некоторые математические функции

fabs(x) модуль числа x
sqrt(x) квадратный корень из числа x
sin(x) синус числа x (х в радианах)
cos(x) косинус числа x (х в радианах)
pow(x, y) вычисление x y
exp(x) вычисление e x
log(x) натуральный логарифм числа x
log10(x) десятичный логарифм числа x

  • Все функции возвращают значение типа double .
  • Параметры функций – вещественные числа( double ), но можно передавать и целые числа. При этом произойдёт неявное преобразование типа . Компилятор из целого числа, например 3, сделает вещественное 3.0.

Примеры.
Даны длины катетов прямоугольного треугольника. Вычислить длину гипотенузы. Простая задачка на знание теоремы Пифагора.

Вычислить синус угла ввёденного с клавиатуры. Угол вводится в градусах.

В этой программе есть о чём поговорить. Тригонометрические функции, которые определены в math.h работают с радианной мерой угла. Людям же привычнее работать с градусами. Поэтому в данной программе мы предварительно перевели значение из градусов в радианы. Если этого не сделать, результат получится неправильным. Проверьте это самостоятельно.

Неявное преобразование типов

При явном преобразовании типа мы в скобках перед значением указывали тип, к которому нужно привести данное значение. В неявном преобразовании этого делать не нужно. Компилятор автоматически подберёт необходимый тип.

Неявное преобразование типов осуществляется в следующих случаях:

  1. перед передачей аргументов в функцию (как в нашем примере с корнем. Листинг 1.)
  2. выполнение арифметических операций с разными типами аргументов
  3. перед выполнением присваивания

Правила неявного преобразования типов

  • если выполняются арифметические операции с разными типами аргументов. Оба аргумента приводятся к большему типу.
    Порядок типов: int float double
  • при присваивании. Значение справа от оператора присваивания приводится к типу переменной слева от оператора присваивания. При этом, если больший тип присваивается меньшему, то может произойти потеря точности.

int+float будет автоматически преобразовано к float+float
float/int будет автоматически преобразовано к float/float
double*float будет преобразовано к double*double
int = double double будет преобразовано к int с потерей дробной части
float = int int будет преобразовано к float

Практика

Решите предложенные задачи:


Для удобства работы сразу переходите в полноэкранный режим

Как-то раз с коллегой зашел разговор о том почему в платформе не реализована функция получения модуля числа, ведь для учетной системы это довольно нужная вещь ( скорее всего разработчики платформы еще заняты написанием функции инкрементации и им не до этого , кстати если у вас есть предположения, то пишите в комментариях) и мы обсуждали, что способов написания такой функции может быть несколько и я решил посчитать, а сколько же их можно придумать. Конечно большинство из них "высосаны из пальца" и не могут использоваться на практике в виду здравого смысла, но нас это не останавливает), итак, поехали!


1.Наиболее логичный и распространенный способ, проверяем на превышение нуля и инвертируем значение при необходимости

2.Также довольно распространенный способ, используем функцию Макс()

На этом адекватные способы закончились) и начинаются извращения начинаем использовать


3.Перевести в строку, избавиться от минуса и конвертировать обратно в число?! Легко!

4.Далее вспоминаем, что можем использовать com-объекты, а это открывает нам удивительные возможности


Изначально я использовал такой код:

Но в серверном контексте я получил ошибку отсутствия класса из-за различия в разрядности, а делать обертку на корпоративном сервере не хотелось, поэтому я решил использовать другой com, а именно regexp


5.Используем список значений и сортируем, почему нет?


6.Используем запрос, в принципе это нормальный способ и т.к. вычисление производится на стороне СУБД я решил его тоже включить

7.Далее вспоминаем из курса школьной программы гуглим, что

Модуль числа a – это арифметический квадратный корень из квадрата числа a , исходя из этого пишем функцию

8.Используем Формат , чтобы избавиться от минуса и используем функцию Вычислить

Да остановись уже!

9.Здесь вообщем то уже читерство, используем ОписаниеТипов с допустимым знаком "+" и если после приведения результат = 0, то инвертируем значение

10.И напоследок используем такой же подход, перехватываем исключение в функции, где параметр положительное число, например, СлучайноеЧисло

И в заключение этой "шедевральной" статьи график (обработка во вложении) по скорости выполнения на 10000 итерациях. Версия платформы: 8.3.13.1513


Ожидаемо запрос и com самый медленный ввиду инициализации объектов, а математика самая быстрая.

Знаешь еще способы - пиши в комментах!

На этом дорогие друзья у меня все, и кстати это моя первая статья ( я долго копил свой опыт, чтобы поделиться им с сообществом ), надеюсь, ее шуточный характер не встанет мне боком)

Читайте также: