PDA

View Full Version : مرتب سازی حقوق کارمندان یک شرکت



alirah84
شنبه 04 آذر 1391, 00:43 صبح
سلام
یک کلاسی دارم به نام کارمندان یک شرکت.که 50 تا شی براش تعریف میکنیم و هرکدوم یه حقوق نهایی دارند.این حقوقها رو بر اساس بابل سورت مرتب کردم و در آخر میخوام اسم کارمند و حقوق رو در خروجی چاپ کنه .حقوق هارو به ترتیب چاپ میکنه ولی اسم کارمندها رو اشتباه چاپ میکنه.جالا باید چجوری کدش رو نوشت که مثلا کسی که حقوقش بالاترین هست ،اشمش هم درست چاپ کنه و به ترتیب بقیه رو هم نشون بده؟

مسعود اقدسی فام
شنبه 04 آذر 1391, 00:57 صبح
کد کلاس رو بذارید ببینیم کجای کار اشکال داره.

alirah84
شنبه 04 آذر 1391, 01:11 صبح
#include <iostream>
#include <string>
using namespace std;

const int n=3;

class Employee
{
string first,last;
int ID,nerkhe_malyat,saat_ezafe_kari;
float hoghoogh_paye,nerkhe_har_saat,total_hoghhgh;
public:

void input();
float calc_nerkh_har_saat();
float calc_total_hoghoogh();
void show();
friend void sort(Employee* p);
};
void Employee::input()
{
cout<<"Enter First Name:";
cin>>first;
cout<<"Enter Last name:";
cin>>last;
cout<<"Enter ID Number:";
cin>>ID;
cout<<"Mizane Hoghoogh Paye:";
cin>>hoghoogh_paye;
cout<<"Nerkhe Malyat:";
cin>>nerkhe_malyat;
cout<<"Saat Ezafe Kari:";
cin>>saat_ezafe_kari;
}
float Employee:: calc_nerkh_har_saat()
{
return nerkhe_har_saat=(hoghoogh_paye/26)/8;
}
float Employee:: calc_total_hoghoogh()
{
return total_hoghhgh=(hoghoogh_paye + (saat_ezafe_kari*nerkhe_har_saat)) - (hoghoogh_paye*nerkhe_malyat)/100;
}
void Employee::show()
{
cout<<"Nerkhe har Saat Kari:"<<nerkhe_har_saat<<endl;
cout<<"Hoghoogh Nahaiee:"<<total_hoghhgh<<endl;
}
int main()
{
Employee* p;
p=new Employee[n];
for(int i=0;i<n;i++)
{
(p+i)->input();
(p+i)->calc_nerkh_har_saat();
(p+i)->calc_total_hoghoogh();
(p+i)->show();
}
sort (p);
cin.get();
cin.get();
}

void sort(Employee* p)
{
float temp;
for(int i=0;i<n;i++)
{
for(int i=0;i<n-1;i++)
{
if ( (p+i)->total_hoghhgh > (p+i+1)->total_hoghhgh )
{
temp=(p+i)->total_hoghhgh;
(p+i)->total_hoghhgh=(p+i+1)->total_hoghhgh;
(p+i+1)->total_hoghhgh=temp;
}
}
}
for(int i=0;i<n;i++)
{
cout<<i<<". "<<(p+i)->first<<" "<<(p+i)->last<<endl;
cout<<"ID Number:"<<(p+i)->ID<<endl;
cout<<"Hooghooghe Nahayee:"<<(p+i)->total_hoghhgh<<endl;
}
}

مثلا 3 تا کارمند داریم:
اول به ترتیب 3 تا اسم میگیریم از ورودی(x,y,z)
حقوقهاشون هم:
x=500,000
y=400,000
z=250,000
بعد به روش حبابی اینارو مرتب میکنیم.آخر میخوایم حقوقهارو به همراه اسمهای کارمندها نمایش بدیم:
1.
x (اسم کارمند)
حقوق:250 تومن
2.
y (اسم کارمند)
حقوق:400 تومن
3.
z (اسم کارمند)
حقوق:500 تومن
مشکل اینه که اسم کارمند ها رو به ترتیب حقوق چاپ نمیشه.همونیکه اول برنامه از ورودی میگیرم رو دوباره چاب میکنه.

مسعود اقدسی فام
شنبه 04 آذر 1391, 01:23 صبح
خب شما اینجا داخل تابع مرتب‌سازی حقوق‌ها رو مرتب کردی و جاشون رو بین اشیا عوض کردی نه اینکه جای اشیا رو عوض کرده باشی. یعنی بهترین حقوق رفته واسه نفر اول و همینطور تا آخر. فقط جای حقوق‌ها عوض شده.

معیار مقایسه درسته که حقوقه، اما فقط حقوق نباید جابجا بشه. کل اطلاعات باید جابجا بشن. یا در واقع اشیاء با هم.

alirah84
شنبه 04 آذر 1391, 01:52 صبح
خب چجوری باید بر اساس اشیا مرتب کرد؟اشیا که یه مقدار ندارن،مجموعه ای از تابع و متغیرند.

hadi0x7c7
شنبه 04 آذر 1391, 10:27 صبح
شما یه تایع compare باید بنویسیسی به اینصورت:
bool compare(Emp a, Emp b)
{
if(a.total_salary < b.total_salary)
return true;
else if(a.total_salary > b.total_salary)
return false
else
return a.last_name < b.last_name;
}

الته اگه string رو بشه با > مقایسه کرد. یا میتونی از qsort استفاده کنی و همین تابه رو به عنوان ارگومان پاس بدی( به شیوه صحیح)

aidinMC
شنبه 04 آذر 1391, 11:19 صبح
خب چجوری باید بر اساس اشیا مرتب کرد؟اشیا که یه مقدار ندارن،مجموعه ای از تابع و متغیرند.
یه شی tmp از همون کلاس بساز بعد خود شی ها رو با هم جابجا کن.

مسعود اقدسی فام
شنبه 04 آذر 1391, 13:10 عصر
خب چجوری باید بر اساس اشیا مرتب کرد؟اشیا که یه مقدار ندارن،مجموعه ای از تابع و متغیرند.

اول اینکه اشیاء هم همینطور که دوستمون گفتن مثل همون حقوق‌ها قابل جابجایی هستن با یه شی temp. و هم اینکه اونم بلد نباشید یکی یکی همه‌ی متغیرها رو همونطور که حقوق رو جابجا کردی جابجا کن. توابع که نیاز به جابجایی ندارن.
البته اگه بحث تخصیص حافظه‌ی پویا در کلاس وجود داشت انتساب مستقیم درست و نبود و باید عملگر = سربارگذاری می‌شد. اینجا حافظ‌ه‌ی پویا ندارید.