פורסם 2004 בינואר 1221 שנים אני צריך לכתוב פונקצייה רקורסיבית שמקבלת כקלט מחרוזת ותו, ומחזירה את המיקום אחרון של התו, אם התו לא מופיע היא מחזירה 0 אין להשתמש במשתני עזר או בפונקציות נוספות. זה פשוט מתסכל, אני יושב שעות על פונקציה ולא מצליח.... הנה מה שכתבתי (לא עובד כמו שצריך, פשוט קשה לי יותר מידי לחשוב רקורסיבית ) במקרה הזה הפונקציה אמורה להחזיר 4. //אני יודע שזה לא עובד זה מה שאני כתבתי, ואין לי מושג איך לכתוב את הפונקציה הנכונה... #include <iostream.h> int lastPosition(char str[], char letter); void main (void) { char str[20]="abaafg"; cout<<lastPosition(str,'a'); cout<<endl; } int lastPosition(char str[], char letter) { //תנאי עצירה, כשגודל המחזרוזת 0 אז הוא מחזיר 0, משום מה זה נשבר פה....(הקוד ישר) if (str[0] == NULL) return 0; else { //הפונקציה מקבלת מחרוזת מקוצרת, (מיקום אחד אחרי) ואת התו שצריך לחפש (מה שבתוך האינדקס) if (str[lastPosition(str+1,letter)] == letter) { letter=0; return letter+1; } else return 0; } } תודה מראש לעוזרים, ואשמח להסבר קצר בנוסף.... RK
פורסם 2004 בינואר 1221 שנים מה ההודעת שגיאה שאתה מקבלוהיה עוזר עם היית רושם הערות למרות שהתוכנית קצרה
פורסם 2004 בינואר 1221 שנים מחבר אבל זה לא בפסקל... אז למה אתה מגיב סתם...burton, ערכתי את זה והוספתי כמה הערות, מקווה שזה יעזור....
פורסם 2004 בינואר 1221 שנים int lastPosition(char str[], char letter); if (*str == NULL) return 0; if (*str == letter) return 1 + lastPosition(str+1, char letter); } return 0;}אין לי כוח בדוק אבל זה כמעט בטוח נכוןעריכה - שינוי קל
פורסם 2004 בינואר 1221 שנים כשאתה אומר "פה הוא נעצר" אתה בדקת את זה עם דיבגר וזה מגיע לשם בפעם הראשונה ועוצר או שזה מגיע למקום הזה בפעם ה LEN ואז זה נעצר??יש לי הרגשה(אני לא בטוח אני צריך להעמיק יותר) אבל ניראה לי שפשוט הפונקציה גומרת לקצר את המחרוזת עד הסוף ואז מפסיקה פשוט כמו שהיא אומרה לעשות
פורסם 2004 בינואר 1221 שנים מחבר holy, זה לא עובדburton, אני לא הצלחתי להסתדר עם הדיבגר, הוא פשוט מבלבל אותי,אבל משום מה הוא מחזיר את הערך האסקי של האות (כמו ששל הולי מחזיר),אני שובר את הראש ולא מצליח...
פורסם 2004 בינואר 1221 שנים int lastPosition(char str[], char letter) { int temp; if (*str == NULL) return 0; temp = lastPosition(str+1,letter); if (*str == letter || temp != 0) return temp + 1; return 0; }עובד
פורסם 2004 בינואר 1221 שנים מחבר תודה, הולינראה לי שהבנתי את זה סוף סוף, (אני מקווה).רק שיניתי את זה קצת, והוספתי הערות//Returns the last location of a charint lastPosition(char str[], char letter){//temp var that counts the locationint Location;//if the string is empty it return 0if (str[0] == NULL) return 0;//location gets the larger string and the tempoary location of//the letterLocation = lastPosition (str+1, letter);//if temp>0 or the string position value is equal the the//letter its adding 1 to the temp varif (str[0] == letter || Location > 0 ) return Location + 1;//if the letter is not exist it returns 0else return 0;}
פורסם 2004 בינואר 1221 שנים אוקיייש פה רק נקודה אחת עדינה שצריך לשים לב אליהמה קורה כשהגעת למקום השמאלי ביותר בה מופיעה האותבמקרה הזה temp=0 כי זה המקום השמאלי ביותר שבה נמצא האות - כולמר היא לא מופיעה בהמשךבמקרה הזה אתה רוצה להחזיר 1, וכאן נכנס בקיצור דרך. temp = 0 ולכן אפשר להחזיר temp + 1 שזה בעצם 1.זה הדבר היחיד המתוחכם פה, כל השאר זה סתם חלוקה למקרים.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.