שלום. שאלה ב c++. - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שלום. שאלה ב c++.


matliv

Recommended Posts

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

בכל אופן ניסיתי לקחת את המערך המקורי(orig)(הסתפקתי בשמונה איברים בינתיים) ולסדר אותו לפי האיבר הראשון בכל זוג, כך שיווצר מערך חדש (new1) שיכיל אותם איברים אבל הם יסודרו בזוגות לפי הראשון בכל זוג, בקובץ המצורף לדוגמה -

3,4 2,9 1,7 0,8.

לא הצלחתי עדיין. אולי אתם תבינו מה הבעיה.

קישור לתוכן
שתף באתרים אחרים

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

למשל : 2,6 0,9 3,1 1,7 .

האיברים השמאליים בכל זוג הם סדרה מ-0 ועד 3, ולכן המערך החדש צריך להיות:

0,9,1,7,2,6,3,1 .

כלומר אותם איברים אבל מסודרים (תוך שמירה על הזוגות) מ-0 עד 3.

מקווה שהבהרתי את עצמי. (צרפתי גם קובץ בהודעה המקורית)

קישור לתוכן
שתף באתרים אחרים

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....

קישור לתוכן
שתף באתרים אחרים

I really thank you! :bash:

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...

קישור לתוכן
שתף באתרים אחרים

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....

קישור לתוכן
שתף באתרים אחרים

זה ב 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);

}

קישור לתוכן
שתף באתרים אחרים

ובכן לפי מה שבדקתי בסך הכל רק שיניתי טיפה את הסינטקס שכנראה לא היה נכון

חוץ מזה אפילו לא הסתכלתי אם באמת הפונקציה עושה מה שהיא אמורה לעשות

אבל התוצאה יצאה נכון אז כנראה שהיא עובדת:)

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

#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);

}

קישור לתוכן
שתף באתרים אחרים

קודם כל תודה רבה! :jump:

לגבי הפתרון שהוצע ב- c לצערי אני לא מכיר את רוב הפקודות שם.

אבל אריאל, אליך יש לי שתי שאלות:

- בלולאת for השנייה (הפנימית) מה המשמעות של להשאיר את המקום של גודל הקפיצה ריק (כמו שעשית), ומדוע לא יכולת

לשים שם את ה - b=b+2 ?

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

ושוב תודה רבה לכל מי שענה וניסה לענות עד שהגענו לפתרון!

קישור לתוכן
שתף באתרים אחרים

אז ככה קודם כל בבקשה :)

עכשיו בקשר לשאלה הראשונה, האמת אין לי מושג, לא זכרתי אם אפשר אחרי ; לרשום 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 ];

}

וזה יהיה נכון בדיוק בגלל מה שניסיתי להסביר מקודם (בתקווה שהצלחתי)

קישור לתוכן
שתף באתרים אחרים

מסובך... :o

1. איך יכול להיות שכשאתה כותב למשל [0]x אין הכוונה לאיבר מסויים במערך אלא הוא משתנה בהתאם ל - t ו- b ?

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

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...