Ghosthunter פורסם 2007 באוגוסט 8 Share פורסם 2007 באוגוסט 8 אם מותר לך לשנות את המחרוזת, תרוץ ברקורסיה עד \0. תלך אחד אחורה, תבדוק האם הוא קטן מזה שאחריו(אם כן- תדפיס) ואחר כך תעתיק לתא את התא שאחריו. קישור לתוכן שתף באתרים אחרים More sharing options...
ktbnus פורסם 2007 באוגוסט 8 Share פורסם 2007 באוגוסט 8 פונקציות הקליטה מקבלות כתובת בזכרון וקולטת החל ממנה. אם תשים לב, הם לא מקבלות כמות תווים, ככה זה. אתה אחרי להקצוות גודל מספיק.לא נוח לך, אתה יכול לבנות פונקצית קלט משלך שתקצה מערך דינמית בהתאם לקלט, תקלוט תו תו, תגדיך את המערך בהתאם. ותקטין אותו בסוף שלא יתפוס מקום מיותר.אפשרות נוספת זה להקצוות מערך גדול מספיק בשביל הקלט האפשרי ( 500-1000 תווים). לא חסכוני במיוחד. למרות שבימינו 1000 תווים זה ממש כלום מבחינת משאבי זיכרון.גם ב C++ אם אני לא טועה , לא בודק בשבילך גלישה בזכרון.* הגדרת המשתנים ב C חייב להיות הדבר הראשון שמופיע בראש בלוק. אתה לא יכול להגדיר משתנים בבלוק אם היתה לך כבר איזו שהיא פקודה.* הפונקצייה יכולה לקבל עוד משהו בנוסף למחרוזת?ו קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 * הגדרת המשתנים ב C חייב להיות הדבר הראשון שמופיע בראש בלוק. אתה לא יכול להגדיר משתנים בבלוק אם היתה לך כבר איזו שהיא פקודה.כדאי לציין שב-C++ זה לא ככה (אפשר להגדיר משתנים איפה שרוצים). קישור לתוכן שתף באתרים אחרים More sharing options...
SweeT_EviL פורסם 2007 באוגוסט 9 מחבר Share פורסם 2007 באוגוסט 9 זה ידוע, ועד כמה שאני יודע יש בC++ פונקציה שנקראת GET_S והיא הולכת ככהgets_s(veribel , size)כלומר הוא כן מגביל.בקשר לפונקציה היא מקבלת רק מחרוזת ולא מחזירה כלום, UNSIANG זה לא ממש פרקטי לשנות תמחרוזת(לא מצויין שאסור אבל עדין). קישור לתוכן שתף באתרים אחרים More sharing options...
שניצל פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 אתה מתכוון כנראה לפונקציה gets_s, שנמצאת רק בחבילה הסטנדרטית של מיקרוסופט.למיקרוסופט יש גרסאות "בטוחות" של כל הפונקציות האלו (כולן עם אותו שם + s_). קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 לא מצויין שאסור אבל עדין.אם לא רשום שאסור - מותר.בכל מקרה, בC++ יש גם את cin.getline(char *, int len, char del='\n');שlenזה האורך וDEL זה התו שעד אליו הוא יקלוט. קישור לתוכן שתף באתרים אחרים More sharing options...
SweeT_EviL פורסם 2007 באוגוסט 9 מחבר Share פורסם 2007 באוגוסט 9 "אם לא רשום שאסור - מותר."כל הרעיון הוא לא רק לפתרון תתרגיל, אלה לתרגל ולנסות לפתור תתרגיל בצורה הטובה ביותר, ואולי שישב בצד בתוך מאגר פונקציות.. קישור לתוכן שתף באתרים אחרים More sharing options...
ktbnus פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 כמו שנאמר GET_S זו פקונצייה של מיקרוסופט, יש גם SCANF_S . ב cin.getline ה len יכול להיות יותר גדול מאורך המערך בפועל. אפשר גם לעשות עוד פונקציה שבה אתה שולח עותק של המחרוזת לפונקציה הרקורסיבית. בכל מקרה שימוש ב strlen ניראה לי סביר, לא רואה שום בעייה אם זה קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 זמן הריצה של STRLEN הוא o(n), ולכן זה לא כל כך נחמד לשים את זה בפתרון, כי אז הפתרון יהייה בדרך כלל o(n^2) או יותר, במקום o(n) בלבד.וגם בגלל שבדרך כלל STRLEN היא פונקציה איטרטיבית. קישור לתוכן שתף באתרים אחרים More sharing options...
SweeT_EviL פורסם 2007 באוגוסט 9 מחבר Share פורסם 2007 באוגוסט 9 אפשר גם לעשות עוד פונקציה שבה אתה שולח עותק של המחרוזת לפונקציה הרקורסיבית.שימוש בפונקציית "תיווך" לדעתי זה תרגיל מלוכלך.אבל תודה לכולכם בכל אופן. קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 משתנה סטטי? קישור לתוכן שתף באתרים אחרים More sharing options...
SweeT_EviL פורסם 2007 באוגוסט 9 מחבר Share פורסם 2007 באוגוסט 9 ;D משתנים גלובלים הם השטן!!!11 .... ..... ..... .... אבל משתנים גלובלים/סטטיים הן עדיין השטן! במיוחד במקרה זה. לא נראה לי שהיית מקבל ניקוד מלא על פתרון מעין זה וברצינות רגע, זה בדיוק כמו להשתמש בעוד פונקציה שתשנה ערכי קבלה והחזרה. תשמע אבל אני מניח שאם לא הצלחת לחשוב על פתרון, אז די מסובך להגיע לפתרון בלי STRLEN. קישור לתוכן שתף באתרים אחרים More sharing options...
Jaman פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 לא נראה לי שאתה יכול לפתור את זה בלי STRLEN או משהו מקביל לה, כי אתה חייב למצוא את הערך של התו האחרון, וכדאי לדעת את מקום התו האחרון אתה חייב להשתמש בSTRLEN או כמו ש UnsignedInteger הציע - לעבור על המערך עד מגיעים ל\0, שזה בדיוק מה שstrlen עושה.. קישור לתוכן שתף באתרים אחרים More sharing options...
ktbnus פורסם 2007 באוגוסט 9 Share פורסם 2007 באוגוסט 9 משתנה סטטי ברקורסיה... זה כבר לא רקורסיה. ואם אתה רוצה אחרי זה לשלוח עוד מחרוזת לאותה פונקציה? אפשר לאפס את המשתנה בתנאי העצירה, אבל זה כבר לא רקורסיה. תשתמש ב STRLEN. אפשר להסתבך אם זה ולהגיע לפתרון שלא כולל STRLEN אבל אני לא חושב שזה מה שהתרגיל הזה בא לבדוק. אלה אם כן צויין בברור שאי אפשר להשתמש ב STRLEN. משתנים גלובלים וסטטים זה פויה! יש להם שימושים מאוד ספציפים. בדרך כלל למתחילים יש נטייה להתעלל בהם, אז עדיף לא לגעת בהם בינתיים. חוץ מזה, אני לא רואה שימוש בפונקציית "עזר" המקרה הזה בתור תרגיל מלוכלך קישור לתוכן שתף באתרים אחרים More sharing options...
Ghosthunter פורסם 2007 באוגוסט 10 Share פורסם 2007 באוגוסט 10 לא התעסקתי עם זה יותר מידי. בכל מקרה, הפתרון שלי הולך ככה:void func(char *s){ if(!s || !s[0] || !s[1]) return;char c = s[1]; func(s+1); if(s[0]<s[1]) { //print s[0] } s[0] = s[1]s[1] = c;} קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.