برگزیده های پرشین تولز

آموزش C++ سي پلاس پلاس از پايه

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
مي خواهيم در اين آموزش از ابتدا ، با دستورات سي ++ كار كنيم. 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
======================================
 

Mehdi

مدیر بازنشسته
تاریخ عضویت
1 آگوست 2004
نوشته‌ها
5,602
لایک‌ها
49
محل سکونت
Anywhere
كاش ويژوال سي پلاس پلاس ياد ميداديد
164.gif
 

mohandes_milad

Registered User
تاریخ عضویت
23 می 2005
نوشته‌ها
947
لایک‌ها
34
سن
35
سلام بچه ها یه سوال داشتم فقط لطفا نخندید من امروز رفتم یک کتاب برنامه نویسی ++C نوشته مهندس قمی گرفتم بعد یه 20-30 صفحه ای ازش خوندم سوالم اینه که این کدهارو باید کجا نوشت یعنی باید تو برنامه خاصی این کدهای c++ رو نوشت
 

plusdeck

Registered User
تاریخ عضویت
19 فوریه 2005
نوشته‌ها
550
لایک‌ها
11
محل سکونت
In My Earphones
براي شروع ميتوني از كامپايلر تحت داس c++ يعني توربو سي ورژن 3.0 استفاده كني.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
پاسخ به
mehdvirus
: انشا الله بعدا. البته شما شايد سي ++ را بلد باشيد ولي براي ويژوال سي ، دانستن سي ++ ضروري است و من اين تاپيك ، محيط تسلط يافتن خودمه براي سي++. بعدا انشا الله اقدام مي كنيم. قبلا من آموزش ويژوال سي داشتم ولي ناتمام ماند. و خودم هم خيلي علاقه مندم كه ياد بگيرم.
------------------------
در پاسخ به دوست گرامي كه مي خواهد سي را شروع كند.
ويژوال سي
بورلند سي
كوئيك سي
بورلند سي
و خيلي هاي ديگر.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
يك توضيح مقدماتي بدهم ابتدا.
شما كدها را مي توانيد در هر اديتوري بنويسيد. مثلا در ((نت پد)) بنويسيد و با پسوند مورد نظر save كنيد.
ولي بهر حال بايستي يك كامپايلر داشته باشيد تا به فايل قابل اجرا يعني exe تبديل كنيد. من فعلا با توربو سي عمل تبديل را انجام مي دهم.
به فايلي كه كدهاي شما در آن ذخيره شده ، سورس source مي گويند. پسوند در سي عبارت است از ((دات سي)) .c و در سي++ عبارت است از (( دات سي پي پي)) .cpp
.
من از codewhiz هم به عنوان اديتور استفاده مي كنم. كه فرقي با نت پد notepad ندارد. از اين اديتور مي توانيد براي ويرايش و ذخيره سورس در اسمبلي هم استفاده كنيد. و حتي زبانهاي ديگر.

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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

7.gif


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

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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

8a1.gif


8a2.gif


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

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

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

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

8a3.gif


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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

9a1.gif


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

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

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

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


9a2.gif


عدد صحيح 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;
}​
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

10a1.gif


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

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


10a2.gif


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


10a3.gif


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

10a4.gif


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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

11a1.gif


#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 است. فرمولش از ضرب و جمع تشكيل شده و ساده است. فقط يك نكته كوچك در اينجا هست كه همه هم بلديد. و آن اين كه ضرب ، نسبت به جمع ، تقدم دارد. يعني اول ضربها انجام مي شوند و بعد جمع انجام مي شود. و اينجا هم ، ما همين را مي خواستيم. ولي اگر مي خواهيد كه اول جمع انجام بشه ، بايد از پرانتز استفاده كنيد. نوع متغير هم كه مي بينيد اعشاري است .
.

11a2.gif


11a3.gif


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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

12a1.gif


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


12a2.gif


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

12a3.gif


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


12a4.gif


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

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

void main()
{

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

getch();

}
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

13a1.gif


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

13a2.gif


13a3.gif


ولي وقتي از 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();

}
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
خيلي خوب بود خسته نباشي اميدوارم ادمه بدي
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

15a1.gif


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

15a2.gif


در شكل بالا ، ما از كاربر يك زاويه درخواست مي كنيم و بعد سينوس آن را به او برمي گردانيم.
همان طور كه با فلش نشان داده شده ، 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();

}
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

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

void main()
{
clrscr();

double pH;
double HConc;
cout << "Enter pH : ";
cin >> pH;
HConc = pow(10.0, -pH);
cout << "If the pH is " << pH << " then the [H+] is " <<
HConc << endl;

getch();

}
اين برنامه هم از روي ph مي تواند غلظت H+ را به شما بدهد.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
قوانين نام گذاري متغيرها :
شما اسمي كه براي متغيرتان انتخاب مي كنيد بايد اين شرايط را داشته باشد،

اول اينكه با يك حرف شروع بشود(حرف كوچك يا بزرگ) يا آندرلاين ( _ ) . من الان رفتم چك كردم . يك متغير به نام ((آندرلاين a )) _a ساختم و مشكلي نبود.

قانون دوم:

• The names contain only letters (abcdefghijklmnopqrstuvwxyzABC...YZ),
digits (0123456789) and underscore characters _.
نام متغير بايد از حروف و اعداد و آندرلاين تشكيل شده باشه.

قانون سوم: از كلمات كليدي سي استفاده نكنيد. در عكس زير كلمات كليدي را نشان مي دهيم.


19.gif

.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها

يك سئوال از اساتيد سي

من مي بينم كه برنامه هاي اين سايت يك HEADER را به نام

#include <stdlib.h>
را داره استفاده مي كند. من تابحال استفاده نكردم و error و يا حتي warning دريافت نكرده ام. ولي فكر كنم اون پشت داره خرابكاري ميشه.

دوستان بي زحمت توضيح بدهند كه اين header كارش چيه و اگر ننويسيم چي ميشه. حتما بگيد. من بلد نيستم و نمي خواهم بدآموزي اينجا بكنم.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
Constant s

ثابت ها :
وقتي مي خواهيد يك متغير ، دائم عددي را در خودش نگه داره ، از constant استفاده مي كنيد.

مثلا g كه مقدار ثابت گرانش زمين است
يا عدد (( پي )) كه 3/14… است
يا سرعت نور كه ..... است.


const double g = 32.0; /* Gravitational constant in fpsps */

در كد بالا مي بينيد كه اول كلمه const آمده ، بعد نوع متغير و بعد نام متغير و بعد مقدار دهي كرده ايم آن را و سمي كالن در آخر عبارت.


22.gif


يكي از انواع متغيرها را كه char است را من توضيح ندادم. در شكل بالا مي توانيد بفهميد كه چه نوع داده اي را در خودش ذخيره مي كند. من لزومي نبوده تابحال باهاش كار كنم ولي تا انجاكه اطلاعات دارم ، ((يك كاراكتر )) را در خودش نگه مي دارد.
.
در خط آخر شكل بالا مي بينيد كه از يك ثابت ديگر براي تعيين مقدار ثابت استفاده كرده.
.
 
بالا