kiedyś bawiłem się w to... czy znudziło mnie to czy waluta słaba nie pamietam....
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
AnsiString t;
AnsiString tekst;
void zaznacz(void);
AnsiString slowa(double liczba);
void do_20(int cyfr);
void do_100(int cyfr);
void do_1000(int cyfr);
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void zaznacz(void)
{
int zn =Form1->Edit1->GetTextLen();
Form1->Edit1->SetFocus();
Form1->Edit1->SelStart = zn-1;
Form1->Edit1->SelLength = 1;
}
//--------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
if(Form1->Edit1->Text=="")
{ Button1->Enabled=false;
return;}
try
{
//t=StrToInt(Edit1->tekst);
t=Edit1->Text;
if(StrToFloat(t)<=0) // if(v<0)
{
Application->MessageBox("Dopuszczalny wpis to liczba całkowita!" , "error", MB_OK);
Button1->Enabled=false;
zaznacz();
return;
}
else;
{
Button1->Enabled=true;
}
}
catch (Exception &exception)
{
Application->MessageBox("To nie była liczba!" , "error", MB_OK);
zaznacz();
Button1->Enabled=false;
return;
}
}
//---------------------------------------------------------------------------
AnsiString slowa(double liczba)
{
double kopia,l_ul;
//long cala;
__int64 cala;
int cyfra, c_p;
AnsiString koniec, jedn, ulamek, ulamek_tmp;
AnsiString t_1, t_2,t_dz, t_j, t_m,t_s, t_t, t_md;
t_md = "", t_m =""; t_t=""; t_s=""; t_dz=""; t_j=""; koniec="";tekst = "";
kopia = liczba;
cala = kopia;
l_ul = kopia - cala;
if(l_ul == 0)
ulamek = "0";
else
{
ulamek_tmp=FormatFloat("0.00",l_ul);
ulamek = ulamek_tmp.SubString(3,2);
}
koniec = ulamek + "/100";
////////////////////////////////////////////////////////////////////////////////
if(cala > 1999999999)
{
c_p =(double)cala/100000000000;
cala = cala - c_p * 100000000000;
cyfra = c_p;
do_1000(cyfra);
t_2 = tekst;
tekst = "";
c_p = (double)cala/10000000000;
cala = cala - c_p * 10000000000;
cyfra = c_p;
do_100(cyfra);
t_1 = tekst;
tekst = "";
c_p = (double)cala/10000000000;
cala = cala - c_p * 10000000000;
cyfra = c_p;
do_20(cyfra);
switch(c_p)
{
case 0:
case 1:
case 5:
case 6:
case 7:
case 8:
case 9:
t_md = t_2 + t_1 + tekst + "miliardów ";
break;
case 2:
case 3:
case 4:
t_md = t_2 + t_1 + tekst + "miliardy ";
break;
}
tekst = "";
}
//--------- od 1 miliard do 20 mld ----------------------------------------------
if(cala > 999999999)
{
c_p =(double)cala /1000000000;
cala = cala - (double)c_p * 1000000000;
cyfra = c_p;
do_20(cyfra);
if(c_p==1)
{
t_md = tekst + "miliard ";}
else
{
if(c_p<5) t_md = tekst + "miliardy ";
if(c_p>4) t_md = tekst + "milardów ";
}
tekst = "";
}
///////////////////////////////////////////////////////////////////////////////
//--------- od 20 --------------------------------------------------------------
if(cala > 1999999)
{
c_p =(int)cala/100000000;
cala = (int)cala - c_p * 100000000;
cyfra = c_p;
do_1000(cyfra);
t_2 = tekst;
tekst = "";
c_p = (int)cala/10000000;
cala = (int)cala - c_p * 10000000;
cyfra = c_p;
do_100(cyfra);
t_1 = tekst;
tekst = "";
c_p = (int)cala/1000000;
cala = (int)cala - c_p * 1000000;
cyfra = c_p;
do_20(cyfra);
switch(c_p)
{
case 0:
case 1:
case 5:
case 6:
case 7:
case 8:
case 9:
t_m = t_2 + t_1 + tekst + "milionów ";
break;
case 2:
case 3:
case 4:
t_m = t_2 + t_1 + tekst + "miliony ";
break;
}
tekst = "";
}
//--------- od 1 milion do 20 mln ----------------------------------------------
if(cala > 999999)
{
c_p =(int)cala /1000000;
cala = (int)cala - c_p * 1000000;
cyfra = c_p;
do_20(cyfra);
if(c_p==1)
{
t_m = tekst + "milion ";}
else
{
if(c_p<5) t_m = tekst + "miliony ";
if(c_p>4) t_m = tekst + "milionów ";
}
tekst = "";
}
//--------- od_20000 do 100000 -------------------------------------------------
if(cala>19999)
{
c_p =(int)cala/100000;
cala = (int)cala - c_p*100000;
cyfra = c_p;
do_1000(cyfra);
t_2 = tekst;
tekst = "";
if(cala > 10000 && cala < 20000)
{
c_p =(int)(cala / 1000);
cala = (cala - c_p) * 1000;
cyfra = c_p;
do_20(cyfra);
t_1 = tekst;
tekst = "" ;
}
else
{
c_p =(int)cala/10000; // dla 68 854 = 6
cala = (int)cala - c_p*10000; // = 8 854
cyfra = c_p; //=6
do_100(cyfra);
t_1 = tekst;
tekst = "";
c_p =(int)cala/1000;
cala =(int)cala - c_p * 1000;
cyfra = c_p;
do_20(cyfra);
}
switch(c_p)
{
case 0:
case 1:
t_t = t_2 + t_1 + tekst + "tysięcy " ; break;
case 2:
case 3:
case 4:
t_t = t_2 + t_1 + tekst + "tysiące " ; break;
default:
t_t = t_2 + t_1 + tekst + "tysięcy ";
}
tekst = "";
}
//------------ 0d 1000 - do 20 000 ---------------------------------------------
if(cala > 999)
{
c_p = (int)cala / 1000;
cala = (long)cala - c_p * 1000;
cyfra = c_p;
do_20(cyfra);
switch(c_p)
{
case 1:
t_t = tekst + "tysiąc "; break;
case 2:
case 3:
case 4:
t_t = tekst + "tysiące "; break;
default:
t_t = tekst + "tysięcy "; break;
}
tekst = "";
}
//--------- od 100 -------------------------------------------------------------
if(cala > 99)
{
c_p = (int)cala / 100;
cala = (int)cala - c_p * 100;
cyfra = c_p;
do_1000(cyfra);
t_s = tekst;
tekst = "";
}
//----------------------------------------------------------
if(cala > 19)
{
c_p = (int)cala / 10;
cala = (int)cala - c_p * 10;
cyfra = c_p;
do_100(cyfra);
t_dz = tekst;
tekst = "";
}
//-------------------------------------------------------------
if(cala < 20 && cala > 0) // And
{
cyfra = (double)cala;
do_20(cyfra);
t_j = tekst;
tekst = "";
}
//-------------------------------------------------------------
tekst = t_md + t_m + t_t + t_s + t_dz + t_j + koniec;
return tekst;
}
//---------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form1->Edit2->Text=slowa(StrToFloat(t));
}
//---------------------------------------------------------------------------
void do_20(int cyfr)
{
switch(cyfr)
{
case 1:
tekst = "jeden "; break;
case 2:
tekst = "dwa "; break;
case 3:
tekst = "trzy "; break;
case 4:
tekst = "cztery "; break;
case 5:
tekst = "pięć "; break;
case 6:
tekst = "sześć "; break;
case 7:
tekst = "siedem "; break;
case 8:
tekst = "osiem "; break;
case 9:
tekst = "dziewięć "; break;
case 10:
tekst = "dziesięć "; break;
case 11:
tekst = "jedenaście "; break;
case 12:
tekst = "dwanaście "; break;
case 13:
tekst = "trzynaście "; break;
case 14:
tekst = "czternaście "; break;
case 15:
tekst = "piętnaście "; break;
case 16:
tekst = "szesnaście "; break;
case 17:
tekst = "siedemnaście "; break;
case 18:
tekst = "osiemnaście "; break;
case 19:
tekst = "dziewiętnaście ";
}
}
//-------------------------------------------------------
void do_100(int cyfr)
{
switch(cyfr)
{
case 1:
tekst = "dziesięć "; break;
case 2:
tekst = "dwadzieścia "; break;
case 3:
tekst = "trzydzieści "; break;
case 4:
tekst = "czterdzieści "; break;
case 5:
tekst = "pięćdziesiąt "; break;
case 6:
tekst = "sześćdziesiąt "; break;
case 7:
tekst = "siedemdziesiąt "; break;
case 8:
tekst = "osiemdziesiąt "; break;
case 9:
tekst = "dziewięćdziesiąt ";
}
}
//-------------------------------------------------------
void do_1000(int cyfr)
{
switch(cyfr)
{
case 1:
tekst = "sto "; break;
case 2:
tekst = "dwieście "; break;
case 3:
tekst = "trzysta "; break;
case 4:
tekst = "czterysta "; break;
case 5:
tekst = "pięćset "; break;
case 6:
tekst = "sześćset "; break;
case 7:
tekst = "siedemset "; break;
case 8:
tekst = "osiemset "; break;
case 9:
tekst = "dziewięćset ";
}
}
//-------------------------------------------------------
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
TShiftState Shift)
{
if(Edit1->Text=="") return;
if

Key == VK_RETURN)

(Key == VK_ESCAPE))
{
Key = 0;
Form1->Edit2->Text=slowa(StrToFloat(t));
}
}
ps. to zabawa była