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

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

saalek

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


24a1.gif



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

void main()
{
clrscr();

const double PI = 3.1415926535898;
double radius;
double area;
double circumference;
cout << "Enter radius : ";
cin >> radius;
area = PI*radius*radius;
circumference = 2.0*PI*radius;
cout << "Area of circle of radius " << radius << " is "
<< area << endl;
cout << "\tand its circumference is " << circumference
<< endl;

getch();

}

24a2.gif

 

saalek

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

25.gif


طرز تبديل دابل به اينتيجر ، روش سمت چپي اشتباه و روش سمت راستي درست است.
مقادير بعد اجرا را در زير هر سورس آورده ايم. مقايسه كنيد.
.
 

saeedsmk

مدیر بازنشسته
تاریخ عضویت
6 سپتامبر 2003
نوشته‌ها
1,518
لایک‌ها
4
در مورد سئوالي كه كردي stdlib با اجازه دوستان :
تا اونجاي كه من ميدونم اين هدر يكسري توابع كاربردي و محاسباتي رو توش داره كه شايد بعدا توي مثال هاي كه داره ازش استفاده كنه كل ليست توابعش اينه :
کد:
  abort Abort current process returning error code 
  abs Return absolute value of integer parameter 
  atexit Specifies a function to be executed at exit 
  atof Convert string to double 
  atoi Convert string to integer 
  atol Convert string to long 
  bsearch Binary search 
  calloc Allocate array in memory 
  div Divide two integer values 
  ecvt Convert floating point value to string 
  exit Terminate calling process 
  fcvt Convert floating point value to string 
  free Deallocate dynamically allocated memory 
  gcvt Convert floating point value to string 
  getenv Get string from environment 
  itoa Convert integer to string 
  labs Return absolute calue of long integer parameter 
  ldiv Divide two long integer values 
  lfind Linear search 
  lsearch Linear search 
  ltoa Convert long integer value to string 
  malloc Allocate memory block 
  max Return the greater of two parameters 
  min Return the smaller of two parameters 
  putenv Create or modify environment variable 
  qsort Sort using quicksort algorithm 
  rand Generate random number 
  realloc Reallocate memory block 
  srand Initialize random number generator 
  strtod Convert string to double-precision floating-point value 
  strtol Convert string to long integer 
  strtoul Convert string to unsigned long integer 
  swab Swap bytes 
  system Execute command 
  ultoa Convert unsigned long integer to string

كه ميشه به چند دسته تقسيمش كرد يكي
كار با استرينگ ها ست مثا qsort
يكي كار با حافظه است مثل free
يكي ديگه محاسباتي هان ( من بيشتر از اين توابعش استفاده ميكنم و دسته بعدي) مثل div
يكي ديگه دسته اي كه مربوط به كارهاي پروسسي ميشه مثل exit كه اينم زياد استفاده ميشه
نكته :
اگه سي به كتابخونه اي احتايج داشته باشه و اون كتابخونه لود نشده باشه ( يعني در هدر معرفي نشه ) پيغام خطا ميده كه اين تابع مثلا div معرفي نشده ( مگه اينكه توي كتابخونه اين كتابخونه اضافه بشه )
پس برنامه شما تا اينجا اگه درست كار ميكنه و كامپايل ميشه احتياج به اين كتابخونه نداشته .
 

mostafa_gm

Registered User
تاریخ عضویت
4 آپریل 2005
نوشته‌ها
1,863
لایک‌ها
438
محل سکونت
My House
به نقل از saalek :

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

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

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

دوستان بي زحمت توضيح بدهند كه اين header كارش چيه و اگر ننويسيم چي ميشه. حتما بگيد. من بلد نيستم و نمي خواهم بدآموزي اينجا بكنم.
.
نه هیچ خرابکاری تو کار نیست.
اینم یه فایل هدر مثل فایلهای دیگه است که همون Standard Library هستش و اگه یه کمی جلوتر بری حتما باید اینم include کنی مثلا اگه بخوای اعداد تصادفی با تابع rand تولید کنی.
 

saalek

مدیر بازنشسته
تاریخ عضویت
24 می 2005
نوشته‌ها
654
لایک‌ها
53
محل سکونت
در پاي كوهپايه ها
به نقل از mostafa_gm :
نه هیچ خرابکاری تو کار نیست.
.
يعني شما مي فرماييد كه برنامه هايي كه تابحال بدون اينكلود اين
header
نوشتم ، درست بوده؟
اگر اينطور باشه خيلي خوبه. چون خيلي مشكل بود ويرايش همه پستها.
using namespace std;
آيا اين با آن دستور يكي است؟

خواهشا بيشتر توضيح بدهيد كه من بدانم كار اين فايل چيه. شايدم من اشتباه مي گم و فايل نباشه. خواهشا من را روشن كنيد. من برام خيلي هزينه داره كه برم خودم جواب سئوالم را پيدا كنم. شايدم اصلا پيدا نكنم. منابع من خيلي محدوده.
.
 

mostafa_gm

Registered User
تاریخ عضویت
4 آپریل 2005
نوشته‌ها
1,863
لایک‌ها
438
محل سکونت
My House
به نقل از saalek :
يعني شما مي فرماييد كه برنامه هايي كه تابحال بدون اينكلود اين
header
نوشتم ، درست بوده؟
اگر اينطور باشه خيلي خوبه. چون خيلي مشكل بود ويرايش همه پستها.
using namespace std;
آيا اين با آن دستور يكي است؟

خواهشا بيشتر توضيح بدهيد كه من بدانم كار اين فايل چيه. شايدم من اشتباه مي گم و فايل نباشه. خواهشا من را روشن كنيد. من برام خيلي هزينه داره كه برم خودم جواب سئوالم را پيدا كنم. شايدم اصلا پيدا نكنم. منابع من خيلي محدوده.
.
آقا سعید دیگه توضیحات کامل رو داد متاسفانه وقتی که داشت پستش رو میفرستاد من در حال تایپ کردن بودم!:blush:
 

plusdeck

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

K_2

کاربر تازه وارد
تاریخ عضویت
10 نوامبر 2005
نوشته‌ها
35
لایک‌ها
0
aga merc koli hal kardam 1ki ye matlabe be dard bekhur nevesht va bagyaro az avaregy dar avord albate gasde tohin nabud bebakhshina
 

saalek

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

===================
با تشكر از دوستان كه راهنمايي كردند. Name space std; را خواندم و تقريبا
فهميدم. ولي فكر كنم جزو پيشرفته محسوب بشه استفاده اش. بعدا در اين تاپيك بيان مي كنم. فعلا چيزهاي اوليه اي بايد گفته بشه.

ولي يك سئوال هنوز برام مونده.
با توضيحات اساتيد گرامي ، فهميدم كه stdlib.h مثل ساير header هاست(البته اگر درست بگم)
و namespace std نوعي امكانات براي اين كه متغيرها را دسته بندي كنيم .
آيا اين نتيجه گيري من درسته؟
كه بگم: (( اين دو دو مقوله جدا از همند. )) يعني اينكه stdlib يكسري توابع را پشتيباني مي كند ولي namespace نوعي سينتكس شناخته شده است كه نيازي به هيچ header ئي ندارد.

مشكل من از آنجا شروع شد كه از 2 سايت مختلف آموزشها را تهيه كرده ام. در يكي stdlib مدام بالاي برنامه بود و در ديگري name space std و اين توهم براي من ايجاد شد كه اين دو يك دستور واحدند يا اينكه حداقل كار همديگر را مي توانند انجام دهند.

فقط الان مي خواهم اين را بدانم كه :

سئوال : (( آيا ربطي بين اين دو هست؟))
.
 

mostafa_gm

Registered User
تاریخ عضویت
4 آپریل 2005
نوشته‌ها
1,863
لایک‌ها
438
محل سکونت
My House
به نقل از saalek :
با تشكر از دوستان كه راهنمايي كردند. Name space std; را خواندم و تقريبا فهميدم. ولي فكر كنم جزو پيشرفته محسوب بشه استفاده اش. بعدا در اين تاپيك بيان مي كنم. فعلا چيزهاي اوليه اي بايد گفته بشه.

ولي يك سئوال هنوز برام مونده.
با توضيحات اساتيد گرامي ، فهميدم كه stdlib.h مثل ساير header هاست(البته اگر درست بگم)
و namespace std نوعي امكانات براي اين كه متغيرها را دسته بندي كنيم .
آيا اين نتيجه گيري من درسته؟
كه بگم: (( اين دو دو مقوله جدا از همند. )) يعني اينكه stdlib يكسري توابع را پشتيباني مي كند ولي namespace نوعي سينتكس شناخته شده است كه نيازي به هيچ header ئي ندارد.

مشكل من از آنجا شروع شد كه از 2 سايت مختلف آموزشها را تهيه كرده ام. در يكي stdlib مدام بالاي برنامه بود و در ديگري name space std و اين توهم براي من ايجاد شد كه اين دو يك دستور واحدند يا اينكه حداقل كار همديگر را مي توانند انجام دهند.

فقط الان مي خواهم اين را بدانم كه :

سئوال : (( آيا ربطي بين اين دو هست؟))
.
آره، namespace بیشتر برای دسته بندی کرد اطلاعات به کار میره یه چیزی شبیه به structure البته نه با اون کاربرد. این خودش تابع نیست که نیاز به prototype داشته باشه دقیقا مثل دستور include.
بدون استفاده از این ساختار هم میشه برنامه های قوی نوشت.
 

saalek

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


40.gif


در برنامه بالا ، دو قسمت را با كادر مشخص كرده ايم. اولي تعريف متغير و مقدار دهي به آن. و دومي يك حلقه while .

حلقه را بسيار ساده گرفتم تا يادگيري آن ساده باشه. كار حلقه اينه كه از 11 تا 20 مي شمارد.
به سينتكس دقت كنيد.
- - - - - - - - - - - - - -
اول كلمه while
دوم ، داخل پرانتز شرط خود را مي نويسيم.
سوم ، يك كروشه باز كرده ايم و به خط بعد رفته ايم.
چهارم ، عبارات خود را نوشته ايم. كه در اينجا اضافه كردن يك واحد به x و چاپ x است. سمي كالن ها يادتان نرود.

پنجم ، رفتن به خط بعدي و بستن كروشه.
- - - - - - - - - - - - - -
من رفتم خط long x; را پاك كردم ، نتيجه : جايي كه x بكار رفته بود خطا داد.
آن را برگرداندم و x=10 را پاك كردم. نتيجه : چيزي چاپ نشد. و يك نكته از اينجا زاده مي شود . و آن اينكه اينيتياليز كردن. يعني مقدار دهي اوليه در سي اجباري است. مثل زبان بيسيك و بقيه نيست كه اگر مقدار ندهي ، خودش صفر فرض كند. و اگر مقدار ندهي ، بسته به اينه كه در آن بايتهايي كه با long x; تعريف شده ، به شانس شما چي قبلا بوده باشد.
پس بعد تعريف متغير ، مقدار دهي را فراموش نكنيد. به قولي initialize كنيد.
.
#include <iostream.h>
#include <conio.h>

void main()
{
clrscr();

long x;
x = 10;
while (x<20)
{
x+=1 ;
cout << " x = " << x << endl;
}

getch();

}
 

saalek

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

41a1.gif


41a2.gif


ما در شرطمان گفتيم كه x كوچكتر از 20 باشد ، ( x<20 ) ، انواع ديگر شرط گذاري را در شكل زير مي بينيد:


41a3.gif


دو مدل را در زير مي بينيد. يك مدل را كه در مثال بالا استفاده كرديم. مدل دوم را هم من امتحان كردم، مشكلي نبود.


41a4.gif


در اين آموزش كلا 3 نوع حلقه معرفي شده:
يكي همين while
دومي حلقه for
سومي حلقه repeat

و گفته سومي يعني repeat زياد استفاده نميشه.
.
 

plusdeck

Registered User
تاریخ عضویت
19 فوریه 2005
نوشته‌ها
550
لایک‌ها
11
محل سکونت
In My Earphones
به نقل از saalek :
حلقه while :


ww1.gif


در برنامه بالا ، دو قسمت را با كادر مشخص كرده ايم. اولي تعريف متغير و مقدار دهي به آن. و دومي يك حلقه while .

حلقه را بسيار ساده گرفتم تا يادگيري آن ساده باشه. كار حلقه اينه كه از 11 تا 20 مي شمارد.
به سينتكس دقت كنيد.
- - - - - - - - - - - - - -
اول كلمه while
دوم ، داخل پرانتز شرط خود را مي نويسيم.
سوم ، يك كروشه باز كرده ايم و به خط بعد رفته ايم.
چهارم ، عبارات خود را نوشته ايم. كه در اينجا اضافه كردن يك واحد به x و چاپ x است. سمي كالن ها يادتان نرود.

پنجم ، رفتن به خط بعدي و بستن كروشه.
- - - - - - - - - - - - - -
من رفتم خط long x; را پاك كردم ، نتيجه : جايي كه x بكار رفته بود خطا داد.
آن را برگرداندم و x=10 را پاك كردم. نتيجه : چيزي چاپ نشد. و يك نكته از اينجا زاده مي شود . و آن اينكه اينيتياليز كردن. يعني مقدار دهي اوليه در سي اجباري است. مثل زبان بيسيك و بقيه نيست كه اگر مقدار ندهي ، خودش صفر فرض كند. و اگر مقدار ندهي ، بسته به اينه كه در آن بايتهايي كه با long x; تعريف شده ، به شانس شما چي قبلا بوده باشد.
پس بعد تعريف متغير ، مقدار دهي را فراموش نكنيد. به قولي initialize كنيد.
.
#include <iostream.h>
#include <conio.h>

void main()
{
clrscr();

long x;
x = 10;
while (x<20)
{
x+=1 ;
cout << " x = " << x << endl;
}

getch();

}

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

saalek

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

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

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

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

saalek

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

توضيح اين كه داخل علامت تعداد عضوهاي آرايه را مي گيم. و بعد مي توانيم آنها را مقدار دهي كنيم و استفاده كنيم.
من 10 عضو تعريف كردم و بعد دو عضو را مقدار دهي كردم و چاپ كردم.

45a1.gif


45a2.gif

.
 
بالا