C++ Developer



در این سری آموزشی، با استفاده از openGL، روابط مثلثاثی و توابع آن (سینوس، کسینوس، تانژانت و.) و کتابخانه cmath کد نویسی خواهیم کرد.

در بخش اول با کمک نقاط A و B و C مثلثی را رسم کرده، طول فاصله‌ی نقاط را بدست آورده و سپس زوایای مثلث را محاسبه می‌کنیم. همچنین برای بدست آوردن زوایای مربوط از تابع مع کسینوس (reverse cosine) استفاده می‌شود.

برنامه‌ای که مینویسیم به گونه‌ای خواهد بود که کار بر با کلیلک کردن بر صفحه، نزدیکترین نقطه (از نقاط A, B, C) به موقعیت نشانگر تغییر مکان خواهد داد. سپس در محیط کنسول، طول پاره خط‌های AB, BC و CA و همیچنین زوایای نقاط A و B و C چاپ خواهد شد.

واحدهای اندازه‌گیری تماماً بر مبنای پیکسل است.

 

void mouse (int btn, int state, int x, int y)
{
    switch (state)
    {
    case GLUT_DOWN:
        if (btn == GLUT_RIGHT_BUTTON)
            exit(0);
        else if (btn == GLUT_LEFT_BUTTON)
        {
            dot1_distance = sqrt (pow((trianglePos[0]-x), 2) + pow((trianglePos[1]-y), 2));
            dot2_distance = sqrt (pow((trianglePos[2]-x), 2) + pow((trianglePos[3]-y), 2));
            dot3_distance = sqrt (pow((trianglePos[4]-x), 2) + pow((trianglePos[5]-y), 2));

            if (dot1_distance < dot2_distance && dot1_distance < dot3_distance)
                pos = 1;
            else if (dot2_distance < dot1_distance && dot2_distance < dot3_distance)
                pos = 2;
            else if (dot3_distance < dot1_distance && dot3_distance < dot2_distance)
                pos = 3;


            if (pos == 1)
            {
                trianglePos[0] = x;
                trianglePos[1] = y;
            }
            else if (pos == 2)
            {
                trianglePos[2] = x;
                trianglePos[3] = y;
            }
            else if (pos == 3)
            {
                trianglePos[4] = x;
                trianglePos[5] = y;
            }
            
            AB = sqrt (pow((trianglePos[2]-trianglePos[3]), 2) + pow((trianglePos[4]-trianglePos[5]), 2));
            BC = sqrt (pow((trianglePos[4]-trianglePos[5]), 2) + pow((trianglePos[0]-trianglePos[1]), 2));
            CA = sqrt (pow((trianglePos[0]-trianglePos[1]), 2) + pow((trianglePos[2]-trianglePos[3]), 2));
            
            A = acos((pow(BC, 2) + pow(CA, 2) - pow (AB, 2))/(2*BC*CA)) * 180 / 3.1415;
            B = acos((pow(AB, 2) + pow(CA, 2) - pow (BC, 2))/(2*AB*CA)) * 180 / 3.1415;
            C = acos((pow(AB, 2) + pow(BC, 2) - pow (CA, 2))/(2*AB*BC)) * 180 / 3.1415;

            system ("cls");
            cout    << "mouse x: " << x << " | mouse y: " << y << endl
                    << "AB: " << AB << " | BC: " << BC << " | CA: " << CA << endl
                    << "A: " << A << " | B: " << B << " | C: " << C << ends;
        }
    break;
    }
}


منبع: cppdev.blog.ir

این مطلب توسط GreatMAK نوشته شده است و منبع آن وبلاگ cppdev.blog.ir می باشد.


در این پروژه میتوان حروفی خاص را در رشته جست و جو کرد و به طور دلخواه آن را با حروفی دیگر جایگزین کرد. این قابلیت به طور معمول در نرم افزارهای واژه پرداز کاربرد دارد. کارکرد کلی به این صورت است که میتوان عبارتی را در متن جست و جو کرد، پس از پیدا کردن آن ارایه‌ای، موقعیت ابتدا و انتهای حروف پیدا شده را در خورد ذخیره می‌کند و سپس میتوان قسمت‌های مشخص (های‌لایت) شده را با حرف یا حروفی جدید جایگزین کرد. برای بهره‌مندی از توضیحات میتواندید هر یک از دو فایل با پسوند cpp. را دریافت کنید. در غیر این صورت فایل را با پسوند hpp. دریافت کرده و به عنوان سرفایل در پروژه خود بکار گیرید.

 

دریافت فایل‌ها:

wordfinder.cpp (پیشنهادی)

wordfinder.cpp

wordfinder.hpp

 

لینک گیت‌هاب این پروژه:

https://github.com/greatmak/public/blob/master/word_finder_replacer_withVisualContent.cpp


منبع: cppdev.blog.ir


 حداقل سی سال هست که از انتشار اولین نسخه های سیستم عامل های خانگی میگذره. ولی متاسفانه انگار این سی سال، تجربه ی مناسبی برای شرکت‌های نرم افزاری نشده. مایکروسافت همچنان اشتباهات گذشتش رو تکرار میکنه. مثل جهش های ناگهانی و قدم‌های بزرگی مثل حذف منوی استارت در ویندوز ۸، رابط کاربری سنگین ویندوز ویستا و انتشار عجولانه و نقص در پشتیبانی از سخت افزارها، آپدیت های وقت و بی وقت ویندوز ۱۰ و رعایت نکردن خواست مشتری و حریم خصوصی کاربر و برنامه های پیش فرض و مزخرفی مثل groove که لذت شنیدن موسیقی رو به عذاب دست و پنجه نرم کردن با باگ های نرم افزاری تبدیل میکنه. یا حتی windows store که تا به امروز بشخصه فقط موفق شدم یک بازی شطرنج ازش دانلود کنم ولی متاسفانه خود store با بازی در آوردن و هزارتوی دانلود ازش دیگه انرژی برای بازی شطرنج برام نذاشته بود. این اشتباهات شامل مانورهای اعجاب آور مایکروسافت روی یک مبحث کم اهمیت هم میشه. مانوری که مایکروسافت تا همین دیروز روی ویندوزفون میداد، حالا تبدیل شده به مرورگر اج. مانوری که روی کینکت داد و حالا به طور کلی بیخیالش شده، هزینه ای که روی استفاده از زبان ویژوال بیسیک کرد و. . اما وقتی یک کمپانی از شکست هاش درس نمیگیره دلیل نمیشه که کاربر هم به پای این اشتباهات و شکست‌ها بسوزه. شاید بگید که ما که پولی برای ویندوز نمیدیم دیگه اینهمه توقع چیه؟ باید بگم که هیچکس نمیده!. از کامپویترهای اف بی آی و پنتاگون تا لپ تاپ معلم ورزش یه دبستان دخترونه، همه و همه درحال حاضر نسخه های غیرقانونی ویندوز رو اجرا میکنن. فعال کردن ویندوز ۱۰ به روش غیر قانونی شاید کمتر از یک دقیقه زمان ببره و بعد از اون در هیچ جای دنیا پیگر قانونی چندانی نخواهد داشت!. همه ی ما یک کارخونه ی صدهزار پروسنلی نداریم که خریدن یا نخریدن سیستم عامل برامون تبدیل به یک دغدغه بشه. ولی خوب همین فرشته‌ی مهربونی که خدماتش رو به ما رایگان هدیه میکنه هم گاها شیطنت هایی داره. یا اینکه اصلا ویندوز بهترین سیستم عامل دنیا، ولی خوب بالاخره ادم دلش گاهی تنوع هم میخواد!. خصوصا با محیط کاربری و اینترفیس ویندوز که سی ساله تغییر مثبت چندانی نکرده. اینجاست که پروسه ی مهاجرت از ویندوز برای کاربران عادی اغاز میشه. معمولا افراد در این مرحله به چهار گونه ی جانوری تقسیم میشن:

۱- افرادی که یادی از دوران خوش قدیم می کنند و تصمیم به این میگیرن که برگردن به سیستم عاملی قدیمی تر مثل ویندوز ۷. ولی یکی از مشکلات این کار، عدم پشتیبانی سخت افزار‌های جدیدتر از سیستم عامل های قدیمی تره. بازیهای جدید روی این سیستم عامل ها اجرا نمیشن. نسخه های جدید نرم افزارهای مختلف برای سیستم عامل های قدیمی منتشر نمیشن. ولی خوب چرا باید همچین مشکلی وجود داشته باشه؟ مگه ویندوز ۷ توانایی اجرا و پشتیبانی از اینها رو نداره؟! در جواب باید که اتفاقا خیلی هم داره ولی سود جیب مایکروسافت و تولید کنندگان قطعات سخت افزاری میطلبه که جنین تی رو پیش بگیرن. اگر قرار باشه که سیستم عامل های جدید از همون قطعات قدیمی پشتیبانی کنند دیگه کسی سراغ خرید سخت افزار جدیدتر نمیره و از اونطرف هم اگر قرار باشه سخت افزارهای جدید از سیستم عامل های قدیمی‌تر پشتیبانی کنند دیگه کیه که به فکر ویندوز ۱۰ و ۱۱ و ۱۲ بیفته؟ همون ویندوز ۷ باید کافی باشه.

۲- عده‌ی دیگه هم اونایی هستن که فارغ از مسخره بازی های ویندوز هستن و فقط برای خاص بودن میرن سراغ سیستم عاملی به اسم مکینتاش. استفاده از آشغالی به اسم مکینتاش و اپل مثال افرادیه که تمایلی به زندگی عادی و انسان‌گونه ندارن و برای خاص بودن راضین برن توی غار زندگی کنن، توی کارتن بخوابن و یا از سطل آشغال غذا بخورن ولی مثل بقیه نباشن!. بهتره بیخیال این موجودات بشیم.

۳- حالا میرسیم به گونه ی جانوری سوم. کاربرانی که از روی عادت ماهانه و از سرکنجکاوی به فکر کوچ موقت به لینوکس میفتن!. ولی پشیمون میشن، به غلط کردن میفتن، با التماس برای یه شانس مجدد از ویندوز، دوباره به سراغش میرن و این ماجرا ماه بعد دوباره تکرار میشه. سعی کنید در طول مدت عادت ماهانه‌ی این افراد نزدیکشون نردید که بسیار عصبی و متعصبن در این برهه زمانی. ولی خوب خوبی عادت ماهانه اینه که موقته و فردی که دچارش میشه خودش بعد یه هفته میفهمه چه اشتباهی کرده!.

۴- حالا میمونه فقط دسته ی آخر. این دسته آخریا کیا میتونن باشن؟ افرادی که واقعا از سر نیاز سراغ لینوکس رفتن؟ برنامه نویس ها؟ مدیران سرور و شبکه؟ توسعه دهنده های نرم افزارای مختص لینوکس؟ کیان اینا؟ باید گفت که هیچکدوم از حدس هایی که زدیم درست نیست. چنین افرادی اصلا نیازی به مهاجرت به لینوکس ندارن. اینا یه مدت طولانی‌ای از این سیستم عامل استفاده میکنن و دیگه اقامت دائم دارن. دسته ی چهارم هم مثل دسته ی سوم میمونه. میرن سراغ لینوکس، ولی با یک تفاوت بزرگ و سنگین و دراز و آبدار! این تفاوت اسمش تعصبه. کاربرایی که از لینوکس استفاده میکنن و بعد یه هفته لینوکس زده میشن. واکنش این افراد طوریه که اگر جلوشون با لینوکس مخالفت کنی بخاطر شنیدن اسم لینوکس طوری استفراغ میکنن که شیر مادرشون رو هم از از دوران بچگی بالا میارن ولی بعد از پاک کردن دور دهنشون، با یک واکنش متعصبانه (همون چیز مالی کردن!) شروع به کثافت کاری به دور دهن مخاطب میکنن. این افراد بعد مدتی نه چندان طولانی حدود شش ماه تا یک سال،‌ نیاز شدیدی به نرم افزارهایی میکنن که در لینوکس در دسترس نیست و بالاخره به فکر بازگشت به ویندوز میفتن.

