کتابخانهٔ روشن (roshanlib) نسخهٔ 1.1.3.9

نسخه 1.1.3.9 کتابخانهٔ روشن دارای توابع جدیدی در حوزهٔ ریاضی است. نسخهٔ 1.0.0.0 این کتابخانه را می‌توانید از این لینک و نسخهٔ 1.1.2.4 را می‌توانید از این لینک دانلود کنید. کتابخانهٔ نسخهٔ 1.1.3.9 دارای همان توابعی است که به زبان C در نسخه‌های قبلی نوشته شده بود؛ با این تفاوت که: ۱) توابع درون large_math_c و radix_converter_2 در کتابخانه نسخهٔ جدید به زبان ++C بازنویسی و به آن اضافه شدند و ۲) توابع جدیدی به زبان ++C جهت محاسبهٔ ارزش ابجد کلمات نوشته شده و به آن اضافه شده است. این کتابخانه (نسخه 1.1.3.9) نیز مانند نسخه‌های قبل، یک کتابخانهٔ Static است. از این کتابخانه در زبان سی و سی++ می‌توان استفاده کرد. مجموعهٔ تمام این توابع را می‌توانید در هدرفایل‌های مربوطه مشاهده کنید. ویژگی‌های این نسخه:

۱. دارای توابعی برای تبدیل تاریخ‌ها به یکدیگر (که در نسخه‌های قبل نوشته شده بود) می‌باشد. توجه داشته باشید که در تقویم هجری قمری بدلیل رویت مستقیم هلال ماه در اول هر ماه ممکن است ۱ روز خطا داشته باشد؛ که تقریبا همهٔ تقویم‌های محاسباتی با کامپیوتر این مشکل را با تقویم هجری قمری دارند. دقت داشته باشید که ۲۵ تابع محاسبه‌ی تاریخ‌ها به یکدیگر، آرگومان‌ها را با ارجاع، ارسال می‌کند (pass-by-reference).

۲. دارای توابعی برای کار کردن با ۶ عملیات مهم بیسیک ریاضی (جمع، تفریق، ضرب، تقسیم، توان و باقیمانده) می‌باشد که کامپیوتر توان محاسبهٔ آن را در اعداد صحیح ۳۲ بیتی (int) و ۶۴ بیتی (long int) ندارد. این توابع با ایجاد آرایه‌ای از کاراکترها (رشته) این محاسبات را انجام می‌دهند. این توابع می‌توانند خروجی‌ای با بیش از ۱ میلیون رقم داشته باشند.

۳. دارای توابعی برای تبدیل مبنای (Radix) اعداد به یکدیگر می‌باشد. این توابع می‌توانند مبنای ۲ تا ۳۶ را به یکدیگر تبدیل کنند. در این صفحه دربارهٔ انواع دستگاه عددی، توضیحاتی داده شده است.

۴. دارای توابعی برای محاسبهٔ ارزش ابجد کلمات می‌باشد. این توابع فقط در نسخه جدید موجود است و تنها به زبان ++C نوشته شده‌اند.

در این کتابخانه، توابعی که به زبان C نوشته شده‌اند، بوسیله‌ی TDM-GCC 4.4.1-2 کامپایل شده است و توابعی که به زبان ++C نوشته شده‌اند، بوسیله‌ی MinGW-MSYS Bundle GCC 6.1.0 کامپایل شده است.

یک مثال ساده از نحوهٔ فراخوانی سه تابع از توابع درون date_converter (این توابع به زبان C نوشته شده‌اند):

#include <stdio.h>
#include <date_converter.h>

int main()
{
    printf("%d\n", leap_persian(1387));

    int d = 8, m = 6, y = 1383;
    persian_islamic(&d, &m, &y);
    printf("%d/%d/%d\n", y, m, d);

    char str[100];
    month_name(str, m, y, ISM);
    printf("%s\n", str);

    return 0;
}

خروجی مثال بالا:

1
1425/7/13
Rajab

توجه داشته باشید که عدد 1 در خروجی، به معنای این است که سال 1387 در تقویم شمسی کبیسه است. اگر یک سال مشخص کبیسه نباشد، خروجی 0 خواهد بود.

یک مثال ساده از نحوهٔ فراخوانی یک تابع از توابع درون large_math_c و radix_converter_2 (این توابع به زبان C نوشته شده‌اند):

#include <stdio.h>
#include <stdlib.h>
#include <large_math_c.h>
#include <radix_converter_2.h>

int main()
{
    char *str1 = (char *)malloc(sizeof(char) * 1024 * 1024);
    char *str2 = (char *)malloc(sizeof(char) * 1024 * 1024);

    if(str1 == NULL || str2 == NULL)
        return -1;

    large_pow(9, 1000, str1);
    numRadixConvert(str1, str2, 10, 36, 0);
    printf("%s\n\n%s\n", str1, str2);

    free(str1);
    free(str2);
    return 0;
}

یک مثال ساده از نحوهٔ فراخوانی یک تابع از توابع درون large_math_cpp و radix_converter_2_cpp (این توابع به زبان ++C نوشته شده‌اند):

#include <iostream>
#include <large_math_cpp.h>
#include <radix_converter_2_cpp.h>

using namespace std;

int main()
{
    string str1, str2;

    str1 = large_pow(9, 1000);
    str2 = numRadixConvert(str1, 10, 36, 0);

    cout << str1 << endl << endl << str2 << endl;

    return 0;
}

در دو مثال بالا به‌وسیلهٔ تابع large_pow، عدد ۹ به توان ۱۰۰۰ رسیده و در متغیر str1 ریخته شده است. سپس به‌وسیلهٔ تابع numRadixConvert مبنای آن از مبنای ۱۰ (Decimal) به مبنای ۳۶ تغییر کرده و در متغیر دیگری بنام str2 ریخته شده است. در تابع numRadixConvert، آرگومان آخر آن lF (lowerFlag) می‌باشد و معنی آن این است که خروجی lowercase باشد یا UPPERCASE. اگر 0 باشد یعنی خروجی UPPERCASE باشد. هر عدد غیر 0، یعنی خروجی lowercase باشد.

عدد ۹ به توان ۱۰۰۰ برابر است با (مقدار متغیر str1):

1747871251722651609659974619164660570529062487435188517811888011810686266227275489291486469864681111075608950696145276588771368435875508647514414202093638481872912380089977179381529628478320523519319142681504424059410890214500500647813935818925701905402605484098137956979368551025825239411318643997916523677044769662628646406540335627975329619264245079750470862462474091105444437355302146151475348090755330153269067933091699479889089824650841795567478606396975664557143737657027080403239977757865296846740093712377915770536094223688049108023244139183027962484411078464439516845227961935221269814753416782576455507316073751985374046064592546796043150737808314501684679758056905948759246368644416151863138085276603595816410945157599742077617618911601185155602080771746785959359879490191933389965271275403127925432247963269675912646103156343954375442792688936047041533537523137941310690833949767764290081333900380310406154723157882112449991673819054110440001

تغییر مبنای مقدار متغیر str1 از مبنای ۱۰ (Decimal) به مبنای ۲ (Binary):

11110011000010000010010110111110100000101111100101110011110001110111110010110001010011111111110100101011011001110011111000011010000110101110000110001110000100010010000010101100010010011111110111110001010101100101100010100100111100000111011011011110011100101100110010111111000011011111010101000001100111000010010000111101110101001101101110011011000011110001110010011010110100101110000000000101000000100011011111000011110101001010001110000000110110000100101001001100001110001110101000001001100011000001111101010101011111110011110011111011111010100100011010001010101011100010011110000110011011011011011110101111101010000100100010100001101001100001001001110110010000101110001110101110000101101001111000111010111010000001011100111110010101000111010100110100011011001001001100010000010001010001111010100100001011001110010010010010001111011010101110000010111011111001101111101010001100010110100001001010101001110010101100110011001011101000000001010010110010100011011100001110000111011010010011110010000101011001111010010011010001101110111000110100110101010001101011100011001010001001011110011110100000000100010100001111101011101101110110100110001101110100101001100000101100001001010100010010101100101010001000000101001001110110001011011100110001111110100111010001111001010100110010111101110001001110011100001010111000010010010110000000011111011000000000110101110111111001101111101000100001111100000111010111010010011101111010011010111100011001011001011001000101011011011101100010110111011010111001011001011001111110001111111100010101011001010000000001110011011011001100000001101011001000011101100111001101100111010111111111000000010001110000011100100010000111100110000011001101111010110111101011100110000001010000110010100001101010101101011011001000100100111110001101100111110101010101000111010010000101000001101111011001111010000101001001000010011000110010100111010000111000000010110110100111011111000111110000011010000001011010111010101110100100111100001100001100001011100100111101100010000000111110110101100101111011101110000100000010101101110111111101011101111100001000100100011110110101100000000010011011110101111001110011001100100010100110101000101011001000011111111011011101110111001000001101111010101110010011011010111010100000111001100011010110010101110110011010101000101000101111000000111100001011001000000111101011011110101010100001101110010101000010101101111000000100011001010011100001100101010010100010111010101001100011010010011101111110001111111011100000101101000110110101011101000000111101000110000000110011101101110111010000100000101110001011011111111101110000100001111000111111100001010111110001001011000100000001000000110110100000111110110101001101001100111100010011100101111001000000011100101011001011111110000001100100110110110111110010011100110000110010100101111000101011101010101010111100111101110001010101001011111000010111000100100110011100101101111100011101101101110101010000001001001100111110011111111010111100001000111100101111001000001011101100010001111000010101011011010000110000100001101011100010111111110001011100000010111001001111001011110010101010010000111011000100110000111100001011000010010100111000101011000110000101111000000111101001000001

تغییر مبنای مقدار متغیر str1 از مبنای ۱۰ (Decimal) به مبنای ۸ (Octadecimal):

3630202267640574563616762612377645331637032065606160422025422376761254542447407333634546277033725014702207565155633036162326456000500433703651216006604511416165011430175253763637372443212534236063333365752044241514111662056165605517072720134762507246433111420212172441316222217325602737157521426411251625463135001226243341607322362053172232156706465215343121136364004241753556646156451405411242254521005116613346176472171246275611634127022260037300065677157504174072722357232743131310533354267327131317617742531200163331401531035471547277700216034420746031572675346012062415255331044761547652507220501573172051102306247207002664737076032013272564474141413447542007665457356040255677535741044366540023365716314424650531037733567101572562332724071432625663250505700741310075336524156250255700431234145224272514322357617734055066535007506006355672040561337756041707741276113040100664076651514742345710034531376014466676234606245705352527475612513702704463455743555652011147637727410745710135421702533206041534277613402711713625220730460741302247053060570075101

تغییر مبنای مقدار متغیر str1 از مبنای ۱۰ (Decimal) به مبنای ۱۶ (Hexadecimal):

3CC2096FA0BE5CF1DF2C53FF4AD9CF8686B86384482B127F7C5596293C1DB79CB32FC37D5067090F7536E6C3C726B4B801408DF0F528E03612930E3A826307D55FCF3EFA91A2AB89E19B6DEBEA122869849D90B8EB85A78EBA05CF951D4D1B24C41147A90B39248F6AE0BBE6FA8C5A12A9CACCCBA014B28DC387693C8567A4D1BB8D3546B8CA25E7A01143EBB7698DD2982C2544ACA88149D8B731FA7479532F7139C2B849601F600D77E6FA21F075D277A6BC6596456DD8B76B9659F8FF156500736CC06B21D9CD9D7FC04707221E60CDEB7AE6050CA1AAD6C893E367D551D2141BD9E852426329D0E02DA77C7C1A05AEAE93C30C2E4F6203ED65EEE102B77F5DF0891ED6009BD79CCC8A6A2B21FEDDDC837AB936BA8398D65766A8A2F03C2C81EB7AA86E542B781194E19528BAA6349DF8FEE0B46D5D03D180CEDDD082E2DFF70878FE15F12C4040DA0FB534CF1397901CACBF81936DF2730CA5E2BAAAF3DC552F85C499CB7C76DD5024CF9FEBC23CBC82EC47855B43086B8BFC5C0B93CBCAA43B130F0B094E2B185E07A41

