fork download
  1. import System.IO
  2. import Data.List
  3. import Control.Monad
  4.  
  5. mkDic = ("" :) . map (++ " ")
  6.  
  7. declense_1_20 g n = case g of
  8. "м.р." -> mgn ++ "лисп" ++ choose "ов" "" "а"
  9. "ж.р." -> wgn ++ "макак" ++ choose "" "а" "и"
  10. "ср.р." -> ign ++ "золотц" ++ choose "" "е" "а"
  11. where
  12. choose a b c
  13. | n == 0 || n > 4 = a
  14. | n == 1 = b
  15. | n > 1 && n < 5 = c
  16.  
  17. mgn = mkDic [ "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять", "десять"
  18. , "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать"
  19. , "семнадцать", "восемнадцать", "девятнадцать" ]
  20. !! n
  21.  
  22. wgn | n == 1 = "одна "
  23. | n == 2 = "две "
  24. | otherwise = mgn
  25.  
  26. ign | n == 1 = "одно "
  27. | otherwise = mgn
  28.  
  29. ru_10s = mkDic ["десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"]
  30. ru_100s = mkDic ["сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"]
  31.  
  32. declense g n
  33. | n == 0 = "ноль " ++ declense_1_20 g 0
  34. | d < 20 = (ru_100s !! (n `div` 100)) ++ declense_1_20 g d
  35. $ zipWith ($) [declense_1_20 g, (ru_10s !!), (ru_100s !!)]
  36. $ map (`mod` 10) $ takeWhile (/= 0) $ iterate (`div` 10) n
  37. where
  38. d = n `mod` 100
  39.  
  40. main = do
  41. hSetEncoding stdout utf8
  42.  
  43. forM_ [0..30]
  44. (putStrLn . declense "м.р.")
  45.  
  46. forM_ [530..560]
  47. (putStrLn . declense "ж.р.")
  48.  
  49. forM_ [960..999]
  50. (putStrLn . declense "ср.р.")
Success #stdin #stdout 0s 5288KB
stdin
#include <stdio.h>
#include <math.h>

int main() {
    // Исходные данные
    double initial_cost = 445000 * 1.6; // Стоимость оборудования
    double annual_interest_rate = 0.10; // Процентная ставка 10%
    double annual_depreciation_rate = 0.12; // Амортизация 12%
    double commission_rate = 0.12; // Комиссия 12%
    double vat_rate = 0.2; // НДС 20%
    double additional_services = 4450 * 1.6; // Дополнительные услуги
    int months = 24;
    
    double remaining_cost = initial_cost; // Начальная остаточная стоимость
    double monthly_depreciation = (initial_cost * annual_depreciation_rate) / 12;
    double monthly_commission = (initial_cost * commission_rate) / 12;
    double monthly_services = additional_services / months;
    
    printf("Месяц | АО     | ПК     | КВ     | ДУ     | НДС    | ЛП     | Остаток \n");
    printf("----------------------------------------------------------------------\n");
    
    for (int month = 1; month <= months; month++) {
        double monthly_interest = (remaining_cost * annual_interest_rate) / 12;
        double vat = (monthly_depreciation + monthly_interest + monthly_commission + monthly_services) * vat_rate;
        double leasing_payment = monthly_depreciation + monthly_interest + monthly_commission + monthly_services + vat;
        
        printf("%2d   | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f | %.2f\n",
               month, monthly_depreciation, monthly_interest, monthly_commission, 
               monthly_services, vat, leasing_payment, remaining_cost);
        
        remaining_cost -= monthly_depreciation; // Обновляем остаточную стоимость
    }
    
    return 0;
}
stdout
ноль лиспов
один лисп
два лиспа
три лиспа
четыре лиспа
пять лиспов
шесть лиспов
семь лиспов
восемь лиспов
девять лиспов
десять лиспов
одиннадцать лиспов
двенадцать лиспов
тринадцать лиспов
четырнадцать лиспов
пятнадцать лиспов
шестнадцать лиспов
семнадцать лиспов
восемнадцать лиспов
девятнадцать лиспов
двадцать лиспов
двадцать один лисп
двадцать два лиспа
двадцать три лиспа
двадцать четыре лиспа
двадцать пять лиспов
двадцать шесть лиспов
двадцать семь лиспов
двадцать восемь лиспов
двадцать девять лиспов
тридцать лиспов
пятьсот тридцать макак
пятьсот тридцать одна макака
пятьсот тридцать две макаки
пятьсот тридцать три макаки
пятьсот тридцать четыре макаки
пятьсот тридцать пять макак
пятьсот тридцать шесть макак
пятьсот тридцать семь макак
пятьсот тридцать восемь макак
пятьсот тридцать девять макак
пятьсот сорок макак
пятьсот сорок одна макака
пятьсот сорок две макаки
пятьсот сорок три макаки
пятьсот сорок четыре макаки
пятьсот сорок пять макак
пятьсот сорок шесть макак
пятьсот сорок семь макак
пятьсот сорок восемь макак
пятьсот сорок девять макак
пятьсот пятьдесят макак
пятьсот пятьдесят одна макака
пятьсот пятьдесят две макаки
пятьсот пятьдесят три макаки
пятьсот пятьдесят четыре макаки
пятьсот пятьдесят пять макак
пятьсот пятьдесят шесть макак
пятьсот пятьдесят семь макак
пятьсот пятьдесят восемь макак
пятьсот пятьдесят девять макак
пятьсот шестьдесят макак
девятьсот шестьдесят золотц
девятьсот шестьдесят одно золотце
девятьсот шестьдесят два золотца
девятьсот шестьдесят три золотца
девятьсот шестьдесят четыре золотца
девятьсот шестьдесят пять золотц
девятьсот шестьдесят шесть золотц
девятьсот шестьдесят семь золотц
девятьсот шестьдесят восемь золотц
девятьсот шестьдесят девять золотц
девятьсот семьдесят золотц
девятьсот семьдесят одно золотце
девятьсот семьдесят два золотца
девятьсот семьдесят три золотца
девятьсот семьдесят четыре золотца
девятьсот семьдесят пять золотц
девятьсот семьдесят шесть золотц
девятьсот семьдесят семь золотц
девятьсот семьдесят восемь золотц
девятьсот семьдесят девять золотц
девятьсот восемьдесят золотц
девятьсот восемьдесят одно золотце
девятьсот восемьдесят два золотца
девятьсот восемьдесят три золотца
девятьсот восемьдесят четыре золотца
девятьсот восемьдесят пять золотц
девятьсот восемьдесят шесть золотц
девятьсот восемьдесят семь золотц
девятьсот восемьдесят восемь золотц
девятьсот восемьдесят девять золотц
девятьсот девяносто золотц
девятьсот девяносто одно золотце
девятьсот девяносто два золотца
девятьсот девяносто три золотца
девятьсот девяносто четыре золотца
девятьсот девяносто пять золотц
девятьсот девяносто шесть золотц
девятьсот девяносто семь золотц
девятьсот девяносто восемь золотц
девятьсот девяносто девять золотц