بایگانی دسته: فناوری

مباحث آی‌تی ما!

چگونه از ویندوز ۸ درخواست کنیم تا اینترنت ما را مثل سیاه‌چاله نوش‌جان نکند!

یکی از ایرادهایی که کاربرای ایرانی به ویندوز ۸ وارد می‌کنن اینه که ویندوز ۸ به شدت پهنای باند مصرف می‌کنه (که اون رو به غلط به  Live Tile نسبت دادن که کاملا بی‌ربطه!) و من هم اینو قبول دارم و تجربه‌ش کردم (۵۰۰ مگ تو یه شب!) و البته چون ویندوز ۸ سیستم‌عامل خیلی خوبیه دنبال رفع مشکل گشتم و مشکل (که البته نمی‌شه اسم‌ش رو مشکل گذاشت!) رو پیدا کردم و رفع‌ش کردم.

ادامه خواندن چگونه از ویندوز ۸ درخواست کنیم تا اینترنت ما را مثل سیاه‌چاله نوش‌جان نکند!

دانلود مستقیم فایل از شبکه‌ی تورنت بدون هیچ دردسری!

دیروز که بخش «فیلم روز» رو معرفی کردم قرار بود این فیلم‌ها رو توی مگا براتون آپلود کنم چون فکر می‌کردم مگا مشکل کپی‌رایت نداره و لینک‌ش هم مستقیم بود. اما فهمیدم که توی مگا هم نباید کپی‌رایت رو زیر پا بذاریم برای همین هم یه راه خوب برای دانلود تورنت بدون مشکل بهتون معرفی می‌کنم.

توی اینترنت چندتایی سایت هستند که براتون تورنت رو دانلود می‌کنن و به‌صورت لینک مستقیم در اختیارتون قرار می‌دن و یکی از بهترین‌های اونا که قبل از سرور دو برنامه‌نویس من از اون استفاده می‌کردم سایت zbigz هست‌ش. این سایت با محدودیت ۸ گیگ فایل رو براتون دانلود می‌کنه و تا یک هفته هم از اون نگهداری می‌کنه. و چون حجم فیلم‌هایی که معرفی می‌کنم از ۱.۵ گیگ بیش‌تر نمی‌شه این سرویس کاملاً مناسب این کاره و هیچ مشکلی باهاش نخواهید داشت.

image01

برای استفاده از zbigz باید اول توی سایت‌ش ثبت‌نام کنید که ثبت‌نام توش رایگانه. بعد از ثبت‌نام برای دانلود تورنت لینک magnet تورنت رو (معمولاً توی سایت‌های اشتراک‌گذاری تورنت از جمله kath.ph و yify-torrents لینک مگنت به‌شکل آهنربا نمایش داده می‌شه) یا لینک فایل تورنت رو توی کادر متنی وسط صفحه وارد می‌کنید و یا از گزینه‌ی Upload .torrent file برای آپلود فایل تورنت‌تون استفاده می‌کنید و بعد از اون GO! رو می‌زنید و روی Free Account کلیک می‌کنید تا در حالت رایگان براتون فایل رو دانلود کنه.

 zbigz

و پس از اون هم منتظر می‌شید تا سایت تورنت رو براتون دانلود کنه (فکر کنم صفحه‌ی مرورگر موقع دانلود فایل تورنت باید باز باشه تا فایل دانلود بشه) و فایل رو با استفاده از گزینه‌ی Download دانلود می‌کنید ویا تمام محتویات فایل تورنت رو با گزینه‌ی Zip به فرمت زیپ در میارید (براتون این کار رو می‌کنه) و بعد دانلود می‌کند. سرعت دانلود فایل در حالت رایگان حداکثر ۱۵۰کیلوبایت برثانیه‌ست که به نسبت فیلترنت ایران مناسبه ولی ممکنه سرورهای رایگان‌ش به دلیل شلوغی گاهی جواب ندن که این کم اتفاق می‌افته. تقاوت‌های پریمیوم و رایگان رو می‌تونید این‌جا ببینید.

به همین سادگی، به همین خوشمزگی!

آموزش برنامه‌نویسی – بخش ششم – شرط‌ها و حلقه‌ها

سلام

به بخش ششم آموزش برنامه‌نویس خوش اومدید

توی بخش قبلی یه‌ذره با شرط‌ها آشنا شدیم و حالا می‌خواهیم بیش‌تر باهاشون آشنا بشیم.

ما یاد گرفتیم که شرط‌های ما باید این‌جوری باشن:

if(/*if statement*/)
{
//do something...
}
else
{
//if not do this job...
}

و البته اینکه می‌شه توی ifهامون از ifهای دیگه هم استفاده کنیم و برای این کار هیچ محدودیتی وجود نداره.

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

همون‌طور که متغیرهای عددی‌مون یک‌سری عملیات ریاضی داشتن برای متغیرهای منطقی (یعنی همین درست یا غلط خودمون) هم یک‌سری عملیات وجود داره که اتفاقاً خیلی هم کاربردیه. البته قبلاً هم بدون این که بدونیم از این عملیات ها استفاده کردیم ولی خودمون خبر نداشتیم.

اولین عملگری که بررسی می‌کنیم روی چندتا متغیر منطقی کار نمی‌کنه بلکه فقط روی یکی متغیر منطقی تغییر ایجاد می‌کنه. این عملگر مقدار برعکس متغیر منطقی‌مون رو برمی‌گردونه. یعنی اگر «درست» باشه «غلط» رو بر می‌گرونه و بلعکس. توی سی‌پلاس‌پلاس هم با علامت تعجب «!» نمایش داده می‌شه. مثلاً فرض کنیم می‌خواهیم چک کنیم که فرد مورد نظر ۱۰ سال‌ش نباشه. برنامه‌مون این‌جوری می‌شه:

int main()
{
int age;
cin >> age;
if(!(age==10))
cout << “The Age is not 10!”;
}

و همون‌طور که می‌بینید مثل عبارت‌های ریاضی می‌تونیم به مقدار لازم و دلخواه از پرانتز هم استفاده کنیم تا کدمون خواناتر بشه و البته توی مثال بالا حتماً باید از پرانتز استفاده کنیم وگرنه داریم به کامپیوتر می‌گیم که نقیض متغیر age رو برگردون در صورتی که age متغیر عددیه و نقیض نداره و این باعث می‌شه برنامه‌مون کامپایل ارور بگیره.

عملگر بعدی and هست‌ش. اگر یه ذره انگلیسی بلد باشید حتماً می‌دونید که and حرف اضافه‌ی «و» هست‌ش و توی عملیات منطقی هم زمانی «درست» رو بر می‌گردونه که همه‌ی متغیرهای منطقی‌ای که با and کنار هم می‌ذاریم درست باشن. توی سی‌پلاس‌پلاس برای and از علامت && استفاده می‌شه. دقت کنید که & با && فرق داره!

مثلاً فرض کنید می‌خواهیم چک کنیم که سن یه آقایی (یا خانومی) از ۱۸ بزرگ‌تر و از ۱۰۰ کوچکتر باشه. برنامه‌مون می‌شه این:

int main()
{
int age;
cin >> age;
if(age > 18 && age < 99)
cout << “The Age is correct!”;
}

و خوب چون در منطق روزمره هم از مفهموم «و» استفاده می‌کنیم فکر نمی‌کنم درک‌ش سخت باشه.

عملگر منطقی بعدی که می‌خواهیم در موردش صحبت کنیم or یا «یا» به زبان فارسی هستش و بازهم فکر کنم واضح باشه که چی‌کار می‌کنه. اگر از چندتا عملگری که باهم orشون می‌کنیم فقط یکی‌شون درست باشه نتیجه‌ی نهایی درست خواهد بود. توی سی‌پلاس‌پلاس «یا» رو با || (Shift + پ توی کیبورد غیر استاندارد!) نمایش می‌دیم. باز هم دقت کنید که از دوتا | استفاده می‌کنیم یعنی ||

مثلاً می‌خواهیم بررسی کنیم که عددمون به ۲ یا ۳ بخش‌پذیر باشه. برنامه‌مون این‌جوری می‌شه

int main()
{
int n;
cin >> n;
if((n%2)==0 || (n%3)==0 )
cout << “It's ok!”;
}

عملگرهای دیگه‌ای هم هستند که چون کاربردشون خیلی کم‌تره وقتی لازم‌مون شد باهاشون آشنا می‌شیم.

مبحث پرکاربرد بعدی که امروز در موردش یاد میگیریم مبحث حلقه‌هاست. یکی از اصلی‌ترین کاربرد کامپیوتر برای افراد عادی و برنامه‌نویسا اینه که کارای تکراری‌شون رو بدن به کامپیوتر انجام بده (حالا بگید برنامه‌نویسا تنبل نیستن!) مثلاً بیست‌بار بنویسه سلام یا مثلاً نمره‌ی همه‌ی دانش‌آموزها رو ۲ نمره اضافه کنه و اینا کارهای به غایت دشواریه که برنامه‌نویس‌ها اینا رو به کامپیوتر می‌دن تا براشون انجام بده.

حلقه‌ها هم انواع مختلفی دارند که ما با for شروع می‌کنیم. توی انگلیسی for رو معمولاً به معنی «برای» دیدیم ولی «به مقدار…» هم معنی می‌ده. هر for یک متغیر شمارنده داره که اصولاً کارها رو با اون انجام می‌دیم. برای استفاده از for شما باید متغیر شمارنده‌ش رو به برنامه معرفی کنید و برای اتمام for یه شرط تعیین کنید و بگید که هربار که کاری رو که باید انجام بده انجام داد چه بلایی سر متغیر شمارنده بیاد. (عمرا اگه فهمیده باشید با طرز بیان رویایی من!)

مثل if مواد لازم برای for رو هم توی یه پرانتز روبروی اون بهش می‌دیم. چون این‌جا سه‌تا چیز رو باید به for بدیم لازمه که اونا رو از هم جدا کنیم. به کمک ; (نقطه‌ویرگول) این سه‌تا رو از هم جدا می‌کنیم.

اولین چیزی که باید به for بدیم متغیر شمارنده‌ی for هستش که لازم نیست قبل از for تعریف بشه. بلکه می‌تونیم موقع تحویل بسازیم‌ش. و البته متغیر شمارنده‌مون باید یه مقدار هم داشته باشه (معمولاً مقدارش صفره).

بخش تعیین متغیر شمارنده (که اولین بخشه) فقط یک‌بار و اون‌هم قبل از شروع for اجرا می‌شه و برنامه دیگه به اون بخش کاری نخواهد داشت.

چیز بعدی‌ای که باید به for بدیم شرط اجراشدن دستورات for هست‌ش. یعنی مثل if این‌جا هم یک مقدار منطقی می‌گیره که اگر «درست» باشه دستورات‌ش رو اجرا می‌کنه و اگر «غلط» بود کارش رو تموم‌شده فرض می‌کنه و از for میاد بیرون.

و بخش آخر هم بخشیه که اون‌جا دستوری رو می‌نویسیم که هروقت یک حلقه‌ی for تموم شد اون دستور اجرا می‌شه.

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

برای مثال بیاد اعداد ۱ تا ۱۰ رو چاپ کنیم:

for (int i=1;i<11;i++)
{
cout << i;
}

اگر یادم رفته قبلاً بهتون بگم الان می‌گم که ++ یعنی این که به متغیر ما یک عدد اضافه کن و – هم یعنی از متغیر یک‌دونه کم کن. شما می‌تونید ++ رو قبل یا بعد از اسم متغیر به‌کار ببرید. اگر ++ قبل از متغیر باشه قبل از این که مقدار متغیر بازگردانی بشه مقدار اون یکی اضافه می‌شه و بعد خروجی داده می‌شه. ولی اگر بعد از اسم متغیر ++ بذاریم اول مقدار متغیر خروجی داده می‌شه و بعد مقدار اون یکی اضافه می‌شه. البته اگر داشته باشیم: C++; با ++C; (برای متغیر فرضی C) فرقی نخواهد داشت (چون مقداری خروجی نمی‌گیریم) ولی cout >> C++;  با cout >> ++C;  فرق دارن و اولی مقدار اولیه‌ی C رو چاپ می‌کنه ولی دومی مقدار اولیه‌ی C رو با یک جمع می‌کنه و بعد چاپ می‌کنه و البته در هر دو دستور مقدار نهایی C برابر جمع مقدار اولیه‌ی C با یک هست‌ش و مقدار C در این عملیات تغییر می‌کنه.

توی مثال بالا بخش تعریف‌کردن متغیر بخش int i=1  هست‌ش؛ بخش شرط‌مون i<11  هست‌ش و بخش سوم (که یه بلایی سر متغیر حلقه میاریمi++  هست‌ش که همون‌طور که توضیح دادم مقدار i رو یکی اضافه می‌کنه.

خوب بیاید مثال رو یه‌ذره پیچیده‌ترش کنیم و عددهایی که مضرب ۳ هستن رو از ۱ تا ۱۰۰ چاپ کنیم. برنامه‌مون این‌جوری می‌شه:

for (int i=1;i<101;i++)
{
if(i%3==0)
cout << i;
}

خوب تو این‌جا توی بلاک کد for از یه if استفاده کردیم. تا اگر عددمون که این‌جا i باشه بر ۳ بخش‌پذیر بود اون رو چاپ کنیم.

همون‌طور که می‌دونید از تودرتو بودن بلاک‌های کد هیچ محدودیتی وجود نداره واین‌جا هم ما برای استفاده از for توی یه for دیگه هیچ مشکلی نداریم. یک مثال خوب این قضیه هم چاپ‌کردن جدول ضربه که این‌جوری می‌شه:

for(int i=1;i<11;i++)
{
for(int j=1;j<11;j++)
{
cout << i*j << "t";
}
cout << endl;
}

و برنامه‌تون همون جدول ضربی که توی ابتدایی یاد گرفتیم رو برامون چاپ می‌کنه.

یا مثال دیگه می‌تونه چاپ‌کردن یه مربع باشه که بازهم مثل جدول ضرب خواهد بود:

for(int i=1;i<11;i++)
{
for(int j=1;j<11;j++)
{
cout << "*";
}
cout << endl;
}

و یا حتی می‌تونی متغیر for داخلی رو وابسته به for خارجی قرار بدیم تا باهاش یه مثلث چاپ کنیم:

for(int i=1;i<11;i++)
{
for(int j=i;j<11;j++)
{
cout << "*";
}
cout << endl;
}

که تنها کاری که کردیم این بود که توی for دوم به‌جای int j=0 قرار دادیم int j=i و نتیجه‌ش هم شکلی مثل این شد:

**********
*********
********
*******
******
*****
****
***
**
*

برای تمرین

۱. ب.ب.ک شکل روبرو رو چاپ کنه و بعدش برنامه‌تون رو جوری تغییر بدید که تعداد خط‌های مثلث رو از کاربر بگیره.

*
**
***
****
*****
******
*******
********
*********

۲. ب.ب.ک یک مثلث متساوی‌الساقین چاپ کنه.

۳. ب.ب.ک یک لوزی چاپ کنه.

آموزش برنامه‌نویسی – بخش پنجم – چرا هر آموزشی باید عنوان داشته باشد؟

سلام. با بخش پنج آموزش برنامه‌نویسی در خدمت‌تون هستیم.

توی بخش قبل ما یاد گرفتیم این‌جوری چندتا متغیر بسازیم و درجا مقداردهی‌شون هم بکنیم:

int ali = 1, reza = 3, hadi = 3;

و این‌جوری هم مقدار متغیر رو از کاربر بگیریم:

cin >> ali >> hadi >> reza;

و اینی که می‌بینید توی آمورش قبلی ۲۰۰۰کلمه از من تایپیدن گرفت!

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

توی جلسه‌ی قبل یادمون رفت که بگیم چجوری یه متغیر رو چاپ کنید و البته فکر کنم خودتون حدس زدید که چجوریه ولی چون من باید به رسالت آموزشی خودم (!!!) عمل کنم پس بهتون می‌گم چجوری. واضحه که برای چاپ متغیر باید از cout  استفاده کنیم و بعد از >>  بدون این‌که علامت دیگه‌ای بزاریم اسم متغیر رو می‌نویسیم. یعنی این‌جوری:

cout << reza << ali << hadi << endl;

پس همین‌جا می‌تونیم نتیجه بگیریم که endl  هم خودش یه متغیر از یه نوعیه که نمی‌شناسیم‌ش که باعث می‌شه “n”  منتشر بشه.

فعلا بهش نمی‌پردازیم باشه بعدا.

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

محتویات پرانتزها

ضرب و تقسیم

جمع و تفریق

و یه عملگر دیگه هم داریم به اسم عملگر باقیمانده که اولیت‌ش آخر از همه‌ست.

عملگر باقیمانده با %  نمایش داده می‌شه و واضحه که باقیمانده‌ی عدد سمت چپ‌ش بر عدد سمت راست‌ش رو خروجی می‌ده و اون عدد سمت راست یا چپ می‌تونه متغیر هم باشه.

مثلا

6 % 3

خروجی‌ش 0  خواهد بود و

6 % 4

هم 2  رو خروجی می‌ده و توی کد زیر:

int ali=100, reza= 80;
cout << ali % reza;

عدد 20 رو خروجی می‌گیریم و البته اگر عدد سمت راست از عدد سمت چپ بزرگ‌تر باشه خروجی همون عدد سمت چپ می‌شه. (بدیهی‌نامه!)

خوب ما الان متغیرمون رو هم داریم ولی بازم به دردمون نمی‌خوره چون تهِ‌تهِ‌ش کار خاصی نمی‌تونیم با متغیرمون بکنیم.

برای این‌که برنامه‌مون یه‌ذره پویاتر باشه باید اطلاعاتی که از کاربرامون می‌گیریم رو به روش‌های مختلف پردازش کنیم. اولین و تقریبا پرکاربردترین روش پردازش این اطلاعات استفاده از شرط‌هاست. یادتونه توی اولین آموزش‌مون وقتی روبات‌مون یه‌ذره خنگ‌تر بود و شرایط رو نرمال در نظر گرفته بودیم، توی الگوریتم بهش می‌گفتیم «اگه یه چیز جامد سفید دیدی اون رو بریز توی لیوان»؟ این از اولین شرط‌هایی بود که باهم باهاشون آشنا شدیم و البته شرط‌هایی که من یادم نمیاد ولی فکر کنم بودن!

مطمئن باشید که توی سی‌پلاس‌پلاس هم ما از این شرط‌ها داریم وگرنه که نمی‌شه اسم‌ش رو زبان برنامه‌نویسی گذاشت

توی سی‌پلاس‌پلاس شرط‌ها با if  مشخص می‌شن که توی انگلیسی هم «اگر» معنی می‌ده (برا همین می‌گن سی‌پلاس‌پلاس به زبان انسان‌ها نزدیکه! البته زبان کفار بی‌ناموس خدانشناس عرق‌خور مالِ‌مردم‌خور شیطان‌پرست فراماسون دجال‌پرست تئوری توطئه‌ی انگلیسی زبان!) و عبارت شرطی رو بعد از if توی یه پرانتز می‌نویسیم و اگر چندتا شرط داشته‌باشیم هم اونا رو توی پرانتزهای جداگانه می‌نویسیم وبزارید اینا رو بعدا توضیح بدم.

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

عبارت شرطی شامل دوتا مقدار هم‌نوع و یک عملگر (operator) شرطی‌ه و بعدا عبارت‌های شرطی‌ای که در ظاهر مقایسه‌ای نیستن ولی در پشت‌پرده از کلی شرط مقایسه‌ای تشکیل شدن رو هم بررسی می‌کنیم.

اون دوتا مقدار هم‌نوع معمولا متغیر هستن (یا حداقل یکی‌شون متغیره) و ما فعلا فقط int رو بلدیم و عملگرهای مقایسه‌ای هم عملگرهای مقایسه‌ای‌ای هستن که توی دوم دبستان یاد گرفتیم (و البته چندتا دیگه که تو دوم دبستان یاد نگرفتیم!) یعنی بزرگتر و کوچکتر >  <  و تساوی که برای این‌که با عملگر مقداردهی متغیر قاطی نشه از دوتا تساوی پشت‌سرهم استفاده می‌کنیم == و عملگر بزرگتر مساوی و کوچکتر مساوی <=  و «>= » و نامساوی <>. یادتون نره که توی عبارت‌های شرطی نمی‌تونیم از یک علامت تساوی استفاده کنیم.

و البته عبارت‌های شرطی هم خودشون خروجی‌ای از نوع یه متغیر دیگه به اسم bool که از کلمه‌ی boolean گرفته‌شده می‌دن و if  هم در واقع به اون خروجی نگاه می‌کنه. پس می‌شه به‌جای عبارت‌های شرطی از متغیرهایی از نوع bool استفاده کرد و البته این متغیرها رو هم می‌شه با عبارت‌های شرطی مقداردهی کرد.

در نهایت بعد از پرانتزی که توش عبارت‌های شرطی‌مون یا متغیر boolمون رو قرار دادیم باید دستوری رو بنویسیم که اگر محتویات پرانتز درست بود اون دستور اجرا بشه. اگر بخواهیم بیش از یک دستور را اجرا کنیم باید به یک‌طوری به کامپایلر بفهمونیم که قراره چه دستوراتی در صورت درست‌بودن شرط اجرا بشه و ما به کمک علامت‌های } و { این کار رو انجام می‌دهیم. به‌طور کلی هم این علامت‌ها برای دسته‌بندی (بسته‌بندی!) کدها مورد استفاده قرار می‌گیرن و البته ما تاحالا این علامت‌ها رو توی قالب کدنویسی‌مون دیدیم:

int main()
{
}

در آینده هم بیش‌تر باهم آشنا می‌شیم!

خوب حالا برای این‌که بیش‌تر متوجه بشیم بیاید باهم یه مثال حل کنیم. فرض کنیم می‌خوایم سن علی و رضا رو از کاربر بگیریم و اون‌ها رو باهم مقایسه کنیم و بگیم که سن اینا نسبت به هم چه وضعیتی داره. پس برنامه‌مون یه‌چیزی مثل این می‌شه:

int main()
{
int ali, reza;
cout << "please enter the age of Ali and Reza";
cin >> ali >> reza;
if (ali==reza)
cout << "They are in the same age!";
if (ali > reza)
cout << "Ali is older than Reza!";
if (ali < reza)
cout << "Reza is older that Ali!";
}

و البته می‌شه این رو به شکل‌های دیگه هم پیاده کرد.

اگر دقت کنید می‌بینید که توی مثال بالا شرط سوم ما برعکس شرط دوم ماست و البته شرط دوم و سوم هم برعکس شرط اول هستن. یکی از راه‌هایی که به کامپایلر بگیم که در صورت درست‌نبودن شرط چه کاری انجام بده اینه که از کلیدواژه‌ی else استفاده کنیم و اتفاقا این خیلی هم معمول و معقوله!

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

و البته یه قضیه‌ی دیگه هم اینه که شما می‌تونید هر تعدادی که دوست دارید توی ifهاتون یه if دیگه استفاده کنید و اصطلاحا بهش if تو در تو (یا 2×2!) می‌گن!

حالا بیاید مثال قبلی‌مون رو بازنویسی کنیم

int main()
{
int ali, reza;
cout << "please enter the age of Ali and Reza";
cin >> ali >> reza;
if (ali==reza)
cout << "They are in the same age!";
else
{
if (ali > reza)
cout << "Ali is older than Reza!";
else
cout << "Reza is older that Ali!";
}
}

خوب حالا بیاید بررسی کنیم که چرا استفاده از else باعث می‌شه برنامه‌مون بهینه‌تر بشه: ببینید وقتی که برنامه اجرا می‌شه در حالت قبلی همون‌طور که گفتم همه‌ی عبارت‌های شرطی اجرا می‌شه ولی این‌جا در بهترین حالت ali == reza درسته و برنامه دیگه سراغ پردازش محتویات else بعد از شرط اول نمی‌ره و اگر هم این نباشه ali > reza پردازش می‌شه و اگر هم این درست نباشه چون شرط سوم رو حذف کردیم و جاش else گذاشتیم بازهم برنامه‌مون از حالت قبل سریع‌تر کارش رو انجام می‌ده.

برای همین هم پیشنهاد می‌کنم تو همچین عبارت‌های شرطی‌تون رو براساس احتمال درست‌بودن از بزرگ به کوچیک تو برنامه قرار بدید تا برنامه‌تون از این نظر در بهترین حالت خودش باشه. البته ما هم این قضیه رو توی مثال‌مون رعایت نکردیم که اگر بخواهیم رعایت کنیم برنامه‌مون می‌شه این:

int main()
{
int ali, reza;
cout << "please enter the age of Ali and Reza";
cin >> ali >> reza;
if (ali<reza)
cout << "Ali is older than Reza!";
else
{
if (ali > reza)
cout << "Reza is older that Ali!";
else
cout << "They are in the same age!";
}
}

خوب فکر کنم برای این بخش کافی باشه. پیشنهاد می‌کنم برای این‌که بهتر یاد بگیرید این مبحث رو برای جلسه‌ی بعدی:

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

یه برنامه بنویسید که سن سه نفر رو بگیره و اسم‌شون رو بر اساس ترتیب سن‌شون از بزرگ به کوچیک چاپ کنه.

یه برنامه بنویسید که توش سن دو نفر رو بگیره و بررسی کنه ببینه که آیا اختلاف سنی‌شون اون‌قدر کم هست که بتونن باهم دوست‌های صمیمی بشن یا نه (و خوب خودتون خلاقیت به‌خرج بدید در مورد حدود اختلاف‌سنی مناسب!)

تا جلسه‌ی بعدی خدانگهدار… 

آموزش برنامه‌نویسی – بخش چهارم – دوباره باز می‌گردیم!

سلام!

بعد از کلی دردسر و تنبلی دوباره این‌جاییم که آموزش برنامه‌نویسی رو ادامه بدیم.

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

و امروز چون خیلی از جلسه‌ی قبلی گذشته روی درس جلسه‌ی قبل یه مروری خواهیم داشت. البته به‌جز آموزش ساختن پروژه!

ما برای چاپ نوشته‌ای روی کنسول از دستور cout استفاده می‌کنیم و طرز کارش هم آسونه. (به اون صفحه‌ی مشکی که وقتی برنامه‌مون اجرا می‌شه باز می‌شه کنسول، ترمینال صفحه‌ی CMD، CMD و کلی چیز دیگه می‌گن!)

cout << {} << {} << {};

 اول cout رو می‌نویسیم و

<<

رو می‌نویسیم به‌طوری که نوک تیزشون سمت

cout

باشه (سعی کنید این‌جوری یاد بگیرید و البته راه‌های دیگه‌ای هم وجود داره!) و بعدش هم اگر می‌خواهیم نوشته‌ای چاپ کنیم، اون رو توی دبل کوتیشن می‌ذاریم و بعدا هم یاد می‌گیریم که چیزای دیگه رو هم خروجی بدیم.

 و اگر چیز دیگه‌ای خواستیم بنویسیم هم دوباره

<<

رو می‌ذاریم و همین‌طور ادامه می‌دیم کار رو؛ محدودیت هم نداره! و یا می‌تونیم از یه cout دیگه استفاده کنیم و یادمون هم نمی‌ره که آخر دستورات‌مون حتما نقطه‌ویرگول فراموش نشه!

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

cout << "hi" << endl << "welcome!";

و روش دوم هم استفاده از کارکترهای ویژه مثل /n و /t و کلی کارکتر دیگه‌ست که توضیحات‌ش رو توی آموزش قبلی دادم و این‌جا هم هرجا استفاده کنیم توضیح‌ش رو بهتون می‌دم که توی این‌جا برای رفتن به خط بعد هرجا لازم شد توی نوشته‌مون که توی دبل کوتیشن می‌نویسیم‌ش یه بک‌اسلش و یه n می‌نویسیم و برنامه هم هرموقع به این‌جا رسید می‌ره خط بعدی.

cout << "hinwelcome!";

خوب تا الان درس‌های جلسه‌ی قبل رو مرور کردیم و هرچقدرش رو هم که نگفتم (و این یعنی یادم رفته بگم) رو به بزرگی خودتون ببخشید.

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

بعلاوه یک بخشی از کدهایی که توی آموزش قبلی گفتم وجودشون اجباریه رو دلیل وجودشون رو توضیح می‌دم تا بدانید و آگاه باشید که اینا رو ما از الکی و برای خوشگلی تو برنامه‌مون نمی‌ذاریم!

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

  1. اولین مرحله اینه که برنامه‌مون رو توی محیط ویرایش‌گر می‌نویسیم.
  2. وقتی که به کامپایلر می‌گیم که برنامه‌مون رو برامون کامپایل کنه اول یه چیزی به اسم Pre Compiler میاد برنامه‌مون رو بررسی می‌کنه و یک‌سری از دستورات خاص رو که ما اون‌ها رو با علامت # مشخص کردیم رو پردازش می‌کنه.ما هم به این دستورات خاص که توی ویرایشگر‌های ما هم با یه رنگ دیگه مشخص می‌شن می‌گیم دستورات پیش‌پردازنده. مثلا اگر یادتون باشه اولین دستوری که ما می‌نویسیم

    #includeهستش. این‌جا داریم می‌گیم که این دستوریه که باید پیش‌پردازنده پردازش‌ش کنه.

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

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

    حالا برای استفاده از کتابخونه‌های سی‌پلاس‌پلاس ما به پیش‌پردازنده می‌گیم که محتویات یه کنابخونه‌ی خاص رو بزار بالای کد ما. یعنی انگار تمام کدهای اون رو بالای کد من کپی – پیست کن تا من که توی برنامه‌م ازش استفاده می‌کنم کامپایلر ارور نده که فلان دستور رو نداریم و از این حرفا.
    و البته پیش‌پردازنده یک‌سری دستور دیگه هم داره که به‌وقت‌ش توضیح می‌دیم!

  3. مرحله‌ی بعدی اینه که کامپایلر میاد و کد ما + اون‌چیزی که پیش‌پردازنده تولید کرده رو به کدهای زبان‌ماشین تولید می‌کنه و یه فایل با پسوند obj می‌سازه.
  4. تو مرحله‌ی چهارم که توی سیستم‌عامل‌های مختلف تفاوت اینجا می‌شه اینه که لینکر کتابخانه‌های سیستم‌عامل رو صدا می‌زنه. مثلا اگر برنامه‌ی شما صدای بیب سیستم‌عامل رو در میاره. این توی ویندوز و لینوکس شیوه‌ی متفاوتی داره که لینکر کارش اینه که توی هر سیستم‌عامل این شیوه رو عملی کنه.البته این قضیه خودش یه‌ذره پیچیده‌ست که چجوریه که فایل‌هایی که به زبون ماشین هستن توی سیستم‌عامل‌های مختلف یکسان نیستن که منم دقیقا نفهمیدم قضیه چیه و فکر هم نمی‌کنم که انقدر مهم باشه.
    و حالا فایل اجرایی ما که می‌شه فایل exe توی ویندوز یا نمی‌دونم چی توی لینوکس ساخته می‌شه. این نمی‌دونم چی هم واقعی بود چون دقیقا نمی‌دونم ساختار برنامه‌ها توی لینوکس چجوریه.
  5. حالا وقتی می‌خوایم برنامه‌مون رو اجرا کنیم اول لودر برنامه‌مون رو روی رم سیستم آدرس‌دهی می‌کنه و بعدش هم برنامه توسط CPU پردازش می‌شه.

خوب این نمونه‌ی یک برنامه‌ایه که هیچ کاری نمی‌که و فقط اون قالبیه که ما دفعه‌ی قبل گفتیم باید باشه:

#include <iostream>
using namespace std;
int main()
{
}

 

و ما خط اول رو توضیح دادیم. حالا توی خطی که می‌نویسیم

using namespace std;

 و نقطه‌ویرگول هم یادمون نمی‌ره! یکی از مشکلات اساسی‌ای که ممکنه تو برنامه‌نویسی پیش بیاد رو حل می‌کنیم.

ببینید فرض کنید که من یه کتاب‌خونه‌ای می‌نویسم که خیلی پرکاربرده و توی اون یه دستوری دارم مثلا به اسم دستور a که یه کار خاص انجام می‌ده برای من. و شما هم یه کتاب‌خونه‌ی پرکاربرد دیگه دارید و توی اون هم یه دستوری دارید به اسم دستور a و یه کار دیگه متفاوت با کار من انجام می‌ده. حالا یه کاربری توی برنامه‌ش می‌خواد هم از کتاب‌خونه‌ی من و هم از کتاب‌خونه‌ی شما استفاده کنه و می‌کنه و حالا توی برنامه‌ش از دستور a استفاده می‌کنه. و معلومه که کامپایلر گیر می‌کنه بین این‌که از a من استفاده کنه یا از a شما و برای همین هم کامپایل ارور می‌گیریم!

برای حل این مشکل یه چیزی هست به اسم

namespace

 یا به فارسی خودمون می‌شه فضای نام. حالا این یعنی چی؟ یعنی این‌که اگر من دستور a رو منتشر کردم اون رو تحت فضای‌نام خودم منتشر می‌کنم و کاربر باید با شیوه‌ی خاصی که بعدا می‌گیم a رو از فضای‌نام من صدا بزنه و aای که شما منتشر کردید رو هم از فضای‌نام خودتون صدا بزنه.

این شاید یه‌ذره پیچیده باشه و توی سی‌پلاس‌پلاس هم جز در همین قضیه‌ای که دیدیم یعنی اول برنامه جای دیگه‌ای باهاش روبرو نمی‌شیم ولی توی سی‌شارپ بیش‌تر باهم آشنا می‌شید و بهتر بحث می‌کنیم.

حالا بریم سراغ کدنویسی‌مون.

همون‌طور که بالا گفتیم ما الان بلدیم برای کاربرمون یه چیزی بنویسیم. ولی این‌جوری کارمون اصلا جلو نمی‌ره. باید از کاربر ورودی هم بتونیم بگیریم و برای گرفتن ورودی باید یه‌جایی برای ذخیره‌کردن ورودی هم داشته باشیم پس اول درباره‌ی متغیرها باهاتون حرف می‌زنیم.

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

 حالا بیخیال این بحث. اون دوتا چیزی که کامپایلر می‌خواد برای ساختن متغیر اول از همه اسم متغیره و دومی هم نوع‌شه. اسم متغیر می‌تونه از اعداد و حروف و underline تشکیل بشه ولی اول‌ش نمی‌تونه عدد باشه ولی با underline مشکلی نداره یعنی اول اسم متغیرمون می‌تونه underline هم باشه.

دومین چیزی که لازمه یعنی نوع متغیره یعنی این‌که توی متغیرتون می‌خواید چی بریزید عدد بریزید یا نوشته یا چیزای دیگه. و به این قضیه هم بیش‌تر می‌پردازیم. در واقع به وقت‌ش بهش می‌پردازیم.

اولین متغیری که می‌سازیم نوع‌ش عددیه و عدد صحیح هم هست. اگر دروس ریاضی یادتون نمیاد (که حتما باید بیاد وگرنه برنامه‌نویسی براتون کار عبثی خواهد بود‍!) هم باید بگم که عدد صحیح هست اعداد طبیعی یعنی یک، دو، سه، چهار و همین‌طور ادامه بدید تا بی‌نهایت و همین‌طور اعداد منفی و صفر.

برای تعریف یک متغیر تو سی‌پلاس‌پلاس اول نوع‌ش رو می‌نویسیم و بعد هم اسم‌ش رو و بقیش هم با کامپایلره و بازهم تاکید می‌کنم که آخرش نقطه‌ویرگول یادمون نمی‌ره! مثلا اگر متغیرمون رو اسم‌ش رو بذاریم ali و نوع‌ش هم عدد صحیح باشه که بالا گفتم ما توی اولین خط یا هر جایی که خواستیم متغیر رو معرفی کنیم (واقعا هرجایی! البته فکر کنم باید بعد از

#include <iostream>

 باشه) می‌نویسیم

int ali;

که همون‌طور که گفتم اول نوع و بعد هم اسم متغیر رو آوردیم.

حالا که متغیرمون رو ساختیم این اجازه رو داریم که بهش مقدار هم بدیم. می‌تونیم خودمون بهش مقدار بدیم یا این‌که مقدارش رو از کاربرمون بپرسیم. برای این‌که خودمون بهش مقدار بدیم به‌راحتی از علامت = استفاده می‌کنیم.

مثلا ما که متغیر ali رو بالا معرفی کردیم حالا هرجا بخواهیم بهش مقدار بدیم می‌نویسیم

ali = 2;

 

 و نقطه‌ویرگول یادمون نمی‌ره (البته اینو اگر هم یادمون بره مطمئن باشید محیط ویرایش‌گر کد یا کامپایلر یادش نمی‌ره ولی وقتی چند هزار خط کد نوشته باشید و برنامه‌تون Compile Error بگیره خیلی شاکی خواهید شد اگر این ارور به‌خاطر فراموش کردن نقطه‌ویرگول در خط ۱۳۲۳۴ باشه!)

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

int ali;

باشه و تو دومی

ali = 2;

می‌تونیم داشته‌باشیم

int ali = 2;

و البته این راحت‌تر از قبلیه.

و در ضمن می‌تونیم چندتا متغیر رو که هم‌نوع هستند (یعنی همه‌شون مثلا int هستن که ما فعلا فقط int رو بلدیم!) رو یک‌جا باهم تعریف کنیم. این‌جوری که اول نوع متغیر رو می‌نویسیم و اول اسم اولین متغیر رو و اگر هم خواستیم با علامت = مقدار دهیش می‌کنیم و بعد علامت , رو می‌ذاریم و اسم متغیر بعدی رو و اگر هم خواستیم با = مقداردهی‌ش می‌کنیم و همین‌طور تا آخر.

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

مثلا حوصله ندارن توی دیکشنری دنبال معنی کلمه بگردن پس یه برنامه می‌نویسن که این کار رو براشون بکنه یا حال کار توی سیستم‌عامل متنی یعنی سیستم‌عاملی که فقط با نوشتن دستور کار می‌کنه رو ندارن و برای همین هم سیستم‌عامل گرافیکی می‌نویسن و کلی مصداق دیگه‌ش رو هم شما می‌تونید پیدا کنید..!

برای این‌‌که از کاربر مقداری بگیریم باید از دستور

cin

 استفاده کنیم. طرز استفاده‌ش هم مشابه coutه یعنی اول cin رو می‌نویسیم و بعد برعکس cout که از دوتا علامت بزرگ‌تر یا کوچک‌تر که تیزی‌شون به سمت cout بود استفاده می‌کردیم دوتا از همین علامت‌ها ولی به‌شکلی که تیزی‌شون به سمت cin نباشه می‌ذاریم و بعدش هم اسم متغیر رو می‌نویسیم.

مثلا

int ali;
cin >> ali;

 و اگر می‌خوایم مقدار چندتا متغیر رو بگیریم مثل cout که چندبار از اون علامت استفاده می‌کردیم؛ اسم هر متغیر رو می‌نویسیم و بعدش اون علامت رو دوباره می‌نویسیم و بعدش هم اسم متغیر بعدی و بازهم این عمل رو می‌تونیم نامحدود بار انجام بدیم.

مثلا

int ali,hasan,reza;
cin >> reza >> ali >> hasan;

و فکر کنم تا الان فهمیده باشید که c اول این دوتا دستور مخفف consoleه و همین‌طور in و out هم که واضح‌ن!

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

-خلاصه

ما توی این جلسه یاد گرفتیم که برنامه‌ای که می‌نویسیم توی چهار مرحله به فایل اجرایی تبدیل می‌شه، فهمیدیم متغیرها چی هستن و چجوری باید بسازیم‌شون و ازشون استفاده کنیم و چجوری مقداردهی‌شون کنیم و چجوری از کاربر مقدار متغیرمون رو بگیریم.

برای تمرین هم برید سرچ کنید ببینی چجوری می‌تونیم از متغیرهامون توی cout استفاده کنیم و چندتا برنامه بنویسید که یه عدد از کاربر بگیره و مثلا پنج برابرش رو چاپ کنه.

خوب این بود چهارمین بخش از آموزش ما! یادتون نره سوال‌ها و نظر‌هاتون رو بنویسید. یادتون نره اینایی که گفتیم رو تمرین کنید و تا بخش بعد خدانگهدارتون…

مایکروسافت از فایل‌های Visual Studio Update 1 من شکایت کرده!

سلام!

امروز که توی مدیافایر لاگین کردم این پیام رو دیدم!

می‌گه که فایل‌های ویژوال‌استودیو آپدیت ۱ غیرقانونی‌اند!

به‌نظرتون جواب‌شون رو بدم؟

Use of a file in your account has been suspended

Dear MediaFire User:

MediaFire has received notification under the provisions of the Digital Millennium Copyright Act (“DMCA”) that your usage of a file is allegedly infringing on the file creator’s copyright protection. The file named Visual Studio 2012 Update 1.7z.001 is identified by the key (4pjz5577hpf204f). As a result of this notice, pursuant to Section 512(c)(1)(C) of the DMCA, we have suspended access to the file.

The reason for suspension was:

Demand for Immediate Take-Down: Notice of Infringing ActivityDate: 2013/04/09Dear Sir or Madam,Microsoft has received information that the domain listed above, which appears to be on servers under your control, is offering unlicensed copies of, or is engaged in other unauthorized activities relating to copyrighted works published by Microsoft.

1. Identification of copyrighted works:Copyrighted work(s): see BelowCopyright owner: Microsoft

2. Copyright infringing material or activity found at the following location(s):See belowThe above computer program(s) is being made available for copying, through downloading, at the above location without authorization of the copyright owner.

3. Statement of authority:The information in this notice is accurate, and I hereby certify under penalty of perjury that I am authorized to act on behalf of Microsoft, the owner of the copyright(s) in the work(s) identified above.

I have a good faith belief that none of the materials or activities listed above have been authorized by Microsoft, its agents, or the law. We hereby give notice of these activities to you and request that you take expeditious action to remove or disable access to the material described above, and thereby prevent the illegal reproduction and distribution of this software via your company’s network.

We appreciate your cooperation in this matter. Please advise us regarding what actions you take.Yours sincerely,

Herv lemaireInternet Investigator On behalf of Microsoft CorporationOne

Microsoft WayRedmond, WA 98052United States of America

E-mail: [blocked]

Visual Studio 2012

http://www.mediafire.com/?4pjz5577hpf204f (http://www.mediafire.com)

http://www.mediafire.com/?h1qkh4ukjr7xq6b (http://www.mediafire.com)

http://www.mediafire.com/?g4017c65s2u8gfg (http://www.mediafire.com)

http://www.mediafire.com/?m95lqce3gj0wtoe (http://www.mediafire.com)

Information about the party that filed the report:

Company Name: LeakID
Contact Address: 
Contact Name: Hervé Lemaire
Contact Phone: 
Contact Email: [blocked]

Copyright infringement violates MediaFire’s Terms of Service. MediaFire accounts that experience multiple incidents of alleged copyright infringement without viable counterclaims may be terminated.

If you feel this suspension was in error, please submit a counterclaim by following the process below.

Step 1. Click on the following link to open the counterclaim webpage.

http://www.mediafire.com/myaccount/suspension_claim.php?u=[blocked]

Step 2. Use the following PIN on the counterclaim webpage to begin the process:

****

Step 3. Fill in the fields on the counterclaim form with as much detail as possible.

This is a post-only mailing. Replies to this message are not monitored or answered.

خوشبختانه سرور دانلود ما که هاست‌ش وارز هست‌ش تا مهرماه دوام داره و تا اون موقع مشکلی نداریم. بعدش هم می‌ریم سراغ مگا! دوشواری نداریم که!

دانلود مستقیم Visual Studio Update 2

سلام. با ۲ ساعت تاخیر نسبت به انتشار نوشته‌های روزهای قبل این نوشته منتشر می‌شه چون آپلود فایل‌ها از شب قبل شروع شده و برای احتیاط (که فایل‌ها کامل آپلود بشن) ۲ ساعت دیرتر نوشته رو منتشر می‌کنیم (در ضمن موقع انتشار نوشته هم ما تو مدرسه‌ایم!).

خوب با تشکر از دوستان بابت اطلاع‌رسانی. مثل دفعه‌ی قبل ما Visual Studio Update 2 رو هم به‌صورت مستقیم توی سرور دانلود کردیم و برای شما این‌جا می‌ذاریم!

مواد لازم: یک عدد دانلودر Visual Studio Update 2، یک عدد سرور یا کامپیوتر با سرعت دانلود مناسب، چند عدد سرور برای آپلود کردن فایل‌ها که اگر یکی‌شون خدایی نکرده از دست‌رس خارج شد دوستان معطل نشن!

طرز پخت: ابتدا دانلودر رو دانلود می‌کنیم و توی سرور می‌ریزیم. شعله‌ی اینترنت رو روی بالاترین حالت ممکن‌ش قرار می‌دیم و دانلودر رو با چاشنی /layout هم می‌زنیم. تا دانلودر خوب ور بیاد و حدود ۲ گیگ فایل‌های آپدیت رو دانلود کنه شعله رو همون‌جور نگه می‌داریم و بعدش شعله رو کم می‌کنیم که… خوب نمی‌دونم! حالا باید با چاقوی 7z فایل‌هایی که دانلود شده رو به تیکه‌های ۲۰۰ مگابایتی تقسیم کنیم که MediaFire وقتی فایل‌ها رو نوش جان می‌کنه خدایی نکرده بالا نیاره. خوب تیکه‌کردن و فشرده‌ساری فایل‌ها (در حالت Ultra!) حدود ۴ ساعت طول می‌کشه که می‌تونید برید هرکاری دوست داشتید توی اون زمان انجام بدید!

خوب حالا که تیکه‌ها آماده شد سرورها رو میاریم پیش سرورخودمون و فایل‌های تیکه‌شده رو توشون می‌ریزیم و یه‌ذره تزئیین‌شون می‌کنیم (اسم فایل‌ها رو بهتر می‌کنیم!) و میزاریم جلوی دوستان تا نوش‌جان کنند!

فقط این‌که فایل‌های فشرده ۷تا فایل ۲۰۰مگابایتی هستند که حدود ۱.۳ گیگ حجم داره و باید با آرامش اینا رو مصرف (دانلود!) کنید که پهنای باند اینترنت‌تون کم نیاره و فایل‌ها رو پس نزنه!

در ضمن پیشنهاد می‌کنم این غذا رو با IDM مصرف کنید که خوب هضم بشه و براتون مشکل پیش نیاره!

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

امیدوارم مفید باشه!

به گوگل کمک کنید تا سایت‌های اسپم رو شناسایی کنه

قبلنا یه زمانی بود که هرچی سرچ می‌کرد اولین سایت‌هایی که می‌اومدن سایت‌های تبلیغ بودن. سایت‌هایی مثل پیامسرا و کلی سایت مسخره که هرچی که سرچ می‌کردید اون‌جا بود. اون موقع‌ها حتی اگه دو برنامه‌نویس رو تو گوگل سرچ می‌کردید اون سایت‌ها می‌گفتن که بله! ما می‌دونیم دو برنامه‌نویس چیه!‌ بیاید تبلیغای ما رو ببینید می‌فهمید دو برنامه‌نویس چیه و از این حرفا.

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

یک‌سری آدم خیّر هستند که به گوگل کمک می‌کنن که تای‌لانگ‌ها رو بشناسه و… خوب دیگه توی نتایج‌ش اونا رو نشون نده. خود گوگل هم به کاربراش می‌گه که اگه سایتی رو می‌شناسید که تای‌لانگ بازی در میاره به من معرفی‌ش کنید (تا شاخ‌شو بشکونم!) و ابزارهای مختلف‌ش رو هم به کاربراش می‌ده تا بهش کمک کنن.

منم که از گوگل استفاده می‌کنیم از دوست داریم بهش کمک کنم و همین‌طور از شما هم درخواست کنم که به گوگل کمک کنید. برای این‌کار هم افزونه‌هایی توی گوگل کروم و فایرفاکس هستش که ما قرار بود اینا رو به شما معرفی کردیم (خوب دیگه معرفی شد. برید استفاده کنید!).

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

پی‌نوشت: قضیه‌ی قطب شمال و جنوب الگوریتم پنگوئن گوگله:

googlepenguinقضیه‌ی چین هم الگوریتم پاندای گوگله که دوستان از کونگ‌فو پاندا به‌عنوان نماد این الگوریتم استفاده می‌کنن:

google-panda-update-2011

 

و خوب تای‌لانگ هم دشمن پو توی انیمیشن Kung Fu Panda بوده دیگه (انصافا عکس‌ش هم به سایت‌های اسپمر می‌خوره!)

Tai_Lung_Kung_Fu_Panda_1023

 

چگونه بدون نیاز به هیچ نرم‌افزاری کامپیوترمان را توسط گوشی آندرویدی‌مان کنترل کنیم.

برای کنترل کامپیوتر از طریق پلت‌فرم‌های دیگر مثل آندروید یا آی‌اواس اپلیکیشن‌های زیادی وجود دارد که البته نیاز به نصب نرم‌افزار آن در کامپیوتر مقصد نیز دارید. اما ویندوز به‌صورت توکار ابزاری به اسم Remote Desktop Connection دارد که همان‌طور که از اسم‌ش پیداست برای ارتباط به سیستم دیگری به‌صورت ریموت است.

برای استفاده از این سیستم هم کافیه Remote Desktop Connection را در ویندوز ویستا به بعد در استارت سرچ کنید و در XP هم استارت رو باز کنید و به All Programs یا Programs برید و Accessories و اون‌جا می‌تونید Remote Desktop Connection رو پیدا کنید.

اما توی آندویدتون باید اپلیکیشن Xtralogic Remote Desktop Client رو از دانلود‌ها دانلود کنید و روی گوشی‌تون نصب کنید. و در ضمن توی کامپیوتر مقصد هم به کامپیوترهای دیگه اجازه بدید که به اون کامپیوتر وصل بشن. یعنی باید System Properties رو باز کنید. توی ویندوز ویستا به بعد روی Computer کلیک راست کنید و Properties‌ رو بزنید و گوشه‌ی سمت چپ صفحه Advanced Settings رو بزنید.

RD
و توی ویندوز XP هم روی My Computer راست‌کلیک کنید و Properties رو بزنید. با صفحه‌ای مثل صفحه‌ی زیر مواجه می‌شید

RD3

حالا به بخش Remote برید و تیک Allow Remote Assistance connections to this computer رو فعال کنید.

RD2خوب حالا اپلیکیشن رو باز کنید. با صفحه‌ای مثل صفحه‌ی زیر روبرو می‌شید (بعد از Accept کردن و Cancel کردن Google Login)

Screenshot_2013-04-03-19-56-31حالا Next‌ رو بزنید و RDP رو انتخاب کنید (روش یه باز بزنید!)

خوب توی صفحه‌ی بعدی توی بخش آدرس باید آی‌پی کامپیوتری که می‌خواید بهش وصل شید رو بزنید. برای پیدا کردن آی‌پی‌ش می‌تونید صفحه‌ی Command Line رو باز کنید و ipconfig رو بزنید و توی نوشته‌هایی که نوشته می‌شه اسم آداپتوری که باهاش به اینترنت وصلید (مثلا Local area network یا Wireless Lan adapter wi0fi) رو پیدا کنید و اون نوشته که روبروی IPV4 Address هست که یه چیزی مثل ۱۹۲.۱۶۸.۰.۱۰۳ هست می‌شه آی‌پی اون کامپیوتر.

RD4

حالا توی بخش Address توی اپلیکیشن IPای که بالا پیدا کردیم رو بنویسید. (اگر بخواهید به کامپیوترهایی که خارج از شبکه‌ی خونه‌تون هستند وصل بشید یه ذره دردسرش بیش‌تره. مثلا باید به اون کامپیوتر یه آی‌پی اختصاصی (یا یه آدرس اختصاصی) بدید تا بتونید بهش وصل بشید) و توی بخش User Name باید User Name یه اکانت توی اون کامپیوتر و تو بخش Password هم پسورد همون اکانت رو بنویسید

Screenshot_2013-04-03-20-14-26

و خوب حالا Connect رو بزنید تا به اون سیستم (که در مثال بالا می‌خواهیم به سرور دو برنامه‌نویس وصل شیم) وصل بشید.

اینم از نتیجه‌ی کارمون.

Screenshot_2013-04-03-20-19-30

آيا شما از این نرم‌افزار استفاده کرده‌اید؟ آیا نرم‌افزار مناسب‌تری برای این کار می‌شناسید؟ دیدگاه خود را بیان کنید!

دیکشنری آفلاین من، GoldenDict

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

تا کنون نیز جای خالی چند نرم‌افزار کاربردی را با جایگزین‌های مناسب پر کرده‌ایم که می‌توانید در این‌جا آن‌ها را ببینید. امروز هم می‌خواهیم سراغ نرم‌افزار پرکاربرد Babylon برویم و جایگزینی درخور (مناسب!) برای آن به شما معرفی کنیم.

نرم‌افزار GoldenDict یک نرم‌افزار دیکشنری آزاد (نرم‌افزار آزاد نرم‌افزاری است که شرکت سازنده source code نرم‌افزار را نیز همراه با آن منتشر می‌کند و بنابراین امکان هرگونه ویرایش برای کاربران فراهم می‌شود. در واقع کاربران در استفاده از نرم‌افزار از هفت دولت آزادند به شرطی که حق نشر نرم‌افزار (مثلا GPL یا MSPL) را رعایت کنند.) است که تقریبا تمام قابلیت‌های نرم‌افزار Babylon را در اختیار شما قرار می‌دهد. (و مثل Babylon به جاسوسی مشکوک نیست!)

یکی از نقاط برتری Babylon لغت‌نامه‌ها یا Glossaryهای آن است که دایره‌ی وسیعی از کلمات را پوشش می‌دهد. شما در GoldenDict این ابزار را دارید که از Glossaryهای Babylon استفاده کنید.


برای شروع ابتدا به سایت سازنده‌ی نرم‌افزار برود نرم‌افزار را دانلود کنید. پیشنهاد می‌کنم فقط نصاب نرم‌افزار رو دانلود کنید (اولین لینک توی بخش Download) مگر این‌که لغت‌نامه‌های روسی به انگلیسی هم به دردتون بخوره.

بعد از دانلود و نصب نرم‌افزار (و پس از بازکردن آن) با صفحه‌ای مثل صفحه‌ی زیر مواجه می‌شویم:

GoldenDict1

برای یافتن معنی کلمه‌ای می‌توانید آن را در بخش Look up بنویسید. پس از آن در لیست پایین کادر متنی کلمه‌هایی که با کلمه‌ی واردشده منطبق‌اند لیست می‌شوند و شما می‌توانید کلمه‌ی موردنظر خود را انتخاب کنید. پس از آن ترجمه‌ی کلمه در صفحه نمایش داده می‌شود. (بخشی که در حال حاظر نوشته‌ی Welcome to DoldenDict دیده می‌شود (یا ترجمه‌ی واژه‌ی قبلی!)) در ضمن شما می‌توانید با Double Click روی هر واژه‌ای در صفحه‌ی ترجمه، ترجمه‌ی آن را ببینید و همین‌طور با کمک دو دکمه‌ی Back و Forward (که در بالا گوشه‌ی سمت چپ دیده می‌شود) به معنای‌ واژه‌ی قبلی بازگردید.


خوب حالا برای افزودن glossaryهای Babylon به شیوه‌ی زیر عمل می‌کنیم:

– ابتدا همه‌ی فایل‌های glossary که دارید (فایل‌هایی با پسوند bgl) را در یک پوشه‌ی خاص می‌ریزیم. (من یک‌سری از glossaryهایی که داشتم را با فرمت 7zip با حجم ۶۷ مگابایت این‌جا آپلود کرده‌ام که شما می‌توانید آن‌ها را دانلود کنید. تا الان که برای خودم کافی بوده‌اند)

– برنامه را باز کنید و به بخش Edit->Dictionaries بروید یا به راحتی دکمه‌ی F3 را بزنید. با صفحه‌ای مثل صفحه‌ی زیر مواجه می‌شوید

GoldenDict2
– در همین بخش Add را بزنید و پوشه‌ای که فایل‌های glossary را در آن ریختید را پیدا و انتخاب کنید و OK را بزنید. پس از این‌که نرم‌افزار فایل‌ها را Import کرد می‌توانید از این دیکشنری‌ها استفاده کنید.


یکی دیگر از امکانات جالب این نرم‌افزار این است که می‌تواند از دیکشنری‌ها و فرهنگ‌نامه‌های آنلاین هم استفاده کنید. مثلا برای استفاده از ویکی‌پدیا می‌توانید در صفحه‌ای که فایل‌های glossary را اضافه کردیم، به بخش Wikipedia بروید و ویکی‌پدیا مورد نظر خود را فعال کنید (و یا ویکی‌پدیا فارسی را به آن اضافه و فعال کنید) و به این شکل دست‌رسی سریع‌تری به ویکی‌پدیا (برای انجام تکالیف مدرسه!) داشته باشید.


این نرم‌افزار از قابلیت ترجمه‌ی کلمات روی صفحه نیز پشتیبانی می‌کند. یعنی در هرکجا از صفحه و در هر برنامه‌ای می‌توانید ترجمه‌ی کلمه‌ی موردنظر را بیابید. برای استفاده از این قابلیت به Edit->Preferences بروید یا به راحتی دکمه‌ی F4 را بزنید تا صفحه‌ی Preferences نرم‌افزار باز شود.

GoldenDict3

(پیشنهاد می‌کنم Display Style را به Lingvo تغییر دهید. البته به سلیقه‌ی شخصی‌تان مربوط است)

در این‌جا به بخش Scan Popup بروید و Hotkey موردنظر خود برای ترجمه را انتخاب کنید. (مثلا برای من Ctrl + C + C است)

پس از آن در هر برنامه‌ای اگر ترجمه‌ی کلمه‌ای را خواستید می‌توانید از آن Hotkey استفاده کنید و صفحه‌ای مانند صفحه‌ی زیر برای شما باز می‌شود

GoldenDict4

و مثلا اگر کلمه‌ای ترجمه داشته باشد پاپ‌آپ باز شده به شکل زیر در می‌آید

GoldenDict5

که اگر ترجمه‌ی واژه‌ی نزدیک‌تری را می‌خواهید می‌توانید لیست واژه‌های نزدیک‌تر را با کلیک روی دکمه‌ای (که شبیه) AB است ببینید.

در ضمن با کلیک روی تصویر هریک از دیکشنری‌ها می‌توانید آن را غیرفعال کنید تا در آینده ترجمه‌ی واژه از آن دیکشنری دیده نشود.

آیا از این نرم‌افزار استفاده کرده‌اید؟ آیا نکات دیگری از این نرم‌افزار می‌شناسید؟ آیا نرم‌افزار جایگزین دیگری می‌شناسید؟ دیدگاه‌تان را بیان کنید!