تجربه‌های پراکنده‌ی یک مسعود
کاربران حاضر: ۱ کاربر
جستجو در نوشته‌ها:   
یک مسعود
یک مسعود هستم و اینجا از تجربه‌ها و مطالعات خودم در حوزه‌ی ریاضیات، حل مسأله، الگوریتم‌ها و برنامه‌نویسی می‌نویسم.
برای آشنایی بیشتر با من سری به اینجا بزنید.
»  هدر فایل bits/stdc++.h
معرفی هدرفایل bits/stdc++.h برای کاهش زمان آماده شدن کد مسابقات برنامه‌نویسی

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

    هدر فایل bits/stdc++.h این زحمت رو کم می‌کنه. زمانی که این هدر رو include می‌کنیم، تمام فایل‌های سرآیند استاندارد به برنامه اضافه می‌شن و اصولا دیگه نیازی نیست چیزی رو اضافه کنیم. ممکنه به نظر بیاد این اضافه شدن دسته‌جمعی سربار زیادی داشته باشه. اما باید در نظر داشت که حتی اگه اینطور باشه، برای ما زمان اجرا مهم هست و نه زمان کامپایل برنامه.

ارسال پیام
»  نکته‌ای از مسأله‌ی Graphical Editor
استفاده از stringstream در حل سوالات مسابفات برنامه‌نویسی با زبان برنامه‌نویسی ++C

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

    اینجاست که stringstream به کار می‌یاد و می‌تونه به ما کمک کنه خط رشته‌ای ورودی رو در صورت نیاز خیلی ساده به عدد تبدیل کنیم یا از پردازش خط صرف‌نظر کنیم.

ارسال پیام
»  ابزار UVA Toolkit
معرفی وب‌سایت UVA Toolkit برای کمک به حل سوالات برنامه‌نویسی UVA Online Judge

وب‌سایت UVA Toolkit این امکان رو فراهم می‌کنه که برای سوالات وب‌سایت UVA Online Judge ورودی مد نظرمون رو بدیم و خروجی متناظرش رو ببینیم. به این ترتیب هم می‌تونیم ابهام در نحوه‌ی تولید خروجی رو رفع کنیم و هم زمان برای تولید دستی خروجی نذاریم.

    در ضمن برای هر سوال موضوع یا روش حل سوال راهنمایی شده.

ارسال پیام
»  نکته‌ای از مسأله‌ی LC-Display
نکته‌ای در باب روش ذخیره کردن ورودی یک مسأله

زمانی که ورودی مسأله از نوع عددی هست (حالا صحیح یا اعشاری) لزومی نداره داخل متغیر عددی ذخیره کنیم. گاهی ممکنه ذخیره‌ی اون به صورت رشته بهتر باشه. مثلا برای مسأله‌ی LC-Display باید عدد رو از چپ به راست و رقم به رقم پردازش کنیم. پس چه بهتر که به صورت رشته یا آرایه‌ای از کاراکترها ذخیره شه.

ارسال پیام
»  تابع popen
روش اجرای برنامه‌ای دیگر داخل کد ++C و استفاده از خروجی آن

گاهی لازمه یه برنامه‌ی خارجی رو از برنامه‌ی خودمون اجرا کنیم و خروجی اون رو استفاده کنیم. حالا این برنامه می‌تونه یه برنامه‌ی اجرایی دیگه باشه یا یکی از ابزارهای سیستم عامل مثل ping یا حتی اجرای یه برنامه‌ی java. اونچه که مهمه اجرا شدن از خط فرمان و تولید خروجی متنی‌ه.

    زبان ++C برای این کار تابع popen رو داره که با خط فرمان به شکل فایل برخورد می‌کنه. یعنی دستور مد نظرمون رو به صورت اسم فایل بهش می‌دیم و بعد خروجی رو ازش می‌خونیم.

ادامه ...
»  بازی TicTacToe
پروژه‌ی بازی TicTacToe با زبان برنامه‌نویسی ++C و Qt

چند روز قبل به سرم زد یه سری بازی رو با ++C پیاده‌سازی کنم. ایده‌ی اول همین مین‌روب بود. اما با TicTacToe شروع کردم!

    این پروژه رو با Qt و محیط Qt Creator کار می‌کنم و در طراحی فرم از امکانات Design (طراحی فرم به روش Drag-Drop) استفاده نمی‌شه.

ادامه ...
»  سینوس و کسینوس را قورت بده
محاسبه‌ی جدولی سینوس و کسینوس زوایای مشهور

اخیرا ویدئوهایی پخش می‌شه که چطور به کمک کف دست می‌شه سینوس و کسینوس زاویه‌های مشهور رو حساب کرد. به این ترتیب که هر انگشت نماد یه زاویه محسوب می‌شه و بعد انگشت زاویه‌ی مورد نظر رو باید جمع کنی و ...

    من به شخصه اگه بخوام با این روش یاد بگیرم احتمالش زیاده قاطی کنم که وقتی انگشتمو جمع کردم چه سمتی باید بشمرم و اگه اینوری بشمرم سینوس می‌شه یا کسینوس!

ادامه ...
پیشنهاد صفحه
به اشتراک‌گذاری صفحه

QR-Code صفحه

اشتراک‌گذاری در LinkedIn    Cloob    اشتراک‌گذاری در Twitter    اشتراک‌گذاری در Facebook    اشتراک‌گذاری در فیس‌نما

Google Plus    ارسال با پست الکترونیک    اشتراک‌گذاری در Digg    ارسال با Telegram    اشتراک‌گذاری در StumbleUpon
تعداد:  ۹

میانگین:  ۴.۸۳  از  ۵.۰۰
عمر:  ۳۴۳ روز

بازدید کل:  ۵۱۶۷۴ بازدید

بازدید امروز:  ۷۷  بازدید

بازدید ۲۴ ساعت گذشته:  ۱۹۷  بازدید

بازدید ۷ روز گذشته:  ۱۵۱۴  بازدید

بازدید ۳۰ روز گذشته:  ۵۹۹۸  بازدید
914.83 5.00
تجربه‌های پراکنده‌ی یک مسعود در عالم ریاضیات، الگوریتم و برنامه‌نویسی تجربه‌های پراکنده‌ی یک مسعود تجربه‌های پراکنده‌ی یک مسعود

قبلا پستی داشتم در مورد اینکه تامین امنیت فرآیند ساده‌ای نیست و صرف خوب بودن الگوریتم رمزنگاری و مسائلی از این دست نمی‌شه از امنیت برنامه یا سیستم مطمئن بود. در مورد امنیت انتقال اطلاعات هم بحث شد که خیلی مهم‌ه و یکی از قسمتاش این‌ه که احراز هویت انجام شه و مطمئن باشیم با نفر یا سیستم مورد نظر خودمون در ارتباطیم.

    این روزا خبری منتشر شد در مورد هک شدن تلگرام که ظاهرا باعث لو رفتن شماره تلفن‌ها و احتمالا پیام‌های چند میلیون کاربر ایرانی شده. کاری به صحت و سقم این خبر و میزان اطلاعات لو رفته ندارم. اما در کل این نوع نفوذ رو از دو منظر می‌شه بررسی کرد. اول، نفوذپذیری احتمالی سیستم مخابراتی که به نفوذگر این فرصت رو بده تا پیام‌های ارسال شده از تلگرام برای کاربر رو بخونه و از این طریق بتونه خودش رو جای کاربر اصلی جا بزنه؛ و دوم، سهل‌انگاری یا بی‌اطلاعی کاربر در مورد تنظیمات امنیتی برنامه.

ادامه ...

نکته‌ای در استفاده از map


نکته‌ای در مورد استفاده از ساختمان داده‌ی map با مثالی به زبان برنامه‌نویسی ++C

ساختمان داده‌ی map (یا dictionary) از ابزارهای مهم و کاربردی هر زبان برنامه‌نویسی‌ه که برای برقراری نگاشت بین هر نوع کلید و مقدار متناظر استفاده می‌شه. آرایه‌های معمولی یه عدد صحیح رو به عنوان کلید به یه مقدار از هر نوع کلاس یا نوع داده نگاشت می‌کنن. اما وقتی از map استفاده می‌کنیم، این امکان بهمون داده می‌شه که از اشیاء کلاس‌ها و انواع داده‌های پیش‌فرض هر زبان برنامه‌نویسی به عنوان کلید استفاده کنیم. پس مشخصه که پیاده‌سازی خیلی از عملیات‌ها رو ساده‌تر می‌کنه و کمک بزرگی به حساب می‌یاد.

    با توجه به نوع نگاشت، طبیعتا محاسبات map برای ذخیره کردن و بازیابی اطلاعات پیچیده‌تر از آرایه‌‌های معمولی‌ه. برای مثال برنامه‌ای به زبان ++C رو در نظر بگیرید که مقدار هفتصد هزار جمله‌ی اول دنباله‌ی فیبوناچی رو به روش برنامه‌نویسی پویا داخل یه آرایه و همینطور یه map ذخیره می‌کنه و مدت زمان اجرای این فرآیندها رو به عنوان خروجی چاپ می‌کنه:

 1  int main(){
 2      const int size = 700000;
 3      int a[size];
 4      map<int, int> b;
 5      clock_t tStart;
 6      double cps = CLOCKS_PER_SEC;
 7      a[0] = b[0] = 0;
 8      a[1] = b[1] = 1;
 9      tStart = clock();
10      for(int i = 2 ; i < size ; i++)
11          a[i] = a[i - 1] + a[i - 2];
12      cout << "Time for array: " << (clock() - tStart) / cps << "s" <<  endl;
13      tStart = clock();
14      for(int i = 2 ; i < size ; i++)
15          b[i] = b[i - 1] + b[i - 2];
16      cout << "Time for map: " << (clock() - tStart) / cps << "s" << endl;
17      return 0;
18  }

ادامه ...

ده نکته برای کنکور


تجربه‌های کنکوری من در یک یادداشت قدیمی

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

      

    «

    چیزی تا کنکور ارشد نمونده. وظیفه‌ی خودم دونستم در مقام یه دوست که این مرحله رو گذرونده چند تا نکته رو یادآوری کنم. این نکات ربطی به سبک درس خوندن و این مسائل نداره؛ که اگه داشت خیلی زودتر از اینا باید می‌گفتم. ربطی هم به کنکور ارشد نداره. یه سری تجربه هستن از پنج بار کنکوری که تا حالا شرکت کردم.

        

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

ادامه ...


•    آرش میلانی
هکر و نینجای خوشحال‌سازی
•    توسعه دهنده
یادداشت‌های بهروز بختیاری درباره‌ی توسعه‌ی نرم‌افزار و فرآیندهای توسعه‌ی نرم‌افزار
•    در ستایش آزادیِ محتوا
یک به اصطلاح وبلاگ نویس
•    ژورنال روزانه
نوشته‌هایی در مهندسی نرم‌افزار
•    عسل راد
دختری با فکرهای بزرگ و هیجان انگیز
•    گودزیلای وب فارسی
وبلاگ پیام صادری
•    واینسا برو جلو
نوشته‌های نسرین قاسمی
تمامی نوشته‌های این وب‌گاه تحت قرارداد باز Creative Commons Attribution-ShareAlike v4.0 هستند.