עבור לתוכן

צריכה עזרה-שאלה בנושא תור קדימויות. ++

Featured Replies

פורסם

במחלקת הרנטגן של בי"ח ישנם שלושה חדרי צילום.

התור מתנהל עפ"י סדר ההגעה של החולים אך יש סדר עדיפויות לסוג ההניה שמביא עמו החולה.

בניתי מחלקה המייצגת את החולה (שם, ת"ז, הפניה, סוג צילום=אורך הזמן שאורך הצילום בין 1 ל-5 דקות)

יש לי מחלקה לייצוג ערימה מסוג חולה.

הבעיה שלי היא בלהגדיר אופרטורים של גדול וקטן, משום שהשורש בערימה מכיל את האיבר הגדול ביות לפי סוג ההפניה שהביא עמו החולה, החולה בסעיף 'הפניה' שממלא בכניסתו לתור- מכניס מחרוזת, איך אני הופכת אותה למספר int??

לדוגמא: הפניה מטיפול נמרץ בעדיפות גבוהה ביותר, אח:כ הפניה מחדר מיון, ולבסוף הפניה מרופא חיצוני.

(התור מסתדר לפי סדר ההפניות- איך עושים את זה?)

עוד שאלה: פרטי החולה הם בהרשאה פרטית. ועל כן כיצג מגדירים את אופרטורים >> וגם <<.

תודה.

פורסם

לגבי השאלה הראשונה:

לא הבנתי, החולה מכניס מחרוזת שכתוב בה "1", "2" או "3"? או שהמחרוזת שהוא מכניס היא "גבוהה ביותר", "חדר מיון" או "רופא חיצוני"?

במקרה הראשון, את צריכה פונקציה שממירה ממחרוזת למספר, כלומר הפונקציה atoi.

במקרה השני את פשוט צריכה להשתמש ב-if, ולבדוק לאיזה מהמחרוזות של המחרוזת שנתן החולה.

ולגבי תור שמסודר לפי סדר ההפניות - השיטה הכי יעילה היא להחזיק 3 תורים נפרדים, אחד עבור כל סוג הפניה. כשאת ניגשת להוציא משהו מהתור, את קודם כל ניגשת לתור הכי חשוב, אם הוא ריק אז לתור הבא, וכן הלאה.

לגבי השאלה השנייה שלך, פה כבר ענו לך:

http://hwzone.co.il/community/index.php?topic=188663.msg1639666#msg1639666

(כשעל מנת להגדיר את אופרטור הקריאה, את צריכה להשתמש ב-istream במקום ostream)

פורסם
  • מחבר

<p><p><p><p><p><p><p><p><p><p><p><p><p><p>החולה מכניס את המחרוזת "רופא חיצוני" או "טיפול נמרץ".</p><p>איך אני ממירה למספר באמצעות if?? איך אני יכולה לרשום אם הפניה=טיפול נמרץ return 1; וכו'??</p></p></p></p></p></p></p></p></p></p></p></p></p></p>

פורסם

את צריכה להשתמש ב-strcmp על מנת להשוות את המחרוזת שהכניס החולה והמחרוזת "טיפול נמרץ".

כלומר משהו בסגנון:

if (strcmp(hafnaya, "tipul nimratz") == 0)

פורסם

תור עדיפויות = ערימה.

תחפשי על זה באינטרנט.

פורסם
  • מחבר

ניסיתי להגדיר את האופרטור > כמו בקישור שהראת לי, אבל זה לא עובד!

זה מה שעשיתי:


bool Chole::operator <(Chole &c)
{
if(strcmp(hafnaia,c.getHafnaia())<0)
{
return true;
}
else
return false;
}

זה מה שהקומפיילר כותב:


d:\TAR 11\Chole.h(127): error C2664: 'strcmp' : cannot convert parameter 2 from 'int' to 'const char *'

פורסם
  • מחבר

מחזירה אוביקט מטיפוס int

זו הפונקציה getHafnaia:



int Chole::getHafnaia()
{
if((strcmp(hafnaia,"tipul nimratz"))==0)
{
return 1;
}
if((strcmp(hafnaia,"miyun"))==0)
{
return 2;
}
if((strcmp(hafnaia,"machlaka"))==0)
{
return 3;
}
if((strcmp(hafnaia,"doktor"))==0)
{
return 4;
}
}

פורסם

strcmp זו פונקציה שמשווה בין שתי מחרוזות, על פי סדר מילוני (כלומר מחרוזת קטנה ממחרוזת אחרת אם היא מופיעה לפניה במילון).

את פשוט צריכה להשוות בין ה-getHafnaia של שני האובייקטים, כלומר:

if (getHafnaia() < c.getHafnaia())

פורסם

או פשוט:


bool Chole::operator <(Chole &c)
{
return (strcmp(hafnaia,c.hafnaia)<0);
}

פורסם

החולה מכניס את המחרוזת "רופא חיצוני" או "טיפול נמרץ".

איך אני ממירה למספר באמצעות if?? איך אני יכולה לרשום אם הפניה=טיפול נמרץ return 1; וכו'??

תשתמשי ב- enum כך לא תצטרכי לעשות if - ים ולהמיר מחרוזות לקודים

פורסם

נכון, מומלץ להשתמש ב-enum, אבל היא לא יכולה לקרוא אותם מהמשתמש.

בסופו של דבר היא תצטרך להשתמש גם במחרוזות.

פורסם
  • מחבר

יש לי בעיה בהרצת התכנית.

ע"מ להכניס אנשים לחדרי צילום- הם נכנסים לפי עדיפות בסדר ההפניה(טיפול-נמרץ> חדר מיון> מחלקה אחרת> רופא), ואח"כ לפי מספר הגעתם לתור.

איך אני מסדרת את כניסתם לתור (כל חולה שמגיע מקבל מספר לפי מונה, איך אני בודקת)?????

זה מה שעשיתי:


Heap<Chole> h;
Chole chole;
Chole room[3];
int daka=0, choice=1, tzilum, id;
char name[8],hafnaia[20];


int num=1;//àúçåì îñôøé äàðùéí áúåø

room[0].setTzilum(0);//øé÷åï çãøé äöéìåí îàðùéí
room[1].setTzilum(0);
room[2].setTzilum(0);

while(daka<3)
{
cout<<"\n\n\nTime is: 00:0"<<daka;//òãëåï æîï
while(choice!=0)
{//÷ìéèú ôøèé äçåìéí
cout<<"\nIf you want to enter cholim to the tor- enter 1, else enter 0.\nEnter your choice: ";
cin>>choice;
if(choice==0)
{
break;
}

chole.setNum(num);

cout<<"\nchole number "<<chole.getNum()<<" please enter your pratim and wait.\n\n\tName: ";
cin>>name;
chole.setName(name);
cout<<"\tID number: ";
cin>>id;
chole.setID(id);
cout<<"\tPlace who get you the hafnaia: ";
cin>>hafnaia;

while(((strcmp(hafnaia,"tipul-nimratz")))&&((strcmp(hafnaia,"miyun")))&&((strcmp(hafnaia,"machlaka")))&&((strcmp(hafnaia,"doktor"))))//ú÷éðåú ÷ìè î÷åø äôðéä
{
cout<<"\tEnter second place who get you the hafnaia: ";
cin>>hafnaia;
}
chole.setHafnaia(hafnaia);
cout<<"\tWhich tzilum you need: ";
cin>>tzilum;

while((tzilum<1)||(tzilum>5))//ú÷éðåú ÷ìè- èååç öéìåí äéðå áéï ã÷ä ìçîù ã÷åú
{
cout<<"Which tzilum you need: ";
cin>>tzilum;
}
chole.setTzilum(tzilum);

h.insert(chole);

num++;

}

for(int i=0; i<3; i++)//äëðñú çåìéí ìçãø öéìåí ôðåé
{
if((room[i].getTzilum()<1)&&(!h.isEmpty()))
{
// if(room[i].getNum()>
room[i]=h.GetTop();
cout<<"\nChole is called: "<<room[i].getName()<<", please enter to room number "<<i+1;
h.RemoveTop();
room[i].setTzilum(room[i].getTzilum()-1);
}
else//àí äçãø úôåñ áçåìéí
if(room[i].getTzilum()>0)
{
cout<<"\nIn room "<<i+1<<" kayam chole"<<" who called: "<<room[i].getName();
room[i].setTzilum(room[i].getTzilum()-1);
}
else
{
cout<<"\nNo chole in Tzilum-room "<<i+1;
}
}
choice=1;
daka++;
}

עוד לא התייחסתי לאחרי 3 דקות כשלא מכניסים אנשים לתור עד שכל האנשים נכנסים לחדרי צילום.

זוהי המחלקה להגדרת חולה:


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

class Chole//àåáéé÷è îñåâ çåìä
{
private:
char name[8];
long ID;
char hafnaia[18];
int tzilum;
int num;

public:

void setName(char*);
void setID(long);
void setHafnaia(char*);
void setTzilum(int);
void setNum(int);
char* getName();
long getID();
int getHafnaia();
int getTzilum();
int getNum();

//àåôøèåøéí
friend ostream& operator<<(ostream&, const Chole&);
//friend istream& operator>>(istream& is, const Chole&);

int operator!=(Chole);
int operator==(Chole);
bool operator>(Chole&);
bool operator<(Chole&);
void operator=(Chole);


};

void Chole::setName(char* Name)
{
strcpy(name,Name);
}

void Chole::setID(long id)
{
ID=id;
}

void Chole::setHafnaia(char* Hafnaia)
{
strcpy(hafnaia,Hafnaia);
}

void Chole::setTzilum(int Tzilum)
{
tzilum=Tzilum;
}

void Chole::setNum(int Num)
{
num=Num;
}

char* Chole::getName()
{
return name;
}

long Chole::getID()
{
return ID;
}

int Chole::getHafnaia()
{
if((strcmp(hafnaia,"tipul-nimratz"))==0)//äôðéä áòìú çùéáåú âáåää áéåúø
{
return 4;
}
if((strcmp(hafnaia,"miyun"))==0)
{
return 3;
}
if((strcmp(hafnaia,"machlaka"))==0)
{
return 2;
}
if((strcmp(hafnaia,"doktor"))==0)//äôðéä áòìú çùéáåú ðîåëä áéåúø
{
return 1;
}
return 0;
}

int Chole::getTzilum()
{
return tzilum;
}

int Chole::getNum()
{
return num;
}

ostream& operator<<(ostream& os, Chole &c)
{
os<<c.getName()<<" "<<c.getID()<<" "<<c.getHafnaia()<<" "<<c.getTzilum()<<endl;
return os;
}

istream& operator>>(istream& is, const Chole& c)
{
//is>>c.name;>>c.ID>>c.Hafnaia>>c.Tzilum;
return is;
}

int Chole::operator !=(Chole c)
{
if(name!=c.getName())
{
return true;
}
else
return false;
}

int Chole::operator ==(Chole c)
{
if(name==c.getName())
{
return true;
}
else
return false;
}

bool Chole::operator >(Chole &c)
{
if(getHafnaia()>c.getHafnaia())
{
return true;
}
if(num<c.getNum())
{
return true;
}
else
{
return false;
}
}

bool Chole::operator <(Chole &c)
{
if(getHafnaia()<c.getHafnaia())
{
return true;
}
else
if(num>c.getNum())
{
return true;
}
else
{
return false;
}
}

פורסם

את יכולה לבצע INSERTION SORT עם תנאי של => במקום > על העדיפויות. ככה את גם תשמרי על הסדר שהם הגיעו בו. הראשון שהגיע(עבור אותה עדיפות) יהייה הכי קרוב לתחילת התור, והאחרון שהגיע עם אותה עדיפות יהייה הכי רחוק מתחילת התור. תנסי לצייר מצב שבו יש לך כמה חולים בתור(בהנחה שהם כבר ממויינים) ותוסיפי חולה אחד. כמו שלב האינדוקציה.

פורסם
  • מחבר

בעקרון, תכונת הערימה- מסדרת את האנשים בתור לפי העדיפות.

איך אני מסדרת את האנשים לפי סדר הגעתם???

במידה והחדר ריק מאנשים- ויש לי עוד חולים בתור, איעך אני מכניסה את החולה המתאים??

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים