- 001
- 002
- 003
- 004
- 005
- 006
- 007
- 008
- 009
- 010
- 011
- 012
- 013
- 014
- 015
- 016
- 017
- 018
- 019
- 020
- 021
- 022
- 023
- 024
- 025
- 026
- 027
- 028
- 029
- 030
- 031
- 032
- 033
- 034
- 035
- 036
- 037
- 038
- 039
- 040
- 041
- 042
- 043
- 044
- 045
- 046
- 047
- 048
- 049
- 050
- 051
- 052
- 053
- 054
- 055
- 056
- 057
- 058
- 059
- 060
- 061
- 062
- 063
- 064
- 065
- 066
- 067
- 068
- 069
- 070
- 071
- 072
- 073
- 074
- 075
- 076
- 077
- 078
- 079
- 080
- 081
- 082
- 083
- 084
- 085
- 086
- 087
- 088
- 089
- 090
- 091
- 092
- 093
- 094
- 095
- 096
- 097
- 098
- 099
- 100
require_once 'number.php';
class numberspelling extends number {
//put your code here
private $spelling=array(
'nought'=>array(
'eng'=>'nought',
'ukr'=>'нуль',
'rus'=>'ноль'
),
'ones'=>array(
'eng'=>array("", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"),
'ukr'=>array("", "один", "два", "три", "чотири", "п`ять", "шість", "сім", "вісім", "дев`ять"),
'rus'=>array("", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять")
),
'teens'=>array(
'eng'=>array("ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"),
'ukr'=>array("десять", "одинадцять", "дванадцять", "тринадцять", "чотирнадцять", "п`ятнадцять", "шістнадцять", "сімнадцять", "вісімнадцять", "дев`ятнадцять"),
'rus'=>array("десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать")
),
'ties'=>array(
'eng'=>array("", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"),
'ukr'=>array("", "десять", "двадцять", "тридцять", "сорок", "п`ятдесят", "шістдесят", "сімдесят", "вісімдесят", "дев`яносто"),
'rus'=>array("", "десять", "двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семдесят", "восемдесят", "девяносто")
),
'hundreds'=>array(
'eng'=>array("", "hundred", "two hundred", "three hundred", "four hundred", "five hundred", "six hundred", "seven hundred", "eight hundred", "nine hundred"),
'ukr'=>array("", "сто", "двісті", "триста", "чотириста", "п`ятсот", "шістсот", "сімсот", "вісімсот", "дев`ятсот"),
'rus'=>array("", "сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот")
)
);
private $greatnumbersspelling=array(
'thousands'=>array(
'eng'=>array("", "one thousand", "two thousand", "three thousand", "four thousand", "thousand"),
'ukr'=>array("", "одна тисяча", "дві тисячі", "три тисячі", "чотири тисячі", "тисяч"),
'rus'=>array("", "одна тысяча", "две тысячи", "три тысячи", "четыре тысячи", "тысяч")
),
'millions'=>array(
'eng'=>array("", "one million", "two million", "three million", "four million", "million"),
'ukr'=>array("", "один мільйон", "два мільйони", "три мільйони", "чотири мільйони", "мільйонів"),
'rus'=>array("", "один миллион", "два миллиона", "три миллиона", "четыре миллиона", "миллионов")
)
);
private $signspelling=array(
'negative'=>array(
'eng'=>'minus',
'ukr'=>'мінус',
'rus'=>'минус'
),
'positive'=>array(//для удобства изменения кода при необходимости
'eng'=>'',
'ukr'=>'',
'rus'=>''
)
);
private $language;
public function __construct($number, $language) {
parent::__construct($number);
$this->language=$language;
}
public function spell() {
//spelling
$result="";
if($this->sign==-1)
$result=$result.
$this->signspelling['negative'][$this->language]." ";
else $result.=$this->signspelling['positive'][$this->language]." ";
if(isset($this->digits[6])) {//разряд миллионов
for($i=1; $i<5; $i++) {
if($this->digits[6]==$i) {
$result.=$this->greatnumbersspelling['millions'][$this->language][$i]." ";
}
}
if($this->digits[6]>=5) {
$result.=$this->spelling['ones'][$this->language][$this->digits[6]]." ".$this->greatnumbersspelling['millions'][$this->language][5]." ";
}
}
if(isset($this->digits[5])) {//разряд сотен тысяч
$result.=$this->spelling['hundreds'][$this->language][$this->digits[5]]." ";
if(($this->digits[5]!=0)&($this->digits[4]==0)&($this->digits[3]==0)) $result.=$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
if(isset($this->digits[4])) {//разряд десятков тысяч
if($this->digits[4]>1) {
$result.=$this->spelling['ties'][$this->language][$this->digits[4]]." ";
if($this->digits[3]==0) $result.=$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
if($this->digits[4]==1) $result.=$this->spelling['teens'][$this->language][$this->digits[3]]." ".$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
if(isset($this->digits[3])) {//разряд тысяч
for($i=1; $i<5; $i++) {
if($this->digits[3]==$i) {
if(!isset($this->digits[4])||(isset($this->digits[4])&&$this->digits[4]!=1)) $result.=$this->greatnumbersspelling['thousands'][$this->language][$i]." ";
}
}
if($this->digits[3]>=5) {
if(!isset($this->digits[4])||(isset($this->digits[4])&&$this->digits[4]!=1))
$result.=$this->spelling['ones'][$this->language][$this->digits[3]]." ".$this->greatnumbersspelling['thousands'][$this->language][5]." ";
}
}
if(isset($this->digits[2])) {//разряд сотен
$result.=$this->spelling['hundreds'][$this->language][$this->digits[2]]." ";
Часть программы, которая преобразовывает целое число из промежутка [-9999999; 9999999] в текст (разговорный) на трех языках (Russian, Ukrainian, English). Состоит из трех классов. Это класс numberspelling - основной класс программы. Точнее его часть. Остальное - в следующем посте. Именно он преобразует цифру из уже имеющегося массива number в массив в произношение этой цифры на данном языке, в соответствии с её весом (той степенью числа 10, на которую она умножена). Например, если цифра 5 в уже имеющемся массиве стоит под номером 2, то она будет произносится "пятьсот". Напомню, номер элемента в массиве соответствует степени числа 10, на которую надо умножить элемент.
Анонимус 23.12.2014 23:19 # +1
inkanus-gray 24.12.2014 11:07 # +1
bormand 24.12.2014 13:47 # 0
inkanus-gray 27.12.2014 23:32 # 0
Например, в татарском «китапларымда» = «в моих книгах» ( -лар = множественное число, -ым = принадлежность, -да = место).
Или в удмуртском: «бригадирмылэнъёсызлэнъёсызлы» = «для тех, которые у тех, кто у нашего бригадира».
Но полная кошмарная жуть тут: https://clck.ru/9PW7r
В общем, в естественных языках можно насочинять столько форм, что даже ифкуиль позавидует.
1024-- 28.12.2014 14:24 # +1
Кто-нибудь в реальных разговорах генерирует динамически такие довольно противоречивые наслоения?
Помню, была какая-то задача про русский язык из серии "что сказал автор, пока курил", там было что-то вроде "министр отменил мораторий за запрет несоблюдения закона о непринятии отрицания мер протеста против уменьшения объёмов агентств по предупреждению конфликтов из-за отключения горячей воды".
P.S. Для ГК удобно. "Я, %username%, утверждаю, что в коде нет C++ и подтверждаю свой статус олдфага неразрывным написанием слова megszentségteleníthetetlenségeskedéseitekért."
3.14159265 28.12.2014 21:18 # +1
Stallman 30.12.2014 14:50 # 0
bormand 30.12.2014 15:17 # 0