Nagrywarki |
Pliki |
Dyski twarde |
Recenzje |
Księgarnia |
Biosy |
Artykuły |
Nagrywanie od A do Z |
Słownik |
FAQ
|
||
|
Off topic Forum poświęcone wszelkim innym tematom. |
|
Opcje związane z dyskusją | Tryby wyświetlania |
28.11.2006, 16:37 | #1 |
Bywalec
Data rejestracji: 29.04.2004
Posty: 37
|
[c++] slowne wyswietlanie liczby
Witam mam do napisania program ktory wyswietla 3-cyfrowa liczbe naturalna slownie tak jak to jest na fakturach. ma to wygladac tak ze wprowadzam liczbe trzy cyfrowa do wpisania 0 napisalem cos takiego
#include <cstdlib> #include <iostream> #include <istream> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { int tab[3]={0}; char z=1; int i=0; while(z!='0'){ if (i==3) break; cout<<"Podaj liczbe (0 konczy) "; z=getche(); cout<<endl; if z>='1')&&(z<='9')){ tab[i]=z; i++;}} if (i==3){ switch (tab[0]){ case '1':cout<<"sto ";break; case '2':cout<<"dwiescie ";break; case '3':cout<<"trzysta ";break; case '4':cout<<"czterysta ";break; case '5':cout<<"piecset ";break; case '6':cout<<"szescset ";break; case '7':cout<<"siedemset ";break; case '8':cout<<"osiemset ";break; case '9':cout<<"dziewiecset ";break; }i--;} if (i==2){ switch (tab[1]){ case '1': switch(tab[2]){case '1':cout<<"jedenascie";break; case '2':cout<<"dwanascie";break; case '3':cout<<"trzynascie";break; case '4':cout<<"czternascie";break; case '5':cout<<"pietnascie";break; case '6':cout<<"szesnascie";break; case '7':cout<<"siedemnascie";break; case '8' : cout<<"osiemnascie";break; case '9':cout<<"dziewietnascie";break;}i-=2;break; case '2': cout<<"dwadziescia ";break; case '3': cout<<"trzydziesci ";break; case '4': cout<<"czterdziesci ";break; case '5': cout<<"piecdziesiat ";break; case '6': cout<<"szescdziesiat ";break; case '7': cout<<"siedemdziesiat ";break; case '8': cout<<"osiemdziesiat "; break; case '9': cout<<"dziewiecdziesiat ";break;}i--;} if (i==1){ switch(tab[2]){ case '1':cout<<"jeden ";break; case '2':cout<<"dwa ";break; case '3':cout<<"trzy ";break; case '4':cout<<"cztery ";break; case '5':cout<<"piec ";break; case '6':cout<<"szesc ";break; case '7':cout<<"siedem ";break; case '8':cout<<"osiem ";break; case '9':cout<<"dziewiec ";break;}} cout<<endl; system("PAUSE"); return EXIT_SUCCESS; } no i dla liczb trzy cyfrowych dziala ok ale jak bede chcial wpisac np 22 czyli po wpisaniu 2 i drugiego dwa wcisne zero to on wyswietlna ze jest to liczba dwadziescia. no i jest tak w analogicznych przypadkach. wie moze ktos gdzie tu jest blad. a moze ta metoda jest w ogole do bani z gory dzieki za pomoc |
#ads | |
CDRinfo.pl
Reklamowiec
Data rejestracji: 29.12.2008
Lokalizacja: Sieć globalna
Wiek: 31
Posty: 1227
|
|
28.11.2006, 18:03 | #2 |
Bywalec
Data rejestracji: 08.09.2006
Posty: 51
|
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 |
|
|