PDA

View Full Version : تبدیل کد از c#به c



hhoura2006
چهارشنبه 06 دی 1385, 23:28 عصر
با سلام
من یه کد توی c#دارم که میخوام به c تبدیلش کنم می خواستم ببینم کسی می تونه به من کمک کنه چون من هیچی ازc# سر در نمی ارم
برنامه رو می ذارم اگه لطف کنید و یه نگاهی بهش بندازین ممنونتون می شم
باتشکر

someCoder
پنج شنبه 07 دی 1385, 11:11 صبح
من هیچی ازc# سر در نمی ارماین کدی که من دیدم نیازی به دونستن #C نداره!
هرجاشو نمیفهمی بپرس تا برات بگم منظورش چی بوده.

ضمنا برای بقیه دوستان که ممکنه مثل من حوصله دانلود کردن کد نداشته باشند، کد ضمیمه شده در بالا رو همینجا میذارم:

public static string NumberToText(string Input)
{
StringBuilder output = new StringBuilder();
if (Input !="")
{
string temp = "";
int i = Input.Length-1;
int j = 0;
int part = 0;
while (i>=0)
{
temp = Convert.ToString(Input[i]);
if ( (i!=0) && (j==0) & (Input[i-1]=='1'))
{
temp = Input.Substring(i-1,2);
temp = TwoDigitToText(temp);
output.Insert(0,temp);
if ( (i!=0) & ((i-1)!=0) )
output.Insert(0," و ");
i = i-2;
j++;
}
else
{
temp = DigitToText(temp,j);
if (temp!="")
{
output.Insert(0,temp);
if (i!=0)
output.Insert(0," و ");
}
i--;
}
if (j==2)
{
part ++;
if (i!=-1)
output.Insert(0," "+PartsName(part)+" ");
j = 0;
}
else
j++;
}
}
return output.ToString();
}
public static string PartsName(int part)
{
string output = "";
switch (part)
{
case 0:
output = "";
break;
case 1:
output = "هزار";
break;
case 2:
output = "میلون";
break;
case 3:
output = "میلیارد";
break;
default:
break;
}
return output;
}

public static string DigitToText(string Digit, int Order)
{
string output = "";
if (Order==0)
{
switch (Digit)
{
case "0":
output = "";
break;
case "1":
output = "یک";
break;
case "2":
output = "دو";
break;
case "3":
output = "سه";
break;
case "4":
output = "چهار";
break;
case "5":
output = "پنج";
break;
case "6":
output = "شش";
break;
case "7":
output = "هفت";
break;
case "8":
output = "هشت";
break;
case "9":
output = "نه";
break;
default:
output = "";
break;
}
}

if (Order==1)
{
switch (Digit)
{
case "0":
output = "";
break;
case "1":
output = "";
break;
case "2":
output = "بیست";
break;
case "3":
output = "سی";
break;
case "4":
output = "چهل";
break;
case "5":
output = "پنجاه";
break;
case "6":
output = "شصت";
break;
case "7":
output = "هفتاد";
break;
case "8":
output = "هشتاد";
break;
case "9":
output = "نود";
break;
default:
output = "";
break;
}
}

if (Order==2)
{
switch (Digit)
{
case "0":
output = "";
break;
case "1":
output = "صد";
break;
case "2":
output = "دویست";
break;
case "3":
output = "سیصد";
break;
case "4":
output = "چهارصد";
break;
case "5":
output = "پانصد";
break;
case "6":
output = "ششصد";
break;
case "7":
output = "هفتصد";
break;
case "8":
output = "هشتصد";
break;
case "9":
output = "نهصد";
break;
default:
output = "";
break;
}
}
return output;
}

public static string TwoDigitToText(string Digits)
{
string output = "";
switch (Digits)
{
case "10":
output = "ده";
break;
case "11":
output = "یازده";
break;
case "12":
output = "دوازده";
break;
case "13":
output = "سیزده";
break;
case "14":
output = "چهارده";
break;
case "15":
output = "پانزده";
break;
case "16":
output = "شانزده";
break;
case "17":
output = "هفده";
break;
case "18":
output = "هجده";
break;
case "19":
output = "نوزده";
break;
default:
output = "";
break;
}
return output;
}

hhoura2006
پنج شنبه 07 دی 1385, 12:50 عصر
سلام دوست عزیز
برای مثال فعلاً چند جایی رو که نمی دونم معادلش توی c چیه رو می نویسم:
1- آیا این خط تعریف تابع بصورت (فراخوانی با ارجاع هست) :
;( )StringBuilder output = new StringBuilder
2- main برنامه همون خط اوله؟؟؟
3- این خط رو چی جوری باید توی c بنویسم؟ ; int i = Input.Length-1
4- منظور از این سه خط چیه؟ وچه جوری می شه معادل سازیش کرد؟
(temp = Input.Substring(i-1,2
( temp = TwoDigitToText(temp
temp = Convert.ToString(Input[i]); i
5- و کلاً منظور از دستور input توی case ها همون print f توی c هست؟؟؟؟؟؟

حالا دیدید که واقعاً هیچی سر در نمی آرم

someCoder
پنج شنبه 07 دی 1385, 17:47 عصر
سلام دوست عزیز
برای مثال فعلاً چند جایی رو که نمی دونم معادلش توی c چیه رو می نویسم:
1- آیا این خط تعریف تابع بصورت (فراخوانی با ارجاع هست) :
;( )StringBuilder output = new StringBuilder
2- main برنامه همون خط اوله؟؟؟
3- این خط رو چی جوری باید توی c بنویسم؟ ; int i = Input.Length-1
4- منظور از این سه خط چیه؟ وچه جوری می شه معادل سازیش کرد؟
(temp = Input.Substring(i-1,2
( temp = TwoDigitToText(temp
temp = Convert.ToString(Input[i]); i
5- و کلاً منظور از دستور input توی case ها همون print f توی c هست؟؟؟؟؟؟

حالا دیدید که واقعاً هیچی سر در نمی آرم
نه اتفاقا اینجوری پیش بری هم بیشتر احتمال داره جواب بگیری و هم بیشتر چیزی یاد میگیری.
من سوالاتت رو به ترتیب جواب دادم، اما تو اول جواب 5 رو بخون :چشمک: ممکنه یه کمی اولش سخت به نظر بیاد، اما اگر یه کمی بیشتر دقت کنی، به همراه توضیحاتم (که امیدوارم مفید باشه) میتونی به نتیجه برسی. بازم سوال داشتی بپرس

1- در این خط یک شی (تو بخون متغیر!) از کلاس (بخون از نوع) StringBuilder تعریف شده. تو خیلی لازم نیست StringBuilder رو بشناسی یا شبیه سازیش کنی. بجاش تو یه string تعریف کن و ازش استفاده کن. در این صورت متد Insert هم خودت یه جوری شبیه سازی می کنی، مثلا اینجوری تبدیلات رو انجام میدی:

StringBuilder output = new StringBuilder();
==>
char output[MAXLEN];

output.Insert(0,temp);
==>
strcpy(tmpstr, output);
strcpy(temp, output);
strcat(output, tmpstr);


2- این برنامه هنوز main نداره. یعنی در این حالت قابل اجرا نیست. این کد قراره تو یه کد دیگه فراخونی بشه.

3-
int i = strlen(Input)-1;

4- خط اول یعنی زیر رشته که از مختصات i-1 در رشته Input شروع شده و به طول 2 را در رشته temp قرار بده. خط دوم که یه فراخونی تابعه که عینا تو C هم همین میشه. خط سوم هم که قبلا شبه کد براش نوشتم، معنیش اینه که در محل 0 رشته output، رشته temp رو اضافه کنه.

5- نه! اصلا اینجا فقط یه چند تا تابع داریم که ورودی میگیرن و خروجی میدن. اصلا از صفحه کلید ورودی دریافت نمیشه.
به این خط دقت کن:
public static string NumberToText(string Input) حالا تو به اولش کاری نداشته باش. بعد میشه دقیقا سینتکس C.
string NumberToText(string Input) پس Input میشه یه متغیر ورودی از نوع string

hhoura2006
پنج شنبه 07 دی 1385, 23:03 عصر
واقعاً دستتون درد نکنه من فعلاً با این توضیحاتی که دادید می رم جلو ببینم چی کار می تونم بکنم ولی خواهش می کنم بازم سر بزنید شاید(البته میدونم که حتماً ) دوباره به مشکل برخوردم.

hhoura2006
جمعه 08 دی 1385, 22:59 عصر
بازم سلام و مشکل
از اونجایی که می دونید این کد، کد تبدیل عدد به حروفه
حالا ببینید درست فهمیدم من در حال حاضر باید یک main تعریف کنم بعد یه عدد رو از ورودی بخونم و اونو تقسیم های متوالی بکنم و با استفاده دستور های شرطی اگه شرطها درست بودند تابع مربوط به عدد مورد نظر رو فراخوانی بکنم
برای مثال اگه باقی مانده ی عدد بر یک میلیارد صفر بود خارج قسمت رو به عنوان میلیارد گان چاپ کنه یعنی بره به case های میلیاردی.
البته من این برنامه رو برای یه عدد 12 رقمی می خواستم یعنی 100 میلیارد به بالا به نظر شما برای مثال عدد 452369017147578 رو وقتی به یک میلیارد تقسیم می کنم (سه رقم برای میلیارد جدا می شه )برای نوشتن 452 میلیارد باید یه switch دیگه تعریف کنم یا وقتی به 400 می رسه خود به خود می ره سراغ case های صدی(100)؟
با تشکر