שאלה ב Pascal

davidbas

New member
שאלה ב Pascal ../images/Emo131.gif

איך לגרום למערך להיות אין סופי? ---------------------------------------------------------------------- program x; var kids,z,a,b,sum:integer; q:real; st:string; c:array [1..{??}] of string; begin kids:=0; repeat st:=´finish´; writeln(´hakesh at shimcha´); readln(c[n]);{???} if c<>st then begin writeln(´im hegata levad hakesh 1´); writeln(´im hegata im ben o bat zoog hacesh 2´); readln(a); sum:=sum+a; writeln(´hakesh mespar haieladim she hegioo itcha´); readln(b); kids:=kids+b; end; until c=st; writeln(´mespar habogrim shehegioo hoo:´,sum); z:=kids mod 20; q:=kids/20; if z<>0 then kids:=kids+1; kids:=trunc(q); writeln(´mespar hamadrichim she sarix lehazmin hoo:´,kids); end. ----------------------------------------------------------- כלומר לקלוט את C לשימוש בהמשך התוכנה
 

galh

New member
אין דבר כזה...

מערך (או כל קטע של זכרון) בתוכנית מחשב הוא סופי ותלוי וגודל הזכרון של המערכת (פיסי ווירטואלי). אם הבנתי נכון, מה שאתה מחפש הוא מערך דינמי ואת זה אתה יכול לעשות ע"י הגדרה של C כ- array[1..1] of string ואז להקצות לו זכרון ע"י GetMem(Ptr, Count*SizeOf(C)) כאשר Ptr הוא מצביע ל- C. רק אל תשכח לשחרר את הזכרון אחר כך.
 

אמיר ט

New member
"מערך אין סופי"

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

davidbas

New member
אז אולי אפשר../images/Emo35.gif../images/Emo131.gif

אולי אפשר לשלוט על הVAR מתוך הBEGIN אם אפשר איך עושים את זה?
 

אמיר ט

New member
בלתי אפשרי

אתה יכול להגדיר מערך ע"י משתנה (אם אני מבין אותך נכון) רק אם הוא CONST ואז מן הסתם אתה לא יכול לשנות אותו בזמן הריצה... בפסקל אי אפשר לעשות הקצאה דינמית של זיכרון עברו מערך בהתחלת התוכנית, בשביל זה יש פוינטרים ורשימות מקושרות שיעשו את העבודה במקרים הנ"ל...
 

galh

New member
כן אפשרי (עשיתי את זה).

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