שאלה חשובה

שאלה חשובה

יש לי שאלה נגיד שאני מכריז על משתנה בשם n וקולט לו ערך האם אני יכול להכניס את המשתנה בתוך הגדרה של התחום של ה array? דוגמא var n:real; array[0..n] of real; begin readln(n); אני יכול לעשות כזה דבר בפסקל? ואם לא אז איך אני יכול להגביל את המערך ע"י ערך שהמשתמש קולט?

לא. אתה לא יכול כי

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

אתה יכול אם אתה מגדיר את המערך בתוך פונקציה, ואת הערך n מעביר לפונקציה בתור משתנה

void func (int n) { int array [n]; ... ... ... } void main (void) { scanf("%d",&n); func(n) }

לא...

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

לא. אתה לא יכול כי

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

ליוני

אני אשמח אם תסביר לי את זה קצת יותר בפירוט או שתתן לי קישור למאמר בנושא. חוץ מזה חשבתי פשוט על רעיון שונה. אני לומד בבית ספר תיכון כיתה יא' ככה שאני עדייןן לא מומחה לתכנות אבל מה שאני מנסה לבנות זה תוכנה שקולטת מספר מבסיס עשר והופכת אותו לבסיס בינארי. אחד השלבים בתוכנית זה לקחת את הקלט ולפרק אותו ע"י הפקודה kelet mod 10 ואת הפלט אני מכניס למערך. את כל הביצוע הזה אני מכניס ללולאת while שממשיכה עד שאין מה לפרק וחשבתי שאת כל זה אני יכול לחסוך ע"י הגדרת מערך שהגבול שלו זה מס' הספרות שהמשתמש כותב שיש במספר שהכניס. לא יודע אולי יש דרך אחרת לעשות את זה אני מקווה שתעזרו בתודה מראש.

כן יש דרך אחרת

בשביל כזה דבר לא כדאי להסתבך עם הקצאות דינמיות, אתה יכול לעשות את זה גם עם סטרינג, כלומר סטרינג הוא מערך של תוים. והוא נח לעבודה. מה שאתה עושה לשלב שביקשת הוא ככה. אתה קולט מספר (שלם). index=1 ועד שהמספר גדול מ0 עושה 10MOD כדי לקבל את הסיפרה ו10DIV כדי לחתוך אותה מהמספר. ואת מה שקיבלת במוד10 אתה מציב בשדה סטרינג.במיקום index.(האינדקס גדל כל סיבוב ב1) וככה אתה הופך את המספר ממספר לסטרינג . אני לא בטוח שצריך את זה בשביל האלגוריתם שלך אבל. איך אתה מתכוון להפוך את המספר לבינארי .מה האלגוריתם השלם.

זה בידיוק מה שעשיתי תודה

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