|
|
|
| Здравствуйте уважаемые форумчане!
Пробую написать функцию, которая принимает один параметр - целое число.
И возвращает это же число + слово "программистов" в нужном склонении.
Я написал так:
<?php
function myfunc($int){
//Число цифр
$count = count($int);
//Отрезаем последнюю
$end_char = substr($int, -1, 1);
//Сравниваем окончание
switch($end_char){
case '0': $end = 'тов'; break;
case '1': $end = 'т'; break;
case '2': $end = 'та'; break;
case '3': $end = 'та'; break;
case '4': $end = 'та'; break;
case '5': $end = 'тов'; break;
case '6': $end = 'тов'; break;
case '7': $end = 'тов'; break;
case '8': $end = 'тов'; break;
case '9': $end = 'тов'; break;
}
return $int.' программис'.$end;
}
echo myfunc(55);
?>
|
Но в таком случае если передать число 11, то результат будет "11 программист".
И с цифрами до 20 слово не правильно склоняется.
Буду благодарен за любую помощь. | |
|
|
|
|
|
|
|
для: Исильдур
(20.02.2013 в 21:03)
| | Могу предложить как-то так:
<?php
function myfunc($int) {
settype($int,"string");
$end_char = substr($int,-1,1);
$count = strlen($int);
if($count >= 2) {
$dec_char = $int[$count - 2];
if($dec_char == '1') {
$end_word = 'тов';
}
}
else {
switch($end_char) {
case '1': $end_word = 'т'; break;
case '2': $end_word = 'та'; break;
case '3': $end_word = 'та'; break;
case '4': $end_word = 'та'; break;
default: $end_word = 'тов';
}
}
return $int . ' программис' . $end_word;
}
echo myfunc(11);
?>
|
| |
|
|
|
|
|
|
|
для: Северьян
(20.02.2013 в 23:04)
| | 121 программис ? :) | |
|
|
|
|
|
|
|
для: Valick
(20.02.2013 в 23:52)
| | Приношу свои извинения. Я только учусь... Тогда как-то так:
<?php
function myfunc($int) {
settype($int,"string");
$end_char = substr($int,-1,1);
$count = strlen($int);
if($count >= 2) {
$dec_char = $int[$count - 2];
if($dec_char == '1') {
$end_word = 'тов';
}
else {
switch($end_char) {
case '1': $end_word = 'т'; break;
case '2': $end_word = 'та'; break;
case '3': $end_word = 'та'; break;
case '4': $end_word = 'та'; break;
default: $end_word = 'тов';
}
}
}
if($count == 1) {
switch($end_char) {
case '1': $end_word = 'т'; break;
case '2': $end_word = 'та'; break;
case '3': $end_word = 'та'; break;
case '4': $end_word = 'та'; break;
default: $end_word = 'тов';
}
}
return $int . ' программис' . $end_word;
};
echo myfunc(121);
?>
|
| |
|
|
|
|
|
|
|
для: Северьян
(20.02.2013 в 23:04)
| | Спасибо за предоставленное решение, но и оно не работает должным образом)) При передаче числа 22 результат:
Notice: Undefined variable: end_word in /var/www/index.php on line 47 22 программис
|
Завтра попробую еще порешать на свежую голову. | |
|
|
|
|
|
|
|
для: Исильдур
(20.02.2013 в 23:54)
| |
function NumberEnd($number, $titles) {
$cases = array (2, 0, 1, 1, 1, 2);
return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ];
}
$a = 12;
echo $a.' программист'.NumberEnd($a, array('','а','ов'));
|
| |
|
|
|
|
|
|
|
для: Valick
(21.02.2013 в 00:08)
| | Большое Спасибо!
Мне бы пожалуй до такого было не додуматься)) | |
|
|
|
|
|
|
|
для: Исильдур
(21.02.2013 в 00:15)
| | я бы может и додумался, а может и другой вариант "родил"
хотя применить целочисленное деление была мысль | |
|
|
|
|
|
|
|
для: Valick
(21.02.2013 в 00:08)
| | Рука опытного - налицо. Нам учиться и учиться... Э-е-х.. | |
|
|
|
|
|
|
|
для: Северьян
(21.02.2013 в 00:23)
| | гугл первый помошник :)
Блог Вячеслава Волкова
Хотя я думаю и Вячеслав тоже не автор этого варианта
и только потом мозг ;) | |
|
|
|
|
|
|
|
для: Valick
(21.02.2013 в 00:30)
| | Спасибо, Valick, за ссылку. Будем учиться... | |
|
|
|
|
|
|
|
для: Северьян
(21.02.2013 в 00:36)
| | Учиться это хорошо, вот откопал алгоритм столько лет прошло, а я его часто вспоминаю
http://softtime.ru/forum/read.php?id_forum=1&id_theme=57979
задача интересная
попробуйте реализовать
там конечно в конце есть мой вариант, но его не обязательно сразу подглядывать :)
____
есть еще не менее интересная, но немного более сложная задача
http://softtime.ru/forum/read.php?id_forum=3&id_theme=85595
имненно на таких достаточно специфических задачах и тренируется логика | |
|
|
|
|
|
|
|
для: Valick
(21.02.2013 в 00:48)
| | Valick спасибо еще раз, будем алгоритмическое мышление развивать)) | |
|
|
|