Функція fabs C++: модуль числа
Привіт! За допомогою функції fabs можна отримати модуль речового числа. У цій статті ми розберемося як ця функція працює на прикладах, а також зробимо свою версію цієї функції.
fabs є частиною cmath. Ця функція приймає речове число і повертає його модуль. Модуль числа дорівнює самому числу, якщо воно більше за нуль, і дорівнює числу, помноженому на -1, якщо воно менше за нуль. Результат функції fabs можна побачити на графіку нижче:
Даний графік можна надати формулою: fabs (x) = | x |
Тепер давайте спробуємо скористатися цією функцією:
#include
#include
int
main()
std::cout
<"fabs(10.5) token operator"> <>::fabs(10.5)
<>::endl; std::cout
<"fabs(-10.5) token operator"> <>::fabs(-10.5)
<>::endl; std::cout
<"fabs(0) token operator"> <>::fabs(0)
<>::endl;
return
0;
>
fabs також доступна при використанні файлу заголовка math.h . Однак для нових програм рекомендується використовувати cmath, оскільки math.h вважається застарілим.
Результат роботи програми:
fabs(10.5) = 10.5 fabs(-10.5) = 10.5 fabs(0) = 0
Як реалізувати fabs самому
Щоб краще зрозуміти fabs, давайте реалізуємо цю функцію самі:
#include
float
fabs(float x)
if
(x
0)
return
-x;
>
return x;
>
int
main()
std::cout
<"fabs(10.5) token operator"> <fabs(10.5)
<>::endl; std::cout
<"fabs(-10.5) token operator"> <fabs(-10.5)
<>::endl; std::cout
<"fabs(0) token operator"> <fabs(0)
<>::endl;
return
0;
>
Варто зазначити, що версія fabs, яка знаходиться в стандартній бібліотеці C++, працюватиме швидше, оскільки оптимізована на рівні байт-коду.
Результат роботи програми:
fabs(10.5) = 10.5 fabs(-10.5) = 10.5 fabs(0) = 0
Як бачите, наша функція fabs працює аналогічно стандартній функції C++.
Відмінність std::fabs від abs
Функція std::fabs має аналог для цілих чисел - abs . Різниця у них лише в тому, що std::fabs працює з дробовими числами, тоді як abs працює тільки з цілими. Таким чином, якщо вам потрібен модуль речового числа, використовуйте std::fabs . Для цілих чисел застосовуйте abs.
abs залишився з часів C і доступний без підключення cmath або math.h.
Є ще labs , який працює з long числами ( abs приймає та повертає int ). Постарайтеся не заплутатися наступного разу, коли вибиратимете потрібну версію цієї функції 🙂.
Що буде виведено на екран:
labs приймає цілі числа типу long тому -7.25 буде перетворено в -7, після чого labs поверне модуль 7.
- Застосування fabs :
Напишіть програму на C++, яка запитує у користувача речове число, застосовує до нього функцію fabs і виводить результат. Ваша програма також повинна виводити вихідне число користувача.
- Створення своєї версії fabs для double :
Використовуючи наведений у статті приклад, створіть свою версію функції fabs, але для чисел типу double. Перевірте її роботу, використовуючи різні цифри.
- Порівняння fabs та abs :
Напишіть програму, яка демонструє різницю між fabs і abs . У вашій програмі повинні бути використані обидві функції, і результати їхньої роботи повинні виводитись на екран.
Якщо хочете завжди бути в курсі останніх новин у світі програмування та IT, підписуєтеся на мій Telegram-канал, де я поділяюся свіжими статтями, новинами та корисними порадами. Радий бачити вас серед передплатників!
Читайте також
Функція exp використовується в мовах C та C++ для обчислення експонентів.У статті буде розібрано приклади використання цієї функції. Також наприкінці статті є вправи.
У цьому уроці йтиметься про функцію pow в C++. Ми розглянемо з прикладами, як звести число в ступінь, а також які є альтернативи цієї функції.
Мова C + + має кілька способів генерації випадкових чисел. Функція rand - один із найпопулярніших способів отримати випадкове число. У цій статті ми навчимося використовувати цю функцію, генерувати випадкові числа в діапазоні, а також реалізуємо простенький генератор випадкових чисел.
Функція puts використовується в мові програмування C для виведення рядка на екран, використовуючи стандартний висновок. У статті буде розібрано приклади використання цієї функції. Також ми реалізуємо цю функцію самі, а наприкінці статті є вправи для закріплення матеріалу.
Функція snprintf використовується у мовах C і C++ для форматування рядка без виведення на екран. У статті буде розібрано приклади використання цієї функції. Також наприкінці статті є вправи.
Функція strlen використовується в мові програмування C для розрахунку кількості символів у рядку. У статті буде розібрано приклади використання цієї функції. Також ми реалізуємо цю функцію самі, а наприкінці статті є вправи для закріплення матеріалу.
Функція sqrt використовується мовами C і C++ для обчислення квадратного кореня числа. У статті буде розібрано приклади використання цієї функції. Також наприкінці статті є вправи.
Функція printf - це швейцарський ніж для виведення на консоль C/C++. Через це ця функція підтримує величезну кількість різних прапорів та модифікаторів для стилізації виведення як вам завгодно. У цій статті ми розберемося на прикладах, як їй, все-таки, користуватися.
У C++, контейнер std::vector є динамічним масивом, який може автоматично змінювати свій розмір. Часто виникає необхідність визначити, скільки елементів на даний момент містить вектор. Зустрічайте функцію size! У цій статті ми розглянемо, як працює функція size, покажемо практичні приклади та розповімо про інші корисні функції.
Програмування за модулями в СІ
Програмування – це процедура написання утиліт та софту для різноманітних консолей. Існують різні методи та концепції відповідного процесу. Вести розробку можна на кросплатформних та нативних мовах.
Величезну популярність набула СІ-родина. Приклад – C. Ця мова відносно проста і зручна для розуміння. Він передбачає так зване модульне програмування. Далі мова зайде про такий спосіб написання софту.
Концепція
Модульне програмування – своєрідна організація утиліти (програмного забезпечення) як зв'язку незалежних блоків, які звуться модулів. Структура та поведінка їх підпорядковуватимуться конкретним принципам та алгоритмам.
Модульне програмування – особливий принцип коддингу, при якому окремі компоненти (блоки) гранично ізольовані один від одного. Деталі одного модуля не будуть впливати на реалізацію іншого. Отримати такого роду результат вдасться отримати за допомогою інтерфейсів. Можливі й інші види уявлення, якими можна отримати прямий доступом до кодификации.
Способи реалізації
p align="justify"> Модульне програмування c, як і в будь-якій іншій мові, передбачає кілька способом реалізацій. Залежно від них змінюватимуться принципи застосування тих чи інших функцій:
- Встановлення залежності.У цій ситуації кожен елемент матиме власний інтерфейс. Модулі взаємодіють за допомогою interfaces.
- Фабричний прийом. Базується на існуванні деякого об'єкта, який необхідний створення інших. Додаток впроваджується прототип, що поєднує ключові риси більшості функцій. Параметри тут успадковуватимуться від «заводу».
- Сервісний підхід Програміст повинен створити спільний єдиний інтерфейс. Він послужить для функцій та їхньої взаємодії своєрідним буфером.
Перший варіант зустрічається частіше за інших. Але їх також необхідно застосовувати на практиці. Пов'язано це з тим, що створення інтерфейсів створює обмеження доступу до модулів. Щоб зменшити складність програми, потрібно зменшити наявні зв'язки. Функції та інтерфейси, що посилаються на собі подібні, роблять цей процес складнішим.
Вимоги до модулів
У програмованому додатку під час використання модулів необхідно враховувати деякі вимоги. Без них написати софт, який працюватиме за задумом, неможливо.
Модуль – це своєрідна послідовність логічно пов'язаних фрагментів (функцій), які оформлені як самостійних утилітних блоків. А ось вимоги, які до нього пред'являються:
- Повинен відповідати лише за єдину функцію. При побудові модуля застосовується концепція один блок – одна функція. Відповідає за самостійне завдання. На вході можна передати певний набір вихідних матеріалів, обробити їх у відповідність до технічного завдання, а потім повернути результат обробки.
- Посилання здійснюється через спеціалізоване ім'я. Він повинен володіти лише одним входом і виходом. Це гарантує замкнутість блоку.
- Функції мають у вигляді завершених алгоритмів.
- Модуль повинен передавати керування в точку початкового дзвінка. Тут має бути можливість самостійного виклику інших «відокремлених функцій».
- Історія дзвінків не повинна зберігатися. Вона ж не застосовується при функціонуванні блоку коду.
- Логічна незалежність. Результат програмованого модуля залежить від вихідних матеріалів. Від інших функцій утиліти – ні.
- Наявність слабких інформаційних зв'язків з іншими блоками утиліти. Обмін інформацією здійснюється рідко. Від гранично мінімізовано.
- Модуль C має бути відносно невеликим. Це стосується його розміру, і складності. Досвідчені розробники намагаються створювати трохи більше двох сторінок друкованого тексту.
Щоб забезпечити «блоку» відповідні критерії, потрібно застосовувати принципи інформаційної локалізованості. Сенс його полягає в тому, що всі електронні матеріали про структуру даних, прототипи, константи та функції «ховається» в межах «готового блоку коду». Доступ надається лише через відповідний модуль. У СІ-родині вони легко помітні. Мають розширення .*h.
Як виділити
Працюючи з об'єктом, що розглядається, в СІ потрібно запам'ятати, що він складається з реалізації і заголовного файлу. Перший має документ виду .c, другий - .h.
Код, який відповідає за підключення блоку, на етапі компіляції потребуватиме лише інтерфейсу. При передпроцессингу документ заголовка просто копіюється в кодифікацію директивою #include “somelib.h”
Реалізація повинна обов'язково втілювати в життя задуманий інтерфейс. Завдяки цьому вона також включатиме свій файл заголовка.Ось приклад того, як проект з одного ключового документа та «блоку» виглядатиме в редакторі:
Це база, яку може і повинен знати кожен розробник. Програму за допомогою розглянутої концепції створити не складе жодних труднощів. Особливо якщо заздалегідь продумати її структуру та логіку.
На що звернути увагу
Наведений приклад передбачає такі особливості:
- У документі "мейн.с" не потрібно підключати "стдіо.h". Це незважаючи на те, що він застосовується у hello.c.
- Даний момент пов'язаний з тим, що жодні типи зі stdio не потрібні для того, щоб обробляти інтерфейс hello.h, який опиняється у «мейні» у процесі компілювання.
- Якби вимагалося для обробки interfaces "блоків" брати визначення з тієї чи іншої бібліотеки, останні повинні прописуватися не в hello.c, а в hello.h. Даний прийом забезпечує відсутність помилок у тих просторах, де підключається hello.
Це те, що потрібно пам'ятати про модульне програмування C. Інформація допоможе почати більш глибоке вивчення концепції.
Найкраще рішення для швидкого розуміння теми
Для того, щоб краще розумітися на функціях та «ізольованості коду» в СІ-родині рекомендується закінчити спеціалізовані онлайн курси. Вони можуть бути пройдені у будь-який час, коли зручно користувачеві.
Є пропозиції для новачків у програмуванні, а також досвідчених розробників. Користувачі зможуть вивчати функції СІ-родини та їх особливості. У процесі гарантовано масу практики, збір портфоліо та постійне кураторство. Користувачі зможуть отримати сертифікат, що підтверджує знання у вибраному напрямку.
Цікавить технологія на C? Зверніть увагу на курс "Програміст C" в Otus.