פורסם 2009 בפברואר 1716 שנים אהלן... מחר מבחן על חומר של יא' 5יח'. (אשמח לקבל תשובה עד 9:30 בערך ;D) הגענו למערך תווי, ונתקלתי בשאלה שלא הבנתי. (אני לומד הכל לבד, אף אחד לא מבין את המורה הזו ) ניסיתי כבר הרבה דרכים אבל תמיד נתקל במשהו לא ברור. (אין לי "טיוטה" שניסיתי או משהו) כתוב תכנית המקבלת כקלט אותיות קטנות מה- abc עד לקליטת '*'. עבור כל אחת מהאותיות שהתקבלו כקלט יש להציג את אורך הרצף הגדול ביותר שהתקבל מאותה אות. כמו-כן יש להציג כפלט את האות/יות שנקלט עבורן הרצף הגדול ביותר. דוגמה: עבור הקלט (משמאל לימין) : r,s,x,x,x,x,s,s,a,d,r,r,r,h,h,h,b,b,b,b,* יתקבל הפלט : (a,1), (b,4), (d,1).......... האותיות שנקלטו הכי הרבה פעמים : b, x. תודה רבה מראש לעוזרים!! עודד ב.
פורסם 2009 בפברואר 1816 שנים לא צריך DICTONARY שכן טווח הקלט ידוע וקטןתיצור מערך כאורך טווח הקלט כלומר מספר האותיות באנגלית נראה לי 27 מאופס.אחרי קליטת הקלט תבדוק אם האות דומה לאות האחרונה שנקלטה (יעני רצף) אם כן תגדיל את ה COUNTER ב1אם לא נשבר הרצף עליך לבדוק אם הCOUNTER כרגע יותר גדול מזה שבמערך (האינדקס מן הסתם היא האות) אם כן לעדכן את המערךבכל מקרה אחכ לאפס את COUNTER ולעדכן את האות האחרונה שנקלטה.אני מניח שאתה תצליח למצוא איך להתייחס ל a כ 0 ו Z כ 26ואיך לפתור את הבעיה של מהיא האות האחרונה שנקלטה לפני שנקלטה בכלל.אם לא אז מצבך רע.
פורסם 2009 בפברואר 1816 שנים אמנם לא צריך Dictionary, אבל זה כן עושה את החיים קלים יותר. אם אין צורך מיוחד ביעילות, פתרון של Dictionary יהיה יותר פשוט וקריא.אגב, אם a זה 0 אז z זה 25.
פורסם 2009 בפברואר 1816 שנים מחבר זה יישמע קצת מוזר, אני בטוח. הצלחתי לפתור את התרגיל, אבל לא בהבנה מוחלטת של מה שעשיתי. using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int [] x = new int [26]; int [] max = new int [26]; int i = 0; char last, ch; ch = char.Parse(Console.ReadLine()); last = ch; while (ch != '*') { last = ch; while (last == ch && ch!='*') { last = ch; x[ch - 'a']++; ch = char.Parse(Console.ReadLine()); } if (ch != '*' && x[last - 'a'] > max[last - 'a']) { max[ch - 'a'] = x[ch - 'a']; x[ch - 'a'] = 0; } } int ma=0; for (; i < x.Length; i++) if (x[i] >= x[ma]) ma = i; Console.WriteLine((char)(ma+'a')+" " +x[ma]) ; } }} לא הבנתי כל כך מה קורה בהדפסה... הרי מערך max הוא המכיל את הרצף הגדול ביותר. (לפחות ככה תכננתי שיהיה) אבל כאשר אני מדפיס אותו זה יוצא לא טוב, וכאשר אני מדפיס את האיבר המקסימלי והערך במערך x, זה כן יוצא טוב. (לכל אות, וכל רצף שהוא) נ.ב - ההדפסה שביצעתי היא רק להדפסת הרצף הכי ארוך והאות, לא עפ"י השאלה שצריך להדפיס את כל המערך, כי זה כבר פחות מסובך
פורסם 2009 בפברואר 1816 שנים תשמע מהסתכלות קצרצרה בקוד אתה עושה שם הרבה מאוד דברים מיותרים (ואני לא בטוח שהקוד בכלל עובד)ההסבר שאני נתתי לפתרון צריך להיות אולי 10 שורות קודלא צריכה להיות יותר מלולאת WHILE אחת בכל הקוד לא צריך להיות יותר ממערך אחד
פורסם 2009 בפברואר 1816 שנים מחבר אודה לך מאוד אם תכתוב לי אותו בבקשה. קצת קשה לי להבין איך לבצע את זה בעזרת while אחד. (עם מערך אחד זה הבנתי איך לעשות)
פורסם 2009 בפברואר 1816 שנים using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { char ch , lastCh=(char)('z'+1); //hack int counter=0; int[] alphbetArray = new int[27]; Boolean shouldContinue=true; while (shouldContinue) { ch = char.Parse(Console.ReadLine()); if (ch == '*') { shouldContinue = false; } if (ch == lastCh)//retsef { counter++; } else //shvirat retsef { if (alphbetArray[lastCh - 'a'] < counter) { alphbetArray[lastCh - 'a'] = counter; } counter = 1;//so it count from 1 lastCh = ch; } } for (int i = 0; i < alphbetArray.Length-1; i++) { System.Console.WriteLine("the max number of stright appearance for the letter " + (char)('a' + i) + " is " + alphbetArray[i]); } } }}
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.