این برنامه چیزی مطابق با خواسته کتاب خروجی نمیده . خروجیش اینطوریه که عدد اول رو میگیره میفرسته به تابع نتیجش چاپ میشه بعد عدد دوم و الی آخر . اما کتب خواسته نتایج یه جا نشون داده بشه البته بدون استفاده از آرایه .
بخاطر همین گفتم بیام از توابع Function Overloading (توابع گرانبار شده ) استفاده کنم که خوب اونم باید از نظر نوع پارامتر تعداد یا ترتیب پارامتر باهم فرق داشته باشن که خوب تو این تمرین همه یکسان بود به خاطر همین مجبور شدماسم توابع رو تغییر بدم و چون گفته بود برای 3 تا ماشین به همین دلیل 3 تا تابع تعریف کردم (خداروشکر که گفته بود برای 3 تا !!!)
حالا برای چاپ جدول :
تو تابع اصلی وقتی ساعت هارو گرفتم همون جا هم مقادیر رو جمع کردم ریختم تو total . برای جمع قسمت charge یه متغیر به اسم sumch تعریف کردم که توی توابع به شکل ارسال با ارجاع ازش استفاده کردم .
راه دیگه ای به نظرم نرسید .
کد:
#include<iostream>
#include<iomanip>
using namespace std;
void calculatecharges1(double , double& );
void calculatecharges2(double , double& );
void calculatecharges3(double , double& );
int main(){
double hour1;
double hour2;
double hour3;
double sumch=0;
cin >> hour1;
cin >> hour2;
cin >> hour3;
double total=0;
total+=hour1;
total+=hour2;
total+=hour3;
cout << "car" <<setw(10)<<"hours"<<setw(10)<<"charge"<<endl;
calculatecharges1(hour1,sumch);
calculatecharges2(hour2,sumch);
calculatecharges3(hour3,sumch);
cout <<"Total"<<setw(8)<<total<<setw(10)<<sumch<<endl;
return 0;
}
void calculatecharges1(double houre1, double &sumch )
{
double remain;
double charge=0;
if (houre1==24.00)
{
charge=10.00;
sumch+=charge;
}
else
{
if ((houre1>=1.0) && (houre1<=3.0))
{
charge=2.00;
sumch+=charge;
}
else
{
remain= houre1 - 3;
charge=(remain*0.5)+ 2.00;
sumch+=charge;
}
}
cout <<"1"<<setw(10)<<houre1<<setw(10)<<charge<<endl;
}
void calculatecharges2(double houre2, double &sumch)
{
double remain;
double charge=0;
if (houre2==24.00)
{
charge=10.00;
sumch+=charge;
}
else
{
if ((houre2>=1.0) && (houre2<=3.0))
{
charge=2.00;
sumch+=charge;
}
else
{
remain= houre2 - 3;
charge=(remain*0.5)+ 2.00;
sumch+=charge;
}
}
cout <<"2"<<setw(10)<<houre2<<setw(10)<<charge<<endl;
}
void calculatecharges3(double houre3,double &sumch)
{
double remain;
double charge=0;
if (houre3==24.00)
{
charge=10.00;
sumch+=charge;
}
else
{
if ((houre3>=1.0) && (houre3<=3.0))
{
charge=2.00;
sumch+=charge;
}
else
{
remain= houre3 - 3;
charge=(remain*0.5)+ 2.00;
sumch+=charge;
}
}
cout <<"3"<<setw(10)<<houre3<<setw(10)<<charge<<endl;
}
---------- Post added at 12:06 PM ---------- Previous post was at 12:05 PM ----------
حالا یه برنامه دیگه ::20:
یکی از کاربردهای تابع floor گرد کردن یک مقدار به نزدیکترین عدد صحیح است. دستور:
Y=floor(x+0.5)
عدد x را به نزدیکترین عدد صحیح گرد کرده و نتیجه را به y انتساب میدهد. برنامه ای بنویسید که چند عدد را از ورودی خوانده و با استفاده از دستور بالا هریک از آنها را به نزدیکترین عدد صحیح گرد کند. برنامه باید برای هر یک از اعداد پردازش شده ، خود عدد اصلی و نیز عدد گرد شده را چاپ نماید.
کد:
#include<iostream>
#include<cmath>
using namespace std;
int flor(double x)
{
double y;
if (x!= -1){
y=floor(x+0.5);
cout<<"orginal number: "<<x<<" rounded number: "<< y <<endl;}
else
return 0;
}
int main()
{
double x=0;
do {
cout<<"enter number (for exit enter -1): "<<endl;
cin >> x;
flor(x);
}while(x!=-1);
return 0;
}
این برنامه ای هست که براش نوشتم ، برنامه درست جواب میده اما درست جواب دادن برام ملاک نیست اینکه برنامه رو به شیوه درستش نوشتم یا نه برام مهمه .
لطفا نظر میدید در مورد برنامه .
---------- Post added at 12:07 PM ---------- Previous post was at 12:06 PM ----------
تابع floor را میتوان برای گرد کردن عددی تا تعداد مشخصی رقم اعشار به کار برد.دستور
Y=floor(X*10+.5)/10
مقدار موجود در متغیر x را تا رقم اعشار یک صدم (دومین رقم در سمت راست ممیز)گرد میکند. برنامه ای بنویسید که با تعریف چهار تابع به شکل های زیر عدد number را گرد کند :
کد:
a) roundtointeger(x);
b)roundtoTenths(x);
c)roundtoHundredths(x);
d)roundtothousandths(x);
#include<iostream>
#include<cmath>
using namespace std;
int roundtointeger(double x)
{
double y;
if (x!= -1){
y=floor(x+0.5);
cout<<"orginal number: "<<x<<" roundtointeger: "<< y <<endl;}
else
return 0;
}
int roundtoTenths(double x)
{
double y;
if (x!= -1){
y=floor(x*10+0.5)/10;
cout<<"orginal number: "<<x<<" roundtoTenths: "<< y <<endl;}
else
return 0;
}
int roundtoHundredths(double x)
{
double y;
if (x!= -1){
y=floor(x*10+0.5)/100;
cout<<"orginal number: "<<x<<" roundtoHundredths: "<< y <<endl;}
else
return 0;
}
int roundtothousandths(double x)
{
double y;
if (x!= -1){
y=floor(x*10+0.5)/1000;
cout<<"orginal number: "<<x<<" roundtothousandths: "<< y <<endl;}
else
return 0;
}
int main()
{
double x=0;
do {
cout<<"enter number (for exit enter -1): "<<endl;
cin >> x;
roundtointeger(x);
roundtoTenths(x);
roundtoHundredths(x);
roundtothousandths(x);
}while(x!=-1);
return 0;
}
برنامه رو درست نوشتم ؟؟؟چون فقط برای مقادیر اعشاری درست جواب میده و برای مقادیر صحیح اشتباه خروجی میده !!!