פורסם 2003 במאי 2022 שנים פעם ראשונה שאני רואה את הפורומים האלה, אבל הם נראים טוב, אני מקווה שהדיון פה יעיל ומועיל...בכל אופן ניסיתי לקחת את המערך המקורי(orig)(הסתפקתי בשמונה איברים בינתיים) ולסדר אותו לפי האיבר הראשון בכל זוג, כך שיווצר מערך חדש (new1) שיכיל אותם איברים אבל הם יסודרו בזוגות לפי הראשון בכל זוג, בקובץ המצורף לדוגמה - 3,4 2,9 1,7 0,8. לא הצלחתי עדיין. אולי אתם תבינו מה הבעיה.
פורסם 2003 במאי 2022 שנים מחבר אני רוצה שבמערך החדש יהיו אותם איברים, אבל מסודרים באופן מסויים. האיברים מסודרים בזוגות ואני רוצה שהראשון בכל זוג יקבע את מקומו של הזוג כאשר ערכו של האיבר מהווה את האינדקס של הזוג שהוא האיבר הראשון בו.למשל : 2,6 0,9 3,1 1,7 .האיברים השמאליים בכל זוג הם סדרה מ-0 ועד 3, ולכן המערך החדש צריך להיות:0,9,1,7,2,6,3,1 . כלומר אותם איברים אבל מסודרים (תוך שמירה על הזוגות) מ-0 עד 3.מקווה שהבהרתי את עצמי. (צרפתי גם קובץ בהודעה המקורית)
פורסם 2003 במאי 2022 שנים void give(int new1[x], int orig[y]){ new1[x] = orig[y]; new1[x+1] = orig[y+1];}int main(){ int orig[8]={ 2,9 , 0,8 , 1,7 , 3,4}; int new1[8]; int a,b,t; int x,y; for(a=0; a<4; a++) for(b=0; b<7; b+2) if(a==orig) { t=2*a; give(new1[t], orig); } cout<<new1; return(0);}well, i program in delphi at work and dont remember c++ syntax that well but i think you'll get a compiltaion error on give(new1[t], orig) the function give expects an array but u send an integer (one cell of new and one cell of orig).another thing is i dont think you can declare a function like this: void give(int new1[x], int orig[y]) the complier will give an error because you try to make two arrays with sizes defined by the variables x and y who's size is yet unknown.......to sum it up, if i found 2 errors in 1 minute and as i said before my c++ is REALLY rusty you probably got a lot more.... those errors show a basic misunderstanding of c++ basics....
פורסם 2003 במאי 2022 שנים מחבר I really thank you! Never mind, I Know that I am a begginer but I want to solve this problem anyway. About the size of the array I am quite sure that you are wrong since in the declaration of the array I write orig[8] and 8 as far as I know is not a variable. But I don't know how to call the function correctly, if what you're saying is right. Hoping for different responses...
פורסם 2003 במאי 2022 שנים מחבר חוץ מזה הפונקציה לא מצפה לשום מערך! בשביל שתצפה למערך לא שמים בכלל את הסוגריים המרובעים!
פורסם 2003 במאי 2022 שנים void give (int arr1[], int arr2[], int i, int j){ arr1=arr2[j]; arr1[i+1]=arr2[j+1];}int main(){ int orig[8]={2,9,0,8,1,7,3,4} int new[8]; int i,j; for(i=0;i<4;i++) for(j=0;j<8;j+2) if(i==orig[j]) give(new,orig,2*i,j)}as for printing to screen you cant do it with a simple cout as far as i remember... it will print the address of the array or something... you need a loop (for, while etc) to print it cell by cell....
פורסם 2003 במאי 2122 שנים מחבר כן. אמנם ניתן לבצע קומפילציה אבל התכנית עצמה לא עובדת (נתקעת) וחייבים להפסיק אותה עם ctrl+break.
פורסם 2003 במאי 2122 שנים זה ב C ולא ++C אבל עושה את העבודה יופי !#include <stdlib.h>int sort_function( const void *a, const void *b){ return( (pair *)a->first - (pair *)b->first );}int main(void){ pair nums[4] = { {0,8} , {1,7} , }; qsort((void *)nums, 4, sizeof(pair), sort_function);}
פורסם 2003 במאי 2122 שנים ובכן לפי מה שבדקתי בסך הכל רק שיניתי טיפה את הסינטקס שכנראה לא היה נכון חוץ מזה אפילו לא הסתכלתי אם באמת הפונקציה עושה מה שהיא אמורה לעשות אבל התוצאה יצאה נכון אז כנראה שהיא עובדת אם לא ברור לך משהו ממה ששיניתי, רק תגיד, אני אשמח להסביר... #include <iostream.h> void give(int *x, int *y) { *x = *y; *(x+1) = *(y+1); } int main() { int orig[8]={ 2,9 , 0,8 , 1,7 , 3,4}; int new1[8]; int a,b,t; for(a=0; a<4; a++) for(b=0; b<7;) { if(a==orig) { t=2*a; give(new1+t, orig+b); } b=b+2; } for(int i=0;i<8;i++) cout<<new1; return(0); }
פורסם 2003 במאי 2122 שנים מחבר קודם כל תודה רבה! לגבי הפתרון שהוצע ב- c לצערי אני לא מכיר את רוב הפקודות שם. אבל אריאל, אליך יש לי שתי שאלות: - בלולאת for השנייה (הפנימית) מה המשמעות של להשאיר את המקום של גודל הקפיצה ריק (כמו שעשית), ומדוע לא יכולת לשים שם את ה - b=b+2 ? - לי זה נראה כאילו ערבבת פוינטרים ומערכים. הכרזת על מערכים והפונקציה משתמשת בפוינטרים. את זה אני לא מבין. ושוב תודה רבה לכל מי שענה וניסה לענות עד שהגענו לפתרון!
פורסם 2003 במאי 2122 שנים אז ככה קודם כל בבקשה עכשיו בקשר לשאלה הראשונה, האמת אין לי מושג, לא זכרתי אם אפשר אחרי ; לרשום b=b+2 ועכשיו כשאני חושב על זה (בלי שבדקתי) אין שום סיבה שזה לא יעבוד גם ככה, וזה שהשארתי את זה ריק זה אומר שפשוט לא יעשה כלום בתיבה ההיא , אני מקווה אבל ששמת לב שהוספתי b=b+2 בסוף... עכשיו בקשר לשאלה השניה, פשוט מאוד לא ערבבתי מערכים בפוינטרים, כי מערכים הם פוינטרים, דרך שונה לייצג אותם בסך הכל. ברמת העיקרון מערך הוא פויינטר שמצביע למקום בזיכרון (במחסנית עד כמה שזכור לי, אם זה אומר לך משהו, אם לא תעבור הלאה כאשר אתה מגדיר בהגדרת המערך כמה מקומות לשמור אחרי המקום הראשון. כלומר כשהגדרת מערך arr בגודל 10 אז arr עצמו הוא בעצם פויינטר למקום הראשון, כלומר: האיבר הראשון הוא arr[0] = *(arr + 0) = *arr ובעצם תחילת המקום בזיכרון שבוא נמצא המערך הוא: arr = &arr[0] = arr + 0 באופן דומה לחלוטין המקום ה10 במערך שווה ל: arr[10] =*(arr + 10) והמקום בזיכרון שבוא נמצא האיבר העשירי הוא: arr[10] = arr + 10 אז בעצם את הפונקציה: void give(int *x, int *y) { *x = *y; *(x+1) = *(y+1); } ניתן לכתוב ככה: void give(int *x, int *y) { x [ 0 ] = y [ 0 ]; x[ 1 ]= y[ 1 ]; } וזה יהיה נכון בדיוק בגלל מה שניסיתי להסביר מקודם (בתקווה שהצלחתי)
פורסם 2003 במאי 2122 שנים מחבר מסובך... 1. איך יכול להיות שכשאתה כותב למשל [0]x אין הכוונה לאיבר מסויים במערך אלא הוא משתנה בהתאם ל - t ו- b ? 2. למען הסדר הטוב, יש אפשרות בהגדרת המשתנים של הפונקציה give להתייחס אליהם כמו מערך ולא כמו פוינטר?
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.