עבור לתוכן

תרגיל בשפת C

Featured Replies

פורסם

תחשוב איך אתה עושה את זה. רמז: אתה לא יכול להשתמש במשתנה בודד בשביל לשמור את התו הנפוץ (איך אפשר לדעת מה יבוא יותר?)

פורסם
  • מחבר

חשבתי על להכין מערך נוסף, בגודל 256 (טבלת האסקי) ובמהלך הקליטה כבר לקדם ב+1 כל תא במקום התו הנסרק.

אך איך אח"כ אבדוק מה התו הנפוץ ביותר? ואיך אדפיס את זה עם הערך הנמוך ביותר במידה ויש כמה?

פורסם
  • מחבר

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

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

פורסם

טבלה בגודל 256 זה לא הרבה באופן כללי ולא מבחינת סיבוכיות מקום.

פורסם
  • מחבר

4 סדרת התווים המשותפים לשתי הסדרות (ללא חזרות) - מודפסים לפי הסדר בטבלת ה

.

זה מה שנשאר לי לעשות כרגע.

רעיונות?

פורסם

שתי הערות על הקוד האחרון שלך:

א. למה כתבת 10 ולא 'n\'? זה יהיה הרבה יותר ברור ככה.

ב. שוב השתמשת ב-= במקום ==.

ול-4: וריאציה על ספירת התווים שעשית ב-3.

פורסם
  • מחבר

א. לא הייתי בטוח שהקומפיילר יאכל 'n\' אבל אני אנסה.

ב. איפה? לא מצאתי, אולי כבר תיקנתי את זה בעצמי.

מממ לא הבנתי אותך?

פורסם

א. ברור שכן, זה חלק מהשפה.

ב. בשורה הזו:

(r=0)?(flag=2):(flag=3);

חוץ מזה לא נהוג לכתוב ככה. או שתעשה if או שתכתוב:

flag = (r==0) ? 2 : 3;

ג. זה התרגיל שלך :) בגדול, כמו שספרת כמה פעמים כל תו, רק שעכשיו לא איכפת לך כמה פעמים התו מופיע, אלא רק האם הוא מופיע או לא.

נ.ב. אפשר לבדוק אם תו הוא ספרה באמצעות הפונקציה isdigit (צריך לעשות אינקלוד ל-ctype.h).

פורסם
  • מחבר


while(flag == 0)
{
temp=fgetc(file); //check char from file
switch(temp) //what to do with char
{
case '\n': // ignore /n char
break;
case '.': //end of LINE
r++;
c = 0;
break;
case EOF: //end of FILE
flag = 1;
break;
default: //good digit/char
if(isdigit(temp)) //check if digit
{
(r==0)?(flag=2):(flag=3);
}
if(biggest < temp) //biggest char (ascii value)
{
biggest = temp;
}
if(smallest > temp) //smallest char (ascii value)
{
smallest = temp;
}
for(i = 0; r == 1 && i < COLOUMNS; i++)
{
if(tav[0][i] == tav[r][c]);
{
counter[1][i]+=1;
printf("test %d", i);
}
}
tav[r][c++]=temp;
counter[0][temp]+=1;
}

אוקיי, תיקנתי את ה = ל ==, צודק לא שמתי לב :)

יישמתי גם את הפונקציה לבדיקת תו-מספר - תודה!

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

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

פורסם

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

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

חוץ מזה, אל תוסיף סתם שורה למערך. כמו שלא תחזיק מערך חד מימדי שלכל איבר בו יש תפקיד שונה לחלוטין, ככה גם אם יש לך שני מערכים עם תפקידים שונים לחלוטין זה לא אומר שהם צריכים להיות מערך דו מימדי אחד (לא היית עושה מערך חד מימדי ומשתמש בתא הראשון שלו עבור המשתנה flag, התא השני עבור temp והתא השלישי עבור i, נכון?)

ארכיון

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

דיונים חדשים