/**
* @file SummerPractise2022
* @author Ризлейцев М.Р., гр. 515а, варіант 33
* @date 12 липня 2022
* @brief Практика
*
* Розробити програму, що переводить суму, задану у вигляді числа з плаваючою комою, в текст.
*/
#include <stdio.h>
#include <locale.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>
void two_arrays(float num, int uah[], int pen[]) {
long long int d = num * 100;
int i = 9;
int j = 9;
int k = 0;
while (i >= 0) {
if (!d)
break;
if (k >= 2) {
uah[i] = d % 10;
i--;
}
else {
pen[j] = d % 10;
k++;
j--;
}
d /= 10;
}
return;
}
void in_words(int digit, const int arr[]) { //вивід числа словами
bool not_null = false; //змінна початку виводу числа свловами
if (digit == 0) {
printf("нуль ");
return;
}
for (int i = 0; i < 10; i++) { //цикл виводу усього числа словами
if (!arr[i] && !not_null) { //якщо поточний елемент = 0 і число нульове
not_null = true; //число не нульове
if (arr[0]) //якщо це перший елемент
i--; //зменншення індексу
continue; //пропустити тіло циклу
}
if (!i) { //якщо індекс елементу = 0
switch (arr[i]) { //вибір числа
case 1: printf("один "); break;
case 2: printf("два "); break;
}
if (!arr[i]) //якщо цей елемент = 0
printf("");
else if (arr[i] == 1) //якщо цей елемент = 1
printf("мiльярд ");
else //в іншому разі
printf("мiльярди ");
}
if (i == 1 || i == 4 || i == 7) { //якщо індекс елменту = 1, або 4, або 7
switch (arr[i]) { //вибір
case 1: printf("сто "); break;
case 2: printf("двiстi "); break;
case 3: printf("триста "); break;
case 4: printf("чотириста "); break;
case 5: printf("п'ятсот "); break;
case 6: printf("шiстсот "); break;
case 7: printf("сiмсот "); break;
case 8: printf("вiсiмсот "); break;
case 9: printf("дев'ятсот "); break;
}
if (!arr[i + 1] && !arr[i + 2]) { //якщо наступні два елементи нулі
if (!arr[i]) //якщо елемент = 0
printf("");
else if (i == 1) //якщо індекс елементу = 1
printf("мiльйонiв ");
else if (i == 4) //якщо індекс елементу = 4
printf("тисяч ");
}
}
else if (i == 2 || i == 5 || i == 8) { //якщо індекс елменту = 2, або 5, або 8
if (arr[i] == 1) { //якщо елемент = 1
switch (arr[i + 1]) { //вибір
case 0: printf("десять "); break;
case 1: printf("одинадцять "); break;
case 2: printf("дванадцять "); break;
case 3: printf("тринадцять "); break;
case 4: printf("чотирнадцять "); break;
case 5: printf("п'ятнадцять "); break;
case 6: printf("шiстнадцять "); break;
case 7: printf("сiмнадцять "); break;
case 8: printf("вiсiмнадцять "); break;
case 9: printf("дев'ятнадцять "); break;
}
if (i == 2) //якщо індекс елементу = 2
printf("мiльйонiв ");
else if (i == 5) //якщо індекс елементу = 5
printf("тисяч ");
}
else if (arr[i] != 1) { //якщо елемент не = 1
switch (arr[i]) { //вибір
case 2: printf("двадцять "); break;
case 3: printf("тридцять "); break;
case 4: printf("сорок "); break;
case 5: printf("п'ятдесят "); break;
case 6: printf("шiстдесят "); break;
case 7: printf("сiмдесят "); break;
case 8: printf("вiсiмдесят "); break;
case 9: printf("дев'яносто "); break;
}
if (!arr[i + 1]) { //якщо наступний елемент = 0
if (!arr[i]) //якщо елемент = 0
printf("");
else if (i == 2) //якщо індекс елементу = 2
printf("мiльйонiв ");
else if (i == 5) //якщо індекс елементу = 5
printf("тисяч ");
}
else { //в іншому разі
switch (arr[i + 1]) { //вибір
case 1: {
if (i + 1 == 6 || i + 1 == 9) //якщо наступний елемент під індексом 6
printf("одна ");
else //в іншому разі
printf("один ");
} break;
case 2: {
if (i + 1 == 6 || i + 1 == 9) //якщо наступний елемент під індексом 6
printf("двi ");
else //в іншому разі
printf("два ");
} break;
case 3: printf("три "); break;
case 4: printf("чотири "); break;
case 5: printf("п'ять "); break;
case 6: printf("шiсть "); break;
case 7: printf("сiм "); break;
case 8: printf("вiсiм "); break;
case 9: printf("дев'ять "); break;
}
if (i == 2) { //якщо індекс елементу = 2
if (!arr[i + 1]) //якщо наступний елемент = 0
printf("");
else if (arr[i + 1] == 1) //якщо наступний елемент = 1
printf("мiльйон ");
else if (arr[i + 1] == 2 || arr[i + 1] == 3 || arr[i + 1] == 4) //якщо наступний елемент = 2, 3 або 4
printf("мiльйони ");
else //в іншому разі
printf("мiльйонiв ");
}
else if (i == 5) { //якщо індекс елементу = 5
if (!arr[i + 1]) //якщо наступний елемент = 0
printf("");
else if (arr[i + 1] == 1) //якщо наступний елемент = 1
printf("тисяча ");
else if (arr[i + 1] == 2 || arr[i + 1] == 3 || arr[i + 1] == 4)
printf("тисячi ");
else
printf("тисяч ");
}
}
}
}
}
}
int main() {
setlocale(LC_ALL, "rus");
int pen[10] = { 0 };
int uah[10] = { 0 };
float num;
while (true) {
scanf("%f", &num);
if (num < 0) {
printf("Вы ввели некорректное число\n");
system("pause");
system("cls");
}
else {
two_arrays(num, uah, pen);
for (int i = 0; i < 10; i++)
printf("%d ", uah[i]);
printf("\n");
for (int j = 0; j < 10; j++)
printf("%d ", pen[j]);
printf("\n");
in_words(num, uah);
if (uah[9] == 1)
printf("гривня ");
else if (uah[9] == 2 || uah[9] == 3 || uah[9] == 4)
printf("гривнi ");
else
printf("гривень ");
in_words(num, pen);
if (pen[9] == 1)
printf("копiйка ");
else if (pen[9] == 2 || pen[9] == 3 || pen[9] == 4)
printf("копiйки ");
else
printf("копiйок ");
break;
}
}
return 0;
}