פורסם 2006 בינואר 1219 שנים ואז על המערך בגודל הרצוי אני יעשה מה שארצה..ניסיתי כך ויש לי הודעות שגיאה:void array(int m){ int array[m]={0};}
פורסם 2006 בינואר 1219 שנים מה אתה רוצה לעשות עם המערך הזה?ב- C/C++ הפרמטר של גודל המערך צריך להיות קבוע בזמן קומפילציה.כדי להקצות זיכרון אתה יכול להשתמש בפונקציות ממשפחת malloc (של C) או באופרטור new (של C++).
פורסם 2006 בינואר 1219 שנים מחבר לבנות מערך מהצורה הזו1 בריבוע2 בריבוע3 בריבוע...N בריבועפחות חשוב:ובגדול השאלה שלי היא זו:נתונה כותרת הפונקציה check הבאה:int check(int a[], int n, int m)הפונקציה מקבלת מערך aשל מספרים שלמים, את אורכו n ומספר שלם m. ידוע שהמערך a ממוין בסדר לא יורד.הפונקציה עונה על השאלה הבאה: האם המערך a מכיל את כל האיברים של הקבוצה (ההיא שציינתי לעיל) אם כן הפונקציה מחזירה 1 אחרת מחזירה 0.השלם את גוף הפונקציה.
פורסם 2006 בינואר 1219 שנים איך בדיוק m קשור לעסק?מותר לך לשנות את המערך? אם כן - מראה לי שאתה יכול לעשות את זה בלי מערך נוסף.
פורסם 2006 בינואר 1219 שנים טוב, בדרך הקלה אתה באמת צריך להשתמש במערך בגודל m.אין לי מושג איך לימדו אתכם לעשות את זה (new או malloc), אבל אבל בעצם יש לך מערך בגודל n שאתה יכול להשמש בו (אם m גדול מ- n אז יש לך חיים עוד יותר קלים)
פורסם 2006 בינואר 1219 שנים אוקי, יש שתי דרכים:דרך ראשונה היא לעשות לולאה חיצונית שעוברת מ-1 עד m, ובודקת עבור כל ערך אם הריבוע שלו מופיע במערך a (באמצעות עוד לולאה).הדרך הזו לא יעילה - (O(n^2, אבל היא אינה דורשת זכרון.הדרך השנייה היא להקצות מערך בוליאנים בגודל m, כך:bool *b = new bool[m];ולאפס את כולו. אח"כ עוברים על a, ומסמנים את התאים שעוברים עליהם - נניח, אם מופיע ב-a המספר 9, נסמן true בתא השלישי ב-b (תא מספר 2, כמובן, כי הספירה מתחילה מ-0).אח"כ אתה צריך לבדוק שכל התאים ב-b מכילים true.חשוב: אחרי שסיימת, לפני שיוצאים מהפונקציה, חייבים למחוק את המערך b, אחרת הוא נשאר בזכרון:delete b;
פורסם 2006 בינואר 1319 שנים אוקי, יש שתי דרכים:דרך ראשונה היא לעשות לולאה חיצונית שעוברת מ-1 עד m, ובודקת עבור כל ערך אם הריבוע שלו מופיע במערך a (באמצעות עוד לולאה).הדרך הזו לא יעילה - (O(n^2, אבל היא אינה דורשת זכרון.הדרך השנייה היא להקצות מערך בוליאנים בגודל m, כך:bool *b = new bool[m];ולאפס את כולו. אח"כ עוברים על a, ומסמנים את התאים שעוברים עליהם - נניח, אם מופיע ב-a המספר 9, נסמן true בתא השלישי ב-b (תא מספר 2, כמובן, כי הספירה מתחילה מ-0).אח"כ אתה צריך לבדוק שכל התאים ב-b מכילים true.חשוב: אחרי שסיימת, לפני שיוצאים מהפונקציה, חייבים למחוק את המערך b, אחרת הוא נשאר בזכרון:delete b;אם כבר אזdelete[] b;
פורסם 2006 בינואר 1319 שנים אני אחזור ואומר:מה?אני יודע מה זו הפונקציה eval... רק חבל שהיא לא קיימת ב-C++.חוץ מזה, אני גם לא בטוח מה התכוונת לעשות איתה כאן.
פורסם 2006 בינואר 1319 שנים אתה יכול להוריד ספרייה שמוסיפה את הפונקציה ל-C++ומה שהיא עושה זה בעצם דוחה את הקימפול של המערך עד אשר ידוע הגודל שלו
פורסם 2006 בינואר 1319 שנים אתה יכול להוריד ספרייה שמוסיפה את הפונקציה ל-C++ומה שהיא עושה זה בעצם דוחה את הקימפול של המערך עד אשר ידוע הגודל שלועכשיו אני -מה?!אתה בטוח שאתה יודע על מה אתה מדבר?אנחנו מדברים כאן על C++. הגודל של המערך נקבע רק בזמן ריצה, שבאופן לא מאוד מפתיע, בא אחרי הקמפול.ב- C++ אתה לא יכול בשום אופן להגדיר על ה- stack מערך בגודל שלא קבוע בזמן הקומפילציה.אבל כמו שכבר אמרו קודם - אין שום בעיה להקצות אותו על ה- heap בעזרת new או malloc.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.