تغییر مبنای مقدار متغیر str1 از مبنای ۱۰ (Decimal) به مبنای ۳۶:

1P08Y09XH3VOMZJY2U5B9WQCMNSHU27X5X5ARBC1GUXWM901OMQ1OQ3XR9OIL8FIXPB2M5DVDPBD6QXS4A5CFG2W9I7X5ZWQ21QWK1QCMD0A3CU34OZJM1YUVM21ER1OCHLUWSFC7SDTVSASV5B4A5QOQYN0L8PUMY36B35ONZEJPT269AO81YZY0JXOGOO28Z5U133D9IN03TQKC9ATIOPR9FICX1PWQGYK5A9DLEHA5N67JYQLYZS3YLAA8MCRNP85J4VT9ENCHELXP8MSQVQG3U7SXQ1VEHHOOA150A8GFXGS53WUV7WSROYJK5O6ETYTQ5REWU7YWPYYEJP1E1AT2BQNKIGJQSXJULY44XXQGQ1E0NK620O7H761AS5KEG7AXAAXE5T3P0G8IAZOMU1FKWAILU6KHXVGDQQA5Q6B70X9VZRB5WHETX3ZQZ41L8UYTU178VM4YXI74TW71V9DLOS3CPLKA3RA7JVNKVG4HDVIJKH1LO6BMMNXQDS0MX1OBDSWOAEPYALLOHMBQ1N3MTAEA6YN299VOQWI2YSV66V7A5SW69GCI9J7CD327T42UM3FN4PJOCIG8LZOS8L3XBZAY9VX7GMN29

یک مثال ساده از نحوهٔ فراخوانی تعدادی از توابع درون abjadlib (این توابع به زبان ++C نوشته شده‌اند):

#include <iostream>
#include <abjadlib.h>

using namespace std;

int main()
{
    abjad obj1(L"بسم الله الرحمن الرحيم");
    cout << obj1.abHesab() << endl;
    cout << obj1.abHesab(obj1.MAKUS, obj1.MOJMAL) << endl;

    obj1 = L"محمد";
    cout << obj1.abHesab() << endl;

    abjad obj2;
    obj2 = L"علي";
    cout << obj2.abHesab() << endl;
    cout << obj2.abHarf() << endl;
    cout << obj2.abNoghte() << endl;

    // function call without an object
    cout << abjad::abChar(L'ي') << endl;
    cout << abjad::abChar(L'ي', abjad::MAKUS) << endl;
    cout << abjad::abHesab(L"بسم الله الرحمن الرحيم") << endl;
    cout << abjad::abHesab(L"بسم الله الرحمن الرحيم", abjad::SAGIR2) << endl;
    cout << abjad::abHesab(L"بسم الله الرحمن الرحيم", abjad::SAGIR2, abjad::MOFASSAL) << endl;
    cout << abjad::abCharNoghte(L'پ') << endl;
    cout << abjad::abCharMofassal(L'ا') << endl;

    return 0;
}

خروجی مثال بالا:

786
5858
92
110
3
2
10
100
786
66
165
3
111

نحوهٔ لینک کردن کتابخانه به کامپایلر در محیط IDEها کار ساده‌ای است و می‌توانید بسته به نوع IDE خود، در اینترنت جست‌وجو کنید. همراه با این کتابخانه یک مثال نیز ضمیمهٔ همین صفحه شده، که در دو محیط Code::Blocks و Qt نوشته شده است.

MD5 checksums:
e8b3ca6274d3cf890c702fec7d105f68 *roshanlib-v1.1.3.9.zip
c2b3bebd3b9e5e85c86f4e5e5142adcf *TEST-roshanlib-v1.1.3.9.zip