עבור לתוכן

int *read_array(int end_singal,int *count) C language

Featured Replies

פורסם

א. (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 20
int *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;
}

זה לא עובד מין הסתם

אני ישמח אם תעזרו לי :)

פורסם

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

פורסם
  • מחבר

מישהו יוכל לעזור לי כדי שאני יבין וילמד מהן הטעויות שלי ?

פיתרון יתקבל בברכה

תודה מראש

פורסם

לא לומדים מלקרוא פתרונות, לומדים באמצעות לפתור בעצמך.

כרגיל, נתחיל מבעיה יותר פשוטה. להגדיר מערך בגודל 20 ולקרוא לתוכו מספרים (בדיוק 20 מספרים) אתה יודע?

פורסם
  • מחבר

כן יודע.

פורסם

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

פורסם
  • מחבר

break;



[size=78%]זה נכון התנאי הזה?[/size]

if(a==end_singal)

פורסם

מה זה a? תעלה את כל הקוד.

(ותשים את הקוד בתוך טג קוד, לא את הטקסט...)

פורסם
  • מחבר

#define MAX 20
int 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;
}

שמע זה עובד ...אבל זה לא פויינטר... איך אני עובד עכשיו עם פויינטר והקצאות לפי דרישת התרגיל ??

אגב תודה על ההדרכה עזרת לי מאוד

פורסם

אוקי, הקוד שלך כבר נראה הרבה יותר טוב, ונשאר השלב של להחזיר את המערך.

מה הטיפוס של המערך שאתה צריך להחזיר?

פורסם
  • מחבר

א. (20%) כתוב פונקציה read_array הקוראת מספרים שלמים מהקלט לתוך מערך. הפונקציה מקבלת כפרמטר מספר שלם end_signal וקוראת מספרים מהקלט עד שמופיע המספר end_signal, אותו היא לא מכניסה למערך. הפונקציה תחזיר את כתובת תחילת המערך שלתוכו קראה את המספרים. הנחיות:

· כמות המספרים לא ידועה מראש אך אינה עולה על קבוע חיובי MAX .

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

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

· ניתן להניח שהקלט תקין.

· הפונקציה read_array לא מדפיסה את המערך שקראה.

זוהי הדרישה של השאלה

שמע שניצל יכול להיות שהפרוטוטייפ שלי לא נכון

(int *read_array(int end_singal,int *count)

פורסם

למה אתה כותב בפונט כל כך גדול? תערוך את ההודעה במהירות.

אני אנסח את השאלה אחרת. נניח שאתה מקצה מערך, באיזה טיפוס צריך לשמור אותו?

פורסם
  • מחבר

int *arr;

arr=(int*)malloc((cnt+1)*sizeof(int));

if (arr==NULL)

return NULL;

.

.

.

.

return arr;

זה מה שאני יודע בקשר להקצאה...

ואז מה אני עושה מעתיק את כל מה שיש ב

a[MAX]

לתוך

arr ?

פורסם
  • מחבר

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>




#define MAX 20
int *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 :D :D

אבל זה לא ביזבוז זיכרון עם מערך של ה a[MAX] ??

ארכיון

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

דיונים חדשים