آموزش زبان برنامه نویسی سی پلاس پلاس:هنگامی که تابع B() را از تابع A() فراخوانی می کنید,تابع A() یک درخواست ارسال می کند و باید به تابع B() برسد که این گاهی اوقات برای تابع های طولانی سنگین می باشد.هرگاه برنامه ی شما شامل یک تابع کوچک است,++C ممکن می سازد,چنین تابعی را در جاییکه فراخوانی شده قرار دهید.هنگامی که تابع B() تابع A() را صدا می زند,به جای ارسال درخواست به تابع A(),کامپایلر یک کپی از تابع A() را درون تابع B() در جاییکه آن فراخوانی شده است قرار خواهد داد.چنین تابعی inline می باشد.
برای ایجاد تابع به صورت inline از کلمه ی کلیدی inline هنگام ایجاد تابع همینطور هنگام تعریف آن استفاده کنید.مثال زیر نمونه ی استفاده از تابع به صورت inline می باشد:
#include <iostream>
using namespace std;
inline void Area(float Side)
{
cout << "The area of the square is " << Side * Side;
}
int main()
{
float s;
cout << "Enter the side of the square: ";
cin >> s;
Area(s);
return 0;
}
نتیجه ی اجرای برنامه به صورت زیر خواهد بود:
Enter the side of the square: 14.55
The area of the square is 211.702
همچنین می توانید از کلمه ی کلیدی روی تابع inline استفاده کنید.برای ایجاد تابع به صورت inline,هر دو کلمه را در آغاز ایجاد تایپ کنید.برنامه ی زیر حقوق ساعتی را از کاربر درخواست می کند.سپس درآمد دوره ای را محاسبه می کند:
#include <iostream>
using namespace std;
void inline RequestSalary(double& h);
inline double Daily(double h);
double inline Weekly(double h);
inline double BiWeekly(double h);
double inline Monthly(double h);
double inline Yearly(double h);
int main()
{
double HourlySalary;
cout << "This program allows you to evaluate your salary "
<< "for different periods\n";
RequestSalary(HourlySalary);
cout << "\nBased on the hourly rate you supplied, here are your "
<< "periodic earnings";
cout << "\n\tHourly: $" << HourlySalary;
cout << "\n\tDaily: $" << Daily(HourlySalary);
cout << "\n\tWeekly: $" << Weekly(HourlySalary);
cout << "\n\tBi-Weekly: $" << BiWeekly(HourlySalary);
cout << "\n\tMonthly: $" << Monthly(HourlySalary);
cout << "\n\tYearly: $" << Yearly(HourlySalary);
cout << "\n\n";
return 0;
}
void inline RequestSalary(double& x)
{
cout << "Enter your hourly salary: $";
cin >> x;
}
inline double Daily(double x)
{
return x * 8;
}
double inline Weekly(double x)
{
return Daily(x) * 5;
}
inline double BiWeekly(double x)
{
return Weekly(x) * 2;
}
double inline Monthly(double x)
{
return Weekly(x) * 4;
}
double inline Yearly(double h)
{
return Monthly(h) * 12;
}
نتیجه ی اجرای برنامه به صورت زیر می باشد:
This program allows you to evaluate your salary for different periods
Enter your hourly salary: $15.55
Based on the hourly rate you supplied, here are your periodic earnings
Hourly: $15.55
Daily: $124.4
Weekly: $622
Bi-Weekly: $1244
Monthly: $2488
Yearly: $29856
آموزش زبان برنامه نویسی سی پلاس پلاس:یک برنامه ی ++C که سر و کار با نام های زیاد که نماینده ی متغیر ها و تابع ها از هر نوع می باشند,دارد,کامپایلر این امکان را که دو متغیر نام یکسان در یک تابع یکسان داشته باشند را نخواهد داد.اگر چه دو تابع در یک برنامه باید نام های منحصر بفرد داشته باشند.++C ممکن می سازد که شما از نام یکسان برای تابع های مختلف در یک برنامه که از قاعده های معلوم پیروی می کند استفاده کنید.قابلیت داشتن توابع مختلف با نام یکسان را گرانبارکردن تابع می نامند.مهم ترین قاعده ای که در مورد گرانبار کردن تابع رعایت می شود اطمینان از داشتن تعداد و نوع متفاوت آرگومان های تابع ها می باشد.
ممان اینرسی قابلیت, شعاع برای استقامت خمش می باشد.آن با توجه به قسمت حد وسط شعاع محاسبه می شود.چون آن بستگی به نوع بخشی از شعاع دارد محاسبه ی آن نیز بستگی به نوع بخشی از شعاع دارد.در این تمرین ما فرمول های مختلف استفاده شده برای محاسبه ی ممان اینرسی را مرور خواهیم کرد.از آنجاییکه این تمرین برای نمایش اهداف می باشد,شما برای درک آن نیازی به علم مهندسی نخواهید داشت.

مثال زیر محاسبه ی ممان اینرسی با توجه به محور X می باشد:
|
شکل زیر فرمول های محاسبه ی ممان اینرسی برای نیم دایره می باشد:


یک دایره و بدینسان یم نیم دایره, تنها یک شعاع لازم دارد.از آنجاییکه نسخه های دیگر تابع MomentOfInertia() دو آرگومان نیاز دارد,ما می توانیم آن را با تهیه ی یک آرگومان گرانبار کنیم ,شعاع.مثال زیر محاسبه ی ممان اینرسی با توجه به محور پایه یا X می باشد,گرانبار گردن تابع MomentOfInertia() به صورت زیر می باشد:
#include <iostream>
using namespace std;
// Rectangle
double MomentOfInertia(double b, double h)
{
return b * h * h * h / 3;
}
// Semi-Circle
double MomentOfInertia(double R)
{
const double PI = 3.14159;
return R * R * R * R * PI/ 8;
}
int main()
{
double base, height, radius;
cout << "Enter the dimensions of the Rectangle\n";
cout << "Base: "; cin >> base;
cout << "Height: "; cin >> height;
cout << "\nMoment of inertia with regard to the X axis: ";
cout << "I = " << MomentOfInertia(base, height) << "mm";
cout << "\n\nEnter the radius: "; cin >> radius;
cout << "Moment of inertia of a semi-circle with regard to the X axis: ";
cout << "I = " << MomentOfInertia(radius) << "mm\n\n";
return 0;
}
|
تصویر زیر فرمول های محاسبه ی ممان اینرسی مثلث می باشد:

همانطورکه می بینید,مستطیل و مثلث از نوع ابعاد یکسان استفاده می کنند.یعنی ما می توانیم برای محاسبه ی ممان اینرسی آرگومان هایی از نوع یکسان را تهیه کنیم,قاعده و ارتفاع.همچنین یعنی ++C این امکان را به ما نمی دهد که دو تابع نام های یکسان و تعداد آرگومان یکسان و نوع آرگومان یکسان بنویسیم,چون قاعده ی گرانبارکردن تابع نقض خواهد شد.
برای گرانبار کردن تابع MomentOfInertia() ,ما می خواهیم آرگومانی را اضافه کنیم که هرگز استفاده نخواهد شد.این آرگومان فقط به عنوان “witness” یا مدرک برای روشن کردن تفاوت بین دو نسخه ی تابع به کار رفته است.آرگومان “witness” یا مدرک می تواند هر چیزی باشد,یک عدد صحیح,یک کاراکتر,یک رشته,یک عدد شناور و… .در این مثال ما آن را یک عدد صحیح ساده در نظر گرفتیم.برای استفاده از نسخه ی بکار رفته برای مثلث,ما این آرگومان را برای گرانبار کردن تابع MomentOfInertia() فراهم خواهیم کرد.هنگامی که آن را تنها با دو آرگومان فراخوانی کنیم,نسخه ی مربوط به مستطیل بکار گرفته خواهد شد.
مثال زیر محاسبه ی ممان اینرسی با توجه محور X می باشد,گرانبار کردن تابع MomentOfInertia به صورت زیر می باشد:
#include <iostream>
using namespace std;
// Rectangle
double MomentOfInertia(double b, double h)
{
return b * h * h * h / 3;
}
// Semi-Circle
double MomentOfInertia(double R)
{
const double PI = 3.14159;
return R * R * R * R * PI/ 8;
}
// Triangle
double MomentOfInertia(double b, double h, int)
{
return b * h * h * h / 12;
}
int main()
{
double base = 7.74, height = 14.38, radius = 12.42;
cout << "Rectangle\n"
<< "Moment of inertia with regard to the X axis: ";
cout << "I = " << MomentOfInertia(base, height) << "mm\n\n";
cout << "Semi-Circle\n"
<< "Moment of inertia with regard to the X axis: ";
cout << "I = " << MomentOfInertia(radius) << "mm\n\n";
cout << "Enter the dimensions of the triangle\n";
cout << "Base: "; cin >> base;
cout << "Height: "; cin >> height;
cout << "\nTriangle\n" << "Moment of inertia with regard to the X axis: ";
cout << "I = " << MomentOfInertia(base, height, 1) << "mm\n\n";
return 0;
}
|
تابع هنگامی آرگومان دریافت می کند که آن آرگومان مورد نیاز باشد.اگر در فراخوانی تابع آرگومان مورد نیاز فراهم نشود,کامپایلر error خواهد داد.
فرض کنید می خواهید تابعی بنویسید که برای محاسبه ی قیمت نهایی کالا با در نظر گرفتن تخفیف استفاده شود.تابع برای انجام محاسبات به میزان تخفیف نیاز خواهد داشت.چنین تابعی می تواند به صورت باشد :
double CalculateNetPrice(double discountRate)
{
double OrigPrice;
cout << "Please enter the original price: ";
cin >> origPrice;
return origPrice - (origPrice * discountRate / 100);
}
|
از آنجاییکه این تابع حامل یک آرگومان است,اگر آن را تامین نکنید,برنامه ی زیر اجرا نخواهد شد:
#include <iostream>
using namespace std;
double CalculateNetPrice(double discountRate)
{
double origPrice;
cout << "Please enter the original price: ";
cin >> origPrice;
return origPrice - (origPrice * discountRate / 100);
}
int main()
{
double finalPrice;
double discount = 15; // That is 25% = 25
finalPrice = CalculateNetPrice(discount);
cout << "\nFinal Price = " << finalPrice << "\n\n";
return 0;
}
|
اغلب اوقات,یک تابع مانند تابعی که استفاده خواهیم کرد از میزان تخفیف یکسان به طور مکرر استفاده می کند.بنابراین به جای آنکه آرگومان را در هر زمان تامین کنیم,++C ممکن می سازد که شما آرگومانی را تعریف کنید که مقدار آن هرگاه تابع با آرگومان نباشد مورد استفاده قرار گیرد.
برای دادن یک مقدار قرار دادی به آرگومان,هنگام ایجاد تابع,نام آرگومان و سپس عملگر انتساب “=” و بعد مقدار مورد نظر را تایپ کنید.تابع CalculateNetPrice() بامقدار قرار دادی می تواند به صورت زیر تعریف شود:
#include <iostream>
using namespace std;
double CalculateNetPrice(double discountRate = 25)
{
double origPrice;
cout << "Please enter the original price: ";
cin >> origPrice;
return origPrice - (origPrice * discountRate / 100);
}
int main()
{
double finalPrice;
finalPrice = calculateNetPrice();
cout << "\nFinal Price = " << finalPrice << "\n\n";
return 0;
}
|
اگر تابع بیش از یک آرگومان بگیرد,می توانید برای هریک آرگومان قراردادی در نظر بگیرید و مقادیر قراردی هر یک را انتخاب کنید.اگر می خواهید همه ی آرگومان ها مقادیر قراردادی داشته باشند,هنگام تعریف تابع,نام هر یک را تایپ نموده و سپس عملگر انتساب = و بعد مقدار مورد نظر را تایپ نمایید.به مثال زیر توجه کنید:
#include <iostream>
using namespace std;
double CalculateNetPrice(double tax = 5.75, double discount = 25,
double origPrice = 245.55)
{
double discountValue = origPrice * discount / 100;
double taxValue = tax / 100;
double netPrice = origPrice - discountValue + taxValue;
cout << "Original Price: $" << origPrice << endl;
cout << "Discount Rate: " << discount << "%" << endl;
cout << "Tax Amount: $" << tax << endl;
return netPrice;
}
int main()
{
double finalPrice;
finalPrice = CalculateNetPrice();
cout << "Final Price: $" << finalPrice << "\n\n";
return 0;
}
|
نتیجه ی اجرای برنامه را در زیر می بینید:
Original Price: $245.55
Discount Rate: 25%
Tax Amount: $5.75
Final Price: $184.22
Press any key to continue...
|
اگر تابع بیش از یک آرگومان دریافت کند و شما بخواهید برای پارامترهای آن ها مقادیر قراردادی تعیین کنید,مرتب کردن ظاهر آرگومان ها بسیار مهم خواهد بود.
اگر تابع دو آرگومان دریافت کند,می توانید آن را با مقادیر قرار دادی ایجاد کنید.اگر می خواهید تنها برای یکی از آرگومان ها مقدار قراردادی تعیین کنید,آرگومانی که می خواهد مقدار قراردادی داشته باشد باید در لیست آرگومان دوم باشد.به مثال زیر توجه کنید:
|
هنگام فراخوان چنین تابعی,اگر تنها یکی از آرگومان ها را تامین کنید,کامپایلر مقدار آن را به پارامتر اول در لیست اختصاص خواهد داد و اختصاص دادن مقدار به پارامتر دوم را نادیده خواهد گرفت (چرا که برای پارامتر دوم از قبل مقدار (قراردادی)در نظر گرفته شده است):
|
نمونه ی نتیجه ی اجرای برنامه به صورت زیر خواهد بود:
|
اگر تابعی را تعریف کنید و مقدار قراردی به آرگومان اول آن اختصاص دهید و هنگام فراخوانی تنها یک آرگومان را فراهم کنید,یک error دریافت خواهید کرد.
اگر تابع بیش از دو آرگومان بگیرد و شما می خواهید تنها برخی آرگومان ها مقدار قراردادی داشته باشند,آرگومان هایی که مقادیر قراردادی دارند باید در انتهای (سمت راست) لیست قرار بگیرند.صرفنظر از اینکه چه تعداد از آرگومان ها مقادیر قراردادی خواهند داشت,لیست آرگومان ها با آن هایی که مقادیر قراردادی نخواهند داشت آغاز کنید.
فاکتوری که می تواند تفاوت اساسی بین DSLR ها باشد,سیستم تثبیت تصویر می باشد.Nikon و Canon هر دو,مصمم بر بدست آوردن تثبیت تصویر اپتیکال (Optical) توسط ساخت لنزهایی که گردش داخلی و حرکت گروه های نوری دارند. جهت حرکت گردش و حرکت گروه نور,در این روش برای ساکن نگه داشتن آن روی سنسور می باشد.Pentax, Sony و Olympus همگی مصمم برای داشتن راه متفاوت و قراردادن سیستم تثبیت در بدنه می باشند.از طرف دیگر,گردش ها برای جهت حرکت دوربین استفاده شده اند,اما در این مورد,تنثبیت تصویر توسط حرکت سنسور به هرسو برای جبران حرکت تصویر,بانجام رسیده است که گاهی اوقات
“sensor shift” stabilization” نامیده می شود.
هر دو سیستم کاملا موثر هستند و می توانند تصویر را تثبیت کنند.( برای اندازه ی عکسبرداری شما با نگه داشتن سرعت شاتر در 2-3 استاپ های آهسته تر تا اینکه شما بخواهید بدون تثبیت باشد).برخی ادعا دارند
( Nikon و Canon) که تثبیت تصویر لنز مستقر موثرتر است,مخصوصا برای لنزهای کشیده.تفاوت زیاد دیگری بین دو سیستم دیده نمی شود یا حداقل برای لنزهای 300mm و کمتر اینطور می باشد.تجربه ی من این است که تفاوت بین دوسیستم در typical zoom لنزها یا zoom نورمال لنزها زیاد نمی باشد.لنزهای با تثبیت برای استفاده بهتر می باشند چرا که با تثبیت تصویر نمایاب تا حدی اطمینان مجدد می یابد و اگر شما خوب باشید ممکن است بتوانید عکس را هنگامی که تصویر کمترین حرکت را دارد بگیرید.از طرف دیگر,فایده ی آشکار سیستم تثبیت در بدنه ی دوربین ,این است که شما تنها یک بار برای آن پول پرداخت می کنید و تثبیت هر لنز را به دوربین می بندید.در سیستم lens-based ,شما در هر لنز برای آن پول می پردازید و اگر لنز تثبیت نداشته باشد,شما فاقد شانس خواهید بود.برای مثال,لنزهای fast prime زیر 200mm هر کدام از Nikon یا Canon دارای تثبیت نمی باشد.در کنتراست,fast primeدر زیر (یا بالای) 200mm مناسب بخشی از سیستم تثبیت است هنگامی که روی بدنه ی Pentax, Sony یا Olympus با تثبیت درونی نصب شود.اگر شما یک سیستم با تثبیت لنز fast 24, 35, 50 or 85mm prime می خواهید,شما باید تثبیت body-based را مورد بررسی قرار دهید چرا که Nikon و Canon چنین لنزهای تثبیتی ندارند.
نویسنده:Bob Atkins
با رشد رو به جلوی پیش بینی 2010 FIFA World Cup South Africa زمان بندی مسابقات جام جهانی فوتبال 2010 آفریقای جنوبی منتشر شده است.برای پی بردن به مکان بازی ها می توانید از آن استفاده کنید.
فایلPDF می باشد
در اینجا چهار شکل متفاوت 35mm DSLR وجود دارد(فرمت DSLR های متوسط فراوان است,اما من در اینجا درباره ی آن ها بحث نخواهم کرد):
1-Full Frame : شامل DSLR هایی با سنسور که سایز آن به صورت 35mm filmبه عبارت دیگر 36mm x 24mm می باشد.آن ها در دوربین های اخیر بهتر شده اند,تا جایی که حدود $2000 قیمت دارند:
Canon EOS 5D و$8000 : Canon EOS 1Ds Mark III .این زیبایی بر خلاف هر یک از این دوربین ها باعث انتخاب خریدار در بار اول می شود.Nikon آن ها را full frame sensor نامیده است.مانند آن در Nikon D3 استفاده شده است که شکل“FX” می باشد.Sony نام خاصی برای مدل های سنسور full-frame ندارد.A900 می باشد.
2-APS-H : دوربین های زیادی با این شکل وجود ندارند که تقریبا مشابه شکل H از APS film می باشند.Canon EOS 1D MkIII یکی از آن ها است و دارای سنسور 18.7×28.7mm می باشد.
Leica digital module R (برای بدنه های R8 و R9 ) که سنسورهایی با سایز یکسان 26.4×17.6 mm دارند.
3-APS-C: و DSLR های با سنسور و اندازه ی قالب درشت از فیلم قدیمی “APS C-format”,به عبارت دیگر در حدود 15mm x 22.5mm برای Canon و در حدود 15.6mm x 23.7mm برای Nikon و … می باشد.اغلب DSLR های consumer و prosumer از تولید کننده هایی غیر ازOlympus از سنسور با اندازه ی APS-C استفاده می کنند.Nikon اندازه ی سنسور APS-C به صورت شکل “DX” به شمار می آورد.
4-Four-Thirds: و Olympus (و Panasonic) برای طراحی سیستم های DLSR پیرامون “Four-Thirds” انتخاب می شوند که ازیک سنسور 13.5mm x 18mm استفاده می کند.توجه داشته باشید که این سنسور نه تنها از دیگر سنسورها کوچکتر است,بلکه قسمت ظاهری متفاوتی نیز دارد (vs.2:3 ا 3:4) .
کدام فرمت بهتر است؟پاسخ دادن به این سوال تقریبا امکان پذیر نیست.همه با هم برابرند.محصول یک فرمت بزرگتر یک عکس با کیفیت بهتر خواهد بود.اما همه ی آنها به طور لطیفی با هم برابرند.در حقیقت برای استفاده های غیر حرفه ای همه ی این فرمت ها می توانند تصویر عالی حداقل 11×14 داشته باشند و آن ها در حد بزرگی چاپ عکاس های غیر حرفه ای همواره هستند.
از آنجایی که کسانی که برای اولین بار قصد خرید دارند به دوربین که قیمت آن ها زیر $2000 ( و احتمالا زیر $1000 ) می باشد توجه می کنند,انتخاب بین APS-C و Four-Thirds خواهد بود.تفاوت زیادی در اندازه ی شکل وجود ندارد.APS-C کمی بزرگتر است,که همه ی آن ها می توانند تصویر با کیفیت بالاتر و برابر تولید کنند,اما همانطور که قبلا گفتم آن ها به طور لطیفی با هم برابرند.میانگین نظر استفاده کنندگان این است که کیفیت تصویر در این بین این دو شکل تفاوت زیادی ندارد و برای انتخاب می توانید فاکتورهای دیگری را در نظر بگیرید.
با توجه به اینکه برخی از لنز ها شکل APS-C را پوشش می دهند پس اگر آن ها را روی دوربین های full frame نصب کنید,گوشه های تصویر شما تاریک و کیفیت کناره های آن پایین خواهد بود.البته تصویر می تواند crop شود و دوربین های full frame Nikon ,مثل Nikon D3 و Nikon D700 دارای “DX crop” mode می باشند,که هنگام استفاده از لنزهای طراحی شده دوربین های با فرمت APS-C استفاده می شوند که این هم تنها قسمت مرکزی سنسور که متناظر با اندازه ی فرمت APS-C استفاده شده است.لنزهای فرمت Canon APS-C به عنوان “EF-S” معین شده اند(بلکه پس از “EF” که این هم نامی برای لنزهای full frame می باشد).در سیستم Canon لنزهای EF-S نمی توانند به صورت فیزیکی روی بدنه ی full frame نصب شوند که این هم باعث بروز مشکل تاریکی گوشه ها (به طور صریح کم شدن فایده) در جاهای مختلف می شود.لنزهای EF-S با مکانیسم بازتاب دوربین های full frame تداخل می کنند,از آنجایی که برآمدگی عمیق تری نسبت به دوربین دارند(بوسیله ی طراحی).بنابراین لنزهای EF-S روی بدنه های فرمت Canon full frame (یا APS-H) قابل استفاده نیستند.بخش سوم پوشش APS-C می تواند روی بدنه های Canon full frame استفاده شود و تصویر برای فرمت APS-Cبه صورت دستی جهت زدودن تصویر crop شود. بهرحال شما ترکیب آن را حدس می زنید از آنجاییکه viewfinder علامتی برای نشان دادن آنچه در اندازه ی فریم APS-C است ندارد.
نویسنده:Bob Atkins
مسئله ی انبساط پذیری سیستم و پشتیبانی هنگامی مطرح است که شما قصد داشته باشید به
طور جدی عکاسی را دنبال کنید و نیاز (همچنین استطاعت)داشته باشید که لنزهای exotic
ویا اجزای دوربین با کارایی بسیار خوب داشته باشید.در این مورد بهتر است که
دوربین های Canon و Nikon را بررسی کنید.برای مثال, هر دو دارای لنزهای 400mm
f/2.8, 500mm f/4 and 600mm f/4 (با تثبیت کنندگی) هستند,در حالیکه Sony,
Pentax , Olympus اینگونه نمی باشند.اگر قصد دارید,عکاسی را به صورت حرفه ای ادامه
دهید,Nikon و Canon هر دو دارای گروه هایی حرفه ای از استفاده کنندگان هستند که
توسط سازندگان پشتیبانی می شوند,در حالیکه Pentax, Sony , Olympus شبکه ی پشتیبانی
حرفه ای کوچکتری دارند.اما حال Canon, Nikon, Sony خطی از قاب کامل
DSLR ها را رائه می کنند.در آینده ممکن است Pentax نیز
این کار را انجام دهد,اما Olympus متعهد بانجام فرمت Four-Thirds شده است.هنگام
خرید DLSR به آنچه که در آینده می خواهید
هم توجه داشته باشید.البته اگر شما یک علاقه مند غیر حرفه ای هستید و
نمی خواهید یک full frame DSLR با قیمت $5000 یا $8000
600/4 lens خریداری کنید,نیازی نیست نگران انبساط پذیری سیستم باشید.
نویسنده:Bob Atkins
فاکتورهای مهم هنگام انتخاب دوربین دیجیتال Digital SLR Camera
یک تازه وارد به دنیای دوربین های دیجیتال Digital SLR cameras با لیست هایی گیج کننده از اختیارات مواجه می شود.حفظ و دنبال کردن سازنده های DSLR و مدل های آن ها مشکل می باشد.اما از تابستان 2008 تعداد 9 سازنده که شرکت های Canon, Fuji, Leica, Nikon, Olympus, Panasonic, Pentax, Samsung ,Sony می باشند وجود دارند و در بین آن ها 34 مدل مختلف وجود دارد.
شما چطور باید یکی از آن ها را برای خرید انتخاب کنید و تفاوت آن ها در چیست؟ با تفاوت هایی که دوربین های موجود دارند و مدل های جدیدی که در هر ماه عرضه شده اند,گفتن اینکه کدام دوربین بهترین است ممکن نمی باشد.لفظ بهترین بستگی به فاکتورهای استفاده کننده دارد.اگرچه من قصد دارم,مختصری از فاکتورهای گوناگونی که شما هنگام خرید باید در نظر داشته باشید را تهیه کنم.
سازگاری لنز
اگر شما قبلا هر نوع لنز های SLR را داشتید,این تجربه می تواند شما را در تصمیم اینکه کدام نوع DLSR را خریداری کنید یاری کند.در این مورد DLSR های Canon, Nikon, Pentax , Sony, (Minolta)0 کاملا با لنزهای استفاده شده بر روی autofocus film بر مبنای SLR ها سازگار است. Olympus 4/3 system لنزهای جدید و قدیمی Olympus هستند که نیاز به یک adapter یا وفق دهنده برای نصب روی DSLR های Four-Thirds Olympus دارند.اغلب لنزهای Nikon که به صورت دستی تنظیم می شوند,تمایل دارند روی اغلب DSLR های Nikon نصب شوند و اغلب,سرنیزه ی نصب کردن لنزهای Pentax می خواهند روی DSLR های Pentax نصب شوند.بنابراین سیستم های آن ها سازگاری خوبی با لنزهای قدیمی تر دارند.نصب لنزهای FD روی DLSR های Canon یا لنزهای قدیمی Minolta MD روی DLSR های Minolta نیاز به یک optical adapter دارد که کیفیت عکس را کم می کند,بنابراین اینکار پیشنهاد نمی شود.همچنین می توانید تعدادی لنزهای با تنظیم دستی را روی DLSR های Canon با adapter های مکانیکی که شامل
Nikon, Pentax screw mount, Leica R, Contax ,Olympus OM lenses می باشد نصب کنید.
اگر با استفاده از لنزهای 3rd party ملاحظه می نمایید,مانند آنهایی که توسط Sigma و Tamron و Tokinaساخته شده اند,اطمینان داشته باشید که لنزهایی که شما انتخاب کرده اید,برای دوربین مورد نظر قابل استفاده هستند. لنزهای 3rd party, بر روی Nikon و DLSR های Canon قابل استفاده هستند,اما اصلا بر روی پایه های Sony و Pentax قابل استفاده نیستند و تعداد کمی از آن ها در پایه ی Olympus Four-Thirds قابل استفاده هستند.بنابراین برای مثال اگر شما قصد استفاده ازلنز Tamron SP AF200-500/5-6.3 Di را دارید,شما باید بدانید که آن در حال حاضردر لنز Pentax (یاOlympus) قابل استفاده نیست,اما در DSLR های Canon, Nikon , Sony قابل استفاده می باشد.
نویسنده:Bob Atkins
آموزش زبان برنامه نویسی سی پلاس پلاس:هنگامی که یک متغیر را در برنامه ایجاد می کنید,کامپایلر مقداری از فضا را به آن متغیر اختصاص می دهد.اگر شما نیاز به استفاده از متغیر در هر جای برنامه داشته باشید,آن را فراخوانی کرده و از مقدار آن استفاده می کنید.در اینجا دو پی آمد عمده به متغیر مربوط می شوند:مقدار متغیر و مکان قرار گرفتن آن در حافظه
. 
مکان قرار گرفتن متغیر در حافظه آدرس متغیر محسوب می شود.
اگر آرگومانی را با استفاده از نام آن تامین کردید,کامپایلر تنها یک کپی از مقدار آرگومان می سازد و به تابع فراخوانی شده می دهد.اگرچه تابع فراخوانی شده,مقدار آرگومان را می گیرد و می تواند در هر راهی استفاده کند,اما نمی تواند آن را تغییر دهد (به صورت دائمی).C++ ممکن می سازد که در صورت نیاز,تابع فراخوانی شده,مقدار آرگومانی را که پاس شده تغییر دهد.اگر می خواهید تابع فراخوانی شده مقدار آرگومان تامین شده را تغییر دهد و مقدار اصلاح شده را برگرداند,باید آرگومان را با استفاده از مرجع آن پاس کنید.
برای پاس کردن آرگومان به صورت مرجع,هنگامی که تابع را ایجاد می کنید,قبل از نام آرگومان نماد ampersand که & می باشد را قرار دهید.شما می توانید 0 یا 1 یا آرگومان های بیشتر و یا همه ی آرگومان ها را در برنامه به عنوان مرجع پاس کنید.تصمیم اینکه چه آرگومانی باید به صورت مرجع و چه آرگومانی باید توسط مقدار پاس شود,بستگی دارد به اینکه آیا شما می خواهید مقدار آرگومان تابع فراخوانی شده را اصلاح کنید و مقدار آن را به طور دائمی تغییر دهید یا خیر ؟
در زیر به چند مثال که پاس کردن آرگومان به صورت مرجع می باشد را ملاحظه می کنید:
void Area(double &side); // The argument is passed by reference
bool Decision(char &answer, int age); // One argument is passed by reference
// All arguments are passed by reference
float Purchase(float &discountPrice, float &newDiscount, char &commission);
شما یک نماد & را هنگام ایجاد و یا تعریف تابع اضافه نمودید.هنگام فراخوانی تابع,تنها نام آرگومان های مرجع شده را تامین کنید.تابع های بالا می توانند به صورت زیر فراخوانی شوند:
Area(side);
Decision(answer, Age);
Purchase(discountPrice, newDiscount, commission);
تصور کنید که یک تابع نوشته اید که حقوق هفتگی کارمندان را محاسبه نموده و مجموع ساعات هفتگی و نرخ ساعتی را فراهم می کند.برای توضیح هدفمان,ما می خواهیم ببینیم,چطور یا آیا تابع می تواند,مطالبه ی حقوق کسی را که بیشتر از آنچه برنامه نمایش می دهد کار کرده,اصلاح نماید.برنامه را مانند زیر آغاز کنید:
#include <iostream>
using namespace std;
int main()
{
float hours, rate, wage;
void Earnings(float h, float r);
cout << “Enter the total Weekly hours: “;
cin >> hours;
cout << “Enter the employee’s hourly rate: “;
cin >> rate;
cout << “\nIn the main() function,”;
cout << “\n\tWeekly Hours = ” << hours;
cout << “\n\tSalary = $” << rate;
cout << “\n\tWeekly Salary: $” << hours * rate;
cout << “\nCalling the Earnings() function”;
Earnings(hours, rate);
cout << “\n\nAfter calling the Earnings() function, “
<< “in the main() function,”;
cout << “\n\tWeekly Hours = ” << hours;
cout << “\n\tSalary = ” << rate;
cout << “\n\tWeekly Salary: ” << hours * rate;
return 0;
}
void Earnings(float thisWeek, float salary)
{
cout << “\n\nIn the Earnings() function,”;
cout << “\n\tWeekly Hours = ” << thisWeek;
cout << “\n\tSalary = ” << salary;
cout << “\n\tWeekly Salary= ” << thisWeek * Salary;
}
اگر شما برنامه را با عدد 32 به عنوان ساعات هفته 6.45 برای حقوق امتحان کنید,متوجه خواهید شد که مقادیر هفتگی یکسان هستند.
مطالبه ی کارکنان را 42 ساعت کار برای پاس کردن ساعات هفتگی فرض کنید.می توانید برای پی بردن به آن تابع زیر را بسازید:
void Earnings(float thisWeek, float salary)
{
thisWeek = 42;
cout << “\n\nIn the Earnings() function,”;
cout << “\n\tWeekly Hours = ” << thisWeek;
cout << “\n\tSalary = ” << salary;
cout << “\n\tWeekly Salary= ” << thisWeek * Salary;
}
اگر برنامه را با مقدار 35.50 به عنوان ساعات هفتگی و 8.50 به عنوان حقوق امتحان کنید,متوجه خواهید شد که حقوق هفتگی متفاوت با آنچه که در Earnings() است می باشد اما در تابع main() قبل و بعد از تابع Earnings() یکسان نگه داشته شده است.همانند مثالی از پاس کردن آرگومان با مرجع,می توانید ایجاد تابع Earnings() را درون تابع main() اصلاح کنید:
void Earnings(float &h, float r);
اگر بخواهید تابعی را برای اصلاح مقدار آرگومان آن فراخوانی کنید,باید مرجع آن را تامین کنید نه مقدار آن را.می توانید تابع را به صورت زیر تغییر دهید:
void Earnings(float &thisWeek, float salary)
{
thisWeek = 42;
cout << “\n\nIn the Earnings() function,”;
cout << “\n\tWeekly Hours = ” << thisWeek;
cout << “\n\tSalary = ” << salary;
cout << “\n\tWeekly Salary= ” << thisWeek * Salary;
}
با استفاده از PrimoPDF می توانید فایل های PDF بسازید,این برنامه یک ابزار رایگان برای تبدیل به PDF با کیفیت بالامی باشد,در برگرفتن یک میانجی کاربری دوستانه که ممکن می سازد از هر برنامه ی مجازی ویندوز PDF را پرینت کنید.علاوه بر این,بهینه کردن خروجی PDF را برای ,چاپ,نمایش,کتاب الکترونیکی, prepress و فایل های امنیتی PDF با 128-bit encryption وافزودن اطلاعات سند(موضوع,نویسنده,کلمات کلیدی) برای فایل های تبدیل شده به PDF فراهم آورده است.
پشتیبانی از: 64-bit machines, double byte character, non-TrueType font
و بهبود بخشیدن خروجی PDF نیز قابل استفاده می باشد.
برای دانلود اینجا را کلیک کنید
حجم (10.61MB)