עבור לתוכן

איך מוצאים את התא הגדול ביותר במערך חד מימ&#14

Featured Replies

פורסם

שלום.

יש לי מחר מבחן ב#C ויש לי בעיה שנתקלתי בה ואני לא יודע איך עושים אותה:

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

איך אפשר לעשות את זה? אפשר אולי math.min ולשים שם FOR שירוץ על כל התאים?

תודה ;)

פורסם

תשים במשתנה כלשהו את הערך 0 (המיקום של התא הראשון במערך), ובמשתנה אחר את הערך שבתוך התא 0 שבמערך.

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

פורסם
  • מחבר

הממ לא ממש הבנתי, משהו כזה?


int a=num[0];
int b=0;
for (i=1; i==N; i++)
{
if (num[i]>a)
{
a=num[i];
b=i;
}
}

פורסם

int max=0;
for (int i=0 ;i<a.length() ;i++)
if (a[i]> max)
max = a[i];

return max ;

a[] הוא המערך

פורסם
  • מחבר

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

לקחת את התרגיל הזה מעמוד 36 בספר "יסודות מדעי המחשב בשפת #C"? ;D

פורסם

 int max=0;
int position ;
for (int i=0 ;i<a.length() ;i++)
if (a[i]> max)
{
max = a[i];
position = i ;
}
max //the biggest number
position // the index

פורסם
  • מחבר

שמתי את הראשון שהבאת לי בתוך מטודה וזה עובד, וואלה מגניב... תודה ;D

הבעיה שבחלק מהתרגילים הם רוצים את הטווח של המספרים השכיחים, נגיד יש לי ציונים של 200 תלמידים מ1-100

אז הם רוצים את הטווח (0-9,10-19...) של הציונים השכיחים ביותר =\

אני צריך לחשוב איך עושים את זה

פורסם

כתבתי קוד קצת מסורבל ויתכן שיש בו שגיאות

מה גם C# איני יודע , זה נכתב בסגנון JAVA :hi:

 public int findMax (int a[])
{
int max=0;
for (int i=0 ;i<a.length() ;i++)
if (a[i]> max)
max = i ;

return max ;
}
public int findAverage( int b[])
{
int A=0 ,B=0,C=0,D=0,E=0,F=0,G=0,H=0,I=0,K=0 ;
// 0<A<10 , 10 < B < 20 , 20 < C <30............. 90< k <100
for(int i ;i<b.length; i++)
{
if (b[i]>=0 && b[i]<10)
A++;
else if (b[i]>=10 && b[i]<20)
B++;
else if (b[i]>=20 && b[i]<30)
C++;
else if (b[i]>=30 && b[i]<40)
D++;
else if (b[i]>=40 && b[i]<50)
E++;
else if (b[i]>=50 && b[i]<60)
F++;
else if (b[i]>=60 && b[i]<70)
G++;
else if (b[i]>=70 && b[i]<80)
H++;
else if (b[i]>=80 && b[i]<90)
I++;
else if (b[i]>=90 && b[i]=<100)
K++;
}
int x[] = {A ,B ,C,D,E,F,G,H,I,k} ;
int average = findMax(x);
return ( average+ 1) ;
// 1= 0-10 , 2 = 10-20 , 3= 20-30 ..........10= 90-100
}

b[] הוא מערך הציונים

פורסם

למה לשנות אלגוריתם מוכר?

יש אלגוריתם מסודר למציאת מספר מקסימלי במערך

int MaxNum=A[0];
int MaxNumPos=0;
for (int i=1;i<A.length;i++)
if (a[i]>MaxNum)
{
MaxNum=A[i];
MaxNumPos=i;
}

זה בהנחה שהתא הראשון הוא מספר 0 וש LENGTH מחזיר את המספר של התא האחרון+1

פורסם

למחוק

פורסם
  • מחבר

למה לשנות אלגוריתם מוכר?

יש אלגוריתם מסודר למציאת מספר מקסימלי במערך

int MaxNum=A[0];
int MaxNumPos=0;
for (int i=1;i<A.length;i++)
if (a[i]>MaxNum)
{
MaxNum=A[i];
MaxNumPos=i;
}

זה בהנחה שהתא הראשון הוא מספר 0 וש LENGTH מחזיר את המספר של התא האחרון+1

תודה מגניב :P

אתה בטוח שזה

1;i<A.length

ולא

1;i<[b]=[/b]A.length

מה עם התא האחרון?

יש לי עוד בעיה, אני לא יודע אם מורידים מקום ממערך :\ הנה דוגמא:

יש לי מערך בן 8 תאים, שבכל תא יש קוד בן 3 ספרות שמתחיל ב1 או 2

אם הוא מתחיל ב1 אני צריך להשאיר אותו במערך, אם הוא מתחיל ב2 אני צריך להעביר אותו למערך אחר.

אז איך אני מצמצם את המקומות במערך הראשון? כי נגיד אם זה היה:

102,200,183...

אז עכשיו זה

102,0,183

איך אני מוריד את האפס הזה?

אני חושב שזה משהו עם

a[i-1] 

פורסם

תשים במשתנה כלשהו את הערך 0 (המיקום של התא הראשון במערך), ובמשתנה אחר את הערך שבתוך התא 0 שבמערך.

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

לא יעבוד עם מערך שכל האיברים בו שליליים

פורסם

LENGTH מחזירה את כמות התאים במערך

אבל אם יש לך 8 תאים במערך במספר שלהם זה בעצם 0-7 ולא 0-8

בC# לפחות

----

בקשר לקוד השני

בהנחה שאתה לא צריך ממש לקץץ את המערך (להקטין את מספר התאים)

      int[] A = new int[7];//new main array
int[] B = new int[7];//new sec array
int i2=0; //the sec pointer
for (int i=0;i<A.Length;i++)
if ((A[i] / 100) == 2)
{
B[i2] = A[i];
A[i] = 0;
i2++;
}
for (int i = 0; i < A.Length; i++)
{
if (A[i] = 0)
if (i < A.Length - 1)
A[i] = A[i + 1];
}

מסורבל,ארוך ולדעתי קצת מעפאן אבל לפחות עובד

ארכיון

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

דיונים חדשים