Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <Windows.h>
- #include "NumToStr.h"
- #define P_NAME 1
- #define P_ROD 2
- #define P_DAT 3
- #define P_VEN 4
- #define P_TVOR 5
- #define P_PRED 6
- void Sklon(char* buff, int dig, int disc, int p)
- {
- switch (disc)
- {
- case 3:
- switch (p)
- {
- case 1: case 4:
- if (dig == 1)
- strcat(buff, "миллиард ");
- else if (dig == 2 || dig == 3 || dig == 4)
- strcat(buff, "миллиарда ");
- else strcat(buff, "миллиардов ");
- break;
- case 2:
- if (dig == 1)
- strcat(buff, "миллиарда ");
- else strcat(buff, "миллиардов ");
- break;
- case 3:
- if (dig == 1)
- strcat(buff, "миллиарду ");
- else strcat(buff, "миллиардам ");
- break;
- case 5:
- if (dig == 1)
- strcat(buff, "миллиардом ");
- else strcat(buff, "миллиардами ");
- break;
- case 6:
- if (dig == 1)
- strcat(buff, "миллиарде ");
- else strcat(buff, "миллиардах ");
- break;
- }
- break;
- case 2:
- switch (p)
- {
- case 1: case 4:
- if (dig == 1)
- strcat(buff, "миллион ");
- else if (dig == 2 || dig == 3 || dig == 4)
- strcat(buff, "миллиона ");
- else strcat(buff, "миллионов ");
- break;
- case 2:
- if (dig == 1)
- strcat(buff, "миллиона ");
- else strcat(buff, "миллионов ");
- break;
- case 3:
- if (dig == 1)
- strcat(buff, "миллиону ");
- else strcat(buff, "миллионам ");
- break;
- case 5:
- if (dig == 1)
- strcat(buff, "миллионом ");
- else strcat(buff, "миллионами ");
- break;
- case 6:
- if (dig == 1)
- strcat(buff, "миллионе ");
- else strcat(buff, "миллионах ");
- break;
- }
- break;
- case 1:
- switch (p)
- {
- case 1: case 4:
- if (dig == 1)
- strcat(buff, "тысяча ");
- else if (dig == 2 || dig == 3 || dig == 4)
- strcat(buff, "тысячи ");
- else strcat(buff, "тысяч ");
- break;
- case 2:
- if (dig == 1)
- strcat(buff, "тысячи ");
- else strcat(buff, "тысяч ");
- break;
- case 3:
- if (dig == 1)
- strcat(buff, "тысяче ");
- else strcat(buff, "тысячам ");
- break;
- case 5:
- if (dig == 1)
- strcat(buff, "тысячей ");
- else strcat(buff, "тысячами ");
- break;
- case 6:
- if (dig == 1)
- strcat(buff, "тысяче ");
- else strcat(buff, "тысячах ");
- break;
- }
- break;
- }
- }
- void Perevod(char* buff, int p, int dig, int disc)
- {
- bool flag = false;
- int n1 = dig % 10, n2 = (dig / 10) % 10, n3 = dig / 100;
- switch (p)
- {
- case 1: case 4:
- switch (n3)
- {
- case 1:
- strcat(buff, "сто ");
- break;
- case 2:
- strcat(buff, "двести ");
- break;
- case 3:
- strcat(buff, "триста ");
- break;
- case 4:
- strcat(buff, "четыреста ");
- break;
- case 5:
- strcat(buff, "пятьсот ");
- break;
- case 6:
- strcat(buff, "шестьсот ");
- break;
- case 7:
- strcat(buff, "семьсот ");
- break;
- case 8:
- strcat(buff, "восемьсот ");
- break;
- case 9:
- strcat(buff, "девятьсот ");
- break;
- }
- switch (n2)
- {
- case 1:
- flag = true;
- break;
- case 2:
- strcat(buff, "двадцать ");
- break;
- case 3:
- strcat(buff, "тридцать ");
- break;
- case 4:
- strcat(buff, "сорок ");
- break;
- case 5:
- strcat(buff, "пятьдесят ");
- break;
- case 6:
- strcat(buff, "шестьдесят ");
- break;
- case 7:
- strcat(buff, "семьдесят ");
- break;
- case 8:
- strcat(buff, "восемьдесят ");
- break;
- case 9:
- strcat(buff, "девяносто ");
- break;
- }
- switch (n1)
- {
- case 1:
- if (flag) strcat(buff, "одинадцать ");
- else if (disc == 1) strcat(buff, "одна ");
- else strcat(buff, "один ");
- break;
- case 2:
- if (flag) strcat(buff, "двенадцать ");
- else if (disc == 1) strcat(buff, "две ");
- else strcat(buff, "два ");
- break;
- case 3:
- if (flag) strcat(buff, "тринадцать ");
- else strcat(buff, "три ");
- break;
- case 4:
- if (flag) strcat(buff, "четырнадцать ");
- else strcat(buff, "четыре ");
- break;
- case 5:
- if (flag) strcat(buff, "пятьнадцать ");
- else strcat(buff, "пять ");
- break;
- case 6:
- if (flag) strcat(buff, "шестьнадцать ");
- else strcat(buff, "шесть ");
- break;
- case 7:
- if (flag) strcat(buff, "семьнадцать ");
- else strcat(buff, "семь ");
- break;
- case 8:
- if (flag) strcat(buff, "восемнадцать ");
- else strcat(buff, "восемь ");
- break;
- case 9:
- if (flag) strcat(buff, "деятнадцать ");
- else strcat(buff, "девять ");
- break;
- }
- break;
- case 2:
- switch (n3)
- {
- case 1:
- strcat(buff, "ста ");
- break;
- case 2:
- strcat(buff, "двухсот ");
- break;
- case 3:
- strcat(buff, "трехсот ");
- break;
- case 4:
- strcat(buff, "четырехсот ");
- break;
- case 5:
- strcat(buff, "пятисот ");
- break;
- case 6:
- strcat(buff, "шестисот ");
- break;
- case 7:
- strcat(buff, "семисот ");
- break;
- case 8:
- strcat(buff, "восьмисот ");
- break;
- case 9:
- strcat(buff, "девятисот ");
- break;
- }
- switch (n2)
- {
- case 1:
- flag = true;
- break;
- case 2:
- strcat(buff, "двадцати ");
- break;
- case 3:
- strcat(buff, "тридцати ");
- break;
- case 4:
- strcat(buff, "сорока ");
- break;
- case 5:
- strcat(buff, "пятидесяти ");
- break;
- case 6:
- strcat(buff, "шестидесяти ");
- break;
- case 7:
- strcat(buff, "семидесяти ");
- break;
- case 8:
- strcat(buff, "восьмидесяти ");
- break;
- case 9:
- strcat(buff, "девяноста ");
- break;
- }
- switch (n1)
- {
- case 1:
- if (flag) strcat(buff, "одинадцати ");
- else if (disc == 1) strcat(buff, "одной ");
- else strcat(buff, "одного ");
- break;
- case 2:
- if (flag) strcat(buff, "двенадцати ");
- else strcat(buff, "двух ");
- break;
- case 3:
- if (flag) strcat(buff, "тринадцати ");
- else strcat(buff, "трех ");
- break;
- case 4:
- if (flag) strcat(buff, "четырнадцати ");
- else strcat(buff, "четырех ");
- break;
- case 5:
- if (flag) strcat(buff, "пятьнадцати ");
- else strcat(buff, "пяти ");
- break;
- case 6:
- if (flag) strcat(buff, "шестьнадцати ");
- else strcat(buff, "шести ");
- break;
- case 7:
- if (flag) strcat(buff, "семьнадцати ");
- else strcat(buff, "семи ");
- break;
- case 8:
- if (flag) strcat(buff, "восемнадцати ");
- else strcat(buff, "восьми ");
- break;
- case 9:
- if (flag) strcat(buff, "девятнадцати ");
- else strcat(buff, "девяти ");
- break;
- }
- break;
- case 3:
- switch (n3)
- {
- case 1:
- strcat(buff, "ста ");
- break;
- case 2:
- strcat(buff, "двумстам ");
- break;
- case 3:
- strcat(buff, "тремстам ");
- break;
- case 4:
- strcat(buff, "четыремстам ");
- break;
- case 5:
- strcat(buff, "пятистам ");
- break;
- case 6:
- strcat(buff, "шестистам ");
- break;
- case 7:
- strcat(buff, "семистам ");
- break;
- case 8:
- strcat(buff, "восьмистам ");
- break;
- case 9:
- strcat(buff, "девятистам ");
- break;
- }
- switch (n2)
- {
- case 1:
- flag = true;
- break;
- case 2:
- strcat(buff, "двадцати ");
- break;
- case 3:
- strcat(buff, "тридцати ");
- break;
- case 4:
- strcat(buff, "сорока ");
- break;
- case 5:
- strcat(buff, "пятидесяти ");
- break;
- case 6:
- strcat(buff, "шестидесяти ");
- break;
- case 7:
- strcat(buff, "семидесяти ");
- break;
- case 8:
- strcat(buff, "восьмидесяти ");
- break;
- case 9:
- strcat(buff, "девяноста ");
- break;
- }
- switch (n1)
- {
- case 1:
- if (flag) strcat(buff, "одинадцати ");
- else if (disc == 1) strcat(buff, "одной ");
- else strcat(buff, "одному ");
- break;
- case 2:
- if (flag) strcat(buff, "двенадцати ");
- else strcat(buff, "двум ");
- break;
- case 3:
- if (flag) strcat(buff, "тринадцати ");
- else strcat(buff, "трем ");
- break;
- case 4:
- if (flag) strcat(buff, "четырнадцати ");
- else strcat(buff, "четырем ");
- break;
- case 5:
- if (flag) strcat(buff, "пятьнадцати ");
- else strcat(buff, "пяти ");
- break;
- case 6:
- if (flag) strcat(buff, "шестьнадцати ");
- else strcat(buff, "шести ");
- break;
- case 7:
- if (flag) strcat(buff, "семьнадцати ");
- else strcat(buff, "семи ");
- break;
- case 8:
- if (flag) strcat(buff, "восемнадцати ");
- else strcat(buff, "восьми ");
- break;
- case 9:
- if (flag) strcat(buff, "девятнадцати ");
- else strcat(buff, "девяти ");
- break;
- }
- break;
- case 5:
- switch (n3)
- {
- case 1:
- strcat(buff, "ста ");
- break;
- case 2:
- strcat(buff, "двумястами ");
- break;
- case 3:
- strcat(buff, "тремястами ");
- break;
- case 4:
- strcat(buff, "четыремястами ");
- break;
- case 5:
- strcat(buff, "пятьюстами ");
- break;
- case 6:
- strcat(buff, "шестьюстами ");
- break;
- case 7:
- strcat(buff, "семьюстами ");
- break;
- case 8:
- strcat(buff, "восмьюстами ");
- break;
- case 9:
- strcat(buff, "девятьюстами ");
- break;
- }
- switch (n2)
- {
- case 1:
- flag = true;
- break;
- case 2:
- strcat(buff, "двадцатью ");
- break;
- case 3:
- strcat(buff, "тридцатью ");
- break;
- case 4:
- strcat(buff, "сорока ");
- break;
- case 5:
- strcat(buff, "пятидесятью ");
- break;
- case 6:
- strcat(buff, "шестидесятью ");
- break;
- case 7:
- strcat(buff, "семидесятью ");
- break;
- case 8:
- strcat(buff, "восьмидесятью ");
- break;
- case 9:
- strcat(buff, "девяноста ");
- break;
- }
- switch (n1)
- {
- case 1:
- if (flag) strcat(buff, "одинадцатью ");
- else if (disc == 1) strcat(buff, "одной ");
- else strcat(buff, "одним ");
- break;
- case 2:
- if (flag) strcat(buff, "двенадцатью ");
- else strcat(buff, "двумя ");
- break;
- case 3:
- if (flag) strcat(buff, "тринадцатью ");
- else strcat(buff, "тремя ");
- break;
- case 4:
- if (flag) strcat(buff, "четырнадцатью ");
- else strcat(buff, "четырьмя ");
- break;
- case 5:
- if (flag) strcat(buff, "пятьнадцатью ");
- else strcat(buff, "пятью ");
- break;
- case 6:
- if (flag) strcat(buff, "шестьнадцатью ");
- else strcat(buff, "шестью ");
- break;
- case 7:
- if (flag) strcat(buff, "семьнадцатью ");
- else strcat(buff, "семью ");
- break;
- case 8:
- if (flag) strcat(buff, "восемнадцатью ");
- else strcat(buff, "восьмью ");
- break;
- case 9:
- if (flag) strcat(buff, "девятнадцатью ");
- else strcat(buff, "девятью ");
- break;
- }
- break;
- case 6:
- switch (n3)
- {
- case 1:
- strcat(buff, "ста ");
- break;
- case 2:
- strcat(buff, "двухстах ");
- break;
- case 3:
- strcat(buff, "трехстах ");
- break;
- case 4:
- strcat(buff, "четырехстах ");
- break;
- case 5:
- strcat(buff, "пятьюстах ");
- break;
- case 6:
- strcat(buff, "шестьюстах ");
- break;
- case 7:
- strcat(buff, "семьюстах ");
- break;
- case 8:
- strcat(buff, "восмьюстах ");
- break;
- case 9:
- strcat(buff, "девятьюстах ");
- break;
- }
- switch (n2)
- {
- case 1:
- flag = true;
- break;
- case 2:
- strcat(buff, "двадцати ");
- break;
- case 3:
- strcat(buff, "тридцати ");
- break;
- case 4:
- strcat(buff, "сорока ");
- break;
- case 5:
- strcat(buff, "пятидесяти ");
- break;
- case 6:
- strcat(buff, "шестидесяти ");
- break;
- case 7:
- strcat(buff, "семидесяти ");
- break;
- case 8:
- strcat(buff, "восьмидесяти ");
- break;
- case 9:
- strcat(buff, "девяноста ");
- break;
- }
- switch (n1)
- {
- case 1:
- if (flag) strcat(buff, "одинадцати ");
- else strcat(buff, "одной ");
- break;
- case 2:
- if (flag) strcat(buff, "двенадцати ");
- else strcat(buff, "двух ");
- break;
- case 3:
- if (flag) strcat(buff, "тринадцати ");
- else strcat(buff, "трех ");
- break;
- case 4:
- if (flag) strcat(buff, "четырнадцати ");
- else strcat(buff, "четырех ");
- break;
- case 5:
- if (flag) strcat(buff, "пятьнадцати ");
- else strcat(buff, "пяти ");
- break;
- case 6:
- if (flag) strcat(buff, "шестьнадцати ");
- else strcat(buff, "шести ");
- break;
- case 7:
- if (flag) strcat(buff, "семьнадцати ");
- else strcat(buff, "семи ");
- break;
- case 8:
- if (flag) strcat(buff, "восемнадцати ");
- else strcat(buff, "восьми ");
- break;
- case 9:
- if (flag) strcat(buff, "девятнадцати ");
- else strcat(buff, "девяти ");
- break;
- }
- break;
- }
- }
- void sReplace(char* dst, char* src, int startpos, int len);
- int GetPad(char c);
- void DecToCDec(char* buff, int dec, int pad);
- void ParseDec(FILE* file, unsigned int startPos);
- bool isdigitrus(char c);
- int GetPad(char c)
- {
- switch (c)
- {
- case 'и':
- return P_NAME;
- case 'р':
- return P_ROD;
- case 'д':
- return P_DAT;
- case 'в':
- return P_VEN;
- case 'т':
- return P_TVOR;
- case 'п':
- return P_PRED;
- }
- }
- void DecToCDec(char* buff, int dec, int pad)
- {
- int discharges[4];
- for (int i = 0; i < 4; i++)
- {
- discharges[i] = dec % 1000;
- dec /= 1000;
- }
- for (int i = 3; i >= 0; i--)
- {
- if (discharges[i] != 0)
- {
- Perevod(buff, pad, discharges[i], i);
- int n1 = discharges[i] % 10;
- Sklon(buff, n1, i, pad);
- }
- }
- }
- bool isdigitrus(char c)
- {
- if (c < -1 || c > 255) return false;
- return isdigit(c);
- }
- void ParseDec(FILE* file, unsigned int startPos)
- {
- char pad;
- int iPad;
- FILE* nFileHandle = fopen("output.txt", "w");
- char c;
- char buff[2500] = { 0 };
- int decbuff_curPos = 0;
- char decbuff_cStr[255] = { 0 };
- //DECBUFF decBuff = { 0 };
- while (fgets(buff, 2499, file) != NULL)
- {
- bool decFlag = false; int decLen = 0;
- for (int i = 0; i < strlen(buff); i++)
- {
- if (isdigitrus(buff[i]) && !decFlag)
- {
- decLen = i;
- decFlag = true;
- decbuff_cStr[decbuff_curPos++] = buff[i];
- }
- else if (decFlag)
- {
- if (isdigitrus(buff[i]))
- {
- decbuff_cStr[decbuff_curPos++] = buff[i];
- }
- else
- {
- pad = buff[i + 1];
- iPad = GetPad(pad);
- char decStr[255] = { 0 };
- DecToCDec(decStr, atoi(decbuff_cStr), iPad);
- sReplace(buff, decStr, decLen, i - decLen);
- decbuff_curPos = 0; ZeroMemory(decbuff_cStr, 254);
- decFlag = false;
- }
- }
- }
- fputs(buff, nFileHandle);
- fflush(nFileHandle);
- }
- fclose(nFileHandle);
- }
- void sReplace(char* dst, char* src, int startpos, int len)
- {
- char* buff = new char[strlen(dst) + strlen(src) - (len-1)];
- ZeroMemory(buff, strlen(dst) + strlen(src) - (len - 1));
- int i = 0; // , j = 0;
- for (; i < startpos; i++)
- buff[i] = dst[i];
- for (int k = 0; i < startpos + strlen(src)-1; i++, k++)
- buff[i] = src[k];
- for (int j = startpos+3+len; j < strlen(dst); j++, i++)
- buff[i] = dst[j];
- strcpy(dst, buff);
- delete[] buff;
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- unsigned long int n; unsigned int p;
- FILE* fHandle = fopen("input.txt", "rt");
- if (fHandle)
- {
- ParseDec(fHandle, 0);
- }
- else printf("Не удалось открыть файл\n");
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement