ABA


"עזרה במערכים ב C#"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #15202 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 15202
Moshem
חבר מתאריך 25.10.07
24447 הודעות
   22:27   20.02.09   
אל הפורום  
  עזרה במערכים ב C#  
 
   רבאק מבחן יום ראשון אני ממש גרוע בחומר =\\\\\\

המניאקית רוצה להביא תרגילים קשים במבחן, לא יודע מה יהיה =\..

קיצור יש לי תשאלה הזאת:

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

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

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


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  סדר לך הכל בראש ותראה שזה לא כזה מסובך. Deuce  20.02.09 23:20 1
     תודה אייל! Moshem 21.02.09 00:41 2
         המונה בשביל שתספור כמה חוזרים על עצמם. ronen333  21.02.09 11:17 4
     שחכת לעשות המרת סוגריים מרובעים בפוסט... ronen333  21.02.09 11:13 3
         OMG akoka 21.02.09 14:42 7
             קרה משהו יוחאי? ronen333  21.02.09 17:41 9
         זה היה יותר לכיוון של פסאדו קוד, לא כדי לעבור קומפיילר. Deuce  21.02.09 16:24 8
             התכווני לסוגריים הרגילים לא המסולסלים ronen333  21.02.09 17:43 10
         סתם הערה ronen333  21.02.09 17:47 12
         שכחת* ronen333  21.02.09 20:21 19
  אמממ אם זה בC# אז זה ממש פשוט... צהוב בלב 21.02.09 14:03 5
     הבן אדם רק במערכים איך קפצת איתו לאוספים דינאמים? XD ronen333  21.02.09 17:44 11
     זה עושה בידיוק את מה שהוא היה צריך לכתוב בלולאה. Deuce  21.02.09 18:00 14
         + ronen333  21.02.09 18:04 15
  תודה רבה לכולם :) Moshem 21.02.09 14:14 6
     בהצלחה ronen333  21.02.09 17:55 13
  פתרון שלי:P akoka 21.02.09 18:19 16
     משועמם אחד P= ronen333  21.02.09 18:28 17
         חח יצא אלגנטי akoka 21.02.09 18:32 18
     חחח P: עדיף אבל: Deuce  21.02.09 22:32 20
         בהחלט חוסך כמה ריצות P= ronen333  21.02.09 22:35 21
  לא יאמן איזה אנשים חופרים אנחנו P= ronen333  21.02.09 22:36 22
  כי אנחנו אוהבים לחפור על בעיות קטנות: Deuce  21.02.09 22:38 23
     אסור לעשות לולאה בתוךלולאה גם אם זה יוצא N? ronen333  21.02.09 23:11 24
         מה יוצא n? סיבוכיות זה משהו שניתן לחשב. Deuce  21.02.09 23:15 25
             מעולה.. אז חשבתי על משהו כבר ronen333  21.02.09 23:29 26
                 הממ לא, זה לא מצמצם אפילו את היעילות. Deuce  21.02.09 23:35 27
                     חחח צודק. ronen333  21.02.09 23:38 28
     נתתי לך כבר פתרון אחד ב O)N(... אני לא אפרסם כאן Sn00py  21.02.09 23:41 29
         חחח הפתרון שלך לא עבר אצלי את האישור. Deuce  21.02.09 23:42 30
         תחמן... ronen333  21.02.09 23:50 31

       
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   23:20   20.02.09   
אל הפורום  
  1. סדר לך הכל בראש ותראה שזה לא כזה מסובך.  
בתגובה להודעה מספר 0
 
הלולאה החיצונית היא סתם לולאה שקולטת מספרים, זה כזה נורא? פשוט תדאג שהיא תקלוט מספרים ותמשיך הלאה ללולאה הפנימית.

קלטת מספר? מעולה, כנס ללולאה הפנימית.
רוץ על המערך מההתחלה שלו ועד הסוף שלו ותבדוק האם המספר כבר קיים באחד התאים. תדאג למשתנה בוליאני שיתחיל מ-FALSE ואם במהלך הלולאה קיבלת שהמספר מופיע אז תשים בו ערך TRUE.

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


boo = false;
(for int i = 0; i < ar.length; i++) {
if (ar == num) boo = true;
}
if (!boo) { ar = num; count++ }

זה המבנה פחות או יותר של הלולאה הפנימית.

בהצלחה, בסה"כ תחשוב קצת !






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Moshem
חבר מתאריך 25.10.07
24447 הודעות
   00:41   21.02.09   
אל הפורום  
  2. תודה אייל!  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 00:44 בברכה, Moshem
 
אני אציק לך בעוד שאלות מחר למה המבחן ביום ראשון!
תודה!!
(אגב למה המונה??)


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   11:17   21.02.09   
אל הפורום  
  4. המונה בשביל שתספור כמה חוזרים על עצמם.  
בתגובה להודעה מספר 2
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   11:13   21.02.09   
אל הפורום  
  3. שחכת לעשות המרת סוגריים מרובעים בפוסט...  
בתגובה להודעה מספר 1
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 11:16 בברכה, ronen333
 
וגם הצורה שסידרת את הסוגריים לא נראה לי תקין |=
בכל מקרה הנה פתרון נוסף-
אני יודע שזה לא יעיל אבל אני עושה לפי בקשת התרגיל. כעקרון אפשר לא להכניס מהתחלה למערך מספרים שחוזרים על עצמם. אבל ביקשו לקלוט ואז לבנות מערך חדש שבו יש ערכים שלא חוזרים על עצמם אז כך נעשה.

int count=0,index=0;
int N=int.Parse(Console.ReadLine());
int[] arr1=new int[N];

//לולאת קליטה
for(int i=0;i<arr1.Length;i++)
{
arr1[i]=int.Parse(Console.ReadLine());
}

int?[] arr2 = new int?[N];
//הכנסה במערך החדש את הערכים שלא חוזרים על עצמם
for(int i=0;i<arr1.Length;i++)
{
count=0;
for(int j=0;j<arr2.Length;j++)
{
if(arr1[i]==arr2[j])
count++;
}
if(count==0)
arr2[index++]=arr1[i];
}

//לולאת הדפסה
for(int i=0;i<arr2.Length;i++)
{
if(arr2[i]!=null)
Console.WriteLine(arr2[i]);
}


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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   14:42   21.02.09   
אל הפורום  
  7. OMG  
בתגובה להודעה מספר 3
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 14:44 בברכה, akoka
 


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   17:41   21.02.09   
אל הפורום  
  9. קרה משהו יוחאי?  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   16:24   21.02.09   
אל הפורום  
  8. זה היה יותר לכיוון של פסאדו קוד, לא כדי לעבור קומפיילר.  
בתגובה להודעה מספר 3
 
למרות שלא ממש הבנתי מה לא בסדר, אין בעייה אם אתה עושה סוגריים {} או יורד שורה, זה לא מעניין את הקומפיילר.

בכל מקרה, לא מעיר על יעילות - זאת רמה של תיכון בסה"כ.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   17:43   21.02.09   
אל הפורום  
  10. התכווני לסוגריים הרגילים לא המסולסלים  
בתגובה להודעה מספר 8
 
   בFOR שמת את הסוגריים לפני המילה FOR..
אבל חפיף.. המסר ברור.
רק חשבתי שאולי המסר לא יהיה ברור לו אז ת'יודע..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   17:47   21.02.09   
אל הפורום  
  12. סתם הערה  
בתגובה להודעה מספר 3
 
   יכלת כמובן במקום COUNTER לעשות משתנה בוליאני אבל משום מה חשבתי שככה זה ברור יותר X=


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   20:21   21.02.09   
אל הפורום  
  19. שכחת*  
בתגובה להודעה מספר 3
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
צהוב בלב

   14:03   21.02.09   
אל הפורום  
  5. אמממ אם זה בC# אז זה ממש פשוט...  
בתגובה להודעה מספר 0
 
   לא למדתי תכנות בתיכון אז אולי אי אפשר לעשות ככה אבל:

אתה יכול ליצור מערך מסוג ILIST שנקרא לו arrSecond
ואז תעבור בלולאה על כל המערך הראשון (arrFirst) ותבדוק:
if (arrSecond.Conatins(num))
אם המספר כבר קיים אתה לא מוסיף אם הוא לא קיים אתה מוסיף...

לולאה אחת ובדיקה אחת כל פעם...


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   17:44   21.02.09   
אל הפורום  
  11. הבן אדם רק במערכים איך קפצת איתו לאוספים דינאמים? XD  
בתגובה להודעה מספר 5
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   18:00   21.02.09   
אל הפורום  
  14. זה עושה בידיוק את מה שהוא היה צריך לכתוב בלולאה.  
בתגובה להודעה מספר 5
 
גם מבחינת יעילות אגב.






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:04   21.02.09   
אל הפורום  
  15. +  
בתגובה להודעה מספר 14
 
   אסור להשתמש בכל מחלקה שרוצים בתיכון.. רק מה שמשרד החינוך מאשר.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Moshem
חבר מתאריך 25.10.07
24447 הודעות
   14:14   21.02.09   
אל הפורום  
  6. תודה רבה לכולם :)  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   17:55   21.02.09   
אל הפורום  
  13. בהצלחה  
בתגובה להודעה מספר 6
 
  

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   18:19   21.02.09   
אל הפורום  
  16. פתרון שלי:P  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 18:21 בברכה, akoka
 
חח לא המצאתי איזה משו מחדש ,סתם קצת תירגלתי גם רקורסיה


public static void main(String[] args)
{
int[] a = {1,1,3,1,6,8,2,2,3,4,5,3,2,1,67,34,53,73,45,234};
getDsitinctArray(a);

}

public static int[] getDsitinctArray(int[] array)
{
int countDistinct = 0;

int i = 0;
int temp = 0;

int lengthArray = array.length;

int[] distinctArray = new int[array.length];

while (i < lengthArray){
if (!isExists(distinctArray,array[i],0)){
distinctArray[temp] = array[i];
System.out.println(distinctArray[temp]);
temp++;
}else{
countDistinct++;
}

i++;
}

return distinctArray;

}

public static boolean isExists(int[] array,int value,int index)
{
boolean isExists = false;

if (index < array.length){
if (array[index] == value){
isExists = true;
}else{
return isExists(array,value,index + 1);
}
}

return isExists;

}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   18:28   21.02.09   
אל הפורום  
  17. משועמם אחד P=  
בתגובה להודעה מספר 16
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka

   18:32   21.02.09   
אל הפורום  
  18. חח יצא אלגנטי  
בתגובה להודעה מספר 17
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   22:32   21.02.09   
אל הפורום  
  20. חחח P: עדיף אבל:  
בתגובה להודעה מספר 16
 
כי אני פדנט:

public static boolean isExists(int[] array,int value,int index)
{
if (index == array.length) { return false; }
if (array[index] == value){ return true; }
return isExists(array,value,index + 1);
}






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   22:35   21.02.09   
אל הפורום  
  21. בהחלט חוסך כמה ריצות P=  
בתגובה להודעה מספר 20
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   22:36   21.02.09   
אל הפורום  
  22. לא יאמן איזה אנשים חופרים אנחנו P=  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 22:37 בברכה, ronen333
 

כל שאלה פשוטה אנחנו הופכים לאשכול.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   22:38   21.02.09   
אל הפורום  
  23. כי אנחנו אוהבים לחפור על בעיות קטנות:  
בתגובה להודעה מספר 0
 
רק בגלל שאנחנו אוהבים לחפור על בעיות קטנות, יותר נכון יוחאי אוהב ( ), אני פורס בפניכם את אותה בעייה אבל מציב הגבלת סיבוכיות.
אני רוצה לפתור את זה בסיבוכיות מקום ליניארית ובסיבוכיות זמן ליניארית.
O(n)

באופן אישי אני רואה בראש איך לפתור את זה ביעילות הנ"ל כאשר ברוב המקרים זה אכן ייקח O(n). בוא נראה מה אתם שווים.
המטרה למצוא את האלגוריתם היעיל ביותר והוא כמובן O של n (חייבים לרוץ על קבוצת הקלט פעם אחת אפילו שקולטים אותה).






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   23:11   21.02.09   
אל הפורום  
  24. אסור לעשות לולאה בתוךלולאה גם אם זה יוצא N?  
בתגובה להודעה מספר 23
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   23:15   21.02.09   
אל הפורום  
  25. מה יוצא n? סיבוכיות זה משהו שניתן לחשב.  
בתגובה להודעה מספר 24
 
אתה יכול לעשות גם קינון דיי גדול של לולאות ולקבל סיבוכיות של n.
בכל אופן אם לולאה חיצונית רצה n פעמים ולולאה פנימית רצה n פעמים אז הסיבוכיות לפי אריתמטיקה פשוטה היא n^2 כי זה מספר ריצות הלולאה.

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

העיקר שיהיה נכון, לא משנה לי מה אתה מציע






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   23:29   21.02.09   
אל הפורום  
  26. מעולה.. אז חשבתי על משהו כבר  
בתגובה להודעה מספר 25
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 23:35 בברכה, ronen333
 
משהו כזה..

הכנסה-
int?[] arr = new int?[5];
int count = 0, num;
for (int i = 0; i < arr.Length; i++)
{
num = int.Parse(Console.ReadLine());
count = 0;
for(int j=0;j<i;j++)
if (num == arr[j]) count++;
if (count == 0)
arr[i] = num;
}


הדפסה-

for (int i = 0; i < arr.Length; i++)
if(arr[i]!=null)
Console.WriteLine(arr[i]);


אממ זה לא מגיע לריבועי, מסכים?

עריכה:
שחכתי לעשות המרה של סוגריים מרובעים אז הנה.. למה באמת לא עשו שזה עושה אוט'?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   23:35   21.02.09   
אל הפורום  
  27. הממ לא, זה לא מצמצם אפילו את היעילות.  
בתגובה להודעה מספר 26
 
נניח שבכל שלב המערך מתמלא אז בפעם הראשונה אתה רץ על המערך 0 פעמים ואז פעם 1, אח"כ פעם נוספת וכו' ... סה"כ באיטרציה ה-nית אתה רץ על כל המערך.
מה מקבלים?

0+1+...+n = n(n-1)/2

זה עדיין O של n^2 - לא כזה פשוט להוריד סיבוכיות






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   23:38   21.02.09   
אל הפורום  
  28. חחח צודק.  
בתגובה להודעה מספר 27
 
   ערכתי לאחרונה בתאריך 21.02.09 בשעה 23:40 בברכה, ronen333
 
טוב לא יודע אני עייף ובלי משקפיים אני אחשוב על זה מחר =].


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Sn00py 
חבר מתאריך 1.8.02
2954 הודעות
   23:41   21.02.09   
אל הפורום  
  29. נתתי לך כבר פתרון אחד ב O)N(... אני לא אפרסם כאן  
בתגובה להודעה מספר 23
 
   אבל חשבתי על עוד פתרון אחד, עם פונקציית האש...

\x6C\x65\x65\x74\x68\x61\x78\x30
\x72\x3A\x2D\x29
tresp4sser


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Deuce 
חבר מתאריך 1.9.08
6225 הודעות
   23:42   21.02.09   
אל הפורום  
  30. חחח הפתרון שלך לא עבר אצלי את האישור.  
בתגובה להודעה מספר 29
 
עבור קלט באורך n שהמספר המקסימלי שלו הוא n^5 הסיבוכיות של מה שהצעת דיי גבוהה

ופונקציית האש? יפה יפה !!!






                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
ronen333 
חבר מתאריך 20.2.03
6069 הודעות
   23:50   21.02.09   
אל הפורום  
  31. תחמן...  
בתגובה להודעה מספר 29
 
   לא העלתי בדעתי אפילו לעשות את זה.
אהבתי


טוב אני פרשתי לישון... לילה טוב לכם D=


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net