עבור לתוכן

איך להגדיר פונקציה ב-C++ שמקבלת מספר שלם, ויוצרת מערך בגודל אותו מספר שהיא קיבלה

Featured Replies

פורסם

עכשיו אני -

מה?!

אולי תגדיל את זה עוד קצת

כל כך נותן חשק לנסות לעזור פה לאנשים

אני ממליץ לך בחום להתבגר ודחוף

  • תגובות 39
  • צפיות 5.4k
  • נוצר
  • תגובה אחרונה
פורסם

מצטער, אבל כל החשק לעזור בעולם לא עוזר כשאתה עונה לא לעניין.

פורסם

אתה לא חושב שהגיע הזמן לשתוק?

פורסם

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

במקום להמשיך לזרוק בוץ, אני אסביר מה הרגיז אותי, ומבחינתי מיציתי את הנושא.

הסיבה שאני לא עונה כאן לשאלות בנושאים כמו PHP, ASP, Perl ועוד (לא מעט) נושאים היא שאין לי מושג ירוק בהם.

הייתי מצפה להתנהגות דומה מאנשים אחרים. (ומה שאמרת לגבי "להוסיף פונקציית eval ל- C++" בהחלט מעיד על חוסר הבנה בסיסי).

פורסם

זה שטויות במיץ כי יש המון חפיפה בין שפות התיכנות ולכן גם מי שלא מתעסק עם C++ לעיתים ליכול לעזור בשאלות בנושא.

עכשיו נזכרתי ש-eval היא פונקציה של שפות סקריפט בלבד ובאמת לא מתאימה לשפות כמו C++.

מה שהייתי מצפה ממך זה לתת את ההסבר שנתתי שורה למעלה ^^ במקום להרים את האף ולהתנצח.

פורסם

למען האמת, קיימת אפשרות להשתמש בדמוי מערך, שהוא דינאמי. זאת באמצעות מה שנקרא Operator-Overriding ב-C++.

בעצם, אין לו צורך ליצור כזה במיוחד, כי קיים כבר דבר דומה ב-STL (שזה Standard Template Library) בשם MAP (זה לא בדיוק מערך, אבל ישמש אותו היטב לצורך העניין).

לכן, בארטון כמעט צודק... והרי קישור:

http://msdn2.microsoft.com/en-us/library/s44w4h2s.aspx

עריכה: דוגמה לשימוש ב-map :

http://msdn2.microsoft.com/en-us/library/fe72hft9.aspx

ואגב, למי שלא מכיר את מושג ה-Template, אז הסינטקס:

map<int, int>

במקרה הזה, אומר שהאינדקס של המפה הוא מספר שלם, וגם הטיפוס שמכילה המפה הוא מספר שלם - בקיצור, זה סוג המפה שאתה צריך.

פורסם
  • מחבר

אחלה

פורסם

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

פורסם
  • מחבר

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

זה אפשרי אך זו לא תהיה תשובה כללית לכל מערך

פורסם

אוקי, רק עכשיו הזדמן לי לעבור על הדיון הזה, בכל מקרה, הנה פתרון פשוט , קל, בסיבוכיות של O)N( שאמור לעבוד (צריך לבדוק מקרי קצה רק):


int check (int a[], int n, int m)
{
int i, c = 1;

for (i=0; i<n; i++)
{
if (a[i] == (c*c))
c++;
if (c == m+1)
return 1;
}
return 0;
}

פורסם

אני לא רואה איך זה יעבוד במקרה שהמספרים במערך לא מסודרים לפי הגודל

פורסם

גם אני לא רואה, בגלל זה בהנחות של התרגיל רשום: "ידוע שהמערך a ממוין בסדר לא יורד."

פורסם
  • מחבר

אוקי, רק עכשיו הזדמן לי לעבור על הדיון הזה, בכל מקרה, הנה פתרון פשוט , קל, בסיבוכיות של O)N( שאמור לעבוד (צריך לבדוק מקרי קצה רק):


int check (int a[], int n, int m)
{
int i, c = 1;

for (i=0; i<n; i++)
{
if (a[i] == (c*c))
c++;
if (c == m+1)
return 1;
}
return 0;
}

ואני כתבתי תשובה ממש ממש ארוכה.... :kopfpatsch:

כנראה שאני רק בתחילת דרכי בתיכנות....

פורסם

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

פורסם
גם אני לא רואה, בגלל זה בהנחות של התרגיל רשום: "ידוע שהמערך a ממוין בסדר לא יורד."

אופס

:kopfpatsch:

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים