פעולה על מחרוזת

phoenixTheGod

New member
פעולה על מחרוזת

אני ממש מתקשה עם היישום.
נתונה לי מחרוזת, בארוך כלשהו בסגנון הבא ssss^fff#ggg^kkkk^hhh
עכשיו אני רוצה להדפיס רק את התוים שבין תו ^ לתו ^ שיבוא אחרי האותיות. ואם הרצף נשבר, אז לא להדפיס את האותיות בין לבין. כלומר התוכנית היתה צריכה להדפיס רק את kkkk (צריך בדיוק מתו כלשהו לאותו התו שיופיעו אחרי האותיות)
ממש נתקיתי על היישום של זה. כבר התחלתי לנסות להשתמש במצביעים, פשוט להשתגע.
אז אשמח לעזרה
 

Guy Yafe

New member
פרסם את מה שכבר התחלת

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

phoenixTheGod

New member
התוכנה שלי לא תעזור, היא גורמת למחשב לצפצף

חחח

יש אפשרות להעתיק את כל האותיות למערך עזר, ובמערך המקורי להשאיר רק סמלים? (^ או #)
 

Guy Yafe

New member
פרסם בכל זאת

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

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

BravoMan

Active member
בוודאי שיש אפרות כזו, רק השאלה מה זה ייתן לך

בדיוק?

אגב, אני אישית לא לגמרי הבנתי את התרגיל: מה נחשב לשבירת רצף?
תו שאינו אות כגון # או גם אות שונה, למשל אות a שוברת רצף של ggg?
 

phoenixTheGod

New member
זה בעקרון כל התרגיל

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

BravoMan

Active member
זה די שונה ממה שהצגת בהתחלה...

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

הדרך הנכונה לפרק את התוכנית הזו לחלקים, היא לא לפי תנאי ההדפסה השונים.

שלבי העבודה ההגיוניים (לדעתי, אולי יש דרך טובה יותר) הם:
1. ללמוד לזהות היכן מתחילה מילה והיכן היא מסתיימת.
יש לקחת בחשבון שתו התחלה וסוף יכול להיות גם # וגם ^ ושתו התחלה אינו בהכרח זהה לתו הסוף.

2. ללמוד להדפיס מילה בודדת כמו שהיא (בינתיים נתעלם מתווים סוגרים ופותחים).

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

4. לזהות את צירוף התו הפותח והסוגר ולהחליט לפי צירוף זה איך להדפיס כל מילה.

5. לחבר הכל ביחד.

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

אגב, האם למדת כבר פונקציות, והאם מותר לך להפריד את התוכנית למספר פונקציות עזר?

בהצלחה!
 

phoenixTheGod

New member
טוב, מישהו אחר אמר לי איך לעשות את הסריקה.

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

nocgod

New member
כנראה שזו חריגה מהמערך

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