Заметки / Окончания количественных существительных

C++, PHP, JavaScript
 Пример предназначен для дополнения чисел существительными, типа "n чего-то". C++:
#include <windows.h>
#include <stdio.h>
#include <clocale>// для функций настройки локали

// Функция подстановки количественного существительного
int number (int tn)
{
 char t1 [16], t2 [2];
 memset (t2, 0, 2);

 sprintf (t1, "%d", tn);// запоминаем число в строку "t1"
 t2 [0]=t1 [strlen (t1)-1];// присваиваем переменной "t2" последнюю цифру числа...
 tn=atoi (t2);// и переводим в численное представление

 // Если длина числа больше 1, предпоследняя цифра равна "1", а последняя - от 1 до 9
 if (strlen (t1)>1 && t1 [strlen (t1)-2]=='1' && tn>0 && tn<10)
  return 2;// возвращаем окончание "единиц"
 else if (tn==1)// иначе, если последняя цифра - "1"
  return 0;// возращаем "единица"
 else if (tn>1 && tn<5)// иначе, если - от 2 до 4
  return 1;// возвращааем "единицы"
 else// во всех остальных случаях
  return 2;// вернём "единиц"
}

int main (int argc, char *argv[])
{
 setlocale (LC_ALL, "");// установить используемую системой локаль

 // Массив количественных существительных
 char numN [3] [16]={"единица", "единицы", "единиц"};

 // Напечатаем сществительные для чисел от 0 до 14
 for (int i=0; i<15; i++)
  printf ("%d %s\n", i, numN [number (i)]);

 printf ("\n");
 system ("pause");// пауза
}

Результат выполнения программы:


То же на PHP:
<?php

// Функция подстановки количественного существительного
function number ($t1)
{
 $t2=substr ($t1, -1, 1);// присваиваем переменной "t2" последнюю цифру числа

 // Если длина числа больше 1, предпоследняя цифра равна "1", а последняя - от 1 до 9
 if (strlen ($t1)>1 && substr ($t1, -2, 1)==1 && $t2>0 && $t2<10)
  return 2;// возвращаем окончание "единиц"
 else if ($t2==1)// иначе, если последняя цифра - "1"
  return 0;// возращаем "единица"
 else if ($t2>1 && $t2<5)// иначе, если - от 2 до 4
  return 1;// возвращааем "единицы"
 else// во всех остальных случаях
  return 2;// вернём "единиц"
}

// Массив количественных существительных
$numN=array ("единица", "единицы", "единиц");

// Напечатаем сществительные (переведя из UTF-8 в CP866) для чисел от 0 до 14
for ($i=0; $i<165; $i++)
 print $i." ".iconv ("UTF-8", "CP866", $numN [number ($i)])."\n";

?>

И JavaScript:
<script type="text/javascript">
//<![CDATA[

// Функция подстановки количественного существительного
function number (t1)
{
 t1=t1.toString ();// приводим переменную к строковому типу
 var t2=t1.substr (t1.length-1, 1);// присваиваем переменной "t2" последнюю цифру числа
 t2=parseInt (t2);// в целочисленный тип

 // Если длина числа больше 1, предпоследняя цифра равна "1", а последняя - от 1 до 9
 if (t1.length>1 && t1.substr (t1.length-2, 1)=="1" && t2>0 && t2<10)
  return 2;// возвращаем окончание "единиц"
 else if (t2==1)// иначе, если последняя цифра - "1"
  return 0;// возращаем "единица"
 else if (t2>1 && t2<5)// иначе, если - от 2 до 4
  return 1;// возвращааем "единицы"
 else// во всех остальных случаях
  return 2;// вернём "единиц"
}


// Массив количественных существительных
var numN=new Array ("единица", "единицы", "единиц");

// Напечатаем сществительные для чисел от 0 до 14
for (var i=0; i<15; i++)
 document.write (i+" "+numN [number (i)]+"<br />\n");


//]]>
</script>

30.08.2017