
Данная программа принимает числа (до 6 знаков) в цифровом виде и переводит их в текстовый вид. Не написан обработчик чисел типа Х00ХХХ (если два вторых знака или второй или третий знаки равны 0) - будет выдавать ошибку. Писать не буду - не хочу. Кому надо - сложного ничего нет.
Собственно текст.
#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;
}