باید گفت که برای آفیس مایکروسافت جایگزینی مثل لایبرآفیس هست. جایگزین kmplayer هم vlc. ولی جایگزین افتر افکت چی؟ آیا GIMP به پای فتوشاپ میرسه؟ استیم مگه چندتا از بازی های روز دنیا رو روی لینوکس ساپورت میکنه؟ سرجمع چندتا نرم افزار گرافیکی بدربخور برای لینوکس پیدا میشه که یکی درمیون بخاطر بهینه نبودنشون برای این سیستم عامل هزارتا خطا و باگ ندن؟. آره هممون هم میدونیم اینکه توسعه دهنده ها تمایلی به جامعه لینوکسی نشون نمیدن تقصیر خود این سیستم عامل نیست. ولی چرا نباید کسی تمایل نشون بده؟ چرا کسی برای لینوکس هزینه اضافی نمیکنه؟ به یقین این وسط مشکلی هست که ارزش ریسک کردن نداره!. اون مشکل چیه؟ تعداد کاربرای لینوکس کمه؟ لینوکس پایداریش از ویندوز ایکس پی هم کمتره و کاربر رو مجبور میکنه که هر روز ازش بکاپ بگیره و وقتی که کاربر از این بکاپ گرفتن ها خسته شد بالاخره دوباره برمیگرده سراغ ویندوز، پس چرا هزینه اضافی؟ (این حرف من نیست و به هیچ وجه هم درست نیست. ضعف های اوبونتو و مینت و . رو گردن لینوکس نندازیم! چیزیه که جا فتاده ولی خوب تا نباشد چیزکی مردم نگویند چیزها!) یا دلیلش هر چیز دیگه ای که باشه باید دید که ادوبی سراغ لینوکس نرفته تاحالا و هیچ نسخه ای از افتر افکت برای لینوکس بیرون نداده، GTA برای لینوکس منتشر نشده. به هر سایتی برای دانلود نرم افزار برید یا بطور کلی در اون سایت نسخه ای از نرم افزار برای لینوکس نیست یا اگر هم باشه دکمه ی دانلودش رو گذاشتن پایین ترین و تاریکترین نقطه‌ی صفحه سایت چون که آنچنان اهمیتی برای کسی نداره!.

در آخر اگر میخواید که فردا و پس‌فردا پیش زن و بچتون شرمنده نشید بهتره که سراغ کارای عجیب غریب نرید!. به همون ویندوز ۱۰ و مایکروسافت paint بچسبید و خاطره ی بدی از لینوکس برای خودتون ایجاد نکنید. اینها تماما نظرات شخصی من بود ولی خوب چندسالی هست که دارم از لینوکس استفاده میکنم پس شاید آنچنان هم بیراه نگم!. اگر هم برنامه نویس تازه کاری هستید که نیاز به لینوکس پیدا کردید باید بهتون بگم که از از همین حالا پولاتون رو جمع کنید که در آینده ی نزدیک (حداقل برای بازی کردن هم که شده) قراره به یک لپتاپ ویندوزی یا یک هارد اضافی برای نصب ویندوز نیاز پیدا کنید (سراغ ماشین مجازی برای انجام دادم کارهای روزانه با ویندوز نرید که وقت تلف کردنه!).

پایااااااااااااااان


1-نگاهی به چیز های جدید در Ubuntu 17 بیندازید

تمامی نسخه های اوبونتو که تازه منتشر می شوند با تغییراتی همراه هستند، برخی کوچک و برخی قابل توجه. اوبونتو 17 بظاهر بسیار مانند نسخه‌ی پیشین خودش است اما که بیشتر تغییراتش زیرپوستی اند.

به عنوان مثال نصب کننده‌ی جدید سیستم عامل دیگر نیازی به پارتیشن مبدل (swap partition) ندارد. بجای آن از فایل های مبدل (swap files) استفاده میکند. حجم فایل های مبدل با پارتیشن مبدل متفاوت است و دیگر نیازی به استفاده 5% از فضای خالی هارد دیسک (یا 2048 مگابایت از رم) را ندارد، که خودش یک تغییر مثبت است.

نقد کامل Ubuntu 17 را برای دانستن جزئیات بیشتر و بررسی اجمالی تمامی تغییرات، از جمله اینکه چه نسخه‌هایی از نرم‌افزار های محبوب شما در دسترس اند را هم مطالعه کنید.

2-بروزرسانی ها را بررسی کنید

کمتر کسی است که چنین کارهایی را انجام دهد، آن هم در روزی که بتازگی سیستم عامل منتشر شده است. اما اگر شما یکی از آن افراد هستید، مهم است که به یادتان باشد حتما پس از نصب سیستم عامل، گذری هم به بروز رسانی ها بیندازید.

بسته‌های امنیتی، رفع اشکال‌های سیستم عامل و بروز رسانی نرم افزار های کلیدی ممکن است که منتظر شما باشند، پس قبل از آن که دست به هر کاری بزنید، بروزرسانی هارا بررسی کنید.

3-درایور کارت گرافیک را نصب کنید

بخاطر سپردند فعالسازی درایور اختصاصی سخت افزارها برای داشتن بهترین بازده رایانه، حیاتی است. چه کارت گرافیک، کارت شبکه یا پردازنده باشد.

برای بررسی اینکه آیا درایور جدیدی برای سخت افزار شما در دسترس است، ابتدا باید Additional Drivers app را از unity dash (یا داشبورد یونیتی) باز کنید و دستورالعمل موجود بر صفحه را دنبال کنید.

4-کدک های صوتی و تصویری را نصب کنید

شما سیستم عامل جدید خود را نصب و راه‌اندازی کرده‌اید اما اگر میخواهید که به موسیقی دلخواهتان گوش کنید، فیلمی ببینید و یا یک دیسک DVD را اجرا کنید، به نصب کدک ها نیاز پیدا می‌کنید.

سیستم عامل این امکان را همراه خود دارد که کدک ها را هم نصب کنید، اما اگر این گزینه را فعال نکردید (یا هنگام نصب متوجهش نشدید) نیازی به ترسیدن نیست: نصب کدک‌ها روی اوبنتو به کمک Ubuntu Software app کار آسانی است.

کافیست اینجا را کلیک کنید. (apt://ubuntu-restricted-extras)                                               

Unity Tweak Tool-5 را نصب کنید

Unity Tweak Tool یکی از کاربردی ترین ابزار هایی است که میتوانید بر روی ابونتو نصب کنید. به شما این اجازه را میدهد که به سرعت سیستم عامل را سخصی سازی کنید و رفتار و ظاهر میزکار اوبونتو را تغییر دهید و تنظیم کنید.

میتوانید با کلیک بر روی آیکن نرم‌افزارهای باز، آنها را بر روی نوار ابزار کمینه (minimize) کنید، اندازه فونت سیستم را تغییر دهید یا محیط کار چندگانه (multiple workspaces) خود را فعال کنید.

Unity Tweak بی برو برگرد برای آنهایی است که میخواهند اوبونتو را سفارشی‌سازی کنند.

minimize on click -6  را فعال کنید

فعالسازی minimize on click  تغییر کوچکی است (هر پنجره آی کمینه اختصاصیش را بر روی خود دارد)، اما همین یک تغییر میتواند به سرعت کار شما بیافزاید. اگر بتازگی از ویندوز به اوبونتو مهاجرت کرده‌اید این تغییر محیط کار اوبونتو را برای شما به مقداری آشنا تر می‌کند.

اگر Unity Tweak Tool را در مرحله قبل نصب کرده اید، نرم افزار را باز کنید، تب Launcher را انتخاب کنید و تیک minimize single window applications on click را بزنید.

به همین سادگی!.

7- پوسته‎های مدرن GTK را نصب کنید

پوسته‌ی پیشفرض unity gtk طی پنج سال اخیر تغییر چندانی را به خود ندیده است، پس شاید شما بخواهید با یک پوسته‌تازه تر سرحال بیایید!.

برای افرادی که بتازگی از ویندوز و مک مهاجرت کرده اند، ظاهر پیشفرض اوبنتو به نسب سایر سیستم‌عامل‌ها کمی از مد افتاده بنظر میرسد.

اما بر خلاف ویندوز و مک، تغییر پوسته‌ی اوبونتو کار ساده‌ای است.

Numix GTK یکی از محبوب ترین پوسته‌های اوبونتو است. این پوسته در سه نوع dark version،Numix gives Ubuntu a modern و  trendy feelدر دسترس است.


منبع: omgubuntu.co.uk

مترجم: cppdev.blog.ir


 

int* sortFunc (int *_array, int arraySize//arraySize تعداد المنت های آرایه را میگیرد
{

    int tempArray[arraySize] = {}; // آرایه ای که میخواهیم در آن عناصر مرتب شده را قرار دهیم

    for (int i = 0, tempPos = arraySize; i < arraySize; i++) // آغاز بررسی تک تک عناصر آرایه
    {

        // به این گونه کار میکند که برای بررسی هر عنصر یک متغیر به اندازه عناصر آرایه اصلی تعریف می شود و در حلقه که به تعداد عناصر ارایه تکرار میشود شرط میکنیم که اگر عدد مورد بررسی از هریک از اعداد قبل و بعد بزرگتر است یک واحد از عددی که هم اندازه تعداد کل عناصر است کم کند، با کمک این شرط میتوانیم موقعیت عدد را بدست آوریم. مثلا اگر عدد از چهار عنصر دیگر در ارایه بزرگتر باشد موقعیت آن باید خانه‌ی پنجم باشد
        int tempPosCounter = arraySize; //عددی که هم اندازه تعداد کل عناصر است
        for (int i2 = 0; i2 < arraySize; i2++)
        if (_array[i] >= _array[i2])
            tempPosCounter--;
        if (tempArray[tempPosCounter] != _array[i]) // ازین پس بررسی میکند که اگر این عدد از پیش تکرار شده است آن را در خانه های بعدی قرار دهد
            tempArray[tempPosCounter] = _array[i];
        else {
            bool reapetCheckerContinue = true;
            for (int reapetCheckerCounter = 1; reapetCheckerContinue; reapetCheckerCounter++)
                if (tempArray[tempPosCounter+reapetCheckerCounter] != _array[i])
                {
                    tempArray[tempPosCounter+reapetCheckerCounter] = _array[i];
                    reapetCheckerContinue = false;
                }
        }

    }
    return tempArray;
}

توضیح:

تقریبا هیچ راهی برای دریافت مستقیم اندازه یک آرایه در تابع وجود ندارد، به همین خاطر باید اندازه آرایه را به عنوان آرگومنت وارد کنیم. راه دیگر آن است که برای پایان آرایه، عددی را در نظر بگیرید تا در تابع تشخیص داده شود (مثلا -1 را به عنوان آخر ارایه تعیین کنید).

مثال:

int array[] = {4, 0, 2, 1, 3, 1};

    for (int i = 0; i < 5; i++)
        cout << sortFunc(array, 5)[i] << endl;

نتیجه:

 result:

0

1

1

2

3

4

 


منبع: cppdev.blog.ir

منبع آن وبلاگ cppdev.blog.ir می باشد.


+ با استفاده از تابع زیر می توان نزدیکترین موقعیت یک کاراکتر خاص را از نقطه ای معین در رشته به دست آورد.

int checkStr (string _str, int _beginning, char _char)
{
    int i = _beginning + 1;

    // دلیل اینکه موقعیت نقطه آغاز را با یک جمع کردیم آن است که اگر کاراکتر آغازین با کاراکتر تعیین شده برابر بود به اشتباه موقعیت نقطه آغاز برگردانده نشود 

    for (; _str[i] != _char; i++);
    return i;
}

 


به عنوان مثال:

string str = "012,456,89"

cout << checkStr (str, 3, ',');

 نتیجه:

 beginning: str[3]: ',' ("012,456,89")

_char: ','

result: 7

 


منبع: cppdev.blog.ir

منبع آن وبلاگ cppdev.blog.ir می باشد.


این آموزش کمی ساده اما کاربردی است. اگر تا به حال در openGL با اندازه ها و موقعیت ها کار کرده باشید متوجه خواهید بود که عرض و ارتفاع صفحه پنجره عددی میان -1 تا +1 است. یعنی اگر ارتفاع صفحه 100 پیکسل باشد و ما پیکسل  75 ام را مد نظر داشته باشیم موقعیت آن بر روی محور عرض ها 0.5- می باشد.

window in openGL

با استفاده از توابع زیر می توان به تناسب اندازه پنجره موقعیت را بر روی محور پیدا کرد.

float pixW (int _width)
{

    return (float)_width/glutGet (GLUT_WINDOW_WIDTH) *2 - 1;
}

 

float pixH (int _height)
{
    return 1 - (float)_height/glutGet (GLUT_WINDOW_HEIGHT)*2;
}

 در این صورت یک موقعیت همیشه بر روی صفحه پنجره ثابت خواهد ماند.


منبع: cppdev.blog.ir

این مطلب توسط GreatMAK  نوشته شده است و منبع آن وبلاگ cppdev.blog.ir می باشد.


با استفاده از تابع زیر قادر خواهیم بود کاراکتر های حرفی را با ترفند استفاده از ترتیب کد های اسکی اعداد 0 تا 9 به عدد تبدیل کنیم.

1) تبدیل حرف به عدد

int charToInt (char _char)
{
    for (int i = 48, num = 0; i < 58; i++, num++)

    // کد های اسکی اعداد 0 تا 9 از 48 تا 57 می باشد
    if ((int)_char == i)

        return num;
}

 2) تبدیل رشته به عدد

در این تابع به تابع بالا نیاز خواهیم داشت.

int strToInt (string _str, int _beginning, int _end)

// رشته, موقعیت ابتدای محدوده، موقعیت انتهای محدوده

// اگر قصد دارید تمامی رشته به عدد تبدیل شود کافیست نقطه آغاز را صفر و پایان را طول رشته قرار دهید
{
    int temp, num = 0;
    for (int i = _beginning; i <= _end; i++)
        {
            temp = charToInt(_str[i]);

            // تبدیل موقتی حرف

            // یعنی اگر یک رشته "56789" باشد و خروجی موقعیت سوم یعنی عدد 7 می شود 7
            for (int x = 0; x < _end - i; x++)

            // در این قسمت حرف به تناسب جایگاه خود به دفعات در 10 ضرب می شود

            // عامل تعیین کننده دفعات تکرار ضرب در عدد 10 موقعیت عدد است

            // مثلا در رشته "123" 1 که صد گان است و دو صفر دارد دوبار و 2 که دهگان است و یک صفر دارد دوبار و 3 به دلیل یکان بودن 0 بار در ده ضرب می شود
            {
                temp *= 10;
            }
            num += temp;

            // در نهایت حاصل هر حرف به مجوع اعداد اضافه می شود
        }
    return num;
}

 


منبع: cppdev.blog.ir

این مطلب توسط GreatMAK  نوشته شده است و منبع آن وبلاگ cppdev.blog.ir می باشد.


 پبش نیاز این آموزش: آموزش نصب و راه اندازی openGL

 

#include <GL/glut.h>

void display() // محتویات این تابع در پنجره نمایش داده می شود

{

        glClear (GL_COLOR_BUFFER_BIT); // بافر را پاک می کند

        glFlush();

}

int main(int argv, char** argc)

{

        glutInit (&argv, argc); // کد اعلام آغاز تنظیمات ابتدایی

        glutInitDisplayMode (GLUT_SINGLE | GLUT_RGBA); // مد نمایش که در آینده توضیح داده خواهد شد

        glutInitWindowPosition (0, 0); // موقعیت پنجره ویندوز بر اساس پیکسل

        // y و سمت راست x آرگومنت سمت چپ

        glutInitWindowSize (800, 600); // اندازه پنجره بر اساس پیکسل

         // h و سمت راست w آرگومنت سمت چپ

        int mainWindow = glutCreateWindow ("title"); // ایجاد پنجره تعریف شده و دریافت نام آن

        glutDisplayFunc (display); // معرفی تابع اصلی نمایش محتوا

        glutMainLoop(); // main تکرار

}

 

// جهت تغییر اندازه و موقعیت پنجره با وضوح و اندازه تصویر

 

// . . .

 

int screenW, screenH, winX = 0, winY = 0, winW = 800, winH = 600;

// به ترتیب از چپ به راست : طول صفحه نمایش، عرض صفحه نمایش، موقعیت پنجره بر محور طول، موقعیت پنجره بر محور عرض، طول پنجره، عرض پنجره

 

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

// display function:

// دلیل دریافت اندازه صفحه نمایش در این تابع آن است که ممکن است کاربر پس از اجرای برنامه وضوح صفحه را تغییر دهد و پنجره نیز باید به تبع آن تغییر کند پس جهت انجام این امر نیاز به این داریم که متغیر ها را به طور مکرر به روز کنیم

// cppdev.blog.ir

screenW = glutGet (GLUT_SCREEN_WIDTH); // دریافت طول صفحه نمایش

screenH = glutGet (GLUT_SCREEN_HEIGHT); // دریافت عرض صفحه نمایش

winW = screenW/2; // اندازه پنجره را به طور دلخواه بر اساس اندازه صفحه نمایش  (در این مثال نصف صفحه) تعیین می کنیم

winH = screenH/2; // - - -

winX = screenW/2 - winW/2; // پنجره در وسط صفحه قرار می گیرد

winY = screenH/2 - winH/2; // - - -

 

//- - - - - - - - - - - - - - - - - - - - - - - - - - - - -

//main:

glutInitWindowPosition (winX, winY);

glutInitWindowSize (winW, winH);

glutCreateWindow ("name");

glutInitDisplayFunc (display);

//. . .

منبع: cppdev.blog.ir

این مطلب توسط GreatMAK  نوشته شده است و منبع آن وبلاگ cppdev.blog.ir می باشد.


تبلیغات

محل تبلیغات شما
محل تبلیغات شما محل تبلیغات شما

آخرین وبلاگ ها

آخرین جستجو ها

برنامه ریزی کنکور تجربی 1399 دست نوشته های بانوی انرژی مثبت پیکاسو طرح اکالیپتوس بازار نخ و الیاف ایران Tony سرخ Hesam Fard مطالب ناب وبلاگ رسمی امیر حسین ظهیری