Oto kolejne moje dzieło.
Tutaj postanowiłem zamiast wyświetlać liczby wprowadzone wyświetlić ich reprezentację
tekstową uwzględniając polskie litery.
Za komentarze w kodzie oczywiście z góry przepraszam.
No i jak może być ?
Dzieki wielkie.
Pozdrawiam.
Kod: Zaznacz cały
#include <iostream>
#include<string>
using namespace std;
//------------------------------------------------------------------------------
string ostr(char* Tablica)
{
//------konwersja na polskie znaki-------------
const int znaki[18]= {165,164,134,143,169,168,136,157,228,227,
162,224,152,151,171,141,190,189};
const char* const polskie = "ąĄćĆęĘłŁńŃóÓśŚźŹżŻ";
int d = strlen(Tablica);
int dx = (sizeof(znaki) / sizeof(int));
string data;
for(int s = 0;s<d;++s)
{
if(Tablica[s]> 0)data += Tablica[s];
for(int a = 0;a < dx;++a)
if(Tablica[s] == polskie[a])
data+=znaki[a];
}
return data;
}
//------konwersja na polskie znaki-koniec-
//dwie małe funkcja ,więc niech będa inline
inline string wyswietl(char** dane,char* tab,int index)
{
string sa = ostr(dane[(tab[index]- '0')]);
return sa;
}
inline string wyswietl(char** dane2,int Reszta)
{
//dla liczby 12
//ostr(dane2[12-10])
//przekaże do funkcji ostr tablice nascie[2],
//czyli tekst "dwanaście"
//zmienna sa2 = "dwanaście"
string sa2 = ostr(dane2[Reszta - 10]);
return sa2;
}
//-------------------------------------------------------
int main()
{
char* tysiace[10]={
"",
"tysiąc ","dwa tysiące ","trzy tysiące ","cztery tysiące ","pieć tysięcy ",
"sześć tysięcy ","siedem tysięcy ","osiem tysięcy ","dziewięć tysięcy "
};
char* setki[10]={
"",
"sto ","dwieście ","trzysta ","czterysta ","pięćset ",
"sześcset ","siedemset ","osiemset ","dziewięćset "
};
char* dziesiatki[10]={
"",
"dziesięć ","dwadzieścia ","trzydzieści ","czterdzieści ","piećdziesiąt ",
"sześcdziesiąt ","siedemdziesiąt ","osiemdziesiąt ","dziewięćdziesiąt "
};
char* nascie[10]={
"","jedenaście","dwanaście","trzynaście","czternaście","piętnaście",
"szesnaście","siedemnaście","osiemnaście","dziewiętnaście"
};
char* jednostki[10]={
"","jeden","dwa","trzy","cztery","pięć",
"sześć","siedem","osiem","dziewięć"
};
cout<<"podaj liczbe-max 4 cyfry :";
char liczba[5];
char* wsk = &liczba[0];
cin.getline(liczba,5);
//W tablicy coś innego niż cyfra to "skróć" tablicę
while(*wsk)
{
if(*wsk > '9' || *wsk < '0')
*wsk = '\0';
++wsk;
}
int len_ = strlen(liczba);//Ile cyfr w tablicy?
int reszta = (atoi(liczba) % 100);//potrzebne dla
//liczb 11-19
switch(len_)
{
case 1:cout<<wyswietl(jednostki,liczba,0);//liczby 1-9
if(liczba[0] == '0')cout<<"zero\n";break;//liczba 0
case 2:
if(liczba[len_-2] == '1' && liczba[len_-1] != '0')
cout<<wyswietl(nascie,reszta);//liczby 11-19
else
{
cout<<wyswietl(dziesiatki,liczba,0);//liczby 10-90
cout<<wyswietl(jednostki,liczba,1);//liczby 1-9
}
;break;
case 3:
//**dla liczby 138*****
//**przekazywana jest tablica setki i
//**zawartosc tablicy liczba o indeksie 0,czyli '1'
cout<<wyswietl(setki,liczba,0);//liczby 100-900
//^^dla liczb 11-19 przekazywana jest tablica nascie
//^^i reszta z dzielenia(podstawa 100) z wprowadzonej liczby
//^^tylko wtedy gdy liczba[0] = '1' i liczba[1] nie równa
//^^się '0'
if(liczba[len_-2] == '1' && liczba[len_-1] != '0')
cout<<wyswietl(nascie,reszta);
else
{
//**przekazywana jest tablica dziesiatki i
//**zawartosc tablicy liczba o indeksie 1,czyli '3'
cout<<wyswietl(dziesiatki,liczba,1);//liczby 10-90
//**przekazywana jest tablica jednostki i
//**zawartosc tablicy liczba o indeksie 2,czyli '8'
cout<<wyswietl(jednostki,liczba,2);//liczby 1-9
};break;
case 4:cout<<wyswietl(tysiace,liczba,0);//liczby 1000-9000
cout<<wyswietl(setki,liczba,1);//liczby 100-900
if(liczba[len_-2] == '1' && liczba[len_-1] != '0')
cout<<wyswietl(nascie,reszta);//liczby 11-19
else
{
cout<<wyswietl(dziesiatki,liczba,2);//liczby 10-90
cout<<wyswietl(jednostki,liczba,3);//liczby 1-9
}
}
cin.get();
return 0;
}Chyba za duże tablice zrobiłem -na 11 elementów ,a jest w każdej po 10 elementów .
Zbędne przecinki w dwóch tablicach -"nascie" i "jednostki".
Zmieniłem to.