Advertisement
Guest User

числа

a guest
Jun 3rd, 2014
267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.98 KB | None | 0 0
  1. // pppp.cpp: определяет точку входа для консольного приложения.
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <string.h>
  8. #include <math.h>
  9.  
  10. void towords( int numb, char *res, int rubKop )
  11. {
  12.     int osn[ 11 ] = { 0, 1, 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 };
  13.    
  14.     char *basis[11][10]={
  15.         { "","","","","","","","","",""},
  16.         { "","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
  17.         { "","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
  18.         { "","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
  19.         { "","одна","две","три","четыре","пять","шесть","семь","восемь","девять"},
  20.         { "","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
  21.         { "","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
  22.         { "","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
  23.         { "","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
  24.         { "","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
  25.         { "","один","два","три ","четыре","пять","шесть","семь","восемь","девять"}};
  26.    
  27.     //массив окончаний
  28.     char *termination[10][10]={
  29.         {"","","","тысяч","","","миллионов","","","миллиардов"},
  30.         {"","","","тысяча","","","миллион","","","миллиард"},
  31.         {"","","","тысячи","","","миллиона","","","миллиарда"},
  32.         {"","","","тысячи","","","миллиона","","","миллиарда"},
  33.         {"","","","тысячи","","","миллиона","","","миллиарда"},
  34.         {"","","","тысяч","","","миллионов","","","миллиардов"},
  35.         {"","","","тысяч","","","миллионов","","","миллиардов"},
  36.         {"","","","тысяч","","","миллионов","","","миллиардов"},
  37.         {"","","","тысяч","","","миллионов","","","миллиардов"},
  38.         {"","","","тысяч","","","миллионов","","","миллиардов"}};
  39.    
  40.     char *dec[ 10 ] = {"десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"};
  41.  
  42.     char *rubsKops[ 2 ][ 3 ] = {
  43.         { "рубль", "рубля", "рублей" },
  44.         { "копейка", "копейки", "копеек" } };
  45.    
  46.     int n1 = numb;
  47.     int cnt = 0;
  48.    
  49.     while ( numb )
  50.     {
  51.         numb /= 10;
  52.         ++cnt;
  53.     }
  54.    
  55.     char result[ 400 ] = {};
  56.     int celoe = 0, f = -1;
  57.    
  58.     while ( n1 )
  59.     {
  60.         if ( ! ( ( cnt + 1 ) % 3 ) )
  61.         {
  62.             if ( ( n1 / osn[ cnt ] ) == 1 )
  63.             {
  64.                 n1 %= osn[ cnt ];
  65.                 --cnt;
  66.                 celoe = n1 / osn[ cnt ];
  67.                 n1 %= osn[ cnt ];  
  68.                 strcat( result, dec[ celoe ] );
  69.                 --cnt;
  70.                 if ( !( cnt % 3 ) )
  71.                 {
  72.                     strcat( result, " " );
  73.                     strcat( result, termination[ 0 ][ cnt ] );
  74.                     strcat( result, " " );
  75.                 }
  76.                 if ( !cnt )
  77.                     f = celoe;
  78.             }
  79.             if ( !cnt )
  80.                 break;
  81.         }
  82.         celoe = n1 / osn[ cnt ];
  83.         n1 %= osn[ cnt ];
  84.         strcat( result, basis[ cnt ][ celoe ] );
  85.         --cnt;
  86.         strcat( result, " " );
  87.         if ( !( cnt % 3 ) )
  88.         {
  89.             strcat( result, termination[ celoe ][ cnt ] );
  90.             strcat( result, " " );
  91.         }
  92.     }
  93.  
  94.     result[ strlen( result ) - 1 ] = '\0';
  95.     strcat( result, " " );
  96.  
  97.     if ( celoe == 1 && f < 0 )
  98.     {
  99.         strcat( result, rubsKops[ rubKop ][ 0 ] );
  100.     }
  101.  
  102.     else if ( celoe >= 2 && celoe <= 4 )
  103.     {
  104.         strcat( result, rubsKops[ rubKop ][ 1 ] );
  105.     }
  106.     else
  107.     {
  108.         strcat( result, rubsKops[ rubKop ][ 2 ] );
  109.     }  
  110.    
  111.     strcpy( res, result );
  112. }
  113.  
  114. int isNumber( char *s, int *isFloat )
  115. {
  116.     int i, c = 0;
  117.  
  118.     while ( *s != '\0' && *s != '\n' )
  119.     {
  120.         if ( *s == '.' )
  121.             ++c;
  122.         else if ( ( *s ) < '0' || ( *s ) > '9' )
  123.             return 0;        
  124.         ++s;
  125.     }
  126.     if ( c == 1 )
  127.         *isFloat = 1;
  128.     return 1;
  129. }
  130.  
  131. void splitter( char *s, char *i, char *f )
  132. {
  133.     char *ptr = strtok( s, "." );
  134.     strcpy( i, ptr );
  135.     ptr = strtok( NULL, "." );
  136.     if ( ptr )
  137.         strcpy( f, ptr );
  138. }
  139.  
  140. void conversionString( char *str, char *newStr )
  141. {
  142.     char word[ 400 ], temp[ 400 ], ww[ 400 ], ff[ 400 ];
  143.     strcpy( newStr, "" );
  144.     char *pointer = strtok( str, " !?" );
  145.  
  146.     char arr[ 50 ][ 400 ];
  147.  
  148.     int i, n = 0;
  149.     while ( pointer )
  150.     {
  151.         strcpy( arr[ n++ ], pointer );
  152.         pointer = strtok( NULL, " ?!" );
  153.     }
  154.  
  155.     for( i = 0; i < n; ++i )
  156.     {      
  157.         int isFloat = 0;
  158.         if ( isNumber( arr[ i ], &isFloat ) )
  159.         {
  160.             if ( isFloat )
  161.             {                                
  162.                 splitter( arr[ i ], ww, ff );
  163.                 towords( atoi( ww ), word, 0 );
  164.                 strcat( newStr, " " );
  165.                 strcat( newStr, word );
  166.                 towords( atoi( ff ), word, 1 );            
  167.             }
  168.             else
  169.             {
  170.                 towords( atoi( arr[ i ] ), word, 0 );              
  171.             }
  172.             strcat( newStr, " " );
  173.             strcat( newStr, word );
  174.         }
  175.         else
  176.         {
  177.             strcat( newStr, " " );
  178.             strcat( newStr, arr[ i ] );
  179.         }
  180.     }
  181.     newStr[ strlen( newStr ) - 1 ] = '\0';
  182.     puts( newStr );
  183. }
  184.  
  185. void readFile( FILE *f )
  186. {
  187.     char str[ 400 ], newStr[ 400 ];
  188.     while ( !feof( f ) )
  189.     {
  190.         fgets( str, 400, f );        
  191.         if ( !feof( f ) )
  192.             conversionString( str, newStr );
  193.     }
  194. }
  195.  
  196. int main()
  197. {
  198.     FILE *input;
  199.    
  200.     if ( ( input = fopen( "input.txt", "r" ) ) != NULL )
  201.     {
  202.         readFile( input );
  203.         fclose( input );
  204.     }
  205.     else
  206.         printf( "File is not found!\n" );
  207.    
  208.     return 0;
  209. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement