שבת שלום,אפשר עזרה??

jan777

New member
שבת שלום,אפשר עזרה??

שלום חברים אני מצרף כאן שתי שאלות עם שתי תשובות תגידו לי אם זה בסדר בבקשה... תודה!!! כתבו תת תכנית המחזירה את המקום הראשון ברשימה L שבו מופיע האיבר X. אם האיבר X אינו מופיע ברשימה אזי הפעולה מחזירה את המקום סוף הרשימה.
function found(l:list_type):pos_type; var x1,x2:list_info_type; p1:pos_type; begin p1:=list_next(l,list_anchor(l)); while p1<>list_end(l) do begin list_retrive(l,p1,x2); if x1=x2 then found:=p; else found:=list_end(l); end; end;​
 

vinney

Well-known member
את מה שבתוך הelse תשים לפני הwhile

זה יותר מקובל ויותר קריא (אם כי בסוף זה יביא לאותה תוצאה), וגם יעיל יותר.
 

jan777

New member
לא הבנתי...

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

vinney

Well-known member
התוכנית עצמה לא בסדר

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

jan777

New member
אהה עכשיו הבנתי

אז ככה זה בסדר?
function found(l:list_type):pos_type; var x1,x2:list_info_type; p1:pos_type; begin p1:=list_next(l,list_anchor(l)); while p1<>list_end(l) do begin list_retrive(l,p1,x2); if x1=x2 then found:=p; if x1<>x2 then found:=list_end(l); end; end; גם זה לא טוב?​
 

vinney

Well-known member
אתה מנחש. תבדוק בעצמך.

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

jan777

New member
והשאלה והתשובה השניות

כתבו תת תכנית המקבלת שתי רשימות ומשרשרת אותן לרשימה אחת מבלי לפגוע ברשימות המקוריות כלומר, אם רשימה L1 היא 1234 ורשימה L2 היא 5678 אז הרשימה שתוחזר תהייה 12345678
procedure together(l1,l2:list_type,var l3:list_type); var x1,x2,x3:list_info_type; p1,p2,p3:pos_type; begin list_init(l3); p1:=list_next(l1,list_anchor(l1)); p2:=list_next(l2,list_anchor(l2)); p3:=list_next(l3,list_anchor(l3)); while p1<>list_end(l1) do begin list_retrive(l1,p1,x1); list_insert(l3,p3,x3); end; while p2<>list_end(l2) do begin list_retrive(l2,p2,x2); list_insert(l2,p3,x3); end; end;​
 

vinney

Well-known member
זה קשה לבדוק בלי להכיר את הטיפוסים

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

jan777

New member
זאת אומרת

שאתה אומר שבפקודה list_insert אני צריך לשים X1 ולא X3 כמו שעשיתי? תודה.
 
למעלה