++C פונקציות - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

++C פונקציות


נעמה.

Recommended Posts

צריכה לבנות מחלקה למימוש DOS.

אני קולטת מהמשתמש מחרוזת שהמילה הראשונה היא פקודה שצריך לבצע ואח"כ שם התיקיה שצריך להוסיף/ למחוק/לעבור אליה/להדפיס.

יש לי שתי פונקציות הדפסה= האחת מקבלת את שם התיקיה שצריך לעבור אליה ולהדפיס, והשניה בלי פרמטרים.

איך אני יודעת לאיזו פונקציה לקרוא???

<איך אני בודקת שאחרי הפקודה DIR יש לי NULL>

קישור לתוכן
שתף באתרים אחרים

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

יכול להיות לדוגמא שהמשתמש כתב את המילה DIR והכניסה את שם התקיה לאחר שניים או שלושה רווחים.

בדיקת הקלט שלך צריכה לכסות את כל האפשרויות.

קישור לתוכן
שתף באתרים אחרים

אם אני מבין נכון, אז folder מכיל את כל הקלט מהמשתמש (dir folder), מה שהופך את הפונקציה ללא נכונה מבחינת בדיקת קלט.

יכול להיות שהמשתמש כתב סתם מילה באורך 3 אותיות, ואז בכל מקרה התכנית תבצע את הפקודה DIR.

וגם לגבי ה-ELSE יש בעיה, מכיוון שה-string שלך folder מכיל בתוכו את ה"פקודה" DIR.

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

את צריכה לסרוק את ה-string כדי למצוא את המילה הראשונה, לבדוק שהיא אכן DIR.

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

אם קיימת מילה את לבצע את DIR FOLDER.

וגם אז את צריכה לקחת בחשבון שיתכן שהמשתמש יכניס יותר משתי מילים, ולהחליט איך את מתייחסת לקלט שכזה.

קישור לתוכן
שתף באתרים אחרים

אני מסכים. פעם אחרונה שהתעסקתי עם מחרוזות ב C++, עשיתי משהו דומה ל:

int i
while (mystring[i] != '\0') { //התו האחרון בכל מערך...
if (mystring[i] == " ") // כלומר יש רווח...

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

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

קישור לתוכן
שתף באתרים אחרים

עוד שאלה:

פונקציה CD שעוברת מתיקיה לתיקיה, אני צריכ אח"כ להציג את כל המסלול עד לתיקיה אליה עברתי.

לדוגמא:

  c:/A/B/C>

איך עושים את זה??????

יש לי מחלקה למימוש עץ רב בנים (לכל שורש יכולים להיות אינסוף בנים):

פונקציה מעבר בין קודקודים:



Node<char*>* MultTree::Move(char* val)//îòáø ìöåîú àçø áòõ
{
assert(root!=NULL);
if(Includes(val)==false)//áãé÷ä ùäöåîú äîáå÷ù ÷ééí áòõ
{
cout<<"\nthe value is not kayam.\n";
}
else
{
current=root;
return current=includes(val);//îòáø àì äöåîú äîáå÷ù
}
}

Node<char*>* MultTree::includes(char* val)//çéôåù àéáø áòõ
{
if(strcmp(val,current->value)==0)
{
return current;
}
else
{
if ((current->right!=NULL)&&(current->right->value==val))//àí ðîöà äàéáø
{
current=current->right;
return current;
}
if((current->left!=NULL)&&(current->left->value==val))
{
current=current->left;
return current;
}
else
{
if(current->left!=NULL)
{
if(strcmp(current->left->value,val)!=0)
{
current=current->left;
return includes(val);//÷øéàä ø÷åøñéáéú ìçéôåù áàçéí
}
else
{
return current;
}
}
if(current->right!=NULL)
{
if(strcmp(current->right->value,val)!=0)
{
current=current->right;
return includes(val);//÷øéàä ø÷åøñéáéú ìçéôåù ááðéí
}
else
{
return current;
}
}
}
}
}

ויש מחלקה DOS שקוראת לפונקציה מעבר בין קודקודים (כל תיקיה היא קודקוד)

  	data.Move(s);

כרגע אם אני משתמשת בפונקציה בתכנית הראשית ורציתי לעבור לתיקה C יהיה כתוב לי :

  c:/C>

איך עוישם ישהיה כתוב כל המסלול מעבר??

קישור לתוכן
שתף באתרים אחרים

אם למדת מבנה נתונים וזה נראה שלמדת.

אז אם אני זוכר נכון, יש בספר של האוניב' הפתוחה פונקציה שמקבלת את הענף/עלה/בן/ילד (איך שקוראים לזה) שאת נמצאת בו כרגע, ומדפיסה את המסלול שלו מה-ROOT.

נראה שזה יעזור לך.

קישור לתוכן
שתף באתרים אחרים

אבל כשאני מחפשת איבר אני בודקת את כל העץ!!!! אין יחס בין האב לבניו <רק הבנים מסודרים בסדר עולה>

בניגוד לעץ חיפוש בינארי- אני לא יודעת שזו הדרך הנכונה בה אני הולכת!

<ואיך מכניסים למחסנית, צריך לממש כזה דבר???>

קישור לתוכן
שתף באתרים אחרים

לגבי מחסנית, תשתמשי ברשימה מקושרת.

המחסנית תהיה מסוג LIFO=Last in first out.

כל איבר במחסנית הזאת יכיל DATA שזה שם התקיה שעברת אליה ומצביע לאיבר הבא במחסנית.

כשפעולת CD FOLDER לדוגמא מוסיפה איבר לסוף רשימה.

ופעולת CD.. מוחקת את האיבר האחרון מהרשימה.

קישור לתוכן
שתף באתרים אחרים

אבל אין לי מחרוזת קודמת!

אני תמיד מחשפת מהשורש כי אין לי מושג באיזו רמה האיבר נמצא!!!!

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

איך עושים דבר כזה??????

<בעץ אדום שחור היה פשוט, בגלל שיש יחס בין האב לבנים ידענו בכל שלב שאנחנו בדרך הנכונה.

מה עושים במקרה כזה?>

צריך לשמור מצביע לאבא- ואם אני לא צריכה את אחד מבניו, אז לשמור מצביע לבן הבכור לפש בו, ואז באחיו- מסובך- הלכתי לאיבוד!

קישור לתוכן
שתף באתרים אחרים

1. זה לא תמיד עוזר לי לשמור את המחרוזת (רק במקרה שהאיבר אליו אני רוצה להגיע הוא צאצא של האיבר בו אני נמצאת עכשיו )

ובכל מקרה אני לא יודעת איך מגיעים אליו.

2. זו בדיוק השאלה- מצאתי את האיבר בעץ נגיד אני רושמת כל איבר שאני עוברת דרכו, אם זה לא המסלול-צריך למחוק חלק מהאיברים שכבר רשמתי (נראה לי שצריך להשאיר מצביעים בכל מיני מקומות שאדע לאן לחזור)

איך עושים דבר כזה???

קישור לתוכן
שתף באתרים אחרים

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

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

בסוף את צריכה להדפיס את הרשימה מההתחלה לסוף.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...