למה אני לא מצליחה

michal121

New member
למה אני לא מצליחה

#include<stdio.h> #define N 7 #define M 7 #define NEW 14 void main() { int mar1[N],mar2[M],mar3[NEW]; int i,j,k; puts("Enter numbers up way to the first vek"); for(i=0;i<N;i++) scanf("%d",&mar1); puts("Enter numbers up way to vek 2"); for(j=0;j<M;j++) scanf("%d",&mar2[j]); j=0; i=0; for(k=0;k<NEW;k++) { while(mar1<mar2[j]&&k<NEW) { mar3[k]=mar1; i++; k++; } while(mar2[j]<mar1&&k<NEW) { mar3[k]=mar2[j]; j++; k++; } } if(k==NEW) { if(mar1[N-1]>mar2[M-1]) mar3[NEW-1]=mar2[M-1]; else mar3[NEW-1]=mar1[N-1]; } for(i=0;i<NEW;i++) printf(" %d",mar3); } התוכנית לא מצליחה לי ואני לא מבינה למה זו תוכנית שקולטת 2 מערכים חד מימדים בגודל N M וצריכה למזג אותם למערך חדש ממוין בסדר עולה אז מה לא בסדר מיכל
 

michal121

New member
מיכל מהקורה??

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

עידית_

New member
יפה מאוד! רק כמה תיקונים:

תיקונים: 1. בלולאה while(mar1<mar2[j]&&k<NEW) את עלולה לחרוג מהזכרון המוקצה, כי נניח שכל המספרים במערך הראשון קטנים מהמספר הראשון במערך השני, אז את מקדמת את i יותר מידי, מעבר לתחום שלו... התיקון: במקום k<NEW תכתבי i<N , ואל תקדמי את k. ובדיוק אותו הדבר עם j בלולאה שאחרי זה. 2. צריך גם לקחת בחשבון את האפשרות שיהיו 2 מספרים שווים, כלומר mar1 == mar2[j] (פשוט תכתבי "קטן שווה" בתנאי של אחת הלולאות במקום "קטן מ") 3. אחרי כל אחת משתי הלולאות הנ"ל, את צריכה לבדוק - למשל אם הלולאה הראשונה נעצרה בגלל ש: i==N זה סימן שהכנסנו למערך 3 כבר את כל אברי מערך 1, וכל מה שנשאר זה להעביר אליו את אברי מערך 2 שנותרו. אין צורך יותר בהשוואות. אם לא, (כלומר עדיין i<N), אז להמשיך ללולאה השנייה כרגיל... ובדיוק אותו הדבר את צריכה לבדוק אחרי הלולאה של ה-j 4. הבלוק של if(k==NEW) - בשביל מה הוא? לא נחוץ. 5. עדיף היה אם לא היית מגדירה NEW, אלא כותבת פשוט N+M איפה שצריך.
 

עידית_

New member
עוד תיקון לך, ותיקון לעצמי:

קודם את עצמי אני מתקנת: בשתי הלולאה את כן צריכה לקדם גם את k כמו שעשית. רק לא לבדוק את התנאי k<NEW אלא את התנאים האחרים כפי שאמרתי. שנית - תיקונון נוסף אצלך: בלולאה החיצונית, את לא צריכה לקדם את k. כיוון שאת כבר מקדמת אותו בלולאות הפנימיות בכל צעד.
 
למעלה