לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #3  
ישן 11-05-2005, 08:40
צלמית המשתמש של minimax
  משתמשת נקבה minimax minimax אינו מחובר  
 
חבר מתאריך: 28.10.01
הודעות: 10,153
שלח הודעה דרך MSN אל minimax Facebook profile
כתבתי את התוכנית בdotnet
בתגובה להודעה מספר 1 שנכתבה על ידי it_amit שמתחילה ב "תוכנית בשפת C"

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

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

אני מצרפת פתרון שעובד בdotnet . אתה צריך להבין את הרעיון הכללי ולתרגם לc. בהצלחה!


קוד:
<%@ Page Language="vb" Debug="true" %> <script runat="server"> public class path public moves as integer public desc as string end class function f(Xpos as integer,Ypos as integer,board(,) as integer,NoOfMoves as integer,visited(,) as integer) as path dim mypath as path=new path 'foundpath if Xpos=4 and ypos=9 mypath.moves=NoOfMoves mypath.desc="" return(mypath) end if 'circle path if visited(xpos,ypos)=1 mypath.moves=999 mypath.desc="circle path" return(mypath) end if dim temppath as path=new path mypath.moves=999 if Xpos+board(Xpos,Ypos)<5 visited(xpos,ypos)=1 temppath=f(Xpos+board(Xpos,Ypos),Ypos,board,NoOfMo ves+1,visited) visited(xpos,ypos)=0 if temppath.moves<mypath.moves mypath.moves=temppath.moves mypath.desc="move down"+ "<br>" + temppath.desc end if end if if Ypos+board(Xpos,Ypos)<10 visited(xpos,ypos)=1 temppath=f(Xpos,Ypos+board(Xpos,Ypos),board,NoOfMo ves+1,visited) visited(xpos,ypos)=0 if temppath.moves<mypath.moves mypath.moves=temppath.moves mypath.desc="move right"+ "<br>" +temppath.desc end if end if if Xpos-board(Xpos,Ypos)>=0 visited(xpos,ypos)=1 temppath=f(Xpos-board(Xpos,Ypos),Ypos,board,NoOfMoves+1,visited) visited(xpos,ypos)=0 if temppath.moves<mypath.moves mypath.moves=temppath.moves mypath.desc="move up"+ "<br>" +temppath.desc end if end if if Ypos-board(Xpos,Ypos)>=0 visited(xpos,ypos)=1 temppath=f(Xpos,Ypos-board(Xpos,Ypos),board,NoOfMoves+1,visited) visited(xpos,ypos)=0 if temppath.moves<mypath.moves mypath.moves=temppath.moves mypath.desc="move left"+ "<br>" +temppath.desc end if end if return(mypath) end function Sub Page_Load(Sender As Object, E As EventArgs) dim board(4,9) as integer board(0,0)=3 board(0,1)=4 board(0,2)=2 board(0,3)=4 board(0,4)=1 board(0,5)=4 board(0,6)=7 board(0,7)=2 board(0,8)=4 board(0,9)=0 board(1,0)=2 board(1,1)=1 board(1,2)=1 board(1,3)=2 board(1,4)=6 board(1,5)=4 board(1,6)=8 board(1,7)=1 board(1,8)=5 board(1,9)=1 board(2,0)=3 board(2,1)=5 board(2,2)=1 board(2,3)=2 board(2,4)=5 board(2,5)=1 board(2,6)=2 board(2,7)=3 board(2,8)=2 board(2,9)=3 board(3,0)=7 board(3,1)=3 board(3,2)=4 board(3,3)=3 board(3,4)=4 board(3,5)=6 board(3,6)=3 board(3,7)=1 board(3,8)=4 board(3,9)=6 board(4,0)=1 board(4,1)=2 board(4,2)=4 board(4,3)=6 board(4,4)=8 board(4,5)=2 board(4,6)=3 board(4,7)=2 board(4,8)=5 board(4,9)=0 dim Visited(4,9) as integer dim m as integer dim n as integer for m=0 to 4 for n=0 to 9 visited(m,n)=0 Response.Write(board(m,n)) Response.Write(" ") next Response.Write("<br>") next dim i as path=f(0,0,board,0,visited) Response.Write(i.desc) End Sub </script> <head> </head> <body> </body> </html>
_____________________________________
תמונה שהועלתה על ידי גולש באתר ולכן אין אנו יכולים לדעת מה היא מכילה

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 05:58

הדף נוצר ב 0.04 שניות עם 12 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר