• پایان فعالیت بخشهای انجمن: امکان ایجاد موضوع یا نوشته جدید برای عموم کاربران غیرفعال شده است

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

plusdeck

Registered User
تاریخ عضویت
19 فوریه 2005
نوشته‌ها
550
لایک‌ها
11
محل سکونت
In My Earphones
به نقل از saalek :
مي خواستم اعضاي يك آرايه را داخل حلقه مقداردهي كنم كه ،، حسابي به دردسر افتادم. انگار آرايه ها پيچيدگي هاي خاص خود را دارند. فعلا از خيرش گذشتم. بعدا روي آرايه ها كار مي كنيم.
در برنامه زير مقداردهي به يك متغير
char
را ملاحظه مي كنيد. در اين برنامه براي اينكه به مقدار يك
tab
برويم جلو از اين متغير استفاده كرده ايم.

tab2.gif


tab.gif

.
x++
يعني يك واحد به آن اضافه شود.
بزار برنامه فوق رو اصلاح يا بعبارت بهتر بهينه كنيم:
شما از كاراكتر كنترلي t\ استفاده كردي و لزومي به ذخيره اين نوع كاراكتر توي متغير از جنس char نداريم.
يهني مستقيما از اين نوع كاراكترها در شي cout استفاده كنيم.
چون بهتره متغير اضافي در برنامه تعريف نكنيم . به هر حال فضاي اضافي از حافظه اشغال ميشه.
 

saalek

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

من خيلي كلنجار رفتم سر اين قضيه.
كتاب من بد گفته بود.
آمده بود سي را با سي ++ مقايسه كرده بود.
بالاخره من نفهميدم كه مثل سي
\t
مجازه يا نه.
و جانب احتياط را گرفتم.
بهر شكل طبق فرموده شما مجازه. خيلي ممنون.
.تمرين مي كنم.
.
========================
مي خواستم اعضاي يك آرايه را داخل حلقه مقداردهي كنم كه ،، حسابي به دردسر افتادم. انگار آرايه ها پيچيدگي هاي خاص خود را دارند. فعلا از خيرش گذشتم. بعدا روي آرايه ها كار مي كنيم.
در برنامه زير مقداردهي به يك متغير
char
را ملاحظه مي كنيد. در اين برنامه براي اينكه به مقدار يك
tab
برويم جلو از اين متغير استفاده كرده ايم.

47a1.gif


47a2.gif

.
x++
يعني يك واحد به آن اضافه شود.
 

saalek

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

من خودم كندم . چون اول بايد دستور را ياد بگيرم و بعد شسته رفته كنم .
اگر كمك كنيد سريعتر از دستورات عمومي و ساده رد مي شويم تا برسيم به قسمت پيشرفته تر.
من هم سعي مي كنم زودتر قسمتهاي عمومي را تمام كنم. مثل ساختارهايي مثل ((انوم)) ((استراكت)) و تابع.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به برنامه زير دقت كنيد:
نكات:
يك حلقه for دارد. ساختار طرز تعريف آن را مي بينيد. اول متغيري را مقدار دهي مي كنيم.
بعد شرط را مي نويسيم . بعد عملياتي كه در صورت برقراري شرط انجام مي شود.
در اين برنامه خاص ، معرفي متغير هم در همان حلقه for انجام شده. منظور همان متغير I است.
من رفتم يك امتحاني كردم. كلمه int را از جلوي I برداشتم. در همان خط ، خطا دريافت كردم. بعد رفتم كنار تعريف cahr خود ، آن را به اين شكل تعريف كردم : int I; و ديدم درست شد. البته حرف I را من وقتي تايپ مي كنم داره بزرگ چاپ مي كنه ولي در برنامه ، حرف كوچك است.

نكته دوم اين برنامه ، آرايه است. يك آرايه با 3 عضو تعريف شده ، دقت كنيد كه عضوها مي شوند a[0] تا a[2] . يعني از صفر شروع ميشه نه از يك.
همچنين اين متغير از نوع char تعريف شده. و مي بينيد كه در مقدار دهي به متغير از نوع char از كوتيشن استفاده نميشه . بلكه از علامت تكي استفاده ميشه. همان دكمه اي كه كوتيشن را مي زند را اگر بدون كليد شيفت بزنيد ، آنگاه ، اين علامت چاپ ميشه.


کد:
#include <conio.h>				
#include <iostream.h>	
	
void main()										
{	
clrscr();
	
	char myArray_1[3];	
 
	myArray_1[0]= 'a';	
	myArray_1[1]= 'b';
	myArray_1[2]= 'c';

	for (int i=0; i<3; i++)
		cout << myArray_1[i] << endl;	
  
	
	getch();		
}

نتيجه اجرا ، چاپ 3 حرف اول الفبا زير هم است.
.
 

saalek

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

کد:
#include <conio.h>	
#include <iostream.h>	
			
void main()										
{	
clrscr();
	int i = 0;

	 
	do{				// A basic do while loop

cout << "Loop 1 number: "<< i << endl;	// print i

		i++;

	} while( i < 10);



	i = 0;			// reset i
	cout << endl;


	while ( i < 10)	// an other way to use this loop
	{
cout << "Loop 2 number: "<< i << endl;	// print i

		i++;
	}



	getch();		// wait for a key to be pressed
}
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
ساختار شرطي:
کد:
#include <conio.h>
#include <iostream.h>


void main()
{
	clrscr();
	int value=0;				//1

	cout << "How many cars do you have?";//2
	cin >> value;				 //2
	// ---------------------------------
	if(value > 0)					   //3
	{
		cout << "Ok.." << endl;
	}
	else
	{
		cout << "So you don't have a car." << endl;
	}									//3
	 //-----------------------------------
	if(value < 0)						//4
	{
		cout << "And you have a loan.." << endl;
	}									//4
	 //-----------------------------------
	if(value == 1)					 //5
	{
		 cout << "You have a car!" << endl;
	}								   //5
	//---------------------------------------
	if(value == 2) cout << "You have two cars!" << endl;   //6
	//---------------------------------------
	if(value > 3 ){	cout << "so you are rich!!" << endl; }  //7
	//---------------------------------------
	getch();
}

در قسمت اول ما متغيري به نام value تعريف كرده ايم.

در قسمت دوم ، از كاربر سئوالي مي پرسيم و در متغير قرار مي دهيم.

در قسمت سوم ، ساختار if else را مي بينيد. اگر شرط برقرار باشد باعث اجراي كاري و اگر برقرار نباشد كار ديگري انجام مي شود.

در قسمت چهارم، شبيه قسمت سوم است ولي else ندارد.

قسمت پنجم هم شبيه قسمت سوم است. ولي به == نگاه كنيد. در شرط ها بجاي = از == استفاده مي شود.
نبايد از = استفاده كنيد. برويد همين دستور قسمت پنجم را بجاي = با == امتحان كنيد. من اين كار را كردم. و به عنوان كاربر ، عدد 2 را دادم. وقتي به اين قسمت مي رسد ، باعث ميشه كه value تبديل به يك بشه و نوشته مي شود كه you have a car. كه اشتباه است و two car درست است.

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

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
ساختار struct:
کد:
#include <conio.h>
#include <iostream.h>

void main()
{
	clrscr();
	
	struct mystruct		// declare a struct
{
	int		id;
	char	grade;
};


mystruct player;	  // part 2

player.id = 10;
player.grade = 'a';
cout << player.id  << "	  " << player.grade;

getch();
}
در برنامه بالا ، يك struct تعريف كرده ايم. اين نوع ساختار به ما اجازه مي دهد كه از انواع متغيرها را در يك جا جمع كنيم.
در قسمت دوم ، ما از struct ساخته شده استفاده كرده ايم. Player از نوع mystruct تعريف شده. مانند اينكه player را از نوع long تعريف مي كرديم ، در اين جا هم player بعنوان متغيري محسوب مي شود كه نوع آن mystruct تعريف شده.
و بعد اجازه داريم كه آن انواع متغير را كه در struct خود تعريف كرده بوديم را به آن نسبت دهيم. با گذاشتن يك دات(نقطه) و بعد آن نوع متغير خاص.
.
نتيجه اجرا: چاپ 10 و a پشت سر هم. البته با فاصله اي كه با كوتيشن ها ايجاد كرده ايم.
.
در تعريف struct به محل سمي كالن توجه كنيد. و جلوي struct هيچ سمي كالني گذاشته نشده.
.
 

saalek

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

اشاره گر يعني اينكه ما يك متغير از نوع اشاره گر تعريف مي كنيم و آدرس حافظه اي يك متغير ديگر را در آن ذخيره مي كنيم.

کد:
#include <conio.h>
#include <iostream.h>

void main()
{
	clrscr();
	int num;	 //1
	int *pnum;   //2	
	
	 
pnum = &num;	 //3

cout<<pnum<<endl;	  //4
//-----------------------
num=52;		  //6
cout<<*pnum;	 //7

getch();
}

در خط 1 ما متغيري معمولي را تعريف كرده ايم.
در خط 2 متغيري از نوع اشاره گر تعريف كرده ايم.
در خط 3 ، آدرس متغير معمولي را به اشاره گر معرفي كرده ايم.
در خط 4 اشاره گر را چاپ كرده ايم.
نتيجه اجرا برنامه بالا چيزي شبيه اين است:
0x8f9ffff4
52
در نتيجه اجرا كه دو خطه ، به خط اول نگاه كنيد.
يعني 8 رقم در مبناي 16 كه آدرس متغير num است. رقمي در حدود 4 ميليارد در مياد. يعني 4 ميليارد خانه حافظه قابل پوشش است. يا همان 4 گيگا. Ram منظوره . البته اگر برداشتهاي من درست باشه.
فعلا با اين محاسبات كاري نداريم.
فقط مهم اينه كه اشاره گر حاوي آدرسي است.
- - - - - - - - - - - - -
در خط 6 برنامه به num مقدار 52 را مي دهيم.
و درخط 7 مي خواهيم ببينيم كه جايي كه اشاره گر دارد اشاره مي كند ، چه عددي است كه همان 52 است.

پس 3 جور كدنويسي داريم:
کد:
pnum = &num; /1
cout<<pnum; /2
cout<<*pnum; /3

در اولي شخصيت دادن به اشاره گر است كه به او (اشاره گر) مي گوييم هواي فلان متغير را داشته باش.

در دومي آدرس آن حافظه كه اشاره گر ديدبانش است ، نشان داده مي شود.
و در سومي محتواي آن آدرس نشان داده مي شود.

شايد بشود گفت كه & را بخوانيد آدرس و * را بخوانيد محتوا.
-- -- -- -- -- --
كلا اشاره گر يكي از مشخصات سي++ است و باعث سرعت بالاي دسترسي مي شود.
.
 

saalek

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

در برنامه زير، ابتدا يك متغير از نوع char تعريف شده.
بعد از كاربر حرفي را خواسته ايم و به او گفته ايم كه يا f بدهد يا m . به معني مرد و زن.
بعد يك حلقه while تا زماني كه كاربر اشتباه حرف وارد كنه ، برقراره. و وقتي درست وارد كنه حلقه مي شكند و دستور بعد حلقه اجرا مي شود. يعني اين : cout << "your entry is:"<<ch<< endl; .

علامت تعجب ! همان است كه مي گويد اگر f يا m نبود (نبود)، اين كار را بكن و دو حرف كه به شكل يك فارسي است يعني دو خط عمود و موازي ، يعني يا
با شيفت \ يا همان حرف ژ اگر صفحه كليد شما مثل من باشه و مثل من فارسي ساز داشته باشه.


55a1.gif




#include <conio.h>
#include <iostream.h>
void main()
{
clrscr();

char ch;

cout << "Enter patient's gender (m for Male or"
" f for Female)" << endl;

cin >> ch;

while(!((ch == 'm') || (ch == 'f'))) {
cout << "incorrect entry "<< endl;
cout << "Please re-enter gender code"<< endl;

cin >> ch;
}

cout << "your entry is:"<<ch<< endl;

getch();
}
بقيه اپراتورها را در زير ملاحظه مي فرماييد:



55a2.gif

.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
.
در زير 2 شيوه استفاده از حلقه Do While را ملاحظه مي كنيد:

کد:
do
statement
while (expression); 


do {
…
…
} while (expression);
.

56a1.gif


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


56a2.gif

کد:
#include <conio.h>		
#include <iostream.h>				
					

void main()						
{	
clrscr(); 

const int kLIMIT = 500;
int entry_count = 0;
int sum = 0;

do {
cout << "Give me another number ";
int temp;
cin >> temp;
entry_count++;
sum += temp;
} while ((entry_count < 5) && (sum < kLIMIT));	

cout << "sum= "<<sum;
							
	getch();				
}
.
 

saalek

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

http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=10048&lngWId=3

برنامه زير ساختار switch case را نشان مي دهد. همان طور كه در برنامه زير مي بينيد، ساختار سوئيچ ما به 3 حالت در اينجا پخش شده. اگر مقدار amount برابر 1 باشد ، حالت اول عمل مي كند و اگر 2 باشد حالت دوم و اگر هيچ يك نباشد ، حالت ديفالت عمل مي كند.
پس بسته به اين است كه كاربر چه عددي را وارد كند. اگر 1 يا 2 را وارد نكند ، برنامه از اول اجرا ميشه. بخاطر دستور goto . و اگر 1 و 2 وارد بشه ، برنامه خاتمه مي يابد.
کد:
#include <conio.h>		
#include <iostream.h>
void main()
{	
clrscr(); 
      int amount;
    menu:
    cout<<" enter one or two"<<endl;
    cin >> amount;
    switch(amount)

    {
	case 1: cout<<" you enter 1"<<endl;break;
	case 2: cout<<" you enter 2"<<endl; break;
        default:

            {
	    cout<<" you enter another number"<<endl;
            goto menu;
            }
    }

    cout<<"end of program"<<endl;
    							
	getch();
}


57.gif

.
دستور
break
لازمه. فراموش نشود.
.
 

saalek

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

کد:
#include <conio.h>		
#include <iostream.h>				
					

void main()						
{		
clrscr();

 // ----------- shoroe ghaaleb -----------------
 

cout<<"barnameh"<<endl;


 // ----------- entehaye ghaaleb ---------------
	getch();				
}

همان طور كه قبلا توضيح داده بوديم 2 header لازم است براي دستوراتي كه در اين قالب وجود دارد. و وقتي دستوراتي داخل قالب اضافه بشه، تبعا header ها افزايش ميابد. دستور clrscr(); براي پاك كردن صفحه نمايش است و دستور getch(); منتظر گرفتن يك كليد مي ماند. اين دستور براي اين اينجا گذاشته شده كه وقتي برنامه خاتمه يافت ، تا دكمه اي را نزده ايم ، از حالت اجرا خارج نشود و فرصت داشته باشيم كه نتيجه كار را ببينيم. البته تمام اين مطالب قبلا گفته شده بود. ولي حالا من براي راحتي خودم و شما مي خواهم قالب جديدي را بكار برم.

کد:
#include <conio.h>		
#include <iostream.h>				
					

void main()						
{		
clrscr();
 char c ;
 menu:
 // ----------- shoroe ghaaleb -----------------
 

cout<<"barnameh"<<endl;


 // ----------- entehaye ghaaleb -----------------
    cout<<"end of program--x for exit--any key for repeat"<<endl;
	c=getch();	
 if(c != 'x') goto menu;				
}

در اين قالب ، ابتدا با دستور char c ; يك متغير تعريف كرده ايم. و اين متغير در c=getch(); كارش نگهداري كليدي است كه كاربر مي زند.
اگر كاربر كليد x را بزند كاري صورت نمي گيرد و برنامه به انتها مي رود و خاتمه مي يابد ولي با زدن كليدهاي ديگر ، با دستور goto به بالاي برنامه بر مي گردد و از نو اجرا مي شود. اين كار براي اين خوبه كه مي توانيم برنامه خود را بدون خروج از برنامه و نياز به اجراي مجدد ، بارها چك كنيم. من برچسب menu: را بعد clrscr(); گذاشتم تا نتايج تست هاي قبلي پاك نشود و مقايسه كنيم اجراهاي متوالي را .
.
 

plusdeck

Registered User
تاریخ عضویت
19 فوریه 2005
نوشته‌ها
550
لایک‌ها
11
محل سکونت
In My Earphones
به نقل از saalek :
من هنوز وارد تابع نشده ام تا هر چي قبلش است را بگويم. اگر چيزي به نظرتان آمد ، بگيد تا از قلم نيفتد.

در ضمن من يك cd خريدم كه حاوي ebook هاي آموزشي است. و يك آموزش C++ هم داره كه از آن مي خواهم در پستهاي بعدي استفاده كنم.
.

string ها-كلاس هاي حافظه و الگوريتم هاي مرتب سازي رو فراموش كردي:happy:
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
ممنون دوست عزيز از يادآوري.
يادم مي مونه كه اين 3 را بگم.
استرينگ - مرتب سازي -كلاسهاي حافظه
---------------------------------
دوستان اگر باز چيزي هست بگيد ، من نامنظم مي خونم و تا حالا هم خيلي بد مطالب گفته شده. يعني تكراري شده يا پس و پيش شده و ...
وسع من هم همين است . ديگه شرمنده.
.
 

saalek

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

من خيلي سورس دانلود مي كنم. سورسهاي سي ، خيلي هاشان كنار فايل سورس ، فايل
header
هم دارند. و در سورس اين هيدر را اينكلود كرده.
سئوال: آيا بايد هيدر را به پوشه اينكلود توربو سي اضافه كنم؟ آخه اين جوري بعد مدتي اين پوشه ديگه خيلي شلوغ ميشه. البته اگر اين راه درست است ، انجام مي دهم ولي شايد راهي است كه من خبر ندارم.

و يك سئوال ديگه : من يك سورس دارم كه 3 فايل داره.
myheader.h
mysource.cpp
main.cpp

و مي خوام بدونم كه چطوري ميشه كه يك برنامه 2 تا سورس داشته باشه. و چطوري سورس دوم در اختيار سورس اول قرار مي گيره. فايل هيدر را حالا من فرض كردم كه اينكلود ميشه ولي سورس دوم چي؟!
شايدم اين سورسها براي ويژوال سي است. ولي نه ، من در يك آموزش سي اين برنامه 3 فايلي را ديدم.
خواهشا كمي توضيح بدهيد تا من هم محيط كارم را بشناسم و تنظيم كنم.
.

به جواب يكي از سئوالام رسيدم.
اگر به help توربوسي برويد و روي #include كليك كنيد ، به متن زير مي رسيد:



#include (directive)
=================
Treats text in the file specified by filename as if it appeared in the
current file.

Syntax:
‏ #include "filename"
‏ #include <filename>

‏ #include "filename" searches the source path first, then the include path.

‏ #include <filename> does not search the source directory.

Examples:
#include <stdio.h>
#include "main.h"

اينجا ميگه كه اگر به شكل #include "filename" بنويسيد ، اول ميرود پوشه اي برنامه شما در آن است را نگاه مي كند و بعد مي رود سراغ پوشه include توربو سي و اگر به شكل #include <filename> بنويسيد ، فقط مي رود پوشه include توربو سي را نگاه مي كند.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
حالا مي خواهيم از نكته پست قبل استفاده كنيم. به برنامه زير دقت كنيد. جايي كه فلش نشان مي دهد ، ما به header خود لينك داده ايم. و مي بينيد كه header هاي ضروري برنامه را هم لينك نداده ايم. يعني conio.h و iostream.h . در عوض در فايل header خود اين كار را كرده ايم. تصوير دوم ، تصوير header برنامه است.
قبلا همين برنامه را براي آموزش struct گفتيم. در حقيقت از اول برنامه همين طوري بود. يعني معرفي struct در يك فايل(هدر) و استفاده از struct در فايل ديگر(سورس) ، ولي من چون به طرز استفاده از header مسلط نبودم ، دو فايل را يكي كردم و بعنوان آموزش struct گفتم.


68a1.gif


68a2.gif


در شكل دوم كه فايل هدر است ، قسمتهايي كه با رنگ زرد مشخص شده ، تعريف header است و لازمه باشه.
قسمتي كه با رنگ سبز مشخص شده ، همان احضار header هايي است كه بايستي در فايل سورس انجام مي شده.
بقيه كدها هم ، همان استفاده اي است كه قرار بوده از فايل header بشه. يعني تعريف struct . البته خيلي كارها را ميشه در header فايلها انجام داد. بعدا به آن مي پردازيم.

براي راه انداختن برنامه سري كد اول را با پسوند cpp ذخيره كنيد و سري كد دوم را با نام b4.h و بعد سورس (كه همان پسوند cpp است ) را اجرا كنيد. كدها در زير آورده شده:
در يك پوشه بگذاريد دو فايل را. من هنوز امتحان نكردم اگر بيرون پوشه باشه ، چي ميشه. ولي احتمالا اجرا نشه.

کد:
#include "b4.h"					

void main()						
{		
clrscr();
 char c ;
 menu:
 // ----------- shoroe ghaaleb -----------------
 

tMyStruct player;

	player.id = 10;
	player.grade = 'a';

cout << player.id << " " << player.grade<< endl;


 // ----------- entehaye ghaaleb -----------------
 cout<<"end --x for exit--any key for repeat"<<endl;
	c=getch();	
 if(c != 'x') goto menu;				
}
بالايي سورس و پاييني هدر است.
کد:
#ifndef _b4_H	
#define _b4_H	


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

struct tMyStruct		
{
	int		id;
	char	grade;

};

#endif
.
 

saalek

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

69.gif



عكس بالا مراحل كامپايل و لينك و run را نشان مي دهد. اين عكس از كتاب sams است كه از آن سايتي دانلود كردم كه لينكشو در پستهاي قبلي گذاشتم.
فعلا توضيحات خوبي براي اين مراحل ندارم. مي ترسم از خودم بگم ، غلط باشه ، و دعوا درست بشه.
فقط يك نكته را بگم. در توربو سي ، در option تنظيماتي هست كه ميگه كه با زدن فلان دكمه ، چند مرحله اتوماتيك بره جلو . كه من هم زياد باهاش ور نرفتم.
مثلا ميگه بعد compile اتوماتيك برو link هم بكن.
از لينك هم يك چيزايي از اسمبلي يادم مونده بگم ، شايد اينجا هم همونجوري باشه. در اسمبلي برنامه link را داريم. در توربو سي هم فكر كنم در پوشه bin اين فايل(برنامه) هست. در اسمبلي كار اين فايل(برنامه) اين بود كه وقتي برنامه از چند فايل تشكيل شده بود ، آنها را به هم مرتبط مي كرد. اينجا هم احتمالا چنين قضايايي هست. دوستاني كه واردترند ، اگر وقت كردند 2 خط بگند.
راجع به run time error هم يه چيزايي شنيدم. معمولا به وقتي مي گند كه برنامه ما موقع كامپايل درست به نظر مي رسد ولي موقع run افتضاح بار مياد. يك مثال مي خوام بگم ولي مطمئن نيستم درست باشه ولي مي گم.
فرض كنيد در برنامه خود نوشته ايد دو عدد بر هم تقسيم بشوند. و مخرج كسر را از كاربر مي گيريد. خوب اگر كاربر صفر وارد كند ، تقسيم بر صفر ميشه و ...
موقع كامپايل ، معلومه كه تقسيم كاري اشتباه نيست ولي موقع run ممكنه باعث error هايي بشه. خلاصه يك چيزي توي اين مايه ها است run time error و خودتان از مثال ناقص من بگيريد قضيه را.
مثال link error هم مثلا مي تونه اين باشه كه فايل شما يافت نشه و ...
بعدا كه سوادم بهتر شد ، اينها را درست تر و كامل تر مي گم. يا دوستان مرحمت مي كنند.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
((به تقل از كتاب sams :
سورس ، فايلي است كه براي انسان مطالبش قابل فهم باشد.))
براي تبديل سورس به برنامه به كامپايلر نياز است. نام فايل كامپايلر در نرم افزارهاي مختلف در شكل زير آورده شده. همان طور كه مي بينيد ، كامپايلر توربو سي ، TC است. در پوشه bin اين فايل موجود است.


70.gif



Linking Your Program

After your source code is compiled, an object file is produced. This is still not an exe-cutable
program, however. To turn this into an executable program, you must run your
linker.
C++ programs are typically created by linking together one or more object files
with one or more libraries. A library is a collection of linkable files that were
supplied with your compiler, that you purchased separately, or that you created yourself.
All C++ compilers come with a library of useful functions (or procedures) and classes
that you can include in your program. A function is a block of code that performs a task,
such as adding two numbers or printing to the screen. A class is the definition of a new
type. A class is implemented as data and related functions. I’ll be talking about classes a
lot as they are explained in greater detail throughout the book.
The steps typically followed to create an executable file are:
1. Create a source code file, with a .cpp extension.
2. Compile the source code into an object file.
3. Link your object file with any needed libraries to produce an executable program.

ترجمه: بعد اينكه سورس ترجمه شد، يك فايل آبجكت ساخته مي شود. اين فايل قابل اجرا نيست. براي اين كار شما بايد linker خود را بكار بريد.
در سي++ فايلهاي آبجكت متعدد به هم وصل مي شوند ، بوسيله يك يا چند library .
يك library يك مجموعه اي از فايلهاي قابل لينك است كه توسط كامپايلر شما استفاده مي شود. كه ممكن است شما خريداري كرده باشيد يا خودتان ساخته باشيد.
تمامي كامپايلرها ، حاوي توابع و كلاسهاي كتابخانه اي مفيدي هستند كه شما مي توانيد در برنامه خود include كنيد.
يك تابع ، يك بلوك از كد است كه يك وظيفه اي را انجام مي دهد. مثل اضافه كردن دو عدد ، يا چاپ بر روي صفحه نمايش.
يك كلاس ، تعريف type جديدي است. كلاس شامل توابع و متغير(data ) هايي است. من ( sams ) در طول كتاب زياد و مفصل راجع به كلاس توضيح مي دهم.
من (saalek ):p هم مثل شما چيزي نفهميدم. ولي بعدا خواهيم فهميد.
ادامه ترجمه: مراحل ساختن يك فايل اجرايي بدين شرح است:
اول ، ايجاد يك فايل سورس با پسوند cpp .
دوم ، كامپايل سورس به object فايل.
سوم ، link كردن object file با كتابخانه هاي مورد نياز ، براي ايجاد فايل قابل اجرا. اجرايي.
.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
فرق كامپايلر و مفسر را اگر كسي مي دونه بگه. من كه هر چي مي خونم نمي فهمم.
ميگه basic و cobol مفسري است . ((اين يعني چي ؟!))


In time, higher-level languages evolved, such as BASIC and COBOL. These lan-guages
let people work with something approximating words and sentences, such
as Let I =100 . These instructions were translated back into machine language by inter-preters
and compilers. An interpreter, like BASIC, translates a program as it reads it,
turning the programmer’s program instructions or code directly into actions.

Compilers translate the code into what is called object code. The first step in this
transformation is called compiling. A compiler produces an object file. The sec-ond
step is called linking. A linker transforms the object file into an executable program.
An executable program is one that “runs” on your operating system.
Note: the term “object code” is not related to the concept of objects as used in object-ori-ented
programming (described later in this book).


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

آبجكت فايل ربطي به برنامه نويسي آبجكت گرا ، (شي گرا) ندارد.


ما كه فرق كامپايل و تفسير را نفهميديم. اگر كسي فهيمد فقط به اين سئوال من جواب بده كه:
آيا سرعت بالاي c نسبت به بيسيك به علت همين قضيه است. راجع به پاسكال چي؟ آيا آن هم كامپايلي است؟ پس چرا سرعت سي از پاسكال خيلي بيشتر است؟
.
 

saalek

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

return 0
}

we “return” the value 0 to the operating system. On some systems, this is used
to signal to the operating system success or failure; the convention is to return 0 for suc-cess
and any other number for failure. On modern windowing machines, this value is
almost never used, and so all the programs in this book will return the value 0 .

در بعضي سيستمها ، صفري كه برنامه به سيستم برمي گرداند استفاده مي شود...... صفر به معني خروج موفق و هر عددي يعني ناموفق......در ماشينهاي ويندوزي مدرن ، هرگز اين (( صفر )) استفاده نمي شود. (از sams )
.
 
بالا