עבור לתוכן

הפיכת מספר והקסדצימלי והצגתו - C#

Featured Replies

פורסם

אני אמור לקלוט מספר ולהציג אותו בהקסדצימלי.

הצלחתי לעשות את התוכנית אבל יש לי בעיה להעביר את המספרים בסוף לאותיות, דוגמא:

אם אני מכניס את המספר 125 אני אמור לקבל 7D אבל אני לא המרתי את ה-13 שאני מקבל ל-D אז זה מציג לי אותו כ-713, השאלה שלי היא איך אחרי שאני קולט את כל הספרות למערך אני יכול להגיד למערך שאם למשל באינדקס i=2 יש את המספר 10 אז שיכניס לתוכו את A ?

אני אמור להשתמש בסטרינג או משהו ?





using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace T200
{
class Program
{
static void Main(string[] args)
{
int num = int.Parse(Console.ReadLine());


int count = 0;


//define array
int[] hexadecimal = new int[10];


for (int i = 0; i < 10; i++)
{
if (num!=0)
{
hexadecimal[i] = num % 16;
num = num / 16;
count++;
}
}


//preant all numbers
for (int i = 0 ; i < count ; i++)
{
Console.Write(hexadecimal[count-1-i]);
}


Console.ReadLine();
}
}
}


פורסם

במידה והמטרה היא לא למידה, פשוט תשתמש ב-ToString עם פרמטר x2.

פורסם
  • מחבר

מה אני אמור לעשות אני לא מכיר את הפקודה הזו ?

איך רושמים מה ?

פורסם

אתה יכול לבנות מערך של char בגודל 16 ולהכניס לתוכו את כל התווים מ-0 עד F, כל אחד במיקום שלו... ככה שהתא במקום 5 יכיל '5' והתא במקום 13 יכיל 'D'.

ואז, עבור כל ספרה בתוצאה אתה מציג את התו במערך.

פורסם
  • מחבר

עדיין לא למדנו את מה שאמרת אז אני מתאר לעצמי שאני אמור לפתור את זה בכלים שלמדנו בנתיים, לי הקוד יצא בסדר חוץ מהאותיות שחסרות לי אבל אין מצב ליצור איזה משתנה ולקרוא לו למשל A ואם יוצא לי במערך 10 פשוט להחליף אותו ?

ואם לא איך אני יוצר מערך כמו שאמרת ?

איך אני רושם את זה ?

עריכה:

טוב אז יצרתי לנסיון משתנה CHAR הכנסתי לתוכו את D ואחרי קליטת כל המספרים למערך אמרתי

          if (hexadecimal[i] == 13)
{
hexadecimal[i] = ch;
}








using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace ConsoleApplication3
{
class Program
{
static void Main(string[] args)
{
int num = int.Parse(Console.ReadLine());




int count = 0;


char ch = 'D';


//define array
int[] hexadecimal = new int[10];




for (int i = 0; i < 10; i++)
{
if (num != 0)
{
hexadecimal[i] = num % 16;
num = num / 16;
count++;


if (hexadecimal[i] == 13)
{
hexadecimal[i] = ch;
}
}
}




//preant all numbers
for (int i = 0; i < count; i++)
{
//if (hexadecimal[i] == 13)
//{
// hexadecimal[i] = ch;
//}


Console.Write(hexadecimal[count - 1 - i]);
}




Console.ReadLine();
}
}
}

לפני שעשיתי את זה כמו שאמרתי אם הקלט שלי היה 125 אז קיבלתי 713 ועכשיו אחרי מה שעשיתי אני מקבל 768, אין לי מושג מאיזה ה-68 האלה הגיעו לי ואם בכלל מה שעשיתי מותר

פורסם

תנסה ליצור פונקציה שמקבלת ערך מ- 0 ועד 15, ומחזירה את התו שמציין את הערך ההקסדצימלי שלו.

פורסם

מערך חדש בעל 15 מקומות

V

בכל מקום תגדיר תו שיתאים לבסיס 16

V

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

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

פורסם

זו לא השיטה היחידה, וכדאי שהוא יגלה אותן לבד.

פורסם

הבעיה בקוד שלך היא שהמערך של התוצאה הוא int, בעוד חלק מהתווים שאתה צריך להציג הם char...

68 זה הערך המספרי של התו 'D' (ערך אסקי), ולכן זה מה שנכנס לך למערך (הקומפיילר המיר לך אוטומטית מ-CHAR ל-INT).

מה שאתה צריך לעשות זה דבר כזה:

אחרי שאתה יוצר את המערך של התוצאה (המערך hexadecimal), תיצור מערך נוסף מטיפוס char, ותעביר אליו את הערכים המספריים של כל ספרה.

משהו כזה:

for (i=0; i<16; i++)
newarray[i] = hex[hexadecimal[i]];

hex זה המערך שדיברתי עליו בתגובה הקודמת.

ובקשר ליצירה של המערך... אתה פשוט נותן לו ערכים התחלתיים... כמו שבניסיון שלך כתבת char ch='D', תעשה אותו דבר רק עם מערך וכל התווים מ-0 עד F.

פורסם




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;


namespace T200
{
class Program
{
static void Main(string[] args)
{
int num = int.Parse(Console.ReadLine());
int reminder = 0;
string hex = "";

do
{
reminder = num % 16;
switch (reminder)
{
case 10:
hex += "A";
break;
case 11:
hex += "B";
break;
case 12:
hex += "C";
break;
case 13:
hex += "D";
break;
case 14:
hex += "E";
break;
case 15:
hex += "F";
break;
default:
hex += reminder;
break;
}
num = num / 16;
} while (num != 0);

//preant all numbers
for (int i = 0; i < hex.Length; i++)
Console.Write(hex[hex.Length-1-i]);

Console.ReadLine();
}
}
}

ארכיון

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

דיונים חדשים