שארית בשפת C: - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שארית בשפת C:


uzana2004

Recommended Posts

1.

השאלות שלי ככה:

אחרי שאני % 2 על מספר מסויים, איך אני מקבל את הערך אחרי השארית?

לדוגמא: אם ביצעתי על 2 % 9 אז השארית = ל1 והערך שנשאר אחרי השארית הוא 4...

2.

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

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

1. x / y בין שתי INTEGER יתן את החלוקה בלי השארית. x % y בין שתי INTEGER יתן את השארית בלבד.

2. כדי לבדוק האם מספר x הוא בבסיס b. תבצע לולאה שבכל פעם עושה x % b, אם התוצאה של זה גדולה/שווה מ b אזי הוא לא בבסיס הזה. לאחר מכן תעדכן את

x = x / b.

3. אם הגעת לסוף x וכל התוצאות היו קטנות מ b, אזי הוא בבסיס הנ"ל.

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

לא הבנתי למה אתה מתכווין...בקיצור איך אני מקבל מספר עשרוני ומציג אותו כבינארי....

1. x / y בין שתי INTEGER יתן את החלוקה בלי השארית. x % y בין שתי INTEGER יתן את השארית בלבד.

2. כדי לבדוק האם מספר x הוא בבסיס b. תבצע לולאה שבכל פעם עושה x % b, אם התוצאה של זה גדולה/שווה מ b אזי הוא לא בבסיס הזה. לאחר מכן תעדכן את

x = x / b.

3. אם הגעת לסוף x וכל התוצאות היו קטנות מ b, אזי הוא בבסיס הנ"ל.

זה יהיה בעייתי עם המספר 10 100 וכו' כי הם תקינים כעשרוניים וגם כבינאריים...לעומת 01 שלא תקין...

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

1. לא הבנתי בדיוק מה אתה רוצה, מן הסתם כל מספר שתקין בבסיס X יהיה תקין בכל בסיס מעליו...אי אפשר להבדיל. ואם אתה קובע ש 01 לא תקין, הוא לא תקין באף בסיס...

2. לגבי הצגת מספר, אני מניח שאת האלגוריתם הבנת, אז אחרי שיש לך את התוצאה ההפוכה, אתה פשוט יכול להפוך אותה לתוך משתנה שהוא ההפך (כל שארית מהראשון תכפיל ב 10 * המיקום בשני).

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

ל-PRINTF יש אפשרות להדפיס את המספר באיזה בסיס שאתה רוצה.

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

אני צריך לפתור את התרגיל ללא מערך...

ואני לא מכיר את היישום של האלגוריתים בשפת C....

אז תדפיס את המספר ביט-ביט, מהסוף להתחלה:

int get_bit(int x, int bit_num) {
return (x >> bit_num) & 1;
}

void print_bin(int x) {
if (x == 0) {
// במקרה שהמספר הוא 0, סתם להדפיס 0
printf('0');
return;
}

int i = sizeof(x)*8 - 1; // להתחיל הביט העליון ביותר במספר

for ( ; (i >= 0) && (get_bit(x,i) == 0) ; --i); // לדלג על כל ביטי האפס

for ( ; i >= 0 ; --i) {
printf("%d", get_bit(x,i));
}

}

הפונקציה get_bit מחזירה את הביט במקום ה-i (כאשר 0 הוא הביט הימני ביותר)

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

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

איכס, רקורסיה :)

קודם כל, אתה צריך לעשות שאם x==0 אז הוא יצא מהרקורסיה (כלומר חייבים else)

חוץ מזה, שים לב שאם x!=0, אז הפונקציה תדפיס לך 0 מיותר בסוף...

פתרון אפשרי הוא להוסיף פרמטר לפונקציה שאומר לה מה לעשות אם x==0 (להדפיס 0 או לא), שהערך הדיפולטי שלו הוא true, ובתוך הפונקציה היא תקרא לו עם false.

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

אפשר לבדוק :) תקמפל את שתי האפשרויות ותשווה את האסמבלי שיוצא.

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

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

ארכיון

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

×
  • צור חדש...