עזרה - תרגיל ב- C# - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

עזרה - תרגיל ב- C#


Odedb52

Recommended Posts

אהלן... מחר מבחן על חומר של יא' 5יח'. (אשמח לקבל תשובה עד 9:30 בערך ;D)

הגענו למערך תווי, ונתקלתי בשאלה שלא הבנתי. (אני לומד הכל לבד, אף אחד לא מבין את המורה הזו :kopfpatsch:)

ניסיתי כבר הרבה דרכים אבל תמיד נתקל במשהו לא ברור. (אין לי "טיוטה" שניסיתי או משהו)

כתוב תכנית המקבלת כקלט אותיות קטנות מה- 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.

תודה רבה מראש לעוזרים!! :yelclap::xyxthumbs:

עודד ב.

קישור לתוכן
שתף באתרים אחרים

לא צריך DICTONARY שכן טווח הקלט ידוע וקטן

תיצור מערך כאורך טווח הקלט כלומר מספר האותיות באנגלית נראה לי 27 מאופס.

אחרי קליטת הקלט תבדוק אם האות דומה לאות האחרונה שנקלטה (יעני רצף) אם כן תגדיל את ה COUNTER ב1

אם לא נשבר הרצף עליך לבדוק אם הCOUNTER כרגע יותר גדול מזה שבמערך (האינדקס מן הסתם היא האות) אם כן לעדכן את המערך

בכל מקרה אחכ לאפס את COUNTER ולעדכן את האות האחרונה שנקלטה.

אני מניח שאתה תצליח למצוא איך להתייחס ל a כ 0 ו Z כ 26

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

אם לא אז מצבך רע.

קישור לתוכן
שתף באתרים אחרים

זה יישמע קצת מוזר, אני בטוח.

הצלחתי לפתור את התרגיל, אבל לא בהבנה מוחלטת של מה שעשיתי. :screwy:

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, זה כן יוצא טוב. (לכל אות, וכל רצף שהוא)

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

קישור לתוכן
שתף באתרים אחרים

תשמע מהסתכלות קצרצרה בקוד אתה עושה שם הרבה מאוד דברים מיותרים (ואני לא בטוח שהקוד בכלל עובד)

ההסבר שאני נתתי לפתרון צריך להיות אולי 10 שורות קוד

לא צריכה להיות יותר מלולאת WHILE אחת בכל הקוד לא צריך להיות יותר ממערך אחד

קישור לתוכן
שתף באתרים אחרים


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]);
}
}
}
}

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...