diff --git a/C_C++/числа.c b/C_C++/числа.c new file mode 100644 index 0000000..32f9c2a --- /dev/null +++ b/C_C++/числа.c @@ -0,0 +1,89 @@ +// @BAKE gcc $@ -o $*.out -std=c2x $(pkg-config --cflags --libs readline) +#include +#include +#include +#include +#include + +#define N_NUMBERS 101 + +#define ON_TEEN "на" "дцать" + +char * numbers[N_NUMBERS] = { + [0] = "ноль", + [1] = "один", + [2] = "два", + [3] = "три", + [4] = "четырe", + [5] = "пять", + [6] = "шесть", + [7] = "семь", + [8] = "восемь", + [9] = "девять", + + [11] = "один" ON_TEEN, + [12] = "две" ON_TEEN, + [13] = "три" ON_TEEN, + [14] = "четыр" ON_TEEN, + [15] = "пят" ON_TEEN, + [16] = "шест" ON_TEEN, + [17] = "сем" ON_TEEN, + [18] = "восем" ON_TEEN, + [19] = "девят" ON_TEEN, + + [10] = "двадцать", + [20] = "двадцать", + [30] = "тридцать", + [40] = "сорок", + [50] = "пятьдецят", + [60] = "шестьдесят", + [70] = "cемьдесят", + [80] = "восемьдесят", + [90] = "девяносто", + + [100] = "сто", +}; + +void init(void) { + for (int i = 21; i < 100; i++) { + if (i % 10 == 0) { continue; } + asprintf(numbers+i, "%s %s", numbers[(i/10)*10], numbers[i % 10]); + } +} + +signed main(void) { + init(); + + #if 0 + for (int i = 0; i < N_NUMBERS; i++) { + puts(numbers[i]); + } + return 0; + #endif + + srand((long)&main); + char * input; + int a, b, c; + + while (true) { + a = rand() % N_NUMBERS; + b = rand() % N_NUMBERS; + c = a + b; + c = (c > 100 ? c - 100 : c); + + printf("%s + %s?\n", numbers[a], numbers[b]); + + input: + input = readline("|отвечать> "); + if (input == NULL) { break; } + + if (strcmp(input, numbers[c])) { + puts("Нет!"); + printf("%d + %d = %d\n", a, b, c); + puts(numbers[c]); + goto input; + } + + puts("Да!"); + } +}