Sayıyı Yazıya çevirme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
the_zula
Üye
Mesajlar: 6
Kayıt: 02 Eki 2007 11:05

Sayıyı Yazıya çevirme

Mesaj gönderen the_zula »

Selam arkadaşlar henüz bu ilk yazım ,delphiye yeni başladım sayıyı yazıya çevirmek için farklı algoritmalar var fakat ben daha kısa bişi yazdım 3 rakama kadar düzgün yazıyor fakat 1000 üstü olunca tam çalışmıyor acaba burda hata nerde yardımcı olabilrmisiniz ?

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
const
birler: array[1..9] of string = ('BİR', 'İKİ', 'ÜÇ', 'DÖRT', 'BEŞ', 'ALTI', 'YEDİ', 'SEKİZ', 'DOKUZ');
onlar : array[1..9] of string = ('ON','YİRMİ','OTUZ','KIRK','ELLİ','ALTMIŞ','YETMİŞ','SEKSEN','DOKSAN');
var
bin,y,o,b:integer;
begin
bin:=strtoint(edit1.Text) div 1000;
y:=strtoint(edit1.Text)div 100;
o:=strtoint(edit1.Text) mod 100 div 10;
b:=strtoint(edit1.Text) mod 10;
if (strtoint(edit1.Text) < 1000) then
label1.Caption:=birler[y]+ 'YÜZ' + onlar[o]+birler[b]
else
label1.Caption:=(birler[bin]+'BİN'+birler[y]+'YÜZ'+onlar[o]+birler[b]);
end;
Not:Kodlarımızı code tagına alırsak daha okunaklı olur.
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

basamaklarda 0 varsa kontrol etmiyorsun.

1001 için bir dene bak ne veriyor.

birbindokuzyüz filan bişi.

aşağıdaki kendi kodum. çalışıyor. istersen kullan. gördüğün gibi sen kodunda 0 gelebilecek dğerlere bakmamışın. başka hatalarda var ama inceleyecek zaman yok.

Kod: Tümünü seç

Function yaziyla(Curr : Currency) : String;
Const
  Birler : Array [0..9] Of String [10] = ('', 'bir', 'iki', 'üç', 'dört',
    'beş', 'altı', 'yedi', 'sekiz', 'dokuz');
  Onlar : Array [0..9] Of String [10] = ('', 'on', 'yirmi', 'otuz',
    'kırk', 'elli', 'altmış', 'yetmiş', 'seksen', 'doksan');
  //  Carpan : Array [1..6] of String [10]=('yüz','bin','milyon','milyar','trilyon','katrilyon');
Var
  Str1 : String;
  Sayac1 : Byte;
  Pos : Byte;
Begin
  Result := '';
  Str1   := IntToStr(Trunc(Curr));
  For sayac1 := 1 To Length(Str1) Do
   Begin
    Pos := (Length(Str1) - Sayac1) + 1;
    If ((Pos Mod 3) = 0) And (Str1[Sayac1] <> '1') Then
      Result := Result + Birler[StrToInt(Str1[Sayac1])];
    If ((Pos Mod 3) = 0) And (Str1[Sayac1] <> '0') Then
      Result := Result + 'yüz';
    If ((Pos Mod 3) = 2) Then
      Result := Result + Onlar[StrToInt(Str1[Sayac1])];
    If ((Pos Mod 3) = 1) Then
      Result := Result + Birler[StrToInt(Str1[Sayac1])];
    Case Pos Of
      4 :
         Begin
          If (Copy(Str1, Sayac1 - 3,2) = '00') And (Str1[Sayac1] = '1') Then
            SetLength(Result, Length(Result) - 3);
          If StrToInt(Copy(Str1, Sayac1 - 3,3)) > 0 Then
            Result := Result + 'bin';
         End;
      7 :
        If StrToInt(Copy(Str1, Sayac1 - 3,3)) > 0 Then
          Result := Result + 'milyon';
      10 :
        If StrToInt(Copy(Str1, Sayac1 - 3,3)) > 0 Then
          Result := Result + 'milyar';
      13 :
        If StrToInt(Copy(Str1, Sayac1 - 3,3)) > 0 Then
          Result := Result + 'trilyon';
      16 :
        If StrToInt(Copy(Str1, Sayac1 - 3,3)) > 0 Then
          Result := Result + 'katrilyon';
     End;
   End;
End;
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
the_zula
Üye
Mesajlar: 6
Kayıt: 02 Eki 2007 11:05

Mesaj gönderen the_zula »

evet henüz sıfırlara bakmadım ama benim anlamadım nokta

275 örnek
label1.Caption:=birler[y]+ 'YÜZ' + onlar[o]+birler
yazıyor
fakat bin olunca
3275 mesela üsteki kodun başına sadece
birler[bin]+'BİN' + birler[y]+ 'YÜZ' + onlar[o]+birler
burda 3 bin yazıp diğerleni yazması gerekirken 3BİNd6e yazıyor onu anlamadım:S
the_zula
Üye
Mesajlar: 6
Kayıt: 02 Eki 2007 11:05

Mesaj gönderen the_zula »

if (strtoint(edit1.Text) < 1000) then
begin
y:=strtoint(edit1.Text)div 100;
o:=strtoint(edit1.Text) mod 100 div 10;
b:=strtoint(edit1.Text) mod 10;
label1.Caption:=birler[y]+ 'YÜZ' + onlar[o]+birler;
end
else
begin
bin:=strtoint(edit1.Text)div 1000;
y:=strtoint(edit1.Text)mod 1000 div 100;
o:=strtoint(edit1.Text)mod 1000 mod 100 div 10 ;
b:=strtoint(edit1.Text)mod 1000 mod 100 mod 10 ;
label1.Caption:=birler[bin]+'BİN'+ birler[y]+ 'YÜZ' + onlar[o]+birler;
,

Arkadaşlar gerek kalmadı bu şekilde çözdüm ama henüz sıfırlara bakmadım sorun çözüldü
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
dikkat edersen o yu bulduruken önce mod 100 sonra div 10 yapmışsın
aynı şekilde y yi buldurukende önce mod 1000 sonra div 100 yapman lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
the_zula
Üye
Mesajlar: 6
Kayıt: 02 Eki 2007 11:05

Mesaj gönderen the_zula »

evet sonradan jeton düştü yeni farkettim sağolun şimdi bu şekilde yaptım sıfırlarada bakıyo düzgün çalışıyor

begin
if (strtoint(edit1.Text) <1000) then
begin
y:=strtoint(edit1.Text)div 100;
o:=strtoint(edit1.Text) mod 100 div 10;
b:=strtoint(edit1.Text) mod 10;
if ((strtoint(edit1.text)mod 100)= 0 )then
label1.caption:=birler[y]+'YÜZ'
else
label1.Caption:=birler[y]+ 'YÜZ' + onlar[o]+birler;
end
else
begin
bin:=strtoint(edit1.Text)div 1000;
y:=strtoint(edit1.Text)mod 1000 div 100;
o:=strtoint(edit1.Text)mod 1000 mod 100 div 10 ;
b:=strtoint(edit1.Text)mod 1000 mod 100 mod 10 ;
if ((strtoint(edit1.text)mod 1000)= 0 )then
label1.caption:=birler[bin]+'BİN'
else
label1.Caption:=birler[bin]+'BİN'+ birler[y]+ 'YÜZ' + onlar[o]+birler;
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

the_zula yazdı:evet sonradan jeton düştü yeni farkettim sağolun şimdi bu şekilde yaptım sıfırlarada bakıyo düzgün çalışıyor

begin
if (strtoint(edit1.Text) <1000) then
begin
y:=strtoint(edit1.Text)div 100;
o:=strtoint(edit1.Text) mod 100 div 10;
b:=strtoint(edit1.Text) mod 10;
if ((strtoint(edit1.text)mod 100)= 0 )then
label1.caption:=birler[y]+'YÜZ'
else
label1.Caption:=birler[y]+ 'YÜZ' + onlar[o]+birler;
end
else
begin
bin:=strtoint(edit1.Text)div 1000;
y:=strtoint(edit1.Text)mod 1000 div 100;
o:=strtoint(edit1.Text)mod 1000 mod 100 div 10 ;
b:=strtoint(edit1.Text)mod 1000 mod 100 mod 10 ;
if ((strtoint(edit1.text)mod 1000)= 0 )then
label1.caption:=birler[bin]+'BİN'
else
label1.Caption:=birler[bin]+'BİN'+ birler[y]+ 'YÜZ' + onlar[o]+birler;


Merhaba delphide yeni olduğun için ilk etapta işi halletmeye çalışman normal ama bu kod sana her zaman lazım olabilir. o yüzden hazır sorunu gidermişken bunu bir fonksiyon yada procedure haline nasıl getirebileceğini öğrenmelisin.

demek istediğim, şu an senin kodun edit1. in adı değişse sen tüm kodu elden geçireceksin, olsa yukarda örnek verdiğim gibi bir fonksiyon halinde yazarsan yapman gereken

Kod: Tümünü seç

abcinteger:=sayiyiyaziya(strtointr(edit1.text));
definteger:=sayiyiyaziya(strtointr(edit2.text));
yazmak olacaktı.
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
the_zula
Üye
Mesajlar: 6
Kayıt: 02 Eki 2007 11:05

Mesaj gönderen the_zula »

aa cidden bak bu aklıma gelmemiştii,teşekkürler
ikutluay
Üye
Mesajlar: 2341
Kayıt: 03 Tem 2007 10:13

Mesaj gönderen ikutluay »

the_zula yazdı:aa cidden bak bu aklıma gelmemiştii,teşekkürler
inşallah beni makaraya sarmıyorsundur...

iyi çalışmalar
Kişi odur ki, koyar dünyada bir eser. Eseri olmayanın yerinde yeller eser./Muhammed Hadimi
http://www.ibrahimkutluay.net
http://www.ibrahimkutluay.net/blog
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

viewtopic.php?t=19079
function Rakam(Sayi:Int64):String; ve function ParaOku(Sayi:Real):String; fonksiyonları bu işi görüyorlar.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
the_zula
Üye
Mesajlar: 6
Kayıt: 02 Eki 2007 11:05

Mesaj gönderen the_zula »

yok cidden makara anlamında değil :( yanlış anladıınız,sağolun gerçekten aklımada yoktu o
Cevapla