ABA


"שאלה קשה מתוך בגרות בפסקל......"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11883 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11883
warez 2k2

   17:42   04.03.05   
אל הפורום  
  שאלה קשה מתוך בגרות בפסקל......  
 
   כתוב תת תכנית (פרוצדורה או פונקציה) בסביבת העבודה, שתקבל רשימה L לא ריקה של מספרים שלמים ותחזיר רשימה חדשה באופן הזה:
עבור כל תת רשימה של מספרים עולים בL, שבא כל מספר גדול מקודמו, יופיע ברשימה החדשה מספר אחד שהוא סכום כל המספרים העולים. כל תת-רשימה של מספרים עולים מסתיימת כאשר אחריה יש מספר שהוא קטן מן המספר האחרון שבה, או שווה לו.
תת רשימה יכולה לכלול גם מספר אחד בלבד. סדר האיברים ברשימה החדשה יהיה על פי סדר תת הרשימות ברשימה L.
לדוגמא עבור הרשימה L: (שמאל לימין)
9 ¬ 0 ¬ -3 ¬ 5 ¬ 20 ¬ 20 ¬ 19 ¬ 18 ¬ 20 ¬ 8 ¬ 4 ¬ 2 ¬ 7
הפלט יהיה:
6 ¬ 5 ¬ 20 ¬ 57 ¬ 34 ¬ 7
משמאל לימין...


בבקשה מישהו יכול לפתור את השאלה הזאת ולכתוב את הפיתרון פה?
תודה רבה לעוזרים!


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  נראה לי יש בעיה בדוגמא Elvaron  05.03.05 09:45 1
     פתרון Elvaron  05.03.05 10:08 2
  אלגוריתם דני15  05.03.05 11:12 3
     השורות 6.6 ו-6.7 צריכות להתחלף דני15  05.03.05 12:40 4
  פרוצדורה בפסקל דני15  05.03.05 12:51 5
     תודה לכולכם אבל אני לא מבין משהו.... warez 2k2 05.03.05 14:02 6
         list anchor מחזיר את עוגן הרשימה ו-list init זה אתחול דני15  05.03.05 15:04 7

       
Elvaron 
חבר מתאריך 21.6.03
364 הודעות
   09:45   05.03.05   
אל הפורום  
  1. נראה לי יש בעיה בדוגמא  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 05.03.05 בשעה 09:46 בברכה, Elvaron
 
יש בעיה בדוגמא, יכול להיות שהיא כזאת?
עבור הרשימה L:
9 ¬ 0 ¬ -3 ¬ 5 ¬ 20 ¬ 20 ¬ 19 ¬ 18 ¬ 20 ¬ 8 ¬ 4 ¬ 2 ¬ 7
הפלט יהיה:
9 ¬ 3 ¬ 5 ¬ 20 ¬ 57 ¬ 34 ¬ 7

(משמאל לימין)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Elvaron 
חבר מתאריך 21.6.03
364 הודעות
   10:08   05.03.05   
אל הפורום  
  2. פתרון  
בתגובה להודעה מספר 1
 
   אם הבנתי נכון את הדוגמא, אז הפיתרון שלי הוא כזה:

סכומי_תת_רשימה(L,L1).
{הפעולה מקבלת רשימה L לא ריקה של מספרים שלמים ומחזירה רשימה חדשה L1, כך שתכלול את
סכומי תתי הרשימות העולות בL לפי סדר הופעתן}

1. עוגן_רשימה(L) -> p.
2. אתחל_רשימה(L1).
3. עוקב_ברשימה(עוגן_רשימה(L),L).
4. כל עוד סוף_רשימה(L)<>p בצע:
4.1 מצא_סכום(L,p,sum).
4.2 הכנס_לרשימה(L1,q,sum).
{במידה והכנס לרשימה לא מקדם את הq באחד יש לקדמו : עוקב_ברשימה(L1,q) -> q }
5. החזר L1

מצא_סכום(L,p,sum).
{הפעולה מקבלת רשימה ומיקום ברשימה,ממנו ואילך סוכמת את תת הרשימה העולה המתחילה במיקום זה
הפעולה מחזירה את הסכום ואת המיקום בו מסתיימת תת הרשימה העולה}

1. TRUE -> T.
2. 0 -> sum.
3. maxint- ->Y.
5. כל עוד T בצע:
5.1 אחזר_מרשימה L,p) -> X).
5.2 אם X>Y אזי
5.2.1 sum X -> sum.
5.2.2 X ->Y.
5.2.3 עוקב_ברשימה(L,p) -> p.
אחרת
5.2.4 not T)) -> T.
6. החזר sum,p.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   11:12   05.03.05   
אל הפורום  
  3. אלגוריתם  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 05.03.05 בשעה 11:14 בברכה, דני15
 
למרות שנדרשנו לכתוב בסביבת העבודה. תוכל לתרגם את האלגוריתם לכל שפת תכנות.

סכום_תת_רשימה(L)
-----------------

1)אתחל_רשימה(L2)
2)p-->עוגן_רשימה(L2)
3)sum-->0
4)q-->עוגן_רשימה(L)
5)q-->עוקב_ברשימה(L,q)
6)כל עוד q<>סוף_רשימה(L) בצע:
6.1) x-->אחזר_מרשימה(L,q)
6.2) q-->עוקב_ברשימה(L,q)
6.3) y-->אחזר_מרשימה(L,q)
6.4) x-->sum
6.5) כל עוד y>x וגם q<>סוף_רשימה(L) בצע
6.5.1) sum-->sum+y
6.5.2) y-->x
6.5.3) אם q<>סוף_רשימה(L) אזי q-->עוקב_ברשימה(L,q)
6.5.4) y-->אחזר_מרשימה(L,q)
6.6) p-->עוקב_ברשימה(L2,p)
6.7) הכנס_לרשימה(L2,sum)
6.8) 0-->sum
7)החזר L2



                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   12:40   05.03.05   
אל הפורום  
  4. השורות 6.6 ו-6.7 צריכות להתחלף  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   12:51   05.03.05   
אל הפורום  
  5. פרוצדורה בפסקל  
בתגובה להודעה מספר 0
 
  
 
procedure sum_sub_list(l:list_type;var l2:list_type);
var p,q:pos_type;
sum,x,y:integer;
begin
list_init(l2);
p:=list_anchor(l2);
sum:=0;
q:=list_anchor(l);
q:=list_next(l,q);
while q<>list_end(l) do
begin
list_retrieve(l,q,x);
q:=list_next(l,q);
list_retrieve(l,q,y);
sum:=x;
while (y>x) and (q<>list_end(l)) do
begin
sum:=sum+y;
x:=y;
if q<>list_end(l) then
begin
q:=list_next(l,q);
list_retrieve(l,q,y);
end;
end;

list_insert(l2,p,sum);
p:=list_next(l2,p);
sum:=0;
end;
end;


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
warez 2k2

   14:02   05.03.05   
אל הפורום  
  6. תודה לכולכם אבל אני לא מבין משהו....  
בתגובה להודעה מספר 5
 
   list_init(l2); p:=list_anchor(l2); q:=list_anchor(l);

מה זה הפקודות האלו? לא למדתי את זה
list_init(12)?
אפשר לפתור את זה גם בלי זה?
תודה לעוזרים!


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
דני15 
חבר מתאריך 3.8.02
47437 הודעות, 8 פידבק
   15:04   05.03.05   
אל הפורום  
  7. list anchor מחזיר את עוגן הרשימה ו-list init זה אתחול  
בתגובה להודעה מספר 6
 
   ערכתי לאחרונה בתאריך 05.03.05 בשעה 15:04 בברכה, דני15
 
איך אפשר לפתור שאלה על רשימה בלי פעולות בסיסיות של ממשק רשימה? בלתי אפשרי


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net