ORANGEPRO

ORANGEPRO

فناوری آینده رو ما به پیش می بریم....
ORANGEPRO

ORANGEPRO

فناوری آینده رو ما به پیش می بریم....

TRY CATCH در C++

بلوک try-catch در C++ برای مدیریت استثناءها (Exceptions) استفاده می‌شود. این مکانیسم به شما اجازه می‌دهد که کدی را که ممکن است باعث خطا یا استثناء شود، در یک محیط کنترل‌شده اجرا کنید و در صورت وقوع خطا، برنامه به جای کرش کردن، بتواند به صورت کنترل‌شده به خطا واکنش نشان دهد.

ساختار کلی به این صورت است:

    try: کدی که احتمال وقوع استثناء در آن وجود دارد، درون بلوک try قرار می‌گیرد.
    catch: اگر استثنایی در بلوک try رخ دهد، اجرای آن متوقف شده و کنترل به بلوک catch مربوطه منتقل می‌شود. شما می‌توانید چندین بلوک catch برای مدیریت انواع مختلف استثناءها داشته باشید.


#include <iostream>
#include <stdexcept> // برای std::runtime_error

int main() {
    int numerator = 10;
    int denominator = 0;
    int result;

    try {
        if (denominator == 0) {
            // پرتاب یک استثناء از نوع runtime_error
            throw std::runtime_error("Error: Division by zero is not allowed.");
        }
        result = numerator / denominator;
        std::cout << "Result: " << result << std::endl; // این خط اجرا نخواهد شد
    }
    catch (const std::runtime_error& e) {
        // مدیریت استثناء
        std::cerr << "Caught exception: " << e.what() << std::endl;
    }
    catch (...) {
        // مدیریت هر استثناء دیگری که نوع آن مشخص نشده باشد (Catch-all)
        std::cerr << "Caught an unknown exception." << std::endl;
    }

    std::cout << "Program continues execution." << std::endl;
    return 0;
}


نکات کلیدی:

    throw: کلمه کلیدی است که برای ایجاد (پرتاب کردن) یک استثناء استفاده می‌شود.
    انواع استثناء: می‌توانید انواع مختلفی از استثناءها را پرتاب و مدیریت کنید، مانند:
    استثناءهای استاندارد کتابخانه (مانند std::out_of_range, std::invalid_argument).
    کلاس‌های استثناء سفارشی که از کلاس پایه std::exception ارث‌بری می‌کنند.
    catch(...): این یک گیرنده عمومی است که هر نوع استثنایی را که قبلاً توسط گیرنده‌های خاص مدیریت نشده باشد، می‌گیرد. بهتر است این را همیشه به عنوان آخرین catch قرار دهید.
    اجرای کد پس از خطا: پس از مدیریت موفقیت‌آمیز یک استثناء در بلوک catch، اجرای برنامه از ادامه‌ی بلوک try-catch (بعد از آخرین catch) دنبال می‌شود، نه از ابتدای بلوک try.

API چیه؟

                                                         API     مخفف عبارت Application Programming Interface هست، یعنی “رابط برنامه‌نویسی کاربردی”.

به زبان خیلی ساده، API مثل یه پیش‌خدمت یا مترجم بین دو تا نرم‌افزار یا سرویس مختلف عمل می‌کنه. فرض کن می‌خوای از یه رستوران غذا سفارش بدی. تو (یه برنامه) نمی‌تونی مستقیم بری توی آشپزخونه (برنامه دیگه) و به آشپز بگی چی درست کنه. در عوض، میری سراغ پیش‌خدمت (API) که منوی غذاها رو داره، سفارش تو رو می‌گیره و به آشپز می‌رسونه، و بعد غذای آماده شده رو برات میاره.

API هم دقیقا همین کار رو برای نرم‌افزارها انجام می‌ده:

    تعریف قوانین و پروتکل‌ها: API مشخص می‌کنه که چطور برنامه‌ها می‌تونن با هم صحبت کنن، چه اطلاعاتی رو می‌تونن از هم بپرسن و چه نوع پاسخ‌هایی رو دریافت کنن. مثل اینکه بدونه چطور درخواست بده (مثلاً “اطلاعات آب و هوای توکیو رو بهم بده”) و چه فرمتی از پاسخ رو انتظار داره (مثلاً “دما، رطوبت و سرعت باد”).
    انتزاع پیچیدگی: برنامه‌نویس‌ها لازم نیست تمام جزئیات پیچیده کارکرد یک سرویس دیگه رو بدونن. مثلاً وقتی داری از نقشه گوگل توی اپلیکیشن خودت استفاده می‌کنی، نیازی نیست بدونی گوگل چطور داده‌های ماهواره‌ای رو پردازش می‌کنه؛ فقط از طریق API گوگل مپ این قابلیت رو به اپ خودت اضافه می‌کنی.
    قابلیت همکاری (Interoperability): باعث می‌شه نرم‌افزارهای مختلف که توسط تیم‌های مختلف و با تکنولوژی‌های متفاوت ساخته شدن، بتونن با هم کار کنن و اطلاعات رو رد و بدل کنن.

چند مثال کاربردی API:

    وب‌سرویس‌های آب و هوا: وقتی یه اپلیکیشن هواشناسی رو باز می‌کنی، اون اپلیکیشن از API سرویس‌دهنده‌های هواشناسی (مثل OpenWeatherMap) برای گرفتن اطلاعات استفاده می‌کنه.
    شبکه‌های اجتماعی: وقتی می‌خوای با اکانت گوگل یا فیسبوکت وارد یه سایت دیگه بشی، اون سایت از API فیسبوک یا گوگل استفاده می‌کنه تا هویت تو رو تایید کنه.
    پرداخت آنلاین: درگاه‌های پرداخت اینترنتی از API برای ارتباط با بانک‌ها و پردازش تراکنش‌های مالی استفاده می‌کنن.
    نقشه‌ها: اپلیکیشن‌هایی که از نقشه استفاده می‌کنن (مثل اسنپ یا تپسی)، از API سرویس‌هایی مثل Google Maps یا نشان بهره می‌برن.

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

توابع پرکاربرد در C++-8

تابع sleep() یکی از مفاهیم بنیادی در برنامه‌نویسی هم‌روند (Concurrent Programming) و مدیریت زمان در سیستم‌عامل‌هاست.


تشریح تابع sleep() در C/C++
تابع sleep() برای متوقف کردن اجرای یک ریسه (Thread) یا فرآیند (Process) برای یک مدت زمان مشخص استفاده می‌شود. این کار باعث می‌شود که منابع CPU به طور موقت آزاد شده و برای کارهای دیگر در دسترس قرار گیرند.
۱. استانداردها و کتابخانه‌ها
نحوه استفاده از sleep() بستگی به سیستم‌عامل و استانداردی دارد که از آن استفاده می‌کنید:
    استاندارد POSIX (سیستم‌های شبه یونیکس مانند لینوکس و macOS):
    تابع: sleep(unsigned int seconds)
    کتابخانه: <unistd.h>
    واحد زمان: ثانیه (integer).

    استاندارد ویندوز (Windows API):
    تابع: Sleep(DWORD dwMilliseconds)
    کتابخانه: <windows.h>
    واحد زمان: میلی‌ثانیه (DWORD یک عدد صحیح بدون علامت ۳۲ بیتی است).

    استاندارد C++ مدرن (C++11 به بعد):

    توصیه می‌شود از این روش استفاده کنید چون پلتفرم-مستقل (Platform-Independent) است.
    تابع: std::this_thread::sleep_for(const chrono::duration& rel_time)
    کتابخانه: <thread> و <chrono>
    واحد زمان: هر واحد زمانی دلخواه (مثلاً نانوثانیه، میکروثانیه، میلی‌ثانیه) که توسط std::chrono::duration مشخص می‌شود.

۲. مکانیسم کارکرد (در سطح سیستم‌عامل)

هنگامی که یک ریسه تابع sleep() را فراخوانی می‌کند، هسته سیستم‌عامل (Kernel) کار زیر را انجام می‌دهد:
    انتقال به حالت انتظار (Waiting State): ریسه فراخواننده از لیست ریسه‌های “آماده اجرا” (Runnable) خارج شده و به لیست ریسه‌های “در انتظار” (Waiting/Sleeping) منتقل می‌شود.
    آزادسازی زمان‌بند: زمان‌بند سیستم‌عامل (Scheduler) متوجه می‌شود که این ریسه فعلاً نیازی به منابع CPU ندارد و می‌تواند به ریسه‌های آماده دیگر فرصت اجرا دهد.
    تایمر و بیدار شدن: هسته یک شمارنده زمانی داخلی برای آن ریسه تنظیم می‌کند. پس از سپری شدن مدت زمان مشخص شده، هسته ریسه را از حالت انتظار خارج کرده و آن را به لیست “آماده اجرا” برمی‌گرداند.


. تفاوت با تأخیر فعال (Busy Waiting)

تأخیر فعال (Active Waiting/Busy Waiting): شامل حلقه‌هایی است که به طور مداوم شرطی را بررسی می‌کنند .

   while (true) {
    // CPU به طور مداوم در اینجا مشغول چک کردن است.
}
این روش باعث می‌شود CPU ۱۰۰٪ برای یک کار بی‌فایده مصرف شود.

استفاده از sleep(): این تابع به ریسه اجازه می‌دهد تا کاملاً از اجرای CPU خارج شود و تنها زمانی مجدداً فعال شود که زمان مقرر فرا برسد. این رویکرد بسیار کارآمدتر و استاندارد است، خصوصاً در سیستم‌های چندوظیفه‌ای (Multitasking).



خصوصیات سال اسب

سال اسب یکی از دوازده حیوانی است که در تقویم زودیاک چینی (Chinese Zodiac) می‌آید. این تقویم، که اساساً یک تقویم نجومی-کشاورزی است، چرخه‌ای دوازده ساله دارد و هر سال به یک حیوان اختصاص داده می‌شود.
۱. جایگاه سال اسب در چرخه‌ی ۱۲ ساله

حیوانات به ترتیب زیر پشت سر هم می‌آیند:

موش (Rat) →→ گاو (Ox) →→ ببر (Tiger) →→ خرگوش (Rabbit) →→ اژدها (Dragon) →→ مار (Snake) →→ اسب (Horse) →→ بز (Goat) →→ میمون (Monkey) →→ خروس (Rooster) →→ سگ (Dog) →→ خوک (Pig)

بر اساس تقویم چینی که یک تقویم قمری-شمسی است، سال اسب معمولاً بین اواخر ژانویه و اواسط فوریه آغاز می‌شود.


۲. سال‌های اخیر اسب
آخرین سال‌های اسب عبارتند از:

    ۲۰۱۴
    ۲۰۰۲
    ۱۹۹۰
    ۱۹۷۸
    ۱۹۶۶
    … و الی آخر (با فاصله ۱۲ سال)

سال آینده اسب در تقویم چینی، سال ۲۰۲۶ خواهد بود (آغاز شده در ۲۶ ژانویه ۲۰۲۶).
۳. خصوصیات مرتبط با سال اسب

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

۴. سازگاری‌ها (Compatibility)
در علم طالع‌بینی چینی، سازگاری بین حیوانات اهمیت دارد. اسب معمولاً با ببر و سگ سازگاری بسیار خوبی دارد. همچنین، اسب‌ها اغلب چالش‌هایی در ارتباط با موش (که حیوان مخالف اسب است) خواهند داشت.


۵. پنج عنصر (Five Elements)
هر سال اسب همچنین با یکی از پنج عنصر اصلی (چوب، آتش، خاک، فلز، آب) پیوند خورده است که تأثیر ظریفی بر ویژگی‌های فرد می‌گذارد. برای مثال:
    سال اسب آتش (۱۹۶۶): بسیار پرشور، جسور و موفق.
    سال اسب خاک (۱۹۷۸): عمل‌گرا، با ثبات و متمرکز بر اهداف.

سال 1405 بر همه مبارک

سال نو شمسی را به همه هموطنانم تبریک  میگم


نماد (n)O بزرگ چیست؟

Big O Notation یک ابزار ریاضی برای توصیف نحوه رشد (Scaling) زمان اجرای یک الگوریتم (یا مصرف حافظه آن) با افزایش حجم ورودی (nn) است. به زبان ساده، این نماد به ما می‌گوید که الگوریتم چقدر “کند” می‌شود وقتی ورودی آن خیلی بزرگ می‌شود.

نکته کلیدی: Big O بر بدترین حالت (Worst-Case Scenario) تمرکز دارد و با نادیده گرفتن ضرایب ثابت (Constants) و مراتب پایین‌تر (Lower Order Terms)، صرفاً بر روی مرتبه غالب (Dominant Term) تمرکز می‌کند. این کار باعث می‌شود بتوانیم الگوریتم‌ها را بر اساس مقیاس‌پذیری آن‌ها مقایسه کنیم، بدون اینکه وابسته به سخت‌افزار خاصی باشیم.


چرا O(n) خوب است؟

در پروژه‌هایی با داده‌های حجیم (Big Data) یا سیستم‌های بلادرنگ (Real-Time Systems) مانند رباتیک، ما همیشه به دنبال الگوریتم‌هایی با پیچیدگی پایین هستیم. O(n)معمولاً نشان‌دهنده یک الگوریتم بسیار کارآمد است، زیرا اجرای آن با افزایش حجم داده‌ها قابل پیش‌بینی و کنترل باقی می‌ماند.

زیر شاخه های کتابخانه QT و توضیحات آنها


    Qt Core: این کتابخانه اصلی نوشتن برنامه‌ها در Qt است و شامل کلاس‌هایی برای مدیریت شیء، حوادث، زمان‌بندی و فایل‌ها می‌شود.

    Qt Widgets: برای ایجاد رابط‌های کاربری کلاسیک و مبتنی بر ویجت. این کتابخانه شامل ابزارهایی مانند دکمه‌ها، پنجره‌ها، منوها و غیره است.

    Qt GUI: برای انجام کارهای گرافیکی مانند رندر کردن تصاویر، نگهداری و مدیریت رنگ‌ها و فضای گرافیکی.

    Qt Quick: برای توسعه رابط‌های کاربری با استفاده از QML (زبان نشانه‌گذاری Qt)، که به شما امکان می‌دهد گرافیک HTML5 و متحرک بسازید.

    Qt Network: برای انجام وظایف شبکه‌ای مانند ارسال و دریافت داده‌ها از طریق TCP/IP، HTTP و دیگر پروتکل‌های شبکه.

    Qt Multimedia: اگر قصد دارید محتوای چندرسانه‌ای (صوت و ویدیو) را مدیریت کنید، این کتابخانه مفید است.

    Qt SQL: برای دسترسی و کار با پایگاه‌های داده مختلف، از جمله SQLite، MySQL و PostgreSQL.