PDA

مشاهده نسخه کامل : سئوالات برنامه نویسی ++C



SajjadKhati
25-06-15, 00:07
std چیه؟ تابع هست؟ کارش چیه؟ اگه فراخوانی نشه ، چه اشکالی داره؟ مثلا بجای std::cout فقط cout فراخونی و استفاده شه
و اینکه دو علامت نقل قول وسط std و تابع مورد نظر چیه؟

خبات کریمی
25-06-15, 00:21
درود دوست عزیز
STD یا C++ Standard Library مجموعه ای از توابع و کلاس های از پیش تعریف شده خود C++ هست، به عبارتی برخی توابع و کلاس های آماده و قابل استفاده
:: برای دست یابی/فراخوانی توابع و کلاس های این مجموعه است؛ طبق استاندارد خود C++ باید ذکر بشه اما با برخی تغییرات میشه بدون :: هم استفاده کرد البته بازم به استاندارد(نگارش) این زبان و کامپایلر بر میگرده

VAhid_El
25-06-15, 02:40
فکر میکنم این طوری باشه دوست عزیز:
اگر تو برنامتون کتابخونه iostream.h رو include کرده باشید میتونید cout رو به صورت مجزا استفاده کنید وگرنه باید به صورتstd::cout استفاده کنید.
برای اطلاعات بیشتر به این لینک (Only the registered members can see the link) هم یه سری بزنید بد نیست.

SajjadKhati
25-06-15, 07:40
ممنون گلپسران
والا من که نمیدونم . نظر شما دو تا هم کاملا متفاوت هه
من تازه ++C رو شروع کردم و هیچ چی ازش نمیدونم. نرم افزارمم Microsoft Visual C++ هه چون فک نکنم بیشتر از این نرم افزار ، توابع آماده ای نرم افزار دیگه بهم بده. میده؟ طبعا باید کمپایلر همین نرم افزار باشه دیگه. درسته؟
حوصله ی خوندن متن انگلیسی رو ندارم غیر از اینکه مجبور شم :Love-ssa~! (1):
الان کدوم نظر درسته؟

SajjadKhati
25-06-15, 08:11
راستی تو Visual C++ اگه میشه قسمت های مختلف شو توضیح بدین . ینی قسمت های Store App و Alt و CLR و General و MFC و ... برا چیه؟
و مهمتر اینکه چجوری میشه یه پروژه ساخت و چند تا اشیاء (منظورم شی گرایی نیست) مثل دکمه و text و ... اضافه کرد و تو اونا کد نوشت که مثلا هر وقت روی دکمه ی مورد نظر کلیک شه ، کدهاش اجرا شه؟ قبلا قسمتی بنام form داشت اما الان توی Microsoft Visual C++ 2013 میبینم ، انگار نداره. کجاست؟ و کلا بصورت command line یا همون کنسول نباشه

خبات کریمی
25-06-15, 09:02
درود
شما نگفته بودین که از چه کامپایلر یا IDE استفاده می کنید و فکر کردم سوالتون بنیادین و چرایی اون هست
لزوم بکار بردن :: به کامپایلر و اعلان های پیش فرض بر میگرده و والی مطمئناً خیلی وقت گیر هست و هیچ برنامه نویسی نمیاد تک تک دستورات رو با اسم کتابخانه ها بکار ببره.

چون تازه شروع کردین فعلا لازم نیست وارد جزئیات بشید و با آوردن

using namespace std;
در ابتدای کد(اعلان)، اون کتابخانه در پروژه شما قابل دسترسی خواهد بود و دیگه نیازی به :: نیست، این دستور فایل stdlib.h که مروبط به خود C++ هست رو به پروژه شما اضافه میکنه و هر تابع و کلاسی که تو اون هست رو می تونید مستقیماً استفاده کنید.

کافیه که در همه پروژه ها اعلان های زیر رو داشته باشید تا توابع اولیه ورودی/خروجی در دسترس باشه:

#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>



:give_rose:

خبات کریمی
25-06-15, 09:04
همین اول سراغ فرم و رابط کاربری ویژوال نرید و از کنسول شروع کنید، بسته به منبعی که برای یادگیری استفاده می کنید، توصیه من کامپایلرهای ساده تر نظیر Borland هست بعدا برید سراغ ویژوال استودیو

SajjadKhati
25-06-15, 09:16
درود
شما نگفته بودین که از چه کامپایلر یا IDE استفاده می کنید و فکر کردم سوالتون بنیادین و چرایی اون هست
لزوم بکار بردن :: به کامپایلر و اعلان های پیش فرض بر میگرده و والی مطمئناً خیلی وقت گیر هست و هیچ برنامه نویسی نمیاد تک تک دستورات رو با اسم کتابخانه ها بکار ببره.

چون تازه شروع کردین فعلا لازم نیست وارد جزئیات بشید و با آوردن

using namespace std;
در ابتدای کد(اعلان)، اون کتابخانه در پروژه شما قابل دسترسی خواهد بود و دیگه نیازی به :: نیست، این دستور فایل stdlib.h که مروبط به خود C++ هست رو به پروژه شما اضافه میکنه و هر تابع و کلاسی که تو اون هست رو می تونید مستقیماً استفاده کنید.

کافیه که در همه پروژه ها اعلان های زیر رو داشته باشید تا توابع اولیه ورودی/خروجی در دسترس باشه:

#include <stdlib.h>
#include <stdio.h>
#include <iostream.h>



:give_rose:

پس منظورش از std ، کتابخونه stdlib هست
آها ینی میشه بجای

using namespace std;

اینجوری هم نوشت ؟ :



#include<stdlib.h>


حالا تو کتابخونه stdlib.h چه توابعی موجوده که برای نام بردن cout اول باید اونو فراخونی کرد؟ آخه من تو borland دیدم که بدون استفاده از std مستقیم مینویسن cout


همین اول سراغ فرم و رابط کاربری ویژوال نرید و از کنسول شروع کنید، بسته به منبعی که برای یادگیری استفاده می کنید، توصیه من کامپایلرهای ساده تر نظیر Borland هست بعدا برید سراغ ویژوال استودیو

چرا؟
اگه میشه بگو این کار با قسمت form امکان پذیره یا نه؟
و اینکه تو نسخه 2013 اصلا form داره؟ من که میگردم پیدا نمیکنم
اتفاقا من از محیط غیر بصری خوشم نمیاد و یکی از عواملی که از ویژال سی ++ استفاده میکنم ، همین قابلیت شی هاش به اضافه ی توابع و کتابخونه هاشه (برنامه نویسی بدون استفاده از اشیاء و توابع آماده لذت نداره)

SajjadKhati
25-06-15, 12:58
گلپسران جواب بدین دیگه
راستی ویژال سی ++ ، ویندوز فورم اپلیکیشن نداه؟ انگار فقط سی شارپ اینو داره؟ ینی با ویژال سی ++ نمیشه اشیایی مثل دکمه و ... ساخت؟
با ویندوز فورم اپلیکیشن ،شی میسازن دیگه؟ درسته؟

SajjadKhati
25-06-15, 17:10
این چرا ارور میده؟ :



#include "stdafx.h"
#include <iostream>


int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "1234\n"
return 0;
}





فهمیدم سینتک نزاشتم :Love-ssa~! (1):
یاد لوا بخیر . عجف زبون کنار بیا ای بود. ناز و عشوه ی سینتک و تابع اصلی و فراخونی سر فایل و ... نمیومد :Love-ssa~! (1):

SajjadKhati
25-06-15, 17:20
یه سئوال دیگه داشتم . انگار تابع cout و ... تو فایل iostream.h هه
مگه همه ی تابع ها نشونه شون این نیست که با دو علامت پرانتز تعریف میشن؟ پس اینا چرا پرانتز ندارن؟ سئوال پست اول ام هم پابرجاست

SajjadKhati
26-06-15, 20:03
آقایون چرا تابع این جور نوشته میشه مشکلی نداره :



#include "stdafx.h"
#include <iostream>




int Add(int num1, int num2)
{
int addnum;
addnum = num1 + num2;
return addnum;
}


int _tmain(int argc, _TCHAR* argv[])
{
int a=2;
int b=3;
int c=Add(a,b);


std::cout << "c= "<<c<<std::endl;
return 0;
}


اما وقتی تابع Add را بعد از تابع اصلی بخایم بنویسیم ، باید پیش اعلان کنیم تابع Add رو ؟ (نوع مقادیرشو مشخص کنیم)
ینی این جوری مشکل داره چرا؟ :


#include "stdafx.h"
#include <iostream>






int _tmain(int argc, _TCHAR* argv[])
{
int a=2;
int b=3;
int c=Add(a,b);


std::cout << "c= "<<c<<std::endl;
return 0;
}




int Add(int num1, int num2)
{
int addnum;
addnum = num1 + num2;
return addnum;
}


تا اینکه این جوری پیش اعلان کنیم :



#include "stdafx.h"
#include <iostream>


int Add(int, int);


int _tmain(int argc, _TCHAR* argv[])
{
int a=2;
int b=3;
int c=Add(a,b);


std::cout << "c= "<<c<<std::endl;
return 0;
}




int Add(int num1, int num2)
{
int addnum;
addnum = num1 + num2;
return addnum;
}

SajjadKhati
30-06-15, 11:46
من چرا اولین بار تو vc++ کد مینویسم ، درست عمل میکنه اما وقتی دوباره ویرایشش میکنم ، تغییراتش اعمال نمیشه؟
لازمه که بگم موقع کامپایل ، یه پیام که همیشه میداد رو غیر فعال کردم . انگار از اون موقع به بعد این طور شد!

iranch
30-06-15, 11:53
درود
پاسخ
Only the registered members can see the link
بیشتر به خاطر بحث های کامپایلر ی هست.... از قدیم من یادم هست بوده و و باید الگو رو تعریف کرد در مواقعی که تابع خارج قرار میگیره
فعلا در ابتدا ی شروع زبان برنامه نویسی ، نیاز به درگیر شدن با این مسائل نیست...(از نظر من)

SajjadKhati
30-06-15, 12:12
درود
پاسخ
Only the registered members can see the link
بیشتر به خاطر بحث های کامپایلر ی هست.... از قدیم من یادم هست بوده و و باید الگو رو تعریف کرد در مواقعی که تابع خارج قرار میگیره
فعلا در ابتدا ی شروع زبان برنامه نویسی ، نیاز به درگیر شدن با این مسائل نیست...(از نظر من)

ممنون
فک کنم بخاطر اینه که بعد از فراخونی تابع ، نوشته شد

iranch
30-06-15, 12:35
ممنون
فک کنم بخاطر اینه که بعد از فراخونی تابع ، نوشته شد

بله کامپایل نا دیده میگیره ، اون قسمت رو هنگام کامپایل کردن کد ها.

- - - Updated - - -


من چرا اولین بار تو vc++ کد مینویسم ، درست عمل میکنه اما وقتی دوباره ویرایشش میکنم ، تغییراتش اعمال نمیشه؟
لازمه که بگم موقع کامپایل ، یه پیام که همیشه میداد رو غیر فعال کردم . انگار از اون موقع به بعد این طور شد!

نیازمند توضیحات بیشتر و عکس(در صورت لزوم فیلم کم حجم)تا متوجه مشکل شویم.

SajjadKhati
30-06-15, 15:12
برای استفاده از getch باید چی کار کرد؟
فایل اجرایی (exe) کجا ایجاد میشه که خودمون جداگانه اجرا کنیم؟

iranch
30-06-15, 15:57
#include <iostream>


int Add(int, int);


int main()
{
int a=2;
int b=3;
int c=Add(a,b);


std::cout << "c= "<<c<<std::endl;
getchar();
return 0;
}




int Add(int num1, int num2)
{
int addnum;
addnum = num1 + num2;
return addnum;
}


سلام
در مسیر ی که پروژه رو ذخیره کردی، بعد از اجرا یا Build کردن اون، پوشه Debug و اونجا فایل EXE با نام خود پروژه موجود است.

ravegoat
01-07-15, 14:14
با سلام!

سجاد جان چرا اینقدر پراکنده سوال پرسیدی...:1. (27):


راستی تو Visual C++ اگه میشه قسمت های مختلف شو توضیح بدین . ینی قسمت های Store App و Alt و CLR و General و MFC و ... برا چیه؟
...
اینا الگوی پروژه رو مشخص می کنن. توضیحات بیش تر در پیوند زیر:
What is the difference between MFC, ALT, WIN32, COM and CLR-VBForums (Only the registered members can see the link)


گلپسران جواب بدین دیگه
راستی ویژال سی ++ ، ویندوز فورم اپلیکیشن نداه؟ انگار فقط سی شارپ اینو داره؟ ینی با ویژال سی ++ نمیشه اشیایی مثل دکمه و ... ساخت؟
با ویندوز فورم اپلیکیشن ،شی میسازن دیگه؟ درسته؟
داره! میشه با C++ هم فرم ساخت. وقتی داری پروژه رو ایجاد می کنی از بخش Visual C++ زیر شاخه ی Win32، گزینه ی Win32 Project رو انتخاب کن. بعد از ایجاد پروژه کلید های ترکیبی Ctrl+Shift+A رو همزمان پایین نگه دار و در پنجره ی باز شده، از قسمت Visual C++ زیر شاخه ی UI، گزینه ی Windows Form رو به پروژه اضافه کن.


... سئوال پست اول ام هم پابرجاست
فکر کنم دوستان در پست 2 و 3 به خوبی جواب دادن و این جواب ها نه تنها متناقض نبودن بلکه هم دیگه رو تکمیل می کردند. پیشنهاد می کنم دوباره بخونی.

موفق باشی
آرمین

SajjadKhati
06-07-15, 11:13
ممنون گلپسران

چرا تو ++C حلقه for رو به این شکل ها بنویسیم مورد دار داره؟ :



for (int i = 1;5;i++)
{
cout << i;
}


یا



for (int i = 1;i=5;i++)
{
cout << i;
}


و حتما باید این طور نوشت :



for (int i = 1;i<=5;i++)
{
cout << i;
}


ینی اگه کسی نخاد علامت => رو بزاره و فقط علامت = رو بزاره ، راهی نداره؟ در صورتی هه که کامپایلرش موقع اجرا گیر نمیده اما عجیب و قریب اجرا میشه و با تعداد تکرار بسیار زیاد
اما هیچ چی به خوش ترتیبی و خوش دستی و سادگی زبان لوا نمیشه :great: با اونکه از زبان C ساخته شد اما یه آرایه اش هم ساده تر و هم منعطف تر از این زبانه و هم آرایه ی لوا برابری میکنه با آرایه و هم استراکچر زبان ++C و حتی بسیار گسترده تر و منعطف تر از این دو
همیشه برام سئواله که چجوری میشه که لوا که تو C نوشته شد ، این قدر به سینتک ها گیر نمیده (تقریبا میشه گفت سینتک پایانی تابع ها و متغییرها رو نداره ومن حتی یه بارم نزاشتم و هیچ گیری نداد) اما C یا ++C خودشون به شدت گیر میدن؟!!!

دومین سئوال اینکه چجوری حفظ کردین که تو این همه توابع و فضای نام بسیار زیاد ، کدوم تابع ، توی کدوم هدر فایل هه؟ این برام سخته و هم گیج کننده هست که حفظ کنم کدوم تابع توی کدوم هدر فایل هست که قبلش اون هدر رو تو پیش پردازنده بیارم. (اگه پیش پردازنده ی مورد نظر پیوست نشه که حتی اسم اون تابع رو توی لیستش وقتی شروع به نوشتن میکنیم هم نمیاره). من حتی گاها اسم تابع رو هم اول شو برام سخته به یاد بیارم. مثلا تابع setprecision که تو هدر iomanip هست رو هنوزم به زور نتونستم اسم این دو رو حفظ کنم
روش راحت تر برا یادگیری و به یادآوری تابع و هدر فایل اش نیست؟ ینی این همه برنامه نویس های ++C این همه هدر و نام تابع هاشونو دونه دونه حفظ میکنن؟
درباره ی ورودی تابع چی؟ توی توضیحات tooltip اون تابع که توی ویژال استودیو میاره ، تقریبا چیزی نمیفهمم

Stream
06-07-15, 13:14
ممنون گلپسران

چرا تو ++C حلقه for رو به این شکل ها بنویسیم مورد دار داره؟ :



for (int i = 1;5;i++)
{
cout << i;
}


یا



for (int i = 1;i=5;i++)
{
cout << i;
}


و حتما باید این طور نوشت :



for (int i = 1;i<=5;i++)
{
cout << i;
}


ینی اگه کسی نخاد علامت => رو بزاره و فقط علامت = رو بزاره ، راهی نداره؟ در صورتی هه که کامپایلرش موقع اجرا گیر نمیده اما عجیب و قریب اجرا میشه و با تعداد تکرار بسیار زیاد
اما هیچ چی به خوش ترتیبی و خوش دستی و سادگی زبان لوا نمیشه :great: با اونکه از زبان C ساخته شد اما یه آرایه اش هم ساده تر و هم منعطف تر از این زبانه و هم آرایه ی لوا برابری میکنه با آرایه و هم استراکچر زبان ++C و حتی بسیار گسترده تر و منعطف تر از این دو
همیشه برام سئواله که چجوری میشه که لوا که تو C نوشته شد ، این قدر به سینتک ها گیر نمیده (تقریبا میشه گفت سینتک پایانی تابع ها و متغییرها رو نداره ومن حتی یه بارم نزاشتم و هیچ گیری نداد) اما C یا ++C خودشون به شدت گیر میدن؟!!!

دومین سئوال اینکه چجوری حفظ کردین که تو این همه توابع و فضای نام بسیار زیاد ، کدوم تابع ، توی کدوم هدر فایل هه؟ این برام سخته و هم گیج کننده هست که حفظ کنم کدوم تابع توی کدوم هدر فایل هست که قبلش اون هدر رو تو پیش پردازنده بیارم. (اگه پیش پردازنده ی مورد نظر پیوست نشه که حتی اسم اون تابع رو توی لیستش وقتی شروع به نوشتن میکنیم هم نمیاره). من حتی گاها اسم تابع رو هم اول شو برام سخته به یاد بیارم. مثلا تابع setprecision که تو هدر iomanip هست رو هنوزم به زور نتونستم اسم این دو رو حفظ کنم
روش راحت تر برا یادگیری و به یادآوری تابع و هدر فایل اش نیست؟ ینی این همه برنامه نویس های ++C این همه هدر و نام تابع هاشونو دونه دونه حفظ میکنن؟
درباره ی ورودی تابع چی؟ توی توضیحات tooltip اون تابع که توی ویژال استودیو میاره ، تقریبا چیزی نمیفهمم


i=5 اصلا شرط نیست بلکه مقدار 5 رو در i می ریزه و خروجی 1 رو میده (که همیشه صحیح است) و لوپ تا ابد ادامه پیدا می کنه. اگه میخواید شرط کنید باید i==5 بگذارید (که اگه بگذارید در لوپ بالا چون شرط غلط است لوپ هیچ وقت اجرا نمیشه و سریعا ازش رد میشه). وقتی فقط 5 می گذارید شرط همیشه صادق است و هیچ وقت از لوپ بیرون نخواهد رفت.

اسم ها رو با تمرین یاد می گیرید ولی لزومی نداره بلد باشید. همیشه موقع برنامه نویسی documentation یا Google !! جلوتون لازمه باز باشه. هیچ کس همه چیز رو حفظ نیست.

SajjadKhati
06-07-15, 15:02
i=5 اصلا شرط نیست بلکه مقدار 5 رو در i می ریزه و خروجی 1 رو میده (که همیشه صحیح است) و لوپ تا ابد ادامه پیدا می کنه. اگه میخواید شرط کنید باید i==5 بگذارید (که اگه بگذارید در لوپ بالا چون شرط غلط است لوپ هیچ وقت اجرا نمیشه و سریعا ازش رد میشه). وقتی فقط 5 می گذارید شرط همیشه صادق است و هیچ وقت از لوپ بیرون نخواهد رفت.

اسم ها رو با تمرین یاد می گیرید ولی لزومی نداره بلد باشید. همیشه موقع برنامه نویسی documentation یا Google !! جلوتون لازمه باز باشه. هیچ کس همه چیز رو حفظ نیست.

ممنون
google باز باشه ، چه کمکی بهم میکنه که بفهمم کدوم تابع ، تو کدوم هدر هست که لازم نباشه حفظ اش کنم؟

documentation منظورت راهنمای vs هه؟

Stream
06-07-15, 15:10
ممنون
google باز باشه ، چه کمکی بهم میکنه که بفهمم کدوم تابع ، تو کدوم هدر هست که لازم نباشه حفظ اش کنم؟

documentation منظورت راهنمای vs هه؟


سرچ می کنید و پیدا می کنید. documentation های زیادی برای ++C هست:

Only the registered members can see the link
Reference - C++ Reference (Only the registered members can see the link)
Only the registered members can see the link

SajjadKhati
06-07-15, 15:36
نه
من اگه اول کلمه ی هدر فایل مربوطه یا اول کلمه ی تابع مربوطه رو یادم بیاد که بقیه اش تو لیست tooltip ویژال استودیو برام لیست میشه و میتونم پیداش کنم
مشکل من اینه که اگه اول کلمه ی تابع مورد نظر یا اول کلمه ی هدر فایل یادم نیومد چی کار کنم؟ یا اینکه ندونم و یا فراموش کنم که کدوم تابع تو کدوم هدر فایل هست چی؟ با توجه به اینکه تعداد بسیار بسیار زیادی هدر و مخصوصا تابع داریم!!

Stream
06-07-15, 15:46
نه
من اگه اول کلمه ی هدر فایل مربوطه یا اول کلمه ی تابع مربوطه رو یادم بیاد که بقیه اش تو لیست tooltip ویژال استودیو برام لیست میشه و میتونم پیداش کنم
مشکل من اینه که اگه اول کلمه ی تابع مورد نظر یا اول کلمه ی هدر فایل یادم نیومد چی کار کنم؟ یا اینکه ندونم و یا فراموش کنم که کدوم تابع تو کدوم هدر فایل هست چی؟ با توجه به اینکه تعداد بسیار بسیار زیادی هدر و مخصوصا تابع داریم!!

ســـــــــــرچ کنید!

function_name C++ which header file

پیدا می کنید! اگه نمی دونید اسم تابع چیه سرچ کنید:

++How to compare strings in C
++How to parse string to double in C
How to force a thread to terminate in C++11
how to generate a random number from normal distribution in C++11

پیدا می کنید!

SajjadKhati
09-07-15, 14:24
این کد ، متغییر YearGain اش چرا کار نمیکنه؟
همش مقدار اولیه اش که 9 هست میشه و تغییر نمیکنه :



#include "stdafx.h"
#include<iostream>
using namespace std;




int _tmain(int argc, _TCHAR* argv[])
{
int CurAccount = 1000,YearGain=0;


for (int i = 1; i <= 10;)
{
YearGain=CurAccount*(5 / 100);
cout << "Sode " << i << " : " << YearGain << endl;
CurAccount = CurAccount + YearGain;
cout << "Sepordeh Sale "<<i<<" : "<<CurAccount << endl;
i++;
}


getchar();
return 0;
}

ravegoat
13-07-15, 09:59
این کد ، متغییر YearGain اش چرا کار نمیکنه؟
همش مقدار اولیه اش که 9 هست میشه و تغییر نمیکنه :



#include "stdafx.h"
#include<iostream>
using namespace std;




int _tmain(int argc, _TCHAR* argv[])
{
int CurAccount = 1000,YearGain=0;


for (int i = 1; i <= 10;)
{
YearGain=CurAccount*(5 / 100);
cout << "Sode " << i << " : " << YearGain << endl;
CurAccount = CurAccount + YearGain;
cout << "Sepordeh Sale "<<i<<" : "<<CurAccount << endl;
i++;
}


getchar();
return 0;
}

با سلام!

مشکل به خاطر خطی است که با رنگ قرمز مشخص شده. چون متغیر ها از نوع int تعریف شدن، مقدار اعشاری در اون ها قابل قبول نخواهد بود. لذا وقتی مقدار داخل پرانتز یعنی تقسیم 5 بر 100 حساب میشه مقدار صحیح اون در آن واحد حساب میشه که برابر با صفره و سپس در مقدار متغیر CurAccount ضرب میشه. از طرفی می دونیم که ضرب صفر در هر عدد تعریف شده صفر خواهد بود. با اجرای برنامه در کل حلقه مقدار YearGain صفر خواهد بود (نمی دونم چرا نوشتی 9 !).

پرانتز رو برداری مشکل به نظر حل بشه:


YearGain = CurAccount * 5 / 100;