פורסם 2013 בינואר 2212 שנים א. (20%) כתוב פונקציה read_array הקוראת מספרים שלמים מהקלט לתוך מערך. הפונקציה מקבלת כפרמטר מספר שלם end_signal וקוראת מספרים מהקלט עד שמופיע המספר end_signal, אותו היא לא מכניסה למערך. הפונקציה תחזיר את כתובת תחילת המערך שלתוכו קראה את המספרים. הנחיות: · כמות המספרים לא ידועה מראש אך אינה עולה על קבוע חיובי MAX . · הפונקציה תחזיר את הכתובת של מערך מוקצה דינאמית שגודלו כמספר המספרים שהפונקציה קראה בפועל (לא בהכרח MAX). · כמות המספרים שנקראו תוחזר בעזרת פרמטר נוסף של הפונקציה · ניתן להניח שהקלט תקין. · הפונקציה read_array לא מדפיסה את המערך שקראה. זוהי בעיקרון השאלה ומשום מה הסתבכתי איתה אין לי מושג איך לעבוד עם ה WHILE זה מה שכתבתי # #include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define MAX 20int *read_array(int end_singal,int *count){ int *a[MAX]; int cnt=0,i,j; while () { scanf("%d",&a[i]); cnt++; } a[cnt]=(int*)malloc(cnt*sizeof(int)); *count=cnt; return *a;}int main(){ int len; printf("plz enter numbers prees '666' to finish:"); read_array(666,&len); return 0;} זה לא עובד מין הסתם אני ישמח אם תעזרו לי
פורסם 2013 בינואר 2212 שנים גם בלי קשר לwhile יש לך טעויות בהתייחסות למערך. תחזור על איך מגדירים מערך בגודל קבוע, איך מקצים מערך, ואיך מחזירים את התוצאה מהפונקציה.
פורסם 2013 בינואר 2212 שנים מחבר מישהו יוכל לעזור לי כדי שאני יבין וילמד מהן הטעויות שלי ?פיתרון יתקבל בברכהתודה מראש
פורסם 2013 בינואר 2212 שנים לא לומדים מלקרוא פתרונות, לומדים באמצעות לפתור בעצמך.כרגיל, נתחיל מבעיה יותר פשוטה. להגדיר מערך בגודל 20 ולקרוא לתוכו מספרים (בדיוק 20 מספרים) אתה יודע?
פורסם 2013 בינואר 2212 שנים אוקי, אז עכשיו זה דומה, רק שאתה צריך לעצור לא כשאתה מגיע ל-20 מספרים, אלא כשמתקיים תנאי מסוים.
פורסם 2013 בינואר 2212 שנים מחבר #define MAX 20int read_array(int end_singal,int *count){ int a[MAX]; int cnt=0,i=0,j; for (i=0;i<MAX;++i){ scanf("%d",&a[i]); if(a[i]==end_singal) break; else cnt++; } //a[cnt]=(int*)malloc(cnt*sizeof(int)); *count=cnt; return a[MAX];}int main(){ int len=0; printf("plz enter numbers prees '666' to finish:"); read_array(666,&len); printf("\n%d\n",len); return 0;}שמע זה עובד ...אבל זה לא פויינטר... איך אני עובד עכשיו עם פויינטר והקצאות לפי דרישת התרגיל ?? אגב תודה על ההדרכה עזרת לי מאוד
פורסם 2013 בינואר 2212 שנים אוקי, הקוד שלך כבר נראה הרבה יותר טוב, ונשאר השלב של להחזיר את המערך.מה הטיפוס של המערך שאתה צריך להחזיר?
פורסם 2013 בינואר 2212 שנים מחבר א. (20%) כתוב פונקציה read_array הקוראת מספרים שלמים מהקלט לתוך מערך. הפונקציה מקבלת כפרמטר מספר שלם end_signal וקוראת מספרים מהקלט עד שמופיע המספר end_signal, אותו היא לא מכניסה למערך. הפונקציה תחזיר את כתובת תחילת המערך שלתוכו קראה את המספרים. הנחיות:· כמות המספרים לא ידועה מראש אך אינה עולה על קבוע חיובי MAX .· הפונקציה תחזיר את הכתובת של מערך מוקצה דינאמית שגודלו כמספר המספרים שהפונקציה קראה בפועל (לא בהכרח MAX). · כמות המספרים שנקראו תוחזר בעזרת פרמטר נוסף של הפונקציה · ניתן להניח שהקלט תקין.· הפונקציה read_array לא מדפיסה את המערך שקראה.זוהי הדרישה של השאלהשמע שניצל יכול להיות שהפרוטוטייפ שלי לא נכון(int *read_array(int end_singal,int *count)
פורסם 2013 בינואר 2212 שנים למה אתה כותב בפונט כל כך גדול? תערוך את ההודעה במהירות.אני אנסח את השאלה אחרת. נניח שאתה מקצה מערך, באיזה טיפוס צריך לשמור אותו?
פורסם 2013 בינואר 2212 שנים מחבר int *arr; arr=(int*)malloc((cnt+1)*sizeof(int)); if (arr==NULL) return NULL;....return arr;זה מה שאני יודע בקשר להקצאה... ואז מה אני עושה מעתיק את כל מה שיש ב a[MAX]לתוךarr ?
פורסם 2013 בינואר 2212 שנים מחבר #include <stdio.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define MAX 20int *read_array(int end_singal,int *count){ int *arr; int a[MAX]; int cnt=0,i=0,j=0; for (i=0;i<MAX;++i){ scanf("%d",&a[i]); if(a[i]==end_singal) break; else cnt++; } arr=(int*)malloc((cnt)*sizeof(int)); if (a==NULL) return NULL; j=0; for(i=0;i<cnt;++i){ arr[j++]=a[i]; } *count=cnt; return arr;}int main(){ int len=0; printf("plz enter numbers prees '666' to finish:"); read_array(666,&len); printf("\n%d\n",len); return 0;} אוקיי זה עובדדדד :D :D אבל זה לא ביזבוז זיכרון עם מערך של ה a[MAX] ??
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.