tests/C_C++/числа.c

90 lines
2.0 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// @BAKE gcc $@ -o $*.out -std=c2x $(pkg-config --cflags --libs readline)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <readline/readline.h>
#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("Да!");
}
}