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

نسخه 1.1.2.4 کتابخانهٔ روشن دارای توابع جدیدی در حوزهٔ ریاضی است. نسخهٔ 1.0.0.0 این کتابخانه را می‌توانید از این لینک دانلود کنید. این کتابخانه نیز مانند نسخهٔ قبل به زبان C نوشته شده و یک کتابخانهٔ Static است. از این کتابخانه در زبان سی و سی++ می‌توان استفاده کرد. مجموعهٔ تمام این توابع را می‌توانید در هدرفایل‌های مربوطه مشاهده کنید. در نسخهٔ جدید علاوه‌بر وجود توابعی برای تبدیل تاریخ‌ها به یکدیگر (که در نسخهٔ قبل نوشته شده بود)، دارای توابع جدیدی برای کار کردن با ۶ عملیات مهم بیسیک ریاضی (جمع، تفریق، ضرب، تقسیم، توان و باقیمانده) است که کامپیوتر توان محاسبهٔ آن را در اعداد صحیح ۳۲ بیتی (int) و ۶۴ بیتی (long int) ندارد. این کتابخانه می‌تواند خروجی‌ای با بیش از ۱ میلیون رقم داشته باشد. همچنین نسخه جدید کتابخانهٔ روشن دارای توابعی برای تبدیل مبنای (Radix) اعداد به یکدیگر است. این توابع می‌توانند مبنای ۲ تا ۳۶ را به یکدیگر تبدیل کنند. توجه داشته باشید که در تقویم هجری قمری بدلیل رویت مستقیم هلال ماه در اول هر ماه ممکن است ۱ روز خطا داشته باشد؛ که تقریبا همهٔ تقویم‌های محاسباتی با کامپیوتر این مشکل را با تقویم هجری قمری دارند. این کتابخانه بوسیله‌ی TDM-GCC 4.4.1-2 کامپایل شده است.

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

#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:

#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_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

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

MD5 checksums:
d8cd74faf55ee53d63fb136bcd9ff804 *roshanlib-v1.1.2.4.zip
fa7480ddb7e3a599570fb609ef4d68bb *TEST-roshanlib-v1.1.2.4.zip