Данная программа принимает числа (до 6 знаков) в цифровом виде и переводит их в текстовый вид. Не написан обработчик чисел типа Х00ХХХ (если два вторых знака или второй или третий знаки равны 0) - будет выдавать ошибку. Писать не буду - не хочу. Кому надо - сложного ничего нет.
Собственно текст.
//#include <QCoreApplication> #include <stdlib.h> #include <stdio.h> #include <string.h> char printing (const char*[], const unsigned int); unsigned int counting(const char*[], float wLsum); int main() { const char * number[] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven",/*10*/ "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen", "twenty"/*19*/, "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety", "hundred", "thousand",/*28*/ "/n"};//30 //int size = 27; char sum[10]; fgets (sum, 10, stdin); if (ferror(stdin)) //ОБРАБОТЧИК ОШИБОК { printf("File error\n"); } printf("%s\n", sum); //printing(number, size); float lsum = atof(sum); //printf("%f\n", lsum); counting(number, lsum); //printf("%d\n", counting(lsum, )); } unsigned int counting(const char *wNumber[], float wLsum) { void *if2(const char *wwNumber[], const float wNum); void *if3(const char *wwNumber[], const float wNum); void *if4(const char *wwNumber[], const float wNum); void *if5(const char *wwNumber[], const float wNum); void *if6(const char *wwNumber[], const float wNum); int num = wLsum; int counter = 0;//количество знаков до запятой while (wLsum >= 1)//блок считает количество знаков до запятой //РАБОТАЕТ ПРАВИЛЬНО!!!!!!!!!!!!!!!!! { wLsum /= 10; counter++; } if (num == 0) { printf("zero\n"); } //printf("%d\n", counter); while (counter > 0) { if (counter == 6) { if6(wNumber, num); counter--; num = num - (int(num / 100000) * 100000); } if (counter == 5) { if5(wNumber, num); if (int (num/10000) == 1) { counter -= 2; num -= (int(num / 10000) * 10000); num -=(int(num / 1000) * 1000); } else { counter--; num = num - (int(num / 10000) * 10000); } } if (counter == 4) { if4(wNumber, num); num = num - (int(num / 1000) * 1000); counter--; } if (counter == 3) { if3(wNumber, num); num = num - (int(num / 100) * 100); counter--; } if (counter == 2 || counter == 1) { if2(wNumber, num); break; } } return counter; } //ЕСЛИ 6 ---- ФУНКЦИЯ ОБРАБАТЫВАЕТ И ПЕЧАТАЕТ 6-ЗНАЧНЫЕ ЧИСЛА void *if6(const char *wwNumber[], const float wNum) { float num = wNum; switch (int (num / 100000)) { case 1: printf("%s %s ", wwNumber[0], wwNumber[27]); break; case 2: printf("%s %s ", wwNumber[1], wwNumber[27]); break; case 3: printf("%s %s ", wwNumber[2], wwNumber[27]); break; case 4: printf("%s %s ", wwNumber[3], wwNumber[27]); break; case 5: printf("%s %s ", wwNumber[4], wwNumber[27]); break; case 6: printf("%s %s ", wwNumber[5], wwNumber[27]); break; case 7: printf("%s %s ", wwNumber[6], wwNumber[27]); break; case 8: printf("%s %s ", wwNumber[7], wwNumber[27]); break; case 9: printf("%s %s ", wwNumber[8], wwNumber[27]); break; default: printf("Error6\n"); break; } } //ЕСЛИ 5 ---- ФУНКЦИЯ ОБРАБАТЫВАЕТ И ПЕЧАТАЕТ 5-ЗНАЧНЫЕ ЧИСЛА void *if5(const char *wwNumber[], const float wNum) { float num = wNum; switch (int (num / 10000)) { case 1://НАДО СДЕЛАТЬ ОБРАБОТЧИК ЧИСЕЛ ОТ 10 ДО 19 switch(int (num / 1000)) { case 10: printf("%s %s ", wwNumber[9], wwNumber[28]); break; case 11: printf("%s %s ", wwNumber[10], wwNumber[28]); break; case 12: printf("%s %s ", wwNumber[11], wwNumber[28]); break; case 13: printf("%s %s ", wwNumber[12], wwNumber[28]); break; case 14: printf("%s %s ", wwNumber[13], wwNumber[28]); break; case 15: printf("%s %s ", wwNumber[14], wwNumber[28]); break; case 16: printf("%s %s ", wwNumber[15], wwNumber[28]); break; case 17: printf("%s %s ", wwNumber[16], wwNumber[28]); break; case 18: printf("%s %s ", wwNumber[17], wwNumber[28]); break; case 19: printf("%s %s ", wwNumber[18], wwNumber[28]); break; default: printf("Error51\n"); break; } break; case 2: printf("%s ", wwNumber[19]); break; case 3: printf("%s ", wwNumber[20]); break; case 4: printf("%s ", wwNumber[21]); break; case 5: printf("%s ", wwNumber[22]); break; case 6: printf("%s ", wwNumber[23]); break; case 7: printf("%s ", wwNumber[24]); break; case 8: printf("%s ", wwNumber[25]); break; case 9: printf("%s ", wwNumber[26]); break; default: printf("Error5\n"); break; } } //ЕСЛИ 4 ---- ФУНКЦИЯ ОБРАБАТЫВАЕТ И ПЕЧАТАЕТ 4-ЗНАЧНЫЕ ЧИСЛА void *if4(const char *wwNumber[], const float wNum) { float num = wNum; switch (int (num / 1000)) { case 1: printf("%s %s ", wwNumber[0], wwNumber[28]); break; case 2: printf("%s %s ", wwNumber[1], wwNumber[28]); break; case 3: printf("%s %s ", wwNumber[2], wwNumber[28]); break; case 4: printf("%s %s ", wwNumber[3], wwNumber[28]); break; case 5: printf("%s %s ", wwNumber[4], wwNumber[28]); break; case 6: printf("%s %s ", wwNumber[5], wwNumber[28]); break; case 7: printf("%s %s ", wwNumber[6], wwNumber[28]); break; case 8: printf("%s %s ", wwNumber[7], wwNumber[28]); break; case 9: printf("%s %s ", wwNumber[8], wwNumber[28]); break; default: printf("Error4\n"); break; } } //ЕСЛИ 3 ---- ФУНКЦИЯ ОБРАБАТЫВАЕТ И ПЕЧАТАЕТ 3-ЗНАЧНЫЕ ЧИСЛА void *if3(const char *wwNumber[], const float wNum) { float num = wNum; switch (int (num / 100)) { case 1: printf("%s %s ", wwNumber[0], wwNumber[27]); break; case 2: printf("%s %s ", wwNumber[1], wwNumber[27]); break; case 3: printf("%s %s ", wwNumber[2], wwNumber[27]); break; case 4: printf("%s %s ", wwNumber[3], wwNumber[27]); break; case 5: printf("%s %s ", wwNumber[4], wwNumber[27]); break; case 6: printf("%s %s ", wwNumber[5], wwNumber[27]); break; case 7: printf("%s %s ", wwNumber[6], wwNumber[27]); break; case 8: printf("%s %s ", wwNumber[7], wwNumber[27]); break; case 9: printf("%s %s ", wwNumber[8], wwNumber[27]); break; default: printf("Error3\n"); break; } } //ЕСЛИ 2 ---- ФУНКЦИЯ ОБРАБАТЫВАЕТ И ПЕЧАТАЕТ 1 И 2-ЗНАЧНЫЕ ЧИСЛА void *if2(const char *wwNumber[], const float wNum) { float num = wNum; switch (int(num / 10)) { case 0: //ОТРАБОТКА ЧИСЛА ДО 9 printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); break; case 1: //ОТРАБОТКА ЧИСЛА ДО 19 printf("%s\n", wwNumber[9 + int(num - int(num /10) * 10)]); break; case 2: //ОТРАБОТКА ЧИСЛА ОТ 20 ДО 29 printf("%s ", wwNumber[19]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 3: //ОТРАБОТКА ЧИСЛА ОТ 30 ДО 39 printf("%s ", wwNumber[20]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 4: //ОТРАБОТКА ЧИСЛА ОТ 40 ДО 49 printf("%s ", wwNumber[21]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 5: //ОТРАБОТКА ЧИСЛА ОТ 50 ДО 59 printf("%s ", wwNumber[22]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 6: //ОТРАБОТКА ЧИСЛА ОТ 60 ДО 69 printf("%s ", wwNumber[23]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 7: //ОТРАБОТКА ЧИСЛА ОТ 70 ДО 79 printf("%s ", wwNumber[24]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 8: //ОТРАБОТКА ЧИСЛА ОТ 80 ДО 89 printf("%s ", wwNumber[25]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; case 9: //ОТРАБОТКА ЧИСЛА ОТ 90 ДО 99 printf("%s ", wwNumber[26]); if(int(num - int(num /10) * 10) > 0) { printf("%s\n", wwNumber[int(num - int(num /10) * 10) - 1]); } break; default: printf("\nError2\n"); break; } } char printing (const char *num[], const unsigned int wSize) { for (unsigned int i = 0; i <= wSize; i++) { printf("%s\n", num[i]); } return 0; }
