PDA

View Full Version : گفتگو: header files



mabbaszadegan
شنبه 15 فروردین 1388, 23:59 عصر
سلام دوباره به برنامه نویسان عزیز
امیدوارم تعطیلات خوش گذشته باشه و باخت تیم ملی رو فراموش کرده باشید!!!
میخواستم یه بحثی راه بیاندازم در باره سرفایلهای ++c ، تا یه مرجع کاملی داشته باشیم و همه بتونند ازش استفاده کنند ؛
البته میدونم مهندسین عزیز شاید این بحث براشون بچه بازی باشه، اما به خاطر من مبتدی که تازه اول خطم فکر کنم بحث جالبی از آب در بیاد!!!
برای شروع خودم اونایی رو که بلدم میگم!!:

iostream: برای استفاده از دستورات ورودی و خروجی به کار میره :
cin , cout

conio.h: برای استفاده از دستورات زیر:

()getch: این فرمان معمولا در انتهای برنامه قرار میگیرد و سبب میشود که صفحه خروجی تا زدن یک کلید از کیبورد توسط کاربر باقی بماند
()gotoxy: این دستور خط فرمان برنامه را به سطر و ستون دلخواه میبرد

البته یه چندتا دیگه هم بلدم ولی چون من بیشتر میخوام یاد بگیرم بقیشو شما کمک کنید
انشالله در انتها یه منبع کامل و جامع در اختیار کاربران قرار میدیم:قلب:

pswin.pooya
یک شنبه 16 فروردین 1388, 00:11 صبح
بهتر نبود به جای فایل های هدر کتابخونه ها رو معرفی میکردی. و conio و iostream خیلی فراتر ار این حرفها هستن و برای هدری مثل iostream که کتابخونه stl رو معرفی میکنه کتابهای زیادی وجود داره.

mabbaszadegan
یک شنبه 16 فروردین 1388, 10:27 صبح
سلام , من اطلاعات زیادی در این زمینه ندارم , فقط میخواستم یه کار مفید بکنیم , هر چی شما صلاح میدونید
شما بحث رو شروع کنید
ممنون

pswin.pooya
دوشنبه 17 فروردین 1388, 11:21 صبح
مثلا sdl جزء کتابخونه های معروف اپن سورس کراس پلت فرم هستش که قابلیتهای زیر رو داره:
1. ساخت و ایجاد پنجره و قابلیت رسم داخل پنجره.
2. از پنجره ساخته شده رابطهای گرافیکی مثل DirectX و OpenGL میتونن استفاده کنن.
3. کار با شبکه ( از پروتکلهای TCP/IP و UDP پشتیبانی میکنه.)
4. قابلیت پخش صدا و موزیک.
5. قابلیت کار با نخ ها، موتکسها، سمافورها و متغییرهای شرطی
6. قابلیت کار با انواع IO مثل کی بورد، ماوس و joystick
7. قابلیت اسفاده از تایمرها.
و ...

برای یادگیری SDL کتاب focuse on SDL پیشنهاد میشه (اسم دقیق کتاب یادم نیست)

و اینم سایتش:
http://www.libsdl.org/

mabbaszadegan
دوشنبه 17 فروردین 1388, 12:03 عصر
ممنون ،
یه چند تا سؤال !!‌ :
سورس کراس پلت فرم چیه ؟ (شرمنده ، من خیلی مبتدی ام !!!)

این کتاب رو از سایتش نمیشه دانلود کرد؟

pswin.pooya
دوشنبه 17 فروردین 1388, 22:25 عصر
سلام

1. به جای پست از دکمه تشکر استفاده کنید!؟

2. اپن سورس: سورس برنامه به صورت مجانی تحت اختیار همگان! قرار داره.

3. کراس پلت فرم: روی همه پلت فرمها (ویندوز، لینوکس، و ...) کار می کنه.

4. نه کتاب پولیه و اگر میخوایش باید بخریش.

pswin.pooya
دوشنبه 17 فروردین 1388, 22:29 عصر
Open Image Librart:

1. کراس پلت فرم
2. اپن سورس
3. برای کار با فایلهای تصویری ( بارگذاری، ذخیره و اعمال افکت و ...)
4. قابلیت هایی رو برای DirectX و OpenGL برای کار با بافتها فراهم میکنه ( لود بافتهای فشرده، ساخت بافت، امکانات اضافی برای کنترل بافتها و ...)

سایت:
http://openil.sourceforge.net/

pswin.pooya
سه شنبه 18 فروردین 1388, 12:02 عصر
Open Audio Library:

1. کراس پلت فرم
2. Open Source
3. برای کار با صدای سه بعدی و دو بعدی ( پخش صوت، افکت گذاری، ضبط صدا و ...)
4. بیشتر به درد بازیهای کامپیوتری میخوره.
5. قدرت فوقالعاده زیادی داره و شرکت creative داره توسعش میده.

سایت:
www.openal.com (http://www.openal.com) و www.openal.org (http://www.openal.org)

mabbaszadegan
سه شنبه 18 فروردین 1388, 19:12 عصر
چجوری توی یه برنامه از این توابع میتونم استفاده کنم؟
(ببخشید که سوالاتم ابتداییه ، دارم حسابی میخونم تا به پای شما برسم)

pswin.pooya
سه شنبه 18 فروردین 1388, 21:05 عصر
خوب کافیه هدرهای اونها رو include کنی و فایل lib رو به کامپایلر بدی و بعدش به داکیومنت مراجعه کنی تا ببینی چه توابعی داره تا از اونها استفاده کنی.
اکثر کتابخونه های c++ رو باید از روی تمرین هاشون یاد بگیری وگرنه نمی تونی از اونها استفاده کنی.

mabbaszadegan
سه شنبه 18 فروردین 1388, 23:27 عصر
میشه یه نمونه کد برام مثال بزنید (من با کامپایلر ++vc کار میکنم)
خیلی ممنون

pswin.pooya
چهارشنبه 19 فروردین 1388, 22:33 عصر
سلام
نمونه کد مربوط به این کتابخونه ها هم همراه با sdk و هم روی نت هستش ( اگه sdk نداشته باشن.)

mabbaszadegan
چهارشنبه 19 فروردین 1388, 23:07 عصر
سلام
ببخشید من به سایتی که گفتید رفتم ، ولی کدهارو توش پیدا نکردم .
اگه میشه بگید این کدها کجای سایته؟
ممنون

pswin.pooya
پنج شنبه 20 فروردین 1388, 16:16 عصر
مثلا اگه sdk مربوط به OpemAL رو داونلود کنی. بعد از setup اون کلی مثال همراهش هست. تو آدرس زیر هم یکسری از مثالهاش همراه با آمورش هستش:

http://www.devmaster.net/articles/openal-tutorials/lesson1.php

mabbaszadegan
پنج شنبه 20 فروردین 1388, 17:50 عصر
نظرتون در باره معرفی time.h چیه ؟
میخوام یه برنامه بنویسم که سن یک نفر را دقیق محاسبه کنه (آپدیت باید بشه)

mabbaszadegan
دوشنبه 14 اردیبهشت 1388, 23:58 عصر
یه سایت خوب برای این مرجع پیدا کردم , یه سر بش بزنید
خیلی کامل و جامعه :
http://www.cplusplus.com
راستی چرا دیگه بحثو ادامه ندادید؟
اگه میشه کمی بحث رو وارد کار با فایلها و توابع کار برروی فایل کنیم
ممنون

Keyhan Clever
سه شنبه 15 اردیبهشت 1388, 00:25 صبح
#include<stdlib.h>
int x = rand();

به نظرم جالب اومد
متغیر x یه عدد تصادفی میگیره:قهقهه:

mabbaszadegan
سه شنبه 15 اردیبهشت 1388, 00:55 صبح
کد:
#include<stdlib.h>int x = rand();

به نظرم جالب اومد
متغیر x یه عدد تصادفی میگیره:قهقهه:


من متوجه منظورتون نشدم , میشه واضح تر بگید؟
من حرف مسخره ای توی این تاپیک زدم؟!!!

Keyhan Clever
چهارشنبه 16 اردیبهشت 1388, 00:19 صبح
آره منم موافقم
هر چی ام زرنگ باشی یا سریع نکته هارو بگیری باید یه مثالی حل بشه
چون اگه تو مثال خودتو جا کامپایلر بزنی واقعا نکات رو درک میکنیم

mabbaszadegan
جمعه 18 اردیبهشت 1388, 01:27 صبح
به نظرم توابع عضو string کارایی بالایی دارند , امید وارم مفید باشه :

getline: برای خواندن یک رشته به کار میره و ازش به صورتهای زیر میشه استفاده کرد:

روش اول: بدون ذکر کارکتر جداکننده(در این صورت کارکتر جداکننده enter فرض میشود)
اینم یه مثال ساده:


#include <iostream>
#include <string>
using namespace std;

() {
string str;
cout << "Please enter full name: ";
getline (cin,str);
cout << "Thank you, " << str << ".\n";
}

در این مثال رشته ای که توسط کاربر وارد میشود تا enter در خروجی چاپ میشه

روش دوم : کارکتر جدا کننده مشخص شود, مثلا :



#include <iostream>
#include <string>
using namespace std;
int main () {
string str;
cout << "Please enter full name: ";
getline (cin,str,'.');
cout << "Thank you, " << str << ".\n";
}


همون مثال قبلی , فقط تا رسیدن به نقطه در خروجی چاپ میشه

عملگر +: از عملگر + میتوان برای کنار هم قرار دادن چند رشته مجزا استفاده کرد , مثلا :



#include <iostream>
#include <string>
using namespace std;

main ()
{
string firstlevel ("com");
string secondlevel ("cplusplus");
string scheme ("http://");
string hostname;
string url;

hostname = "www." + secondlevel + '.' + firstlevel;
url = scheme + hostname;

cout << url << endl;

return 0;
}


همونطور که میبینید در ابتدا سه تا متغیر از نوع string رو مقداردهی کردیم و توسط عملگر + آنها رو در کنار هم قرار دادیم
خروجی این برنامه به این صورته:
http://www.cplusplus.com
خوبه اینجا بگم یه سریم به این لینک بزنید , من این مطالب رو از این وب سایت برداشتماگه به نظرتون مفیده بازم ادامه بدم ,

mabbaszadegan
یک شنبه 20 اردیبهشت 1388, 00:13 صبح
یکی از هدرفایلهای پرکاربرد هدر vector هستش
این هدر قابلیتهای یک آرایه به طور کامل را داره و علاوه بر این یه سری ویژگیهای منحصربفرد هم داره:
به صورت زیر یه متغیر int از نوع vector تعریف میکنیم:


vector<int> a(10)

با استفاده از تابع عضو size میتونیم اندازه یک vector رو بدست بیاریم:

int b=a.size()
که در این مثال مقدار b برابر 10 است

vector را برخلاف آرایه میشه به طور مستقیم در خروجی چاپ کرد:

cout<<a;

دو تا vector رو میشه باهم مقایسه کرد :



vector<int> a(10);
vector<int> b(10);
if(a==b)
cout<<"a=b";
else
cout<<"a!=b";


البته اینا کمی از قابلیتهای این هدرفایله, توی پستهای بعدی حتما قابلیتهای بیشتری ازین هدر فایل رو میذارم

pswin.pooya
یک شنبه 20 اردیبهشت 1388, 00:19 صبح
اگر میدونستن vector رو اینجوری معرفی میکنی. اصلا به وجودش نمی آوردن. به صفحه زیر یه نگاهی بنداز:
http://cplusplus.com/reference/stl/vector/

مهمترین تابع های این کلاس میشه گفت توابع push_backُ, pop back, erase و البته اپراتور [] هستند. حتما مطالعه کنید چون خیلی خیلی پر کاربرد و مفید هستش.

mabbaszadegan
یک شنبه 20 اردیبهشت 1388, 00:27 صبح
درسته , منم که گفتم خیلی پرکاربرده !!!!! ولی خوب تازه کارم دیگه!!!
شرمنده!!!!
آخه از اساتید کسی مطلب نمیذاره , اونوقت من پررو میشم و هرچی بلدم میزارم!!!!!
لطفا شما هم یه چیزی بزارید خوب تا ما یاد بگیریم!!!!
به خدا راه دوری نمیره!!!!!!

pswin.pooya
یک شنبه 20 اردیبهشت 1388, 00:34 صبح
خوب این همه داریم مرجع معرفی میکنیم. مثلا همین سایت c++ یه عالمه مثال برای کتابخونه stl اورده یا همین کتاب دایتل یه فصل فقط در مورد همین موارد داره.(که البته تو بعضی از ترجمه های فارسیش نیستش.) از اینا بگذریم msdn رو چی میگید. خدایش برای هر زیونی نتونید مثال مورد نظرتون رو پیدا کنید براسی سی هر چیزی رو بخوایید میتونید پیدا کنید.
خیلی از سوالهایی که اینجا مطرح میشه با یه سرچ ساده داخل msdn و یا codeproject.com به راحتی حل میشن و یه عالمه گزینه های بهتر براش پیدا میشه.

mabbaszadegan
یک شنبه 20 اردیبهشت 1388, 00:43 صبح
راستی گفتی دایتل!!!!!
کدوم ترجمش از همه بهتره؟ (دوستم ترجمه محمدی رو گرفته بود , به نظرم خوب اومد ولی خوب هنوز جلد دومش چاپ نشده؟)
البته من الکترونیکی دایتل (زبان اصلی) رو دارم

mabbaszadegan
دوشنبه 21 اردیبهشت 1388, 20:16 عصر
سلام به برنامه نویسان عزیز
گفتم عنوان این تاپیک به سوالم میخوره دیگه تاپیک جدید نزدم , اگه به نظرتون نیازه سوال رو تو یه تاپیک جدید مطرح کنم؟
میخواستم ببینم اصولا استفاده از هدر فایل توی برنامه , روی کارایی برنامه چه تاثیری داره؟
مثلا اگه یه برنامه رو بشه هم با با هدر فایل نوشت و هم بدون هدر , کدومش بهتره؟
اصلا این برنامه هایی که مینویسیم رو اگه بخواییم به عنوان یه برنامه مستقل از کامپایلر توی هر کامپیوتری اجرا کنیم باید چه کنیم؟(یعنی برنامه به طور مستقل از کامپایلر عمل کنه, آخه الان فایل اجرایی برنامه هایی رو که مینویسم فقط توی کامپیوترهایی که روش 2008 ++vc نصبه اجرا میشه)

Nima_NF
دوشنبه 21 اردیبهشت 1388, 21:10 عصر
سلام به برنامه نویسان عزیز
گفتم عنوان این تاپیک به سوالم میخوره دیگه تاپیک جدید نزدم , اگه به نظرتون نیازه سوال رو تو یه تاپیک جدید مطرح کنم؟
میخواستم ببینم اصولا استفاده از هدر فایل توی برنامه , روی کارایی برنامه چه تاثیری داره؟
مثلا اگه یه برنامه رو بشه هم با با هدر فایل نوشت و هم بدون هدر , کدومش بهتره؟

از تکرار بیش از حد کدها جلوگیری می کند و نیاز نیست مدام یک سری کد مشترک را در هر فایلی کپی کنید. هر جایی که include انجام می شود در ظاهر مثل این است که محتویات فایل .h در همان قسمت از کدها قرار می گیرد.

هر چقدر include های شما بیشتر باشد، پیدا کردن آن توسط کامپایلر و linker کمی وقت بیشتری نیاز دارد، (البته در هنگام کامپایل نه هنگام اجرا چون یک preprocessor هست). پس شما پیدا کردن تعریف توابع، ماکرو و غیره را به کامپایلر می دهید و دیگر خود را درگیر نمی کنید که بسیار سودمند خواهد بود.


اصلا این برنامه هایی که مینویسیم رو اگه بخواییم به عنوان یه برنامه مستقل از کامپایلر توی هر کامپیوتری اجرا کنیم باید چه کنیم؟(یعنی برنامه به طور مستقل از کامپایلر عمل کنه, آخه الان فایل اجرایی برنامه هایی رو که مینویسم فقط توی کامپیوترهایی که روش 2008 ++vc نصبه اجرا میشه)تمام زبان های برنامه نویسی به همین شکل هستند.
تمامی برنامه ها وابسته به سخت افزار (در درجه اول همان CPU) و کتابخانه های موجود در سیستم عامل هستند.
پس اگر قرار هست در یک سیستم عامل جدید برنامه ای نوشته شود، باید برای آن کامپایلر ساخته شود و خود سیستم عامل هم اجازه استفاده از کتابخانه ها و اجرای آن را بدهد.
ضمنا دقت کنید که قرار نیست در هر سیستم عاملی فایل اجرای مانند ویندوز با پسوند exe باشد، سایر سیستم عامل ها ساختار خود را می توانند داشته باشند و دارند.

mabbaszadegan
سه شنبه 22 اردیبهشت 1388, 00:10 صبح
من اگه بخوام برنامه ای که نوشتم رو توی هر کامپیوتری بدون نیاز به کامپایلر اجرا کنم باید چیکار کنم؟
منظورم اینه که مثلا با ++vc یه دفتر تلفن یا یه بازی نوشتم , حالا این برنامه رو میخوام به یکی بدم تا ازش استفاده کنه . باید چیکار کنم؟

pswin.pooya
سه شنبه 22 اردیبهشت 1388, 00:30 صبح
خوب باید کامپایلش کنی، بصورت release نه دیباگ و dllها یا فریم ورکهای مورد نیاز رو کنارش بذاری.

اصولا برنامه هایی که روی همه کامپیوترها اجرا بشن و با سیستم عامل هم مشکل ندارن یا بصورت اسکریپت با یکی از زبانهای خاص مثل perl، python و یا Lua نوشته میشن. یا اینکه از یک clr پیروی می کنن. که البته تا حالا همچین clrایی وجود نداشته که حتی فرمت فایل اجرایی رو هم داخلش ذست نخوره اما قویترین clr برای شرکت سان هستش که برنامه های جاوا روش اجرا میشن. اصطلاحا به دات نت هم clr میگن اما به نظر خیلی ها این مورد صحت نداره و یکسری دیگه این مورد رو تایید میکنن.

من بین زبونهای اسکریپت از لحاظ قدرت python و از لحاظ سرعت Lua رو پیشنهاد میکنم. البته اینم یگم که روی برنامه هایی معوملی سرعت دوتاشون هم خوبه اما داخل بازی ها برای کنترل اسکریپت Lua بهتر جواب میده.