یعنی ما با پارامتر تابع به این دو آرگومان ها مقدار میدیم
یعنی باید تو تابع main توسط شی هایی که تعریف میکنیم تابع رو فراخونی کنیم و بعد مقدار بدیم؟
Printable View
یعنی ما با پارامتر تابع به این دو آرگومان ها مقدار میدیم
یعنی باید تو تابع main توسط شی هایی که تعریف میکنیم تابع رو فراخونی کنیم و بعد مقدار بدیم؟
نه مال کتاب جعفرنژاد نیست.البته درست فرمودید که با جریان out_file اطلاعات رو توی فایل می ریزه اما می خواستم اون قسمت که بولد کرده بودمم رو دقیقا بفهمم که چیکار می کنه.
در مورد دوم هم اون راه که شما فرمودید منظورم نیست.می خوام از cin.bad() استفاده کنم و بدونم که چرا دوباره ورودی نمی گیره.بافر رو هم که خالی می کنم اما ورودی داخل ظرط باز هم کار نمی کنه و ازش رد میشه.
ای ول ای ول داش محمد و ایول
دادا میگما بریم سراغ مثال بعدی ولی یه مشکلی این مثال و دو تا مثال بعدی همش شبیه مثال قبلیایی هست که حل کردیم یعنی همش یه تابع set یه تابع get بعدشم displaymessage
من هم تمرین شماره 3 رو که این چیزا رو میخواد اینطوری نوشتم:
کلاس invoice یا صورت فروش
کلاسی به نام invoice که یک فروشگاه وسایل سختافزاری از آن بتواند برای صورت حساب جنس فروخته شده آن فروشگاه استفاده کند.
invoice باید متضمن چهار داده عضو باشد شماره قطعه شرح قطعه تعداد جنس خریداری شده و قیمت جنس
کلاس باید سازنده ای داشته باشد که به چهار داده عضو مقدار دهد برای هر یک از داده ها یک تابع set و یک تابع get و در آخر هم گفته یک تابع get invoiceamount برای مبلغ کل یعنی تعداد خریداری شده ضربدر قیمت یک بنویسید که این مقدار رو حساب کنه و مقدار رو برگردونه
بعد هم گفته اگر تعداد جنس و قیمت جنس مثبت نبود باید برابر صفر قرار داده شود. خوب این یعنی چی؟؟؟
این هم برنامه: ایا درسته؟
#include <cstdlib>
#include <iostream>
using namespace std;
class Invoice
{
public:
Invoice(string a, string b, int c, int d)
{
setShomareGhete(a);
setSharhGhete(b);
setTedadeGhete(c);
setGheymateGhete(d);
}
void setShomareGhete{string a)
{
shomareghete = a;
}
void setSharhGhete{string b)
{
sharheghete = b;
}
void setTedadeGhete{string c)
{
tedadeghete = c;
}
void setGheymateGhete{string d)
{
gheymateghete = d;
}
string getShomareGete()
{
return shomareghete;
}
string getSharheGhete()
{
return sharheghete;
}
string getTedadeGhete()
{
return tedadeghete;
}
string getGheymateGhete()
{
return gheymateghete;
}
void getinvoiceamount()
{
tedadeghete*gheymateghete=gheymatekol;
}
void displaymessage()
{
cout <<"etelaate foroshe mahsolat:"<< getShomareGete()<< getSharheGhete()<< getTedadeGhete()<< getGheymateGhete()<< endl;
}
private:
shomareghete;
sharheghete;
tedadeghete;
gheymateghete;
gheymatekol;
};
:لبخند:
تقریبا درست بود ، ولی فک کنم حواست نبوده نوع اعضای داده ای رو مشخص کنی ؛
خب یعنی اگه یه وقت کاربر مقدار منفی فرستاد توی توابع set ، تابع به صورت هوشمند مقدار متغیر رو بذاره صفر ؛ اینم یکی دیگه از فواید تعریف توابع set و get :چشمک:نقل قول:
اگر تعداد جنس و قیمت جنس مثبت نبود باید برابر صفر قرار داده شود.
اگه به نظرت دیگه فول شدی برو سراغ فصل بعد ، البته فک کنم تا فصل 6 و 7 سریع بتونی پیش بری تا برسیم به مبحث شیرین اشاره گر ها :لبخند:
موفق باشی
البته اگه ميشه من يه سوال از اين بخش بپرسم:
الان من اين برنامه رو نوشته حالا چيجوري با شي مقدار اعضاي داده اي رو در آرگومان قرار بدم؟؟؟
تازه اون شرطي رو كه گفته بايد هم تو تابع set و هم تو تابع get تعريف كنيم؟
يا نه فقط تو set تعريف كنم كافيه؟ شرطشم بايد با if باشه؟
خب توی تابع main ، اول یه شی از کلاس تعریف میکنی و با استفاده از سازنده ای که واسه کلاست نوشتی شی رو مقداردهی میکنی ؛ مثلا :
Invoice obj1("001","ghete 1",10,150000);
در مورد شرط ( if ) هم فقط کافیه که توی تابع set شرط بذاری ، چون تابع get فقط قراره یه مقدار رو برگردونه و کاری با درستی و غلطی اون نداره ،
موفق باشی
سلام به بچه ها مخصوصا محمد جان
برنامه رو دیدم فقط نمیدونم چرا 5 تا هدر داشت البته فکر کنم که برسم فصلای بالاتر بتونم بفهمم
فصل 4 در مورد الگوریتم و دستور های کنترلی هست
در مورد دستور های شبه کد هم یک سری توضیح آورده . یک مثال هم اورده:
prompt the user to enter the first integer
input the first integer
prompt the user to enter the secondinteger
input the second integer
add first integer and second integer
display result
حالا سوال من اینه که این شبه کد ها همون الگوریتم نویسی هست؟
در ادامه گفته که دستور های کنترلی سه دسته اند:
1- دستورهای ترتیبی
2- دستور های انتخاب
3- دستور تکرار
دوباره آیا دستور های ترتیبی همان شبه کد ها هستند؟
دوباره در مورد این توضیح داده که برنامه ها رو به صورت شبه کد بنویسید و بعد تبدیل کنید به برنامه ++C من در کل پاراگراف رو نفهمیدم ولی یه چیزی که تو چشم بود واژه "نمودار فعالیت ها" بود. یعنی چی؟
سلام
شبه کد ، تقریبا یه چیزی شبیه همون الگوریتم ، با این تفاوت که توش محدودیتی وجود نداره ؛
توی شبه کد ، مفهومی که قراره بنویسی رو به هر زبونی که دوست داری (فارسی یا انگلیسی) مینویسی ، مثلا میگی :
متغیر a را تعریف میکنیمحالا اینو تبدیلش میکنیم به کد ++ c
به کاربر بگو a را وارد کند
a را بخوان
اگر a منفی بود آن را در 10 ضرب کن
در غیر این صورت a را با 10 جمع کن
int a;
cout<<"a :";
cin>>a;
if(a<0)
a*=10;
else
a+=10;دستورهای ترتیبی که همین دستورات معمولیه که استفاده میکنی ، دستورات انتخاب مثل switch, if .. elseنقل قول:
در ادامه گفته که دستور های کنترلی سه دسته اند:
1- دستورهای ترتیبی
2- دستور های انتخاب
3- دستور تکرار
و دستورهای تکرار همون حلقه های تکرارند مثل for, while , do.. while
دقیق نمودنم ، ولی فک کنم activity diagram یکی از نمودارهای uml باشه که واسه تجزیه و تحلیل برنامه کاربرد داره ، ولی بازم اساتید محترم اگه اشتباه میکنمنقل قول:
واژه "نمودار فعالیت ها" بود. یعنی چی؟
موفق باشی
سلام به همه دوستان خوبید درسا خوب پیش میره امیدوارم درسا خوب پیش بره مخصوصا امتحانای آخر ترم
ما که داریم سخت کار میکنیم پول ترم جدیدو بدیم:لبخند:
قرض از مزاحمت اینکه فصل چهارم کار سبک تری نسبت به بقیه فصلا داره و من تازه رسیدم به دستور تکرار while تا اینحا مشکل زیادی نداشتم فقط یه مثال بود که زده بود من توضیحاتشو نفهمیده بودم
اینم مثال:
if(student grade >= 60 )
cout << "passed.\n";
else
{
cout << "failed.\n"
cout << "you must take this course again.\n";
}
در این برنامه میگه اگه شرط درست باشه یا نباشه بالاخره cout << "passed.\n"; اجرا میشه. آیا این حرف درسته؟
نه دیگه ، اگه شرط برقرار باشه اجرا میشه ، اگه برقرار نباشه قسمت else اجرا میشهنقل قول:
در این برنامه میگه اگه شرط درست باشه یا نباشه بالاخره cout << "passed.\n"; اجرا میشه. آیا این حرف درسته؟
درسته البته این رو کتاب نوشته بود نمیدونم چرا!!!
ما رسیدیم به یه مثال، مثال در مورد همون کلاس gradebook هست با این تفاوت که الان میخواهیم 10 تا نمره از کلاس بگیریم و میانگین رو حساب کنیم
قسمت اول برنامه:
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
class GradeBook
{
public:
GradeBook(string name)
{
setCoursename(name);
}
void setCourseName(string name)
{
if (name.length() <= 25)
coursename = name;
else
{
coursename = name.substr(0, 25);
cout << "name\"" << name << "\"exceeds maximum length(25).\n" << "limiting coursename to first 25 characters.\n" << endl;
}
}
string getCourseName()
{
return coursename;
}
void displaymessage()
{
cout << "welcome to the grade book for\n" << getCourseName() << endl;
}
void determineclassaverage()
{
int total;
int gradecounter;
int grade;
int average;
total = 0;
gradecounter = 1;
while (gradecounter <= 10)
{
cout << "enter grade:";
cin >> grade;
total = total+grade;
gradecounter = gradecounter+1;
}
average = total/10;
cout << "\ntotal of 10 grade is:" << total << endl;
cout << "\n class average is:" << average << endl;
private:
string coursename;
};
قسمت د.م برنامه:
#include <cstdlib>
#include <iostream>
#include <conio.h>
#include <string>
using namespace std;
#include "GradeBook.h"
int main()
{
GradeBook mygradebook("cs101 C++ programing");
mygradebook.displaymessage();
mygradebook.determineclassaverage();
getch();
return 0;
}
برای من باز اجرا نشد چندین بار چک کردم ببینم مشکل از من هست یا نه ولی مشکل از من نبود هر جور امتحان کردم برنامه اجرانشد
ظاهرش که درسته ،
ارورش چیه ؟
میگه لینک gradebook.h ساخته نشده
C:\Dev-Cpp\bin\tamrin\Makefile.win [Build Error] [GradeBook.exe] Error 1
سلام ، شرمنده که دیر جواب میدم ، یه خورده این چند روز سرم شلوغه:چشمک:
ببین من اجراش کردم ، درست بود ، اگه اجرا نمیشه ، ولش کن برو سراغ ادامه فصل
آقا محمد ما خيلي مخلصيم. مهم اينه كه شما به فكر ما هستي و علم خودت رو با همه به اشتراك ميگذاري البته من هم سوء استفاده نميكنما:لبخند:
بريم سراغ اصل مطلب:
ديشب داشتم رو كتاب يه فكري ميكردم يه نتيجه گيري كردم به نظرت اين نتيجه گيري من درسته؟
هدف از ايجاد سازنده اينه كه به اشياء كلاس مقدار بده و هدف از ايجاد اشيا فراخواني تابع هست. در ليست پارامتر تابع هم پارامتري مياد كه سازنده با اون كار داره.
حالا ما در همين مثال نام درس، به شي gradebook1 يك مقداري داديم وقتي با اون تابع getCourseName رو فراخواني ميكنيم مقدار شي جاي CourseName ميشينه به اين ترتيب كه در سازنده پارامتر name تعريف ميشه در تابعset مقدار Coursename در name ذخيره ميشه و در تابع get اين متغير coursename بازگشت ميشه (البته مقدارش) و اين مقدار هم همون مقدار پارامتر هست
اين نتيجه گيري من درسته؟
خوب اگه اينجوري باشه در همين مثال بالا چرا با شي اي كه مقدار نام كلاس رو داره تابع determineclassaverage رو فراخواني كرديم؟
سلام.
من یه سوال دارم که خودمم خوب نمی دونم چیه.امیدوارم که متوجه بشید
این قضیه بایت کم ارزش و با ارزش چیه؟من الان یه برنامه دارم می نویسم که فکر کنم باید در قیمتیش جای این بایتها رو در یه عدد
short int
عوض کنم.این متغیر باید مقدار یک بگیره منتها در حالت برعکس معمول.امیدوارم متوجه شده باشید.اگر فرض کنیم در حالت معمولی بایت اول مقدار رو نگه می داره الان می خوام برعکسش کنم یعنی بایت دوم مقدار رو نگه داره.شاید اینطوری برنامه ام راه بیافته.هیچ ایراد دیگه ای جز این ندیدم.
ممنون .
سلام
مثلا این عدد (در مبنای دو) رو ببین :
10100010
این عدد 8 بیت هستش که به چهار بیت سمت راست میگندبایت کم ارزش ، یعنی اگه حذف بشند عدد زیاد تغییر نمیکنه ؛ ولی به چهار بیت سمت چپ بیت باارزش میگند ، یعنی اگه حذف بشند مقدار عدد به کلی تغییر میکنه
در مورد جابه جا کردن این بیت ها هم میتونی از یه آرایه کارکتری کمک بگیری ، الگوریتمش زیاد سخت نیست ، شروع کن :چشمک:
موفق باشی
خب این تابع که کارش مشخصه ، داره میانگین 10 تا عدد رو حساب میکنه و معدل 10 درس رو در خروجی چاپ میکنه :
average = total / 10; // integer division yields integer resultبعد توی تابع main اومده با استفاده از شی myGradeBook تابع determineClassAverage رو فراخونی کرده
// display total and average of grades
cout << "\nTotal of all 10 grades is " << total << endl;
cout << "Class average is " << average << endl;
موفق باشی
خوب دادا مشکل همینه این شی mygradebook مگه مقدارش مخصوص چاپ نام درس نیست؟
مگه ما نباید یه شی دیگه ای درست کنیم که این تابع رو جداگونه احضار کنه؟
یا نه اصلا هیچ فرقی نداره ؟
یه سوال مبتدی :من یه متغیر اعشار دارم که وقتی چاپش می کنم با نماد علمی چاپ میشه.چیکار کنم که با اعشار بیاد که بفهمم چنده؟
ممنون
اینو امتحان کن.
double f = (double)1312156644.564655;
printf("%f",f);
یعنی منظور شما اینه که این کد در ++C اجرا نمیشه ؟!!!!!!
دوست من. اگه هدفت اینه که خودت یه تابع بنویسی که این کارو بکنه یه سری به این بزن :
https://barnamenevis.org/showthread.php?t=204334
شاید به نظر بی ربط بیاد ولی به کاری شما میخواهید بکنید ربط داره.
یه تابع توش هست که رشته رو به int تبدیل میکنه ، به نظر من خودت یه سری تغییرات توش بده و یا ازش الگو بگیر و یه تابع بنویس که float یا double رو به رشته تبدیل کنه.:چشمک:
نقل قول:
ه سوال مبتدی :من یه متغیر اعشار دارم که وقتی چاپش می کنم با نماد علمی چاپ میشه.چیکار کنم که با اعشار بیاد که بفهمم چنده؟
ممنون
#include<iomanip>
cout.setf(ios:;fixed);
cout.setf(ios::showpoint);
cout.precision(2);
long f=10.3;
cout<<f<<endl;
sh4mid .من هم یه همچین چیزی رو بهش پیشنهاد دادم ولی میخواد خودش کد کاملش رو بنویسه.
این دقیقا همون چیزه که می خواستم.با اینsetf خیلی کار کردم اما آخرش به نتیجه نرسید.فکر کنم چون precision رو مقدار نداده بودم جواب نمی داد درسته یا ارتباطی نداره؟البته تو کد شما هم یه مشکل کوچولو هست.شما متغیر صحیح برای مقدار اعشاری تعریف کردید.
یه سوال دیگه هم در همین رابطه:فرق این دو تا کد شیه.منظورم اینه که '|' چه تغییری اعمال می کنه؟
cout.setf(ios::fixed | ios::showpoint);
cout.setf(ios::fixed , ios::showpoint);
white tower جان.من که آخر متوجه نشدم که چی می خواهی.:متفکر:
اون چیزی که شما به من گفتی ، هیچ ربطی به این نداشت.
این شبه کده ! سخت نگیر :لبخندساده: :لبخندساده::لبخندساده:نقل قول:
البته تو کد شما هم یه مشکل کوچولو هست.شما متغیر صحیح برای مقدار اعشاری تعریف کردید
http://www.cplusplus.com/reference/i...ios_base/setf/نقل قول:
فرق این دو تا کد شیه.منظورم اینه که '|' چه تغییری اعمال می کنه؟
http://www.cplusplus.com/reference/i...base/fmtflags/
به به سلام دوستان میبینم اینجا خوب رونق گرفته خدا رو شکر
من هم یه سوال ازتون بپرسم
به این برنامه نگه کنید:
#include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
#include "GradeBook.h"
GradeBook::GradeBook(string name)
{
setCourseName( name );
}
void GradeBook::setCourseName( string name )
{
if(name.length() <= 25)
coursename = name;
else
{
coursename = name.substr( 0, 25 );
}
string GradeBook::getCoursename()
{
return coursename;
}
void GradeBook::displaymessage()
{
cout<< "welcome to the gradebook for\n" << getCourseName()<<endl;
}
void GradeBook::determineclassaverage()
{
int total;
int gradecounter;
int grade;
double average;
total = 0;
gradecounter = 0;
cout<< "enter grade or -1 to quit:";
cin>>grade;
while(grade != -1)
{
total = total + grade;
gradecounter = gradecounter + 1;
cout<< "enter grade or -1 to quit:";
cin>>grade;
}
if( gradeconter != 0 )
{
average = static_cast< double >( total ) / gradeconter;
cout << "\ntotal of all" << gradecounter << "grade entered is" << total << endl;
cout << "class average is" << setprecision( 2 ) << fixed << average << endl;
}
else
cout << "no grades were entered " << endl;
}
در این برنامه این دو خط یعنی چی؟
average = static_cast< double >( total ) / gradeconter;
cout << "class average is" << setprecision( 2 ) << fixed << average << endl;
دوستان من یه مشکل اساسی با این ارایه ها دارم،مثلا یه ارایه ی 10 تایی دارم میخوام حرف o رو با استفاده از کارکتر @ توش در بیاره!هر کدی مینویسم اصلا وقتی کمپایل میکنه هیچی نشون نمیده،خواهش میکنم کمک کنید.
سلام مجید جان
سوال اول :
average = static_cast< double >( total ) / gradeconter;
عملگر static_cast برای تبدیل صریح نوع متغیرها به کار میره ، توی این مثال total اول از نوع int تعریف شده ، بعد توی این خط با دستور static_cast< double >( total ) به double تبدیل میشه
سوال دوم :
cout << "class average is" << setprecision( 2 ) << fixed << average << endl;
تابع setprecision یکی از توابع دستکاری کننده جریان ورودی و خروجی هستش که با اون میتونی مشخص کنی اعداد تا چند رقم اعشار نمایش داده شوند ؛ این کد رو تست کن :
#include <iostream>
#include <iomanip>
using namespace std;
int main () {
double f =3.14159;
cout << setprecision (5) << f << endl;
cout << setprecision (9) << f << endl;
cout << fixed;
cout << setprecision (5) << f << endl;
cout << setprecision (9) << f << endl;
return 0;
}
البته این مباحث کامل تو فصل 15 میخونی
موفق باشی