ערכתי לאחרונה בתאריך 17.01.04 בשעה 19:36 בברכה, דני15
סדרה חשבונית היא סדרה בה היחס בין האיברים הוא תוספת או הפחתה של מספר קבוע ובה האיבר האמצעי שווה לפעמיים סכום שני האיברים השכנים.
הדרך שלי היא מעט ארוכה אך היא נוסתה ועובדת.
יש לשלוף את שני האיברים הראשונים, מהם למצוא את הפרש הסדרה
אני השתמשתי במשתנה בוליאני כדי לעבור על המחסנית ולבדוק עבור כל זוג איברים עוקבים האם ההפרש ביניהם קבוע. המשתנה הבוליאני אותחל ל-FALSE כאשר התנאי לא התקיים והלולאה הופסקה. א.
האלגוריתם הוא כזה:
מחסנית_סדרה_חשבונית(S)
1) שלוף_ממחסנית(S,x)
2) שלוף_ממחסנית(S,y)
3) d<-- x-y
4) bool<--TRUE
5) כל עוד bool והמחסנית_לא_ריקה בצע:
(5.1)שלוף_ממחסנית(s,x)
(5.2)שלוף_ממחסנית(s,y)
(5.3) אם לא x-y=d אז
(5.3.1) bool<--false
6) החזר bool.
ב. כתבתי תוכנית מלאה עם פונקציה שעושה זאת.
program sidr; uses stack; var l:integer; mahsanit:stack_type; mispar:integer; function sidra(s:stack_type):boolean; var x,y,d:integer; bool:boolean; begin stack_pop(s,x); stack_pop(s,y); d:=x-y; bool:=true; while bool and not (stack_empty(s)) do begin stack_pop(s,x); stack_pop(s,y); if not (x-y=d) then bool:=false; end; sidra:=bool; end; (*תכנית ראשית למימוש הפונקציה*) begin for l:=1 to 10 do begin read(mispar); stack_push(mahsanit,mispar); end; if sidra(mahsanit) then writeln('It is an arithmetic series') else writeln('It is NOT an arithmetic series'); readln; end.
|
ג. ההבדל בין סדרה חשבונית לסדרה הנדסית הוא שבסדרה הנדסית היחס בין האיברים הוא יחס של כפל. לכן במקום x-y יש לבצע x/y.
אגב... מותר לשנות את מצבה הסופי של המחסנית ?