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

עזרה שפת -c


Sagi Shnek

Recommended Posts

שלום לכולם.

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

התוכנית צריכה לקלוט את המספר כמשתנה שלם int ולהדפיס את הייצוג ההקסדצימלי הפוך.

רשמתי את התוכנית הבאה


#include<stdio.h>
int main()
{
long int num_b,num_h=0,j=1,sherit;
printf("Enter any number any binary number: ");
scanf("%ld",&num_b);
while(num_b!=0){
sherit=num_b%10;
num_h+=sherit*j;
j=j*2;
num_b/=10;
}
printf(" hexadecimal: %lX",num_h);
return

0;

כשאני מכניס 11111111 התוכנית אכן מדפיסה ff אך שזה מעל 8 ספרות נוצר בלאגן.

אשמח לעזרה.

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

שלום וברוך הבא לפורום.

תערוך בבקשה את ההודעה הראשונה ותעטוף את הקוד בתגית קוד (לחץ על עריכה > מצב מתקדם, בחר את הקוד ולחץ על כפתור עם ציור #) כדי שיהיה יותר קריא.

לשאלתך: כמה ספרות ניסית להכניס, ובאיזו קומפיילר / סביבת אתה משתמש?

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

בפלטפורמות מסויימות long int הוא רק 32 ביט, שאומר שהוא יכול להכיל רק עד בערך 10 או 11 ספרות. אם אתה מנסה להכניס מספר יותר גדול מזה אתה תקבל גלישה נומרית.

תנסה להחליף את ה-long int ב-long long int או ב-int64_t.

לחילופין, תקלוט את המספר בתור מחרוזת או בתור לולאה שקוראת תו אחר תו.

(או שתוותר וזהו, תלוי מה הדרישות המדוייקות של התרגיל...)

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



#include<stdio.h>
int main()
{
long long int num_b,num_h=0,j=1,sherit;
printf("please enter binary number <consist of 1 or 0>: ");
scanf("%lld",&num_b);
while(num_b!=0){
sherit=num_b%10;
num_h+=sherit*j;
j=j*2;
num_b/=10;
}
printf(" hexadecimal: %lX",num_h);

return 0;

}


תודה רבה עכשיו זה עובד מצויין.

שאלה נוספת:

אם אני רושם 1111111111111110

אני מקבל FFFE

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

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

תעביר את המספר ההקסהדצימלי למחרוזת ואז תהפוך אותה.

זה לא נכון.

להפוך את הביטים ייתן ככה:

0xFE = 1111 1110

אבל

0x7F = 0111 1111

ולא 0xEF.

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

כדי להדפיס לא הפוך אין צורך בלעשות כלום בעצם.

דוגמא:


#include <stdio.h>




void main()
{
long long num;
const int nof_bits = sizeof(long long) * 8;
scanf("%d", &num);
//not iverted
printf("0x%X\n", num);
//inverted
printf("0x");
long long mask = 0xf;
for (int nibble_ndx = 0; nibble_ndx < (nof_bits >> 2); ++nibble_ndx, mask = mask << 4)
{
printf("%X", num&mask);
}
printf("\n");
}

שים לב שאם אתה מדפיס הפוך אז בעצם יש לך הרבה אפסים שהם חשובים כי ה most significant nibble שלך הוא כביכול ה lsbs. אם הם משמאל אין להם חשיבות אבל מימין כן.

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

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

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

להכניס 11111110111111

במצב הזה אני אמור לקבל FFEF

אך אני רוצה לקבל במקום FEFF/..

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

ארכיון

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

×
  • צור חדש...