سلام دوستان عزیز
من یک برنامه به زبان پاسکال میخواهم که عدد را بگیر و آن را تبدیل به حروف کند.
البته خیلی زور :11:
با تشکر
Printable View
سلام دوستان عزیز
من یک برنامه به زبان پاسکال میخواهم که عدد را بگیر و آن را تبدیل به حروف کند.
البته خیلی زور :11:
با تشکر
منظورت اینه که مثلا 11 عددی رو به 11 کاراکتری تبدیل کنه یا به یازده ؟
مثلا با وارد کردن عدد 125 به حروف آن را بده یعنی به صورت
صد و بیست و پنج
من ميتونم برنامه رو بنويسم
ميتونين از طريق ياهو باهام تماس بگيرين
نمونه کد vb به راحتی میتونی به پاسکال تغییرش بدی :
کد:'توابع تبديل عدد به معادل حروفي آن در زبان فارسي
'برنامه نويس : حميد آزادي اردكاني
'ويرايش اول : ارديبهشت 1380
' پست الكترونيك : azadi1355@yahoo.com
' آدرس وب : http://try.persianblog.com
Function Adad(ByVal Number As Double) As String
If Number = 0 Then
Adad = "صفر"
End If
Dim Flag As Boolean
Dim S As String
Dim I, L As Byte
Dim K(1 To 5) As Double
S = Trim(Str(Number))
L = Len(S)
If L > 15 Then
Adad = "بسيار بزرگ"
Exit Function
End If
For I = 1 To 15 - L
S = "0" & S
Next I
For I = 1 To Int((L / 3) + 0.99)
K(5 - I + 1) = Val(Mid(S, 3 * (5 - I) + 1, 3))
Next I
Flag = False
S = ""
For I = 1 To 5
If K(I) <> 0 Then
Select Case I
Case 1
S = S & Three(K(I)) & " تريليون"
Flag = True
Case 2
S = S & IIf(Flag = True, " و ", "") & Three(K(I)) & " ميليارد"
Flag = True
Case 3
S = S & IIf(Flag = True, " و ", "") & Three(K(I)) & " ميليون"
Flag = True
Case 4
S = S & IIf(Flag = True, " و ", "") & Three(K(I)) & " هزار"
Flag = True
Case 5
S = S & IIf(Flag = True, " و ", "") & Three(K(I))
End Select
End If
Next I
Adad = S
End Function
Function Three(ByVal Number As Integer) As String
Dim S As String
Dim I, L As Long
Dim h(1 To 3) As Byte
Dim Flag As Boolean
L = Len(Trim(Str(Number)))
If Number = 0 Then
Three = ""
Exit Function
End If
If Number = 100 Then
Three = "يكصد"
Exit Function
End If
If L = 2 Then h(1) = 0
If L = 1 Then
h(1) = 0
h(2) = 0
End If
For I = 1 To L
h(3 - I + 1) = Mid(Trim(Str(Number)), L - I + 1, 1)
Next I
Select Case h(1)
Case 1
S = "يكصد"
Case 2
S = "دويست"
Case 3
S = "سيصد"
Case 4
S = "چهارصد"
Case 5
S = "پانصد"
Case 6
S = "ششصد"
Case 7
S = "هفتصد"
Case 8
S = "هشتصد"
Case 9
S = "نهصد"
End Select
Select Case h(2)
Case 1
Select Case h(3)
Case 0
S = S & " و " & "ده"
Case 1
S = S & " و " & "يازده"
Case 2
S = S & " و " & "دوازده"
Case 3
S = S & " و " & "سيزده"
Case 4
S = S & " و " & "چهارده"
Case 5
S = S & " و " & "پانزده"
Case 6
S = S & " و " & "شانزده"
Case 7
S = S & " و " & "هفده"
Case 8
S = S & " و " & "هجده"
Case 9
S = S & " و " & "نوزده"
End Select
Case 2
S = S & " و " & "بيست"
Case 3
S = S & " و " & "سي"
Case 4
S = S & " و " & "چهل"
Case 5
S = S & " و " & "پنجاه"
Case 6
S = S & " و " & "شصت"
Case 7
S = S & " و " & "هفتاد"
Case 8
S = S & " و " & "هشتاد"
Case 9
S = S & " و " & "نود"
End Select
If h(2) <> 1 Then
Select Case h(3)
Case 1
S = S & " و " & "يك"
Case 2
S = S & " و " & "دو"
Case 3
S = S & " و " & "سه"
Case 4
S = S & " و " & "چهار"
Case 5
S = S & " و " & "پنج"
Case 6
S = S & " و " & "شش"
Case 7
S = S & " و " & "هفت"
Case 8
S = S & " و " & "هشت"
Case 9
S = S & " و " & "نه"
End Select
End If
S = IIf(L < 3, Right(S, Len(S) - 3), S)
Three = S
End Function__________________
به نظر من شما اين الگوريتم ميتونين اين مساله رو حل كنين
اول عدد دريافتي را به رشته تبديل كرده - طول رشته را بدست آوريد
شما بايد به ازاي يكان - دهگان - صد گان و ... يه آرايه داشته باشيد
اندكس هر آرايه ميتواند بيان گر آن حرف باشد
يك
دو
سه
.
.
.
نه
اگر فرض كنيم اين يه آرايه باشد
كارير وقتي عدد 1 را وارد كرد
شما سريعا به خانه شماره 1 آرايه خود ميكنيد و آن را چاپ ميكنيد
با تشکر از نظرات محترم شما عزیزان
اگر هم خود برنامه را به زبان پاسکال داشتید ممنون میشم اگر در اختیار این بنده حقیر نیز قرار بدهید.
فکر کنم الگوی خوبی باشه میتونی یه الگوریتم قشنگ از روش در بیاری . مزییتش اینه که میتونی با تغییر کوچیک تو آرایه عددت رو به زبونهای مختلف هم بنویسینقل قول:
سلامنقل قول:
من برنامه ی کامل رو برات میذارم
اگه خواستی تو وبلاگم هم گذاشتم.
PROGRAM HOROOFI;
uses crt,dos;
var num:1..999;
const a: array [1..27] of string=('ONE','TWO','THREE','FOUR','FIVE',
'SIX','SEVEN','EIGHT','NINE','TEN','ELEVEN',
'TWELVE','THIRTEEN','FOURTEEN','FIFTEEN',
'SIXTEEN','SEVENTE','EIGHTEEN','NINTEEN',
'TWENTY','THIRTY','FOURTY','FIFTY','SIXTY',
'SEVENTY','EIGHTY','NINTY');
{ *** WRITER *** }
procedure writer(nu:integer);
begin
if num>99 then
write(a[num div 100],' HUNDRED');
if num mod 100=0 then
exit;
if num mod 100<20 then
write('':2,a[num mod 100])
else
begin
write('':1,a[((num mod 100) div 10)+18],'');
write('':1,a[((num mod 100) mod 10)],'');
end; { for else }
end;
{ --- MAIN BODY --- }
begin
clrscr;
textbackground(0);
textcolor(10);
writeln;
write( ' ENTER AN INTEGER NUMBER <1000 : ');
readln(num);
textcolor(11);
if (num<=999) and (num>0) then
writer(num);
readln;
end.
با تشکر از تمامی عزیزانی که به بنده لطف داشتند.
از آنجا که تازه در دانشگاه درس پاسکال شروع شده است و هنوز به توابع نرسیده ام خواهشمندم برنامه ای که در این مورد مینویسید بدون توابع باشد.
البته جسارت من را ببخشید(به بزرگواری خودتان) و اگر کمی زودتر برنامه به دستم برسد نمره استاد را هم خواهم گرفت.
با تشکر