Powrót   Forum CDRinfo.pl > Różne > Off topic

Off topic Forum poświęcone wszelkim innym tematom.



Witaj Nieznajomy! Zaloguj się lub Zarejestruj

Zarejestrowani użytkownicy mają dostęp do dodatkowych opcji, lepszej wyszukiwarki oraz mniejszej ilości reklam. Rejestracja jest całkowicie darmowa!

Odpowiedz na post
 
Opcje związane z dyskusją Tryby wyświetlania
Stary 28.11.2006, 16:37   #1
misiek767
Bywalec
 
Avatar użytkownika misiek767
 
Data rejestracji: 29.04.2004
Posty: 37
misiek767 w tym momencie nie ma Reputacji dodatnich ani ujemnych <0  pkt>
[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
misiek767 jest offline   Odpowiedz cytując ten post

  #ads
CDRinfo.pl
Reklamowiec
 
 
 
Data rejestracji: 29.12.2008
Lokalizacja: Sieć globalna
Wiek: 31
Posty: 1227
 

CDRinfo.pl is online  
Stary 28.11.2006, 18:03   #2
msi
Bywalec
 
Avatar użytkownika msi
 
Data rejestracji: 08.09.2006
Posty: 51
msi zaczyna zdobywać reputację <1 - 49 pkt>
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
msi jest offline   Odpowiedz cytując ten post
Odpowiedz na post


Twoje uprawnienia:
Nie możesz rozpoczynać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz umieszczać załączników
Nie możesz edytować swoich postów

BB codeWłączone
EmotikonkiWłączone
Kody [IMG]Włączone
Kody HTML są Wyłączone

Teleport


Wszystkie czasy w strefie CET. Aktualna godzina: 10:15.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2024, vBulletin Solutions Inc.