fork(1) download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // Прототипы функций
  5. static int enter();
  6. static void print_age(const int);
  7. static void print_maturity_status(const int);
  8. static void print_retirement_status(const int);
  9.  
  10. int main() {
  11. int number = enter();
  12. puts("");
  13. print_age(number);
  14. print_maturity_status(number);
  15. print_retirement_status(number);
  16. }
  17.  
  18. //-----------------------------------------------------------------------------
  19.  
  20. // Ввод числа
  21. static int enter() {
  22. int n;
  23. printf("%s: ", "Введите число от 1 до 100");
  24. scanf("%i", &n);
  25.  
  26. if ((n < 1) || (n > 100)) {
  27. fprintf(stderr, "%s\n", "Ошибка! Выход за границы диапазона.");
  28. exit(EXIT_FAILURE);
  29. }
  30.  
  31. return n;
  32. }
  33.  
  34. //-----------------------------------------------------------------------------
  35.  
  36. // Определение верной грамматической формы для числительного
  37. static const char *grammatic_form(const int n) {
  38. int last_digit = n % 10;
  39. return
  40. ( !last_digit
  41. || (last_digit >= 5)
  42. || ((n > 4) && (n < 15))) ? "лет" :
  43. (last_digit == 1) ? "год" :
  44. "года";
  45. }
  46.  
  47. //-----------------------------------------------------------------------------
  48.  
  49. // Абсолютное значения целого числа (своя версия, чтобы не подключать либу)
  50. static inline int local_abs(const int n) {
  51. return (n >= 0) ? n : -n;
  52. }
  53.  
  54. //-----------------------------------------------------------------------------
  55.  
  56. // Возраст
  57. static void print_age(const int n) {
  58. printf("Ваш возраст %i %s\n", n, grammatic_form(n));
  59. }
  60.  
  61. //-----------------------------------------------------------------------------
  62.  
  63. // Совершеннолетие
  64. static void print_maturity_status(const int n) {
  65. const int MATURITY_AGE = 18;
  66. int difference = local_abs(MATURITY_AGE - n);
  67. printf("%s %i %s\n",
  68. ((n >= MATURITY_AGE) ? "Вы совершеннолетний" : "Вам до совершеннолетия"),
  69. difference,
  70. grammatic_form(difference)
  71. );
  72. }
  73.  
  74. //-----------------------------------------------------------------------------
  75.  
  76. // Пенсия
  77. static void print_retirement_status(const int n) {
  78. const int RETIREMENT_AGE = 60;
  79. int difference = local_abs(n - RETIREMENT_AGE);
  80. printf("%s %i %s\n",
  81. ((n >= RETIREMENT_AGE) ? "Вы на пенсии" : "Вам до пенсии"),
  82. difference,
  83. grammatic_form(difference)
  84. );
  85. }
  86.  
Success #stdin #stdout 0s 2172KB
stdin
42
stdout
Введите число от 1 до 100: 
Ваш возраст 42 года
Вы совершеннолетний 24 года
Вам до пенсии 18 лет