נושאים פעיליםנושאים פעילים  הצגת רשימה של חברי הפורוםרשימת משתמשים  חיפוש בפורוםחיפוש  עזרהעזרה
  הרשמההרשמה  התחברותהתחברות RSS עדכונים
מדעי המחשב
RSS UnderWarrior Forums : RSS מדעי המחשב
נושא

נושא: בעיה בפאסקל - רשימה מקושרת

שליחת תגובהשליחת נושא חדש
כותב
הודעה << נושא קודם | נושא הבא >>
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 May 2007 בשעה 13:15 | IP רשוּם
ציטוט רועי

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

השאלה היא: כתובת תתכנית המקבלת שני מספרים שלמים: איבר ראשון first ומספר איברים num. כל איברי הרשימה הם מספרים שלמים עוקבים, כך שfirst הוא הערך הקטן ביותר.
לדוגמא: first = 5, num=4 תוחזר הרשימה 5,6,7,8

 

להלן התוכנית:

 

קוד:

program xyz;
uses wincrt, list2;
                                                                                 
var first, num,i,x: integer;
var list: list_type;
    p:pos_type;

begin
list_init(list);
p := list_anchor(list);
write('enter first number and border: ');
read(first, num);

            for i := first to (first+num) do begin
                list_insert(list,p,i);
                p:=list_next(list,p);
                writeln(i);
            end;


list_init(list);
p:=list_anchor(list);

while p <> list_end(list) do begin
      list_retrieve(list,p,x);
      writeln(x);
      list_next(list,p);
end;

end.


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

חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 09 May 2007 בשעה 14:50 | IP רשוּם
ציטוט shoshan

שני דברים:

1. למה יש את ה-list_init השני ?

2. בלולאה השנייה אתה קורא ל-list_next(list, p) אבל לא שם את הערך ב-P.


__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 May 2007 בשעה 14:58 | IP רשוּם
ציטוט רועי

לא הבנתי ממש. יש רק רשימה אחת list.

ואיזה ערך אני צריך להשים בlist_next? אני פשוט רץ על הרשימה.

חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 09 May 2007 בשעה 16:08 | IP רשוּם
ציטוט shoshan

נו...אם היית מסתכל שוב על הקוד היית מבין.

בטעות שמת בקוד פעמיים list_init(list); במקום רק בפעם הראשונה.

ובלולאת while שמת
קוד:
     list_next(list,p);

במקום
קוד:
     p := list_next(list,p);



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 May 2007 בשעה 16:58 | IP רשוּם
ציטוט רועי

יכול שהספריה שאתה עובד איתה בנויה אחרת. חכה, אני ישישם את שלי.

 

קוד:

unit list2;
interface
type
   list_info_type=integer;
   pos_type=^link_type;
   link_type=record
      info:list_info_type;
      next:pos_type;
   end;
          list_type=record
             anchor:pos_type
          end;

 

procedure list_init(var list:list_type);
function  list_anchor(list:list_type):pos_type;
function  list_end(list:list_type):pos_type;
function  list_next(list:list_type;pos:pos_type):pos_type;
function  list_prev(list:list_type;pos:pos_type):pos_type;
procedure list_insert(var list:list_type;pos:pos_type;x:list_info_type);
procedure list_delete(var list:list_type;var pos:pos_type);
procedure list_retrieve(list:list_type;pos:pos_type;var x:list_info_type);
function  list_is_empty(list:list_type):boolean;
procedure list_update(var list:list_type;pos:pos_type;x:list_info_type);

implementation


procedure list_init(var list:list_type);
begin
       new(list.anchor);
       list.anchor^.next:=nil
 end;

 

function list_anchor(list:list_type):pos_type;
 begin
       list_anchor:=list.anchor
 end;


function list_end(list:list_type):pos_type;
  begin
      list_end:=nil
  end;


function list_next(list:list_type;pos:pos_type):pos_type;
 begin
        list_next:=pos^.next
 end;


function list_prev(list:list_type;pos:pos_type):pos_type;
var
        q:pos_type;
begin
     q:=list_anchor(list);
     while list_next(list,q)<>pos do
     q:=list_next(list,q);
     list_prev:=q;
end;

procedure list_insert(var list:list_type;pos:pos_type;x:list_info_type);
var
      q:pos_type;
begin
      new(q);
      q^.info:=x;
      q^.next:=pos^.next;
      pos^.next:=q;
end;

procedure list_delete(var list:list_type;var pos:pos_type);
var
    q:pos_type;
begin
    q:=list_anchor(list);
    while list_next(list,q)<>pos do
     q:=list_next(list,q);
    q^.next:=pos^.next;
    dispose(pos);
    pos:=q^.next;      
end;

procedure list_retrieve(list:list_type;pos:pos_type;var x:list_info_type);
begin
   x:=pos^.info;
end;

function list_is_empty(list:list_type):boolean;
begin
   list_is_empty:=list.anchor^.next=nil;
end;

procedure list_update(var list:list_type;pos:pos_type;x:list_info_type);
begin
      pos^.info:=x
end;

begin
end.

חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 09 May 2007 בשעה 18:40 | IP רשוּם
ציטוט shoshan

נחמד שפירסמת למי שיצטרך, אבל כמו שאמרתי, יש לך 2 טעויות בתכנית עצמה...

אני לא מבין למה שלא תתקן אותן ?

לא הבנת מהן ?

קישור למקום שנוספו בו מספרי שורות (סורי על האתר ברוסית, תאשים את גוגל)

שורות 21 ו-27




__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 May 2007 בשעה 18:57 | IP רשוּם
ציטוט רועי

אתחלתי בשורה 21 כדאי שרשימה תתחיל מחדש ושמתי list_next ב27 כדאי שהוא יתקדם לאיבר הבא.
גם אחרי שהורדתי את השורות האלה זה רץ באינסוף.

יש לך אולי פתרון? כי לא אין רעיון מה הבעיה

חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 09 May 2007 בשעה 19:02 | IP רשוּם
ציטוט shoshan

נו...באמת !!!

תוריד את שורה 21

ובשורה 27 תוסיף בהתחלה
קוד:
p:=



__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 
רועי
אורח
אורח


הצטרף / הצטרפה: 01 October 2003
משתמש: אונליין
הודעות: 12647
נשלח בתאריך: 09 May 2007 בשעה 19:21 | IP רשוּם
ציטוט רועי

עובד, אבל משום מה הוא מדפיס לי 0 קודם ואז איברי הרשימה
חזרה לתחילת העמוד הצג את כרטיס החבר של רועי חפש הודעות אחרות של רועי בקר בדף הבית של רועי
 
shoshan
מנהל האתר
מנהל האתר
סמל אישי

הצטרף / הצטרפה: 16 July 2005
מדינה: Israel
משתמש: מנותק/ת
הודעות: 4637
נשלח בתאריך: 09 May 2007 בשעה 21:44 | IP רשוּם
ציטוט shoshan

כי שים לב שאתה מתחיל לעבור מהעוגן של הרשימה במקום קודם לקדם את המצביע לאיבר הראשון.

__________________
עד מתי רשעים יעלוזו?

עַל כֵּן אֶמְאַס וְנִחַמְתִּי עַל עָפָר וָאֵפֶר.
חזרה לתחילת העמוד הצג את כרטיס החבר של shoshan חפש הודעות אחרות של shoshan בקר בדף הבית של shoshan
 

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

  שליחת תגובהשליחת נושא חדש
גרסת הדפסה גרסת הדפסה

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