PersianTools Forums

Go Back   PersianTools Forums > برنامه نویسی و طراحی وب، سیستمهای مدیریت سایت > برنامه نویسی > خانواده C++ , C

Reply
 
امکانات بيشتر
Old 12-10-2005, 04:14 PM   #1
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
آموزش C++ سي پلاس پلاس از پايه

مي خواهيم در اين آموزش از ابتدا ، با دستورات سي ++ كار كنيم. C++
ولي مسلم است كه در بيشتر سينتكس ها ، سي، با سي++ ، مشابه است.
.
من تمامي برنامه هايي كه اينجا مي گذارم را با توربو سي چك مي كنم.

توربو سي ورژن 3
حجم : 4 مگا.
http://rapidshare.de/files/15927944/TurboCv3.rar.html
======================================
تاپيكهاي وابسته:

كلاس در سي:
http://forum.persiantools.com/showthread.php?t=35887
طرق احضار توابع:
http://forum.persiantools.com/showthread.php?t=45911
ذخيره در فايل
http://forum.persiantools.com/showthread.php?t=47476

تابع راندوم و زمان در سي
http://forum.persiantools.com/showthread.php?t=11367
زمان
http://forum.persiantools.com/showthread.php?t=46151

اسمبلي براي سي:
http://forum.persiantools.com/showthread.php?t=37385
گرافيك در سي:
http://forum.persiantools.com/showthread.php?t=35260

كامپايلرهاي سي
http://forum.persiantools.com/showthread.php?t=38228
كتابهاي سي و ويژوال سي و كمي بحث
http://forum.persiantools.com/showthread.php?t=41105
کتاب های سی
http://forum.persiantools.com/showthread.php?t=39500
یک کتاب کامل در مورد ویژوال ُسی
http://forum.persiantools.com/showthread.php?t=40777
======================================
__________________
estefa va khoroj az forum. dostare hameye shoma.bye.

Last edited by saalek; 06-09-2006 at 05:20 AM..
saalek is offline   Reply With Quote
Old 12-10-2005, 04:59 PM   #2
Moderator
Mehdi
مدیر برنامه نویسی وب
 
Mehdi's Avatar
 

Join Date: Aug 2004
Location: Anywhere
Posts: 6,217
كاش ويژوال سي پلاس پلاس ياد ميداديد
__________________
I hate to love you
Coming Soon With Special Services...
Mehdi is offline   Reply With Quote
Old 12-10-2005, 05:56 PM   #3
mohandes_milad
Registered User
 
mohandes_milad's Avatar
 

Join Date: May 2005
Location: طهرون قدیم
Posts: 709
Send a message via Yahoo to mohandes_milad
سلام بچه ها یه سوال داشتم فقط لطفا نخندید من امروز رفتم یک کتاب برنامه نویسی ++C نوشته مهندس قمی گرفتم بعد یه 20-30 صفحه ای ازش خوندم سوالم اینه که این کدهارو باید کجا نوشت یعنی باید تو برنامه خاصی این کدهای c++ رو نوشت
mohandes_milad is offline   Reply With Quote
Old 12-10-2005, 10:09 PM   #4
plusdeck
Registered User
 
plusdeck's Avatar
 

Join Date: Feb 2005
Location: In My Earphones
Posts: 787
Send a message via Yahoo to plusdeck Send a message via Skype™ to plusdeck
براي شروع ميتوني از كامپايلر تحت داس c++ يعني توربو سي ورژن 3.0 استفاده كني.
plusdeck is offline   Reply With Quote
Old 12-10-2005, 10:21 PM   #5
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
پاسخ به
mehdvirus
: انشا الله بعدا. البته شما شايد سي ++ را بلد باشيد ولي براي ويژوال سي ، دانستن سي ++ ضروري است و من اين تاپيك ، محيط تسلط يافتن خودمه براي سي++. بعدا انشا الله اقدام مي كنيم. قبلا من آموزش ويژوال سي داشتم ولي ناتمام ماند. و خودم هم خيلي علاقه مندم كه ياد بگيرم.
------------------------
در پاسخ به دوست گرامي كه مي خواهد سي را شروع كند.
ويژوال سي
بورلند سي
كوئيك سي
بورلند سي
و خيلي هاي ديگر.
.

Last edited by saalek; 12-26-2005 at 03:05 AM..
saalek is offline   Reply With Quote
Old 12-11-2005, 01:35 AM   #6
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654
يك توضيح مقدماتي بدهم ابتدا.
شما كدها را مي توانيد در هر اديتوري بنويسيد. مثلا در ((نت پد)) بنويسيد و با پسوند مورد نظر save كنيد.
ولي بهر حال بايستي يك كامپايلر داشته باشيد تا به فايل قابل اجرا يعني exe تبديل كنيد. من فعلا با توربو سي عمل تبديل را انجام مي دهم.
به فايلي كه كدهاي شما در آن ذخيره شده ، سورس source مي گويند. پسوند در سي عبارت است از ((دات سي)) .c و در سي++ عبارت است از (( دات سي پي پي)) .cpp
.
من از codewhiz هم به عنوان اديتور استفاده مي كنم. كه فرقي با نت پد notepad ندارد. از اين اديتور مي توانيد براي ويرايش و ذخيره سورس در اسمبلي هم استفاده كنيد. و حتي زبانهاي ديگر.

اگر از توربو سي و حتي كامپايلرهاي شبيه آن استفاده مي كنيد، براي اجرا و رفتن به محيط برنامه مي توانيد در پوشه bin فايل TC را اجرا كنيد. و بعد سورس خود را باهاش open كنيد و كار كنيد.
اگه اولين باره كه با توربو سي و نرم افزارهاي مشابه اش داريد كار مي كنيد، نكته مهم اينه كه برويد به منوي option و بعد زير منوي Directories و آدرس پوشه include و lib (كه روي هارد كنار پوشه bin داريد) را در آنجا بدهيد. زيرا برنامه براي توانايي كامپايل كردن به اين دو پوشه نيازمند است.
.

Last edited by saalek; 12-11-2005 at 01:40 AM..
saalek is offline   Reply With Quote
Old 12-11-2005, 02:21 AM   #7
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



در شكل بالا قالب ساده يك برنامه سي( ديگه ++ اش را نمي گم و فاكتور مي گيرم. هر چند با هم زياد فرقي هم ندارند.) را مي بينيد.
قبل از باز شدن برنامه اصلي كه با كلمه main (يعني اصلي) شروع مي شود، بايستي بگوييم كه از چه فايلهاي header ئي استفاده خواهيم كرد.
البته در اين برنامه ، هيچ دستوري داخل برنامه نيست و برنامه خالي است. و من فقط دو دستور احضار header را براي مشاهده بعنوان مثال باقي گذاشتم.
كلا هر دستوري كه در سي استفاده ميشه ، يك تابع است. هر فايل header كه داخل پوشه include است، تعدادي از اين توابع را پشتيباني مي كند.
از طرفي خود برنامه اصلي هم ، بعنوان يك تابع عمل مي كند.
تابع به چيزي مي گوييم كه ورودي بگيرد و خروجي بدهد. در اينجا مي بينيد كه تابع main ورودي ندارد ، چون داخل پرانتز آن چيزي نوشته نشده. ولي مي شود نوشت. شايد بعدا طرز ورودي دادن به تابع main را هم گفتيم. ولي در سطح مبتدي زياد اين كار كاربرد نداره. و معمولا اين تابع ورودي نمي گيره.
حالا مي رسيم به خروجي اش، كلمه return 0 مي گويد كه اين تابع صفر را برمي گرداند. يعني بعد پايان كار برنامه ما ، صفر به سيستم برگردانده مي شود و ما فعلا كاري نداريم كه سيستم با اين صفر چه كار مي كند.
خلاصه اين كه برنامه اصلي هم مثل يك تابع عمل مي كند.
شايد شما جور ديگر ديده باشيد قالب main را، مثلا return 0 را نداشته باشد، آنطور هم مي شود ولي بايستي main را از اول بگوييم كه خروجي ندارد. چون تابع هاي بدون خروجي هم مي دانيد كه داريم. ولي چون ما از كلمه int استفاده كرديم (كه به معني صحيح است ) ، پس خروجي هم بايد اعلام كنيم.

يك نكته مهم هم اينه كه بعد هر دستور سي ، بايستي سمي كالن بگذاريد. و مي بينيد كه بعد return ، سمي كالن داريم. بعد main و include ها نمي خواهد. مواقعي هم هست كه نمي خواهد ولي خيلي كم است مواردش و هر جا پيش آمد مي گيم. فعلا شما هر دستوري در برنامه نوشتيد ، حواستان به سمي كالن انتهاي خط باشد. چون اگر نگذاريد خطا مي گيرد.
تا اينجا من از آموزشهاي سايت استفاده نكردم. چون اون از كمي بعد تر شروع كرده بود و من مي خواستم از اول بگويم.ولي از پست بعد سعي مي كنم موبمو از روي آن جلو بروم.
.
مي بينيد كه من در codewhiz دارم كار مي كنم. بعد از نوشتن كدها ، با پسوند cpp ذخيره مي كنيم و با يك كامپايلر مثل توربو سي تبديل به فايل اجرايي مي كنم. البته خود توربو سي هم اديتور داره و نياز به اين كار نيست ولي ديگه سليقه اي است. ويژوال سي هم خوبه چون محيطش dos ئي نيست. ولي من به اين دليل با توربو سي كار مي كنم كه اگر مشكلي پيش قراره بياد ، براي من هم پيش بياد و توضيح بدهم.
.

Last edited by saalek; 02-13-2006 at 07:10 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 03:05 AM   #8
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654





اين اولين برنامه اي است كه كاري انجام مي دهد.
و كارش اينه كه مي نويسد hello c .
من از محيط توربو سي هم عكس گرفتم تا با شماي محيط آشنا بشويد. در برنامه توربو سي ، از منوي RUN ، گزينه اول RUN را بزنيد تا نتيجه اجرا را ببينيد.
شرح برنامه: cout كارش چاپ متن و عدد است. در اينجا كلمه hello c را مي نويسد. به 2 علامت كوچكتر كه با shift+, ايجاد مي شود توجه كنيد ( << ) و به كوتيشنها دو طرف عبارتمان دقت كنيد. و به علامت سمي كالن در آخر جمله كه اجباري است حواستان باشه.

دستور getch() كارش اين است كه زدن كليدي و دريافت آن كليد را طلب مي كند. علت استفاده از آن اينه كه اگر نباشه ، برنامه آنقدر سريع اجرا ميشه و بسته ميشه كه چيزي را ما نخواهيم ديد. پس با قرار دادن اين دستور تا ما كليدي را نزده ايم ، فرصت تماشاي نتيجه را داريم.

كامنت گذاري: به نظر من اين اولين چيزيه كه در برنامه نويسي بايد ياد بگيريم. آنجا كه در شكل من نوشته ام yaddasht (يادداشت) دقت كنيد. قبلش دو تا مميز آمده. اين دو مميز باعث مي شود كه هر چه بعدش بياد ، موقع كامپايل ، خوانده نشه و ما آزاديم هر يادداشتي را بعد اين علامت بگذاريم.
منظور من اين بود كه شما برويد يك امتحاني بكنيد، برويد هر بار قبل هر يك از include ها اين علامت(دو مميز) را بگذاريد. خواهيد ديد كه include اول اگر به شكل كامنت درآيد ( كه در حقيقت مثل پاك كردن اين خط برنامه است) دستور cout خطا خواهد داد. چون اين تابع در header ئي به نام iostream است و دومين include هم براي getch() لازمه. البته ممكنه چندين تابع با يك header پشتياني بشوند كه امر واضحي است.

نكته: كامنت (يادداشت) هاي يك خطي را مي شود با // استفاده كرد ، ولي براي كامنتهاي چند خطي از شكل زير استفاده كنيد.



يعني با /* شروع كنيد و با */ تمام كنيد.
.

Last edited by saalek; 02-13-2006 at 07:11 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 03:45 AM   #9
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



حالا به برنامه بالا نگاه كنيد. Cin برعكس cout است. كارش گرفتن عددي از كاربر است. كاربر بايد عدد را تايپ كند و اينتر كند.

چيز جديدي نداريم به جز long ، كه تعريف كردن متغير است. در خطي كه اين دستور آمده مي بينيد كه 4 متغير از اين نوع تعريف شده و دو تاي اول براي دريافت دو عددي است كه كاربر مي دهد و دو عدد بعدي براي قرار دادن حاصل تقسيم و باقيمانده درش است.

توجه كنيد كه با cin علامت بزرگتر را داريم نه علامت كوچكتر. به دستور endl ((اند + حرف ال )) توجه كنيد. و همچنين توجه كنيد كه در پايان تمامي خط ها ، علامت سمي كالن موجود است. شايد بپرسيد كه endl كارش چيه. برويد برش داريد تا تفاوت را ببينيد. البته سمي كالن را اشتباهي برنداريد ، ولي علامت هاي كوچكتر را بايد برداريد. من رفتم الان امتحان كردم. عبارت ها به خط بعد نمي رود و در ادامه همان خط چاپ مي شود كه زيبا نيست.

شايد بخواهيد بدانيد كه long چه نوع متغيري است ، كه بحث انواع متغيرها در سي ++ مطرح ميشه . شكل زير يك شمايي مفيد و مختصر به شما مي دهد.




عدد صحيح integer و عدد اعشاري real .
من رفتم يك امتحان كردم و در برنامه به آن عدد اعشاري دادم. برنامه از حالت اجرا خارج شد. چون ما گفتيم كه عددي كه كاربر مي دهد بايد عدديي صحيح باشد نه اعشاري.
به حدود مجاز هر يك هم نگاه كنيد. اگر عدد شما بالاي 32 هزار است ، از short استفاده نكيند. زيرا تعداد بايتهايي كه در حافظه براي عدد شما در نظر گرفته ميشه محدوده و اگر عدد بزرگتر باشه ، حتي اگر برنامه دچار اختلال نشه ، معلوم نيست اضافه اش چه سرنوشتي پيدا مي كنه و مسلم است كه نتيجه محاسبات درست درنخواهد آمد.
.
#include <iostream.h>
#include <conio.h>
// yaddasht

int main()
{

long aNum1, aNum2, aQuotient, aRemainder;

cout << "Enter two numbers" << endl;
cin >> aNum1 >> aNum2;
aQuotient = aNum1 / aNum2;
aRemainder = aNum1 % aNum2;
cout << "The quotient of " << aNum1 << " and "
<< aNum2 << " is " << aQuotient << endl;
cout << "and the remainder is " << aRemainder << end1;

getch();


return 0;
}

Last edited by saalek; 02-13-2006 at 07:13 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 01:56 PM   #10
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



كلا تا بحال برنامه هايي كه تابحال كرديم، شامل 3 قسمت بود.
اول: گرفتن ورودي
دوم: انجام محاسبات
سوم: خروجي

در شكل بالا اين 3 مرحله را نشان داده است.




در شكل بالا ، ما قسمت ورودي را كار مي كنيم. هر داده اي كه مي خواهيم از كاربر بگيريم ، نياز به ظرفي دارد كه همان تعريف متغير برايش فراهم مي كند. در شكل بالا 3 نوع متغير تعريف كرده ايم و بعد از كاربر ، اطلاعات دريافت كرده ايم و در اين متغيرها ذخيره كرده ايم.




در شكل بالا مي بينيد كه 3 متغير از يك نوع ( دابل) تعريف شده و براي راحتي با ويرگول و در يك خط نوشته ايم. براي ورودي گرفتن هم مي توانيم هم جدا و هم در يك خط ، عمل كنيم.



در شكل بالا ، حالت غلط را مي بينيد. من رفتم نتيجه اين طور نوشتن را امتحان كردم. ولي شما امتحان نكنيد. فقط عدد اولي را درست مي گيره و دومي يك عدد عجيب و غريب خواهد شد.

Last edited by saalek; 02-13-2006 at 07:15 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 02:29 PM   #11
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



#include <iostream.h>
#include <conio.h>
// yaddasht

int main()
{

double s, u, a, t;
cout << "Enter initial velocity, acceleration, and time : ";
cin >> u >> a >> t;
s = u*t + 0.5*a*t*t;
cout << "Distance travelled " << s << endl;

getch();


return 0;
}
به برنامه بالا نگاه كنيد. برنامه ساده اي است. 4 متغير تعريف شده. 3 متغير را كاربر مي دهد و متغير چهارم در قسمت محاسباتي ، نتيجه محاسبه را در خود خواهد داشت.
در آخر هم متغير چهارم كه نتيجه محاسبه است ، چاپ خواهد شد. اگر فيزيك يادتان باشد ، همان فرمول v0*t+1/2at^2 است. فرمولش از ضرب و جمع تشكيل شده و ساده است. فقط يك نكته كوچك در اينجا هست كه همه هم بلديد. و آن اين كه ضرب ، نسبت به جمع ، تقدم دارد. يعني اول ضربها انجام مي شوند و بعد جمع انجام مي شود. و اينجا هم ، ما همين را مي خواستيم. ولي اگر مي خواهيد كه اول جمع انجام بشه ، بايد از پرانتز استفاده كنيد. نوع متغير هم كه مي بينيد اعشاري است .
.





در شكل بالا ، 3 متغير تعريف كرديم و هر سه را مساوي عدد يك قرار داديم و چاپ كرديم. منظور اين بود كه بگوييم ميشه در يك خط چند متغير را مقدار دهي كرد.
.

Last edited by saalek; 02-13-2006 at 07:17 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 04:09 PM   #12
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



در شكل بالا ، 4 عمل اصلي را داريم و باقيمانده را.




امر واضحي را در شكل بالا مي بيند. علامت * الزامي است. و نبايد همان طور كه در رياضي عادت داريم عمل كنيم.



به برنامه بالا نگاه كنيد. چند نكته دارد. نكته اول اينكه return ندارد. زيرا تابع main قبلش كلمه void آمده. يعني خروجي ندارد. پس نيازي به معرفي خروجي با return ندارد.
نكته دوم اينكه جواب برنامه 2 است. كه اشتباه است. نويسنده برنامه آمده دو عدد صحيح را بر هم تقسيم كرده و نتيجه را چون اعشاري فرض مي كرده در يك عدد real (اعشاري) از نوع double ريخته. ولي اعشاري در كار نيست. و جواب تقسيم 2 شده. من آمدم دو عدد اول را هم double گرفتم. به شكل زير:




و جواب اينبار (( دو و نيم )) درآمد كه درست است.

#include <iostream.h>
#include <conio.h>

void main()
{

double i, j,result;
i = 10;
j = 4;
result = i / j;
cout << "result = " << result << endl;

getch();

}

Last edited by saalek; 02-13-2006 at 07:20 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 05:20 PM   #13
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



در شكل بالا ، در جايي كه فلش آبي نشان مي دهد ، خطا دريافت مي كنيم. باقيمانده براي اعداد اعشاري بي معني است.





ولي وقتي از long كه اعداد صحيح را نگه مي دارد استفاده مي كنيم ، كار درست است.
تابع clrscr(); براي پاك كردن صفحه است.
در شكلي كه تنيجه اجرا را نشان مي دهد ، مي بينيد كه خارج قسمت 10 بر 4 مساوي 2 است و باقيمانده اين تقسيم هم عدد 2 است.
.

#include <iostream.h>
#include <conio.h>

void main()
{
clrscr();
long i, j,result,reminder;
i = 10;
j = 4;
result = i / j;
reminder=i%j;
cout << "result = " << result << endl;
cout << "reminder = " << reminder << endl;

getch();

}

Last edited by saalek; 02-13-2006 at 07:22 PM..
saalek is offline   Reply With Quote
Old 12-11-2005, 05:55 PM   #14
saeedsmk
مدیر بازنشسته
 
saeedsmk's Avatar
 

Join Date: Sep 2003
Posts: 1,523
خيلي خوب بود خسته نباشي اميدوارم ادمه بدي
__________________
در دنيايي كه مرگ شكارچي آن است بايد شكارچي بود.
300 the movie
saeedsmk is offline   Reply With Quote
Old 12-11-2005, 06:06 PM   #15
saalek
مدیر بازنشسته
 
saalek's Avatar
 

Join Date: May 2005
Location: در پاي كوهپايه ها
Posts: 654



در شكل بالا 5 تابع رياضي را مي بيند. و همچنين مي بيند كه وروددي و خروجي ، هر دو ، double است.



در شكل بالا ، ما از كاربر يك زاويه درخواست مي كنيم و بعد سينوس آن را به او برمي گردانيم.
همان طور كه با فلش نشان داده شده ، header ئي به نام math براي استفاده از توابع رياضي لازم است.
.

#include <iostream.h>
#include <conio.h>
#include <math.h>

void main()
{
clrscr();
double angle;
double sine;
cout << "Enter angle : ";
cin >> angle;
sine = sin(angle*3.141592/180.0);
cout << "Sine(" << angle << ") = " << sine << endl;

getch();

}

Last edited by saalek; 02-13-2006 at 07:23 PM..
saalek is offline   Reply With Quote
Reply

امکانات بيشتر

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT +4.5. The time now is 08:26 PM.

PersianTools RSS Feeds


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.