Advertisement
Guest User

Untitled

a guest
Dec 15th, 2019
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.48 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <Windows.h>
  3. #include "NumToStr.h"
  4.  
  5. #define P_NAME 1
  6. #define P_ROD 2
  7. #define P_DAT 3
  8. #define P_VEN 4
  9. #define P_TVOR 5
  10. #define P_PRED 6
  11.  
  12. void Sklon(char* buff, int dig, int disc, int p)
  13. {
  14.     switch (disc)
  15.     {
  16.     case 3:
  17.         switch (p)
  18.         {
  19.         case 1: case 4:
  20.             if (dig == 1)
  21.                 strcat(buff, "миллиард ");
  22.             else if (dig == 2 || dig == 3 || dig == 4)
  23.                 strcat(buff, "миллиарда ");
  24.             else strcat(buff, "миллиардов ");
  25.             break;
  26.         case 2:
  27.             if (dig == 1)
  28.                 strcat(buff, "миллиарда ");
  29.             else strcat(buff, "миллиардов ");
  30.             break;
  31.         case 3:
  32.             if (dig == 1)
  33.                 strcat(buff, "миллиарду ");
  34.             else strcat(buff, "миллиардам ");
  35.             break;
  36.         case 5:
  37.             if (dig == 1)
  38.                 strcat(buff, "миллиардом ");
  39.             else strcat(buff, "миллиардами ");
  40.             break;
  41.         case 6:
  42.             if (dig == 1)
  43.                 strcat(buff, "миллиарде ");
  44.             else strcat(buff, "миллиардах ");
  45.             break;
  46.         }
  47.         break;
  48.     case 2:
  49.         switch (p)
  50.         {
  51.         case 1: case 4:
  52.             if (dig == 1)
  53.                 strcat(buff, "миллион ");
  54.             else if (dig == 2 || dig == 3 || dig == 4)
  55.                 strcat(buff, "миллиона ");
  56.             else strcat(buff, "миллионов ");
  57.             break;
  58.         case 2:
  59.             if (dig == 1)
  60.                 strcat(buff, "миллиона ");
  61.             else strcat(buff, "миллионов ");
  62.             break;
  63.         case 3:
  64.             if (dig == 1)
  65.                 strcat(buff, "миллиону ");
  66.             else strcat(buff, "миллионам ");
  67.             break;
  68.         case 5:
  69.             if (dig == 1)
  70.                 strcat(buff, "миллионом ");
  71.             else strcat(buff, "миллионами ");
  72.             break;
  73.         case 6:
  74.             if (dig == 1)
  75.                 strcat(buff, "миллионе ");
  76.             else strcat(buff, "миллионах ");
  77.             break;
  78.         }
  79.         break;
  80.     case 1:
  81.         switch (p)
  82.         {
  83.         case 1: case 4:
  84.             if (dig == 1)
  85.                 strcat(buff, "тысяча ");
  86.             else if (dig == 2 || dig == 3 || dig == 4)
  87.                 strcat(buff, "тысячи ");
  88.             else strcat(buff, "тысяч ");
  89.             break;
  90.         case 2:
  91.             if (dig == 1)
  92.                 strcat(buff, "тысячи ");
  93.             else strcat(buff, "тысяч ");
  94.             break;
  95.         case 3:
  96.             if (dig == 1)
  97.                 strcat(buff, "тысяче ");
  98.             else strcat(buff, "тысячам ");
  99.             break;
  100.         case 5:
  101.             if (dig == 1)
  102.                 strcat(buff, "тысячей ");
  103.             else strcat(buff, "тысячами ");
  104.             break;
  105.         case 6:
  106.             if (dig == 1)
  107.                 strcat(buff, "тысяче ");
  108.             else strcat(buff, "тысячах ");
  109.             break;
  110.         }
  111.         break;
  112.     }
  113. }
  114.  
  115. void Perevod(char* buff, int p, int dig, int disc)
  116. {
  117.     bool flag = false;
  118.     int n1 = dig % 10, n2 = (dig / 10) % 10, n3 = dig / 100;
  119.     switch (p)
  120.     {
  121.     case 1: case 4:
  122.         switch (n3)
  123.         {
  124.         case 1:
  125.             strcat(buff, "сто ");
  126.             break;
  127.         case 2:
  128.             strcat(buff, "двести ");
  129.             break;
  130.         case 3:
  131.             strcat(buff, "триста ");
  132.             break;
  133.         case 4:
  134.             strcat(buff, "четыреста ");
  135.             break;
  136.         case 5:
  137.             strcat(buff, "пятьсот ");
  138.             break;
  139.         case 6:
  140.             strcat(buff, "шестьсот ");
  141.             break;
  142.         case 7:
  143.             strcat(buff, "семьсот ");
  144.             break;
  145.         case 8:
  146.             strcat(buff, "восемьсот ");
  147.             break;
  148.         case 9:
  149.             strcat(buff, "девятьсот ");
  150.             break;
  151.         }
  152.         switch (n2)
  153.         {
  154.         case 1:
  155.             flag = true;
  156.             break;
  157.         case 2:
  158.             strcat(buff, "двадцать ");
  159.             break;
  160.         case 3:
  161.             strcat(buff, "тридцать ");
  162.             break;
  163.         case 4:
  164.             strcat(buff, "сорок ");
  165.             break;
  166.         case 5:
  167.             strcat(buff, "пятьдесят ");
  168.             break;
  169.         case 6:
  170.             strcat(buff, "шестьдесят ");
  171.             break;
  172.         case 7:
  173.             strcat(buff, "семьдесят ");
  174.             break;
  175.         case 8:
  176.             strcat(buff, "восемьдесят ");
  177.             break;
  178.         case 9:
  179.             strcat(buff, "девяносто ");
  180.             break;
  181.         }
  182.         switch (n1)
  183.         {
  184.         case 1:
  185.             if (flag) strcat(buff, "одинадцать ");
  186.             else if (disc == 1) strcat(buff, "одна ");
  187.             else strcat(buff, "один ");
  188.             break;
  189.         case 2:
  190.             if (flag) strcat(buff, "двенадцать ");
  191.             else if (disc == 1) strcat(buff, "две ");
  192.             else strcat(buff, "два ");
  193.             break;
  194.         case 3:
  195.             if (flag) strcat(buff, "тринадцать ");
  196.             else strcat(buff, "три ");
  197.             break;
  198.         case 4:
  199.             if (flag) strcat(buff, "четырнадцать ");
  200.             else strcat(buff, "четыре ");
  201.             break;
  202.         case 5:
  203.             if (flag) strcat(buff, "пятьнадцать ");
  204.             else strcat(buff, "пять ");
  205.             break;
  206.         case 6:
  207.             if (flag) strcat(buff, "шестьнадцать ");
  208.             else strcat(buff, "шесть ");
  209.             break;
  210.         case 7:
  211.             if (flag) strcat(buff, "семьнадцать ");
  212.             else strcat(buff, "семь ");
  213.             break;
  214.         case 8:
  215.             if (flag) strcat(buff, "восемнадцать ");
  216.             else strcat(buff, "восемь ");
  217.             break;
  218.         case 9:
  219.             if (flag) strcat(buff, "деятнадцать ");
  220.             else strcat(buff, "девять ");
  221.             break;
  222.         }
  223.         break;
  224.  
  225.     case 2:
  226.         switch (n3)
  227.         {
  228.         case 1:
  229.             strcat(buff, "ста ");
  230.             break;
  231.         case 2:
  232.             strcat(buff, "двухсот ");
  233.             break;
  234.         case 3:
  235.             strcat(buff, "трехсот ");
  236.             break;
  237.         case 4:
  238.             strcat(buff, "четырехсот ");
  239.             break;
  240.         case 5:
  241.             strcat(buff, "пятисот ");
  242.             break;
  243.         case 6:
  244.             strcat(buff, "шестисот ");
  245.             break;
  246.         case 7:
  247.             strcat(buff, "семисот ");
  248.             break;
  249.         case 8:
  250.             strcat(buff, "восьмисот ");
  251.             break;
  252.         case 9:
  253.             strcat(buff, "девятисот ");
  254.             break;
  255.         }
  256.         switch (n2)
  257.         {
  258.         case 1:
  259.             flag = true;
  260.             break;
  261.         case 2:
  262.             strcat(buff, "двадцати ");
  263.             break;
  264.         case 3:
  265.             strcat(buff, "тридцати ");
  266.             break;
  267.         case 4:
  268.             strcat(buff, "сорока ");
  269.             break;
  270.         case 5:
  271.             strcat(buff, "пятидесяти ");
  272.             break;
  273.         case 6:
  274.             strcat(buff, "шестидесяти ");
  275.             break;
  276.         case 7:
  277.             strcat(buff, "семидесяти ");
  278.             break;
  279.         case 8:
  280.             strcat(buff, "восьмидесяти ");
  281.             break;
  282.         case 9:
  283.             strcat(buff, "девяноста ");
  284.             break;
  285.         }
  286.         switch (n1)
  287.         {
  288.         case 1:
  289.             if (flag) strcat(buff, "одинадцати ");
  290.             else if (disc == 1) strcat(buff, "одной ");
  291.             else strcat(buff, "одного ");
  292.             break;
  293.         case 2:
  294.             if (flag) strcat(buff, "двенадцати ");
  295.             else strcat(buff, "двух ");
  296.             break;
  297.         case 3:
  298.             if (flag) strcat(buff, "тринадцати ");
  299.             else strcat(buff, "трех ");
  300.             break;
  301.         case 4:
  302.             if (flag) strcat(buff, "четырнадцати ");
  303.             else strcat(buff, "четырех ");
  304.             break;
  305.         case 5:
  306.             if (flag) strcat(buff, "пятьнадцати ");
  307.             else strcat(buff, "пяти ");
  308.             break;
  309.         case 6:
  310.             if (flag) strcat(buff, "шестьнадцати ");
  311.             else strcat(buff, "шести ");
  312.             break;
  313.         case 7:
  314.             if (flag) strcat(buff, "семьнадцати ");
  315.             else strcat(buff, "семи ");
  316.             break;
  317.         case 8:
  318.             if (flag) strcat(buff, "восемнадцати ");
  319.             else strcat(buff, "восьми ");
  320.             break;
  321.         case 9:
  322.             if (flag) strcat(buff, "девятнадцати ");
  323.             else strcat(buff, "девяти ");
  324.             break;
  325.         }
  326.         break;
  327.  
  328.     case 3:
  329.         switch (n3)
  330.         {
  331.         case 1:
  332.             strcat(buff, "ста ");
  333.             break;
  334.         case 2:
  335.             strcat(buff, "двумстам ");
  336.             break;
  337.         case 3:
  338.             strcat(buff, "тремстам ");
  339.             break;
  340.         case 4:
  341.             strcat(buff, "четыремстам ");
  342.             break;
  343.         case 5:
  344.             strcat(buff, "пятистам ");
  345.             break;
  346.         case 6:
  347.             strcat(buff, "шестистам ");
  348.             break;
  349.         case 7:
  350.             strcat(buff, "семистам ");
  351.             break;
  352.         case 8:
  353.             strcat(buff, "восьмистам ");
  354.             break;
  355.         case 9:
  356.             strcat(buff, "девятистам ");
  357.             break;
  358.         }
  359.         switch (n2)
  360.         {
  361.         case 1:
  362.             flag = true;
  363.             break;
  364.         case 2:
  365.             strcat(buff, "двадцати ");
  366.             break;
  367.         case 3:
  368.             strcat(buff, "тридцати ");
  369.             break;
  370.         case 4:
  371.             strcat(buff, "сорока ");
  372.             break;
  373.         case 5:
  374.             strcat(buff, "пятидесяти ");
  375.             break;
  376.         case 6:
  377.             strcat(buff, "шестидесяти ");
  378.             break;
  379.         case 7:
  380.             strcat(buff, "семидесяти ");
  381.             break;
  382.         case 8:
  383.             strcat(buff, "восьмидесяти ");
  384.             break;
  385.         case 9:
  386.             strcat(buff, "девяноста ");
  387.             break;
  388.         }
  389.         switch (n1)
  390.         {
  391.         case 1:
  392.             if (flag) strcat(buff, "одинадцати ");
  393.             else if (disc == 1) strcat(buff, "одной ");
  394.             else strcat(buff, "одному ");
  395.             break;
  396.         case 2:
  397.             if (flag) strcat(buff, "двенадцати ");
  398.             else strcat(buff, "двум ");
  399.             break;
  400.         case 3:
  401.             if (flag) strcat(buff, "тринадцати ");
  402.             else strcat(buff, "трем ");
  403.             break;
  404.         case 4:
  405.             if (flag) strcat(buff, "четырнадцати ");
  406.             else strcat(buff, "четырем ");
  407.             break;
  408.         case 5:
  409.             if (flag) strcat(buff, "пятьнадцати ");
  410.             else strcat(buff, "пяти ");
  411.             break;
  412.         case 6:
  413.             if (flag) strcat(buff, "шестьнадцати ");
  414.             else strcat(buff, "шести ");
  415.             break;
  416.         case 7:
  417.             if (flag) strcat(buff, "семьнадцати ");
  418.             else strcat(buff, "семи ");
  419.             break;
  420.         case 8:
  421.             if (flag) strcat(buff, "восемнадцати ");
  422.             else strcat(buff, "восьми ");
  423.             break;
  424.         case 9:
  425.             if (flag) strcat(buff, "девятнадцати ");
  426.             else strcat(buff, "девяти ");
  427.             break;
  428.         }
  429.         break;
  430.     case 5:
  431.         switch (n3)
  432.         {
  433.         case 1:
  434.             strcat(buff, "ста ");
  435.             break;
  436.         case 2:
  437.             strcat(buff, "двумястами ");
  438.             break;
  439.         case 3:
  440.             strcat(buff, "тремястами ");
  441.             break;
  442.         case 4:
  443.             strcat(buff, "четыремястами ");
  444.             break;
  445.         case 5:
  446.             strcat(buff, "пятьюстами ");
  447.             break;
  448.         case 6:
  449.             strcat(buff, "шестьюстами ");
  450.             break;
  451.         case 7:
  452.             strcat(buff, "семьюстами ");
  453.             break;
  454.         case 8:
  455.             strcat(buff, "восмьюстами ");
  456.             break;
  457.         case 9:
  458.             strcat(buff, "девятьюстами ");
  459.             break;
  460.         }
  461.         switch (n2)
  462.         {
  463.         case 1:
  464.             flag = true;
  465.             break;
  466.         case 2:
  467.             strcat(buff, "двадцатью ");
  468.             break;
  469.         case 3:
  470.             strcat(buff, "тридцатью ");
  471.             break;
  472.         case 4:
  473.             strcat(buff, "сорока ");
  474.             break;
  475.         case 5:
  476.             strcat(buff, "пятидесятью ");
  477.             break;
  478.         case 6:
  479.             strcat(buff, "шестидесятью ");
  480.             break;
  481.         case 7:
  482.             strcat(buff, "семидесятью ");
  483.             break;
  484.         case 8:
  485.             strcat(buff, "восьмидесятью ");
  486.             break;
  487.         case 9:
  488.             strcat(buff, "девяноста ");
  489.             break;
  490.         }
  491.         switch (n1)
  492.         {
  493.         case 1:
  494.             if (flag) strcat(buff, "одинадцатью ");
  495.             else if (disc == 1) strcat(buff, "одной ");
  496.             else strcat(buff, "одним ");
  497.             break;
  498.         case 2:
  499.             if (flag) strcat(buff, "двенадцатью ");
  500.             else strcat(buff, "двумя ");
  501.             break;
  502.         case 3:
  503.             if (flag) strcat(buff, "тринадцатью ");
  504.             else strcat(buff, "тремя ");
  505.             break;
  506.         case 4:
  507.             if (flag) strcat(buff, "четырнадцатью ");
  508.             else strcat(buff, "четырьмя ");
  509.             break;
  510.         case 5:
  511.             if (flag) strcat(buff, "пятьнадцатью ");
  512.             else strcat(buff, "пятью ");
  513.             break;
  514.         case 6:
  515.             if (flag) strcat(buff, "шестьнадцатью ");
  516.             else strcat(buff, "шестью ");
  517.             break;
  518.         case 7:
  519.             if (flag) strcat(buff, "семьнадцатью ");
  520.             else strcat(buff, "семью ");
  521.             break;
  522.         case 8:
  523.             if (flag) strcat(buff, "восемнадцатью ");
  524.             else strcat(buff, "восьмью ");
  525.             break;
  526.         case 9:
  527.             if (flag) strcat(buff, "девятнадцатью ");
  528.             else strcat(buff, "девятью ");
  529.             break;
  530.         }
  531.         break;
  532.     case 6:
  533.         switch (n3)
  534.         {
  535.         case 1:
  536.             strcat(buff, "ста ");
  537.             break;
  538.         case 2:
  539.             strcat(buff, "двухстах ");
  540.             break;
  541.         case 3:
  542.             strcat(buff, "трехстах ");
  543.             break;
  544.         case 4:
  545.             strcat(buff, "четырехстах ");
  546.             break;
  547.         case 5:
  548.             strcat(buff, "пятьюстах ");
  549.             break;
  550.         case 6:
  551.             strcat(buff, "шестьюстах ");
  552.             break;
  553.         case 7:
  554.             strcat(buff, "семьюстах ");
  555.             break;
  556.         case 8:
  557.             strcat(buff, "восмьюстах ");
  558.             break;
  559.         case 9:
  560.             strcat(buff, "девятьюстах ");
  561.             break;
  562.         }
  563.         switch (n2)
  564.         {
  565.         case 1:
  566.             flag = true;
  567.             break;
  568.         case 2:
  569.             strcat(buff, "двадцати ");
  570.             break;
  571.         case 3:
  572.             strcat(buff, "тридцати ");
  573.             break;
  574.         case 4:
  575.             strcat(buff, "сорока ");
  576.             break;
  577.         case 5:
  578.             strcat(buff, "пятидесяти ");
  579.             break;
  580.         case 6:
  581.             strcat(buff, "шестидесяти ");
  582.             break;
  583.         case 7:
  584.             strcat(buff, "семидесяти ");
  585.             break;
  586.         case 8:
  587.             strcat(buff, "восьмидесяти ");
  588.             break;
  589.         case 9:
  590.             strcat(buff, "девяноста ");
  591.             break;
  592.         }
  593.         switch (n1)
  594.         {
  595.         case 1:
  596.             if (flag) strcat(buff, "одинадцати ");
  597.             else strcat(buff, "одной ");
  598.             break;
  599.         case 2:
  600.             if (flag) strcat(buff, "двенадцати ");
  601.             else strcat(buff, "двух ");
  602.             break;
  603.         case 3:
  604.             if (flag) strcat(buff, "тринадцати ");
  605.             else strcat(buff, "трех ");
  606.             break;
  607.         case 4:
  608.             if (flag) strcat(buff, "четырнадцати ");
  609.             else strcat(buff, "четырех ");
  610.             break;
  611.         case 5:
  612.             if (flag) strcat(buff, "пятьнадцати ");
  613.             else strcat(buff, "пяти ");
  614.             break;
  615.         case 6:
  616.             if (flag) strcat(buff, "шестьнадцати ");
  617.             else strcat(buff, "шести ");
  618.             break;
  619.         case 7:
  620.             if (flag) strcat(buff, "семьнадцати ");
  621.             else strcat(buff, "семи ");
  622.             break;
  623.         case 8:
  624.             if (flag) strcat(buff, "восемнадцати ");
  625.             else strcat(buff, "восьми ");
  626.             break;
  627.         case 9:
  628.             if (flag) strcat(buff, "девятнадцати ");
  629.             else strcat(buff, "девяти ");
  630.             break;
  631.         }
  632.         break;
  633.     }
  634. }
  635.  
  636. void sReplace(char* dst, char* src, int startpos, int len);
  637. int GetPad(char c);
  638. void DecToCDec(char* buff, int dec, int pad);
  639. void ParseDec(FILE* file, unsigned int startPos);
  640. bool isdigitrus(char c);
  641.  
  642.  
  643. int GetPad(char c)
  644. {
  645.     switch (c)
  646.     {
  647.         case 'и':
  648.             return P_NAME;
  649.         case 'р':
  650.             return P_ROD;
  651.         case 'д':
  652.             return P_DAT;
  653.         case 'в':
  654.             return P_VEN;
  655.         case 'т':
  656.             return P_TVOR;
  657.         case 'п':
  658.             return P_PRED;
  659.  
  660.     }
  661. }
  662.  
  663. void DecToCDec(char* buff, int dec, int pad)
  664. {
  665.     int discharges[4];
  666.  
  667.     for (int i = 0; i < 4; i++)
  668.     {
  669.         discharges[i] = dec % 1000;
  670.         dec /= 1000;
  671.     }
  672.  
  673.     for (int i = 3; i >= 0; i--)
  674.     {
  675.         if (discharges[i] != 0)
  676.         {
  677.             Perevod(buff, pad, discharges[i], i);
  678.             int n1 = discharges[i] % 10;
  679.             Sklon(buff, n1, i, pad);
  680.  
  681.         }
  682.     }
  683. }
  684.  
  685. bool isdigitrus(char c)
  686. {
  687.     if (c < -1 || c > 255) return false;
  688.    
  689.     return isdigit(c);
  690. }
  691.  
  692. void ParseDec(FILE* file, unsigned int startPos)
  693. {
  694.     char pad;
  695.     int iPad;
  696.  
  697.     FILE* nFileHandle = fopen("output.txt", "w");
  698.  
  699.     char c;
  700.     char buff[2500] = { 0 };
  701.    
  702.     int decbuff_curPos = 0;
  703.     char decbuff_cStr[255] = { 0 };
  704.     //DECBUFF decBuff = { 0 };
  705.     while (fgets(buff, 2499, file) != NULL)
  706.     {
  707.         bool decFlag = false; int decLen = 0;
  708.         for (int i = 0; i < strlen(buff); i++)
  709.         {
  710.             if (isdigitrus(buff[i]) && !decFlag)
  711.             {
  712.                 decLen = i;
  713.                 decFlag = true;
  714.                 decbuff_cStr[decbuff_curPos++] = buff[i];
  715.             }
  716.             else if (decFlag)
  717.             {
  718.                 if (isdigitrus(buff[i]))
  719.                 {
  720.                     decbuff_cStr[decbuff_curPos++] = buff[i];
  721.                 }
  722.                 else
  723.                 {
  724.                     pad = buff[i + 1];
  725.                     iPad = GetPad(pad);
  726.                     char decStr[255] = { 0 };
  727.                     DecToCDec(decStr, atoi(decbuff_cStr), iPad);
  728.                     sReplace(buff, decStr, decLen, i - decLen);
  729.                     decbuff_curPos = 0; ZeroMemory(decbuff_cStr, 254);
  730.  
  731.                     decFlag = false;
  732.                 }
  733.             }
  734.         }
  735.         fputs(buff, nFileHandle);
  736.         fflush(nFileHandle);
  737.     }
  738.  
  739.     fclose(nFileHandle);
  740. }
  741.  
  742. void sReplace(char* dst, char* src, int startpos, int len)
  743. {
  744.     char* buff = new char[strlen(dst) + strlen(src) - (len-1)];
  745.     ZeroMemory(buff, strlen(dst) + strlen(src) - (len - 1));
  746.    
  747.     int i = 0; // , j = 0;
  748.  
  749.     for (; i < startpos; i++)
  750.         buff[i] = dst[i];
  751.  
  752.     for (int k = 0; i < startpos + strlen(src)-1; i++, k++)
  753.         buff[i] = src[k];
  754.  
  755.     for (int j = startpos+3+len; j < strlen(dst); j++, i++)
  756.         buff[i] = dst[j];
  757.  
  758.     strcpy(dst, buff);
  759.    
  760.     delete[] buff;
  761. }
  762.  
  763. int main()
  764. {
  765.     SetConsoleCP(1251);
  766.     SetConsoleOutputCP(1251);
  767.     unsigned long int n;  unsigned int p;
  768.  
  769.     FILE* fHandle = fopen("input.txt", "rt");
  770.     if (fHandle)
  771.     {
  772.         ParseDec(fHandle, 0);
  773.     }
  774.     else printf("Не удалось открыть файл\n");
  775.  
  776.     system("pause");
  777.     return 0;
  778. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement