פורסם 2010 במאי 815 שנים Long story short -כחלק ממשימה בכיתה, בניתי אפליקציה פשוטה יחסית שמקבלת פונקציה f(x,y) ומציירת אותה בתחום מסויים.התוכנה למעשה בונה מספר נקודות, כל נקודה מגדירה כ(x, f(x, z), z) (יותר נוח לראות את החלק ה'תלת מימדי' על ציר הy [שפונה מעלה] מאשר על ציר הz [שפונה לכיוון המשתמש, כביכול)ומחברת אותם עם קווים - לא מסובך במיוחד.מבחינת המרה של זה לקורדינטות שניתן להציג על מסך דו מימדי, הכל מכוסה.הבעיה היא כזאת:קלט מהמשתמש.המצב שאני מחפש הוא שהמשתמש יוכל לכתוב בתיבת טקסט כזו או אחרת ביטוי מורכב כמה שיהיה(sin(x*x + y^x / 2*x*y) + cosh(x+tan(y)), ושיתבצע ציור שלו.הצלחתי למצוא מספר דרכים לבצע ביטוי דינמי שכזה (expression trees & lambda expressions לדוגמא), הבעיה היא שאף אחד מהם לא תומך, עקרונית, במשתנים.מה שמשאיר לי לעשות parsing (מה לעזאזל המילה בעברית?) של הביטוי כולו מחדש כל פעם לכל ערך של המשתנים (וזה יוצא בין 400 ל40000 פעמים להרצה בודדת), מה שבעייתי.מה שאני צריך בעצם זה את הדרך הכי יעילה שאפשר לעשות את זה. (הבעיה, בעצם, היא שעוד לא מצאתי דרך לייצור Lambda expressions עם משתנים מתוך string, כי אם זה אפשרי אז אני פשוט יוצר את הביטוי ואז קורא לו בצורה f(x,y) וביעילות לא רעה, כי זה דורש parsing רק פעם אחת ואז הרבה חישובים)אפשרי?לא אפשרי?תודה,גיא.
פורסם 2010 במאי 815 שנים הפתרון שאני מכיר זה לעשות parsing על הביטוי ולייצג אותו בתור עץ של פעולות והאופרנדים שלהן, את זה עושים פעם אחת. אחרי זה בעזרת ריקורסיה פשוטה ניתן לחשב את הערך של הביטוי לכל x ו-y שצריך. בכל מקרה parsing עושים רק פעם אחת רק את הצבת הערכים ואת חישוב הערך הכללי עושים הרבה פעמים.
פורסם 2010 במאי 815 שנים מחבר אני מניח שהדרך הכי פשוטה לעשות את זה (בהנחה שאת הparsing עצמו אני יודע לבצע) זה לבנות אובייקט של Node כלשהו שיכול להכיל בתוכו:א. שני nodes נוספיםב. node ומספרג. שני מספרים(כשמספר תמיד יכול להיות גם משתנה)ושיכיל בתוכו אופרטור כלשהוולבנות בתוכו פונקציה שתמצא את הערך של הnode? (כמובן שאם הוא מכיל nodes בתוכו זה צריך קודם להעריך את הערך שלהם וכו')או שיש דרך יותר טובה מזה לייצור את העץ עצמו? (משהו מובנה בC# שאני לא מודע אליו ושאין בעיה להכניס לתוכו טקסט (בשביל האופרטורים והמשתנים) ולבנות אותו בצורת 'עץ')
פורסם 2010 במאי 2715 שנים מקווה שזה יעזור למי שמחפש תשובה לשאלה הספציפית שלך או בכלל לביטויים חשבונייםחישוב ביטויים חשבונייםפלט: ערכו של הביטוי החשבוני. .Infix קלט: ביטוי חשבוני בצורהטיפוסי נתונים מופשטים:מחסנית של אופרטורים. מחסנית של מספרים. הרעיון לאלגוריתם:.Postfix- ל Infix- נתרגם את הביטוי מ .Postfix- נחשב את ערכו של הביטוי ב דרכים לכתיבת ביטוי חשבוני.(Operands) נכתבת בין שני הביטויים (operator) הפעולה Infix- ביטוי במוגדרות קדימויות בין פעולות. דרושים סוגריים להביע קדימויות אחרות. הפעולה נכתבת אחרי שני הביטויים. PostFix- ביטוי באין צורך בקדימויות, אינו דורש סוגריים. הפעולה נכתבת לפני שני הביטויים. PreFix- ביטוי באין צורך בקדימויות, אינו דורש סוגריים. Postfix - ל Infix - דוגמאות למעבר מa ⇒ a (a+b)*c ⇒ ab+c*a+b ⇒ ab+ (a+b)*c+d ⇒ ab+c*d+a+b*c ⇒ abc*+ (a*b+c/d)*(e+f) ⇒ ab*cd/+ef+*Postfix אלגוריתם לחישוב ערכו של ביטויאלגוריתם:. 1. נקרא קלט2. כל עוד לא הגענו לסוף הקלט:מספר – נכניס אותו למחסנית. א. אםעל שני המספרים. פעולה – נוציא שני ערכים מהמחסנית. נחשב את הפעולה ב. אםנכניס תוצאה למחסנית.. ג. נקרא את הקלט הבא3. בסיום תימצא בראש המחסנית תוצאת הביטוי..
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.