/*float to text (c) Paweł Marciniak 11.03.98*/ /*algorytm (c) Paweł Marciniak */ /*poprawienie błędów 7.05.98*/ /*Funkcja zamienia liczbę typu double na reprezentacje słowną*/ /*liczba musi być z przedziału 0 do 999999999.99*/ #include void ftotext( double f ) { char *setki[10]={"","sto","dwieście","trzysta","czterysta","pięćset","sześćset","siedemset","osiemset","dziewięćset"}; char *dziesiatki[10]={"","","dwadzieścia","trzydzieści","czterdzieści","pięćdziesiąt","sześćdziesiąt","siedemdziesiąt","osiemdziesiąt","dziewięćdziesiąt"}; char *nastki[10]={"dziesięć","jedenaście","dwanaście","trzynaście","czternaście","piętnaście","szesnaście","siedemnaście","osiemnaście","dziewiętnaście"}; char *jedynki[10]={"","jeden","dwa","trzy","cztery","pięć","sześć","siedem","osiem","dziewięć"}; char *jednostki0[]={ "milion","tysiąc","złoty","grosz" }; char *jednostki1[]={ "miliony","tysiące","złote","grosze" }; char *jednostki2[]={ "milionów","tysięcy","złotych","groszy" }; char i; char liczba[13]; /*liczba f w postaci ciągu znaków ASCII*/ char tab[3]; sprintf( liczba, "%012.2f", f ); /*start konwersji - 4 przebiegi dla milionów, tysięcy*/ /* setek złotych i groszy*/ for( i=0; i<4; i++ ) { /*wpisujemy trzy kolejne liczby do tablicy tab*/ tab[0]=liczba[0+i*3]=='.' ? 0 : liczba[0+i*3]-'0'; tab[1]=liczba[1+i*3]-'0'; tab[2]=liczba[2+i*3]-'0'; /*zamieniamy liczbę w tablicy tab na tekst...*/ if( tab[0] ) printf("%s ",setki[tab[0]]); if( tab[1]!=1 ) { if( tab[1] ) printf("%s ",dziesiatki[tab[1]]); if( tab[2] ) printf("%s ",jedynki[tab[2]]); } else printf("%s ",nastki[tab[2]]); /*Błąd 1 przed printf było*/ /*if( tab[2] ) co powodowało,*/ /* że jeżeli występowała 10 np.*/ /* 210.00 to program wypisywał*/ /*tylko słowo "dwieście" a nie*/ /*"dwieście dziesięć"*/ /*i jeśli jest różna od zera wypisujemy jednostkę*/ if( tab[0] || tab[1] || tab[2] ) { /*jeśli liczba równa jeden*/ if( tab[0]==0 && tab[1]==0 && tab[2]==1 ) printf("%s ",jednostki0[i]); else /*jeśli ostatnia trzecia liczba w tablicy tab*/ /*jest z przedziału od 2 do 4 a druga liczba w*/ /*tablicy jest różna od jednego*/ if( tab[1]!=1 && tab[2]<=4 && tab[2]>1 ) /*Błąd 2 zamiast tab[2]>1*/ /*było tab[2]>=1 co powodowało*/ /*złe wypisywanie jednostki dla*/ /*liczb kończących się na 1 oprócz*/ /* cyfry 1 np 21, 51 zamiast np*/ /*"złotych" było "złote"*/ printf("%s ",jednostki1[i]); else /*pozostałe przypadki*/ printf("%s ",jednostki2[i]); /*printf("\n");*/ } } printf("\n"); } main() { double f=2345.24; /*liczba do zamiany na tekst*/ ftotext( f ); }