עבור לתוכן
  • צור חשבון
  • מי אנחנו?

    שלום אורח/ת!

     
    שים לב - על מנת להשתתף בקהילה שלנו, להגיב ולפתוח דיונים חדשים, עליך להצטרף כחבר רשום.

    החברים שלנו נהנים מיתרונות רבים, כולל היכולת להשתתף בדיונים, להנות מהגרלות ומבצעים לחברי האתר, ולקבל מידי שבוע את התכנים הבולטים שלנו ישירות במייל.

    לא אוהבים שמציקים לכם במייל? ניתן להירשם לאתר אך לוותר על הרישום לעידכוני המייל השבועיים.

Dolmiti

תרגיל בשפת C

Recommended Posts

הגדר פונקציה שמקבלת מחרוזת ומחזירה את ערכה בבסיס 16 כאשר a=0, b=1, c=3...z=25

דוגמה, עבור cczz.dd נקבל

get cczz.dd and return:
3*16^3 +3*16^2 +25*16^1 +25*16^0 + 4*16^-1+ 4*16^-2 = 13481.265625

נתון: מחרזות תמיד יופיעו עם אות אחת לפחות לפני ואחרי הנקודה

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

double str2float (char *s)				
{				
double b = 1, result = 0;				

/* TODO */

}

מודה לעוזרים

נערך על-ידי Dolmiti

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

דבר ראשון, לדעתי מה שמחשבים שם זה לא נראה כמו מעבר לבסיס 16. ניסיתי להמיר את המספר הנתון בבסיס 26 (כאשר a=0 ו-z=25) לבסיס 16 ויצא לי משהו אחר אבל וואטאבר.

 

בהנחנה ובכל זאת רוצים לחשב את הדבר הזה, תנסה לדמיין מה קורה אם אתה מוציא 16 בחזקה כלשהי בתור גורם משותף של הביטוי הזה.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

זה פשוט תרגיל מטומטם, שאין לו באמת קשר ל"בסיסים", אבל לא קשה במיוחד. קוראים תו-תו, מחסירים מהערך את 'a' (כדי לקבל טווח ערכים בין 0 ל25 במקום בין a לz), ומכפילים בחזקה מתאימה של 16 (במקום 16 היה אפשר לשים שם כל מספר). הטריק היחיד זה לדעת נמצאת הנקודה כדי לדעת מאיזו חזקה להתחיל. בשביל זה אפשר פשוט לסרוק את המחרוזת פעם אחת ולזכור את מיקום הנקודה.

נערך על-ידי QttP

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

@QttP מרגיש לי תרגיל מטומטם כמו שאתה אומר. אבל משום מה אני לא מצליח להשלים את נתון עד לנקודה

double str2float  (char *s)				
{				
d = 1, res = 0;		//given row
				
while  (*s !='.')   
{				
	res *=16;	//given row		
	
	res += __________________;		//please complete
	s++; //given row
}				
	

 

נערך על-ידי Dolmiti

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

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

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

א. רק עכשיו שמתי לב שזה עובד חחח ותודה

ב. לגבי המשך המחרוזת משלב הנקודה. יש רעיון?

int b = 1;
...
while (_________ !=0 ) //after dot cczz.aea
{				
	_______		//please complete
	res +=____*b;			//please complete
return res; //given row
}	

 

נערך על-ידי Dolmiti

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אחרי הנקודה פשוט יותר, כי אתה יודע בדיוק מאיזו חזקה של 16 להתחיל. תחשוב שוב על הדוגמה שניתנה.

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

את תנאי הלולאה אני מבין. את גוף הלולאה - אין לי שום רעיון שאיתו אני יכול להתקדם לחזקה נמוכה יותר מ 1-

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

וואלה לא יודע מה לומר לך. זה כבר לא תכנות, אלא יותר כמו חשבון די בסיסי. :P

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אם היה אפשר להוסיף משתנה עזר אז היה קלי קלות. לכן אין לי רעיון

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

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

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

אכן משתנה עזר לא עוזר. מה שלא ברור לי זה מה השורה האחרונה מרמזת. למה מכפילים את b בסוף. האם זה אומר ששורה לפני כן הוא אמור להשתנות?

שתף דיון


קישור ישיר להודעה
שתף באתרים אחרים

הצטרפ/י לדיון

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

אורח
הוסף תגובה

×   התוכן שהודבק הוא עם עיצוב.   הסר עיצוב

  Only 75 emoji are allowed.

×   הקישור שלך הוטמע אוטומטית.   הצג כקישור רגיל

×   התוכן הקודם שלך שוחזר אוטומטית.   נקה הכל

×   You cannot paste images directly. Upload or insert images from URL.


×
  • צור חדש...
Back to top button
Close
Close