ווטסאפ - לינוקס, BSD, קוד פתוח ותוכנה חופשית בעברית. Whatsup - Linux, BSD, open source and free software in Hebrew

 
 
  כניסת חברים · רישום · שכחתי סיסמה  
tux the penguin
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
c++ISTאורח · ·
 

הודעה פורסם: 26/11/2017 - 13:49
נושא ההודעה: משתנה כאתחול גודל מערך סטטי.

1.
בספר לימוד של ++C אני קורא את הפסקאות הבאות בהקשר של המספר באתחול גודל מערך סטטי.
ו:
קוד:
The value within the square brackets must be a constant value determined at compile time. It can be a literal value or a
symbolic constant, but it cannot be a variable.

וכן:
קוד:

Static arrays have sizes determined at compile time, while the size of dynamic arrays may be supplied at run time, if necessary.

בפועל אני מצליח לאתחל משתנים במערכים סטטיים ללא כל בעיה, יש למישהו הסבר?


2.
האם יש דרך להשתמש בלולאה מבוססת טווח, על מערך דינאמי?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 26/11/2017 - 15:46
נושא ההודעה:

1. אם אתה משתמש ב-gcc לקמפל את הקוד ולא מתעקש על הצמדות לתקן, הוא משתמש בהרחבה פנימית ומאפשר את זה:
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

בפועל, הקוד שלך לא תקין ולא יתקמפל בכל קומפיילר.

2. אם ב-"מערך דינאמי" אתה מתכוון לסתם חתיכת זיכרון שהקצית עם malloc, אני לא בטוח, אני חושב שלא.
בדרך כלל כשרוצים מערך דינאמי ב-++C משתמשים ב-vector ואז לולאות טווח עובדות מצוין.


--לב
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
c++ISTאורח · ·
 

הודעה פורסם: 26/11/2017 - 19:19
נושא ההודעה:

Anonymous :
1. אם אתה משתמש ב-gcc לקמפל את הקוד ולא מתעקש על הצמדות לתקן, הוא משתמש בהרחבה פנימית ומאפשר את זה:
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

בפועל, הקוד שלך לא תקין ולא יתקמפל בכל קומפיילר.

2. אם ב-"מערך דינאמי" אתה מתכוון לסתם חתיכת זיכרון שהקצית עם malloc, אני לא בטוח, אני חושב שלא.
בדרך כלל כשרוצים מערך דינאמי ב-++C משתמשים ב-vector ואז לולאות טווח עובדות מצוין.


--לב

אני משתמש ב-"++g". אני מדבר על הקצאה עם new למשתנה מצביע. לגבי וקטורים אני יודע שזה עובד, וזה גם עובד בערכים סטטיים.
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 26/11/2017 - 19:21
נושא ההודעה:

c++IST :
Anonymous :
1. אם אתה משתמש ב-gcc לקמפל את הקוד ולא מתעקש על הצמדות לתקן, הוא משתמש בהרחבה פנימית ומאפשר את זה:
http://gcc.gnu.org/onlinedocs/gcc/Variable-Length.html

בפועל, הקוד שלך לא תקין ולא יתקמפל בכל קומפיילר.

2. אם ב-"מערך דינאמי" אתה מתכוון לסתם חתיכת זיכרון שהקצית עם malloc, אני לא בטוח, אני חושב שלא.
בדרך כלל כשרוצים מערך דינאמי ב-++C משתמשים ב-vector ואז לולאות טווח עובדות מצוין.


--לב

אני משתמש ב-"++g". אני מדבר על הקצאה עם new למשתנה מצביע. לגבי וקטורים אני יודע שזה עובד, וזה גם עובד בערכים סטטיים.

ערכים סטיטים == מערכים סטטיים
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
borsoodלא בפורום כעת ת.הצטרפות: 05/01/2007 · הודעות: 306 ·
 

הודעה פורסם: 27/11/2017 - 07:33
נושא ההודעה:

מצד אחד אתה מדבר על מערך סטטי שיכול להיות מאותחל רק מקבועים או מסטטיים.
מצד שני אתה מדבר על new שמאותחל בזמן ריצה.
תן דוגמת קוד ומה לא ברור לך.
(הערה לימודית: ב++c מודרני לא משתמשים במערכים והשימוש בהקצאת זכרון ע"י new מוגבל מאד)
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
c++ISTאורח · ·
 

הודעה פורסם: 27/11/2017 - 08:59
נושא ההודעה: הבט בשאלה למעלה

borsood :
מצד אחד אתה מדבר על מערך סטטי שיכול להיות מאותחל רק מקבועים או מסטטיים.
מצד שני אתה מדבר על new שמאותחל בזמן ריצה.
תן דוגמת קוד ומה לא ברור לך.
(הערה לימודית: ב++c מודרני לא משתמשים במערכים והשימוש בהקצאת זכרון ע"י new מוגבל מאד)

הבט היטב בשאלה למעלה
מדובר בשתי שאלות נפרדות.

אם אתה רוצה קוד בכל אופן, לגבי שאלה 1:
קוד:
int x;
cin >> x;
int y[x];

חוקי? בספר כאמור כתוב שלא חוקי, בפועל כן עובד אצלי.

לגבי שאלה 2
קוד:
int * x;
x = new int [5]
for (int z:x);

הקוד אינו חוקי. השאלה אם יש דרך כן להשתמש ב-"Range-based for loop" - על מערך דינאמי?
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 27/11/2017 - 09:48
נושא ההודעה: Re: הבט בשאלה למעלה

c++IST :
borsood :
מצד אחד אתה מדבר על מערך סטטי שיכול להיות מאותחל רק מקבועים או מסטטיים.
מצד שני אתה מדבר על new שמאותחל בזמן ריצה.
תן דוגמת קוד ומה לא ברור לך.
(הערה לימודית: ב++c מודרני לא משתמשים במערכים והשימוש בהקצאת זכרון ע"י new מוגבל מאד)

הבט היטב בשאלה למעלה
מדובר בשתי שאלות נפרדות.

אם אתה רוצה קוד בכל אופן, לגבי שאלה 1:
קוד:
int x;
cin >> x;
int y[x];

חוקי? בספר כאמור כתוב שלא חוקי, בפועל כן עובד אצלי.

לגבי שאלה 2
קוד:
int * x;
x = new int [5]
for (int z:x);

הקוד אינו חוקי. השאלה אם יש דרך כן להשתמש ב-"Range-based for loop" - על מערך דינאמי?


כדי שהקוד השני יעבוד צריך איזה איטרטור לעבוד איתו, ואין כזה מובנה בשפה ואתה לא רוצה כזה.
בשביל זה יש הרחבות
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
borsoodלא בפורום כעת ת.הצטרפות: 05/01/2007 · הודעות: 306 ·
 

הודעה פורסם: 28/11/2017 - 07:32
נושא ההודעה: Re: הבט בשאלה למעלה

c++IST :

אם אתה רוצה קוד בכל אופן, לגבי שאלה 1:

חוקי? בספר כאמור כתוב שלא חוקי, בפועל כן עובד אצלי.

לגבי שאלה 2
קוד:
int * x;
x = new int [5]
for (int z:x);

הקוד אינו חוקי. השאלה אם יש דרך כן להשתמש ב-"Range-based for loop" - על מערך דינאמי?

1. זו אכן הרחבה לא סטנדרטית של הקומפיילר שלך: gcc -Wall -Pedantic נותן לדוגמה:
קוד:
tmp.cpp:7:10: warning: ISO C++ forbids variable length array ‘y’ [-Wvla]
   int y[x];
          ^

2. בקוד שלך לפחות x אינו מערך ולכן אי אפשר להריץ לולאה מעליו. עם y זה עובד.
קוד:
  for (auto z : y) {
    cout << "z" << "=" << z << endl;
  }
 
 צפיה בפרופיל המשתמש שלח הודעה פרטית ביקור באתר המפרסם  
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
אורח · ·
 

הודעה פורסם: 28/11/2017 - 08:29
נושא ההודעה: Re: משתנה כאתחול גודל מערך סטטי.

c++IST :
1.
בספר לימוד של ++C אני קורא את הפסקאות הבאות בהקשר של המספר באתחול גודל מערך סטטי.
ו:
קוד:
The value within the square brackets must be a constant value determined at compile time. It can be a literal value or a
symbolic constant, but it cannot be a variable.

וכן:
קוד:

Static arrays have sizes determined at compile time, while the size of dynamic arrays may be supplied at run time, if necessary.

בפועל אני מצליח לאתחל משתנים במערכים סטטיים ללא כל בעיה, יש למישהו הסבר?


2.
האם יש דרך להשתמש בלולאה מבוססת טווח, על מערך דינאמי?


ככל הנראה אתה מבלבל בין איתחול (init) והכרזה .

static std::array<int,3> x; זו הכרזה אבל השורה x[0] = 0; היא איתחול.

זו הסיבה שכשיש לך משתנה שהוא סטטי בstruct/class אתה מבצע איתחול מחוץ ל class (או בתוך בתוך פונקציה).

לגבי השאלה השנייה אתה צריך להכריז משהוא שייצן begin ו end ואז זה אפשרי (לפי טיפוס)
 
   
תגובה  עם ציטוט חזרה למעלה
חזרה לתוכן הדיון
הצגת הודעות מלפני:     
מעבר אל:  
כל הזמנים הם GMT + 2 שעות
תגובה לנושא
צפיה בנושא הבא Printable version התחבר כדי לבדוק הודעות פרטיות צפיה בנושא הקודם
PNphpBB2 © 2003-2004 

תוכן הדיון

  1. אורח [c++IST]
  2. אורח
  3. אורח [c++IST]
  4. אורח
  5. borsood
  6. אורח [c++IST]
  7. אורח
  8. borsood
  9. אורח