Вроде как решил.
Осталось всего два вопроса: можно ли сделать тоже, но компактнее? И где взять ещё таких задачек?
Заранее спасибо за ваше мнение.
<?php
//склоняем программистов
function newprogramer($numero){
if(is_integer($numero)){
$b="программист";
$strlen=strlen($numero);//определяем длину введённого числа и далее действуем по обстоятельствам.
$st=$strlen-2;$penult=substr($numero,$st,1);//получаем предпоследний символ
$st=$strlen-1;$lastch=substr($numero,$st,1);//получаем последний символ
//запускаем функцию toprogramer(), которая вернёт подходящий ответ.
if($strlen>1){//когда передано многозначное число
if($penult==1){
return $b."ов";
}// Если предпоследнее число--единица(1), то мы емеем дело с значение от 10 до 19
elseif($penult>1 || $penult==0){
$c=toprogramer($numero,$lastch,$strlen);
if($c){
return $b.$c;
}//генерируем значание
else{return "нет программистов";}//fakeup
}
}elseif($strlen==1){//когда передано однозначное число
$c=toprogramer($numero,$lastch,$strlen);
if($c){return $b.$c;}//генерируем значание
else{return "нет программистов";}//fakeup
}
}
}
function toprogramer($numero,$lastch,$strlen){
if($lastch==0){//обрабатываем случаи когда передан ноль (0) и когда передано круглое число(заканчивается на ноль)
if($strlen==1 || $numero<1){return false;}//передан ноль (0)
elseif($strlen>1){return ("ов");}//передано круглое число(заканчивается на ноль)
}elseif($lastch==1){return (" ");}//обрабатываем случай, когда последний символ единица[1]
elseif(2<=$lastch && $lastch<=4){return ("а");}//обрабатываем случай, когда последний символ от 2 до 4 включительно [2,4]
elseif(5<=$lastch && $lastch<=9){return ("ов");}//обрабатываем случай, когда последний символ от 5 до 9 включительно [5,9]
else{return false;}//fakeup
}
//Тестим
$r=mt_rand();
$z=newprogramer($r);
echo "<pre>$r $z<br></pre>";
for($q=-20;$q<=20;$q++){
$z=newprogramer($q);
echo "<pre>$q $z<br></pre>";}
?>
Спустя 1 час, 16 минут, 12 секунд (24.11.2010 - 06:38) kirik написал(а):
Ты мозг столько кода написать :)
function plural_en($n, $f) {
return $n != 1 ? $f[1] : $f[0];
}
function plural_ru($n, $f) {
return ($n % 10 == 1 && $n % 100 != 11)
? $f[0]
: ((($n % 10 >= 2 && $n % 10 <= 4) && ($n % 100 < 10 || $n % 100 >= 20))
? $f[1]
: $f[2]);
}
/// Пример:
// русские формы:
$programmer_ru = array('программист', 'программиста', 'программистов');
// english forms:
$programmer_en = array('programmer', 'programmers');
for($i = 0; $i++ < 10;) {
echo $i . ': ' . plural_ru($i, $programmer_ru) . '/' . plural_en($i, $programmer_en) . "\n";
}
/*
1: программист/programmer
2: программиста/programmers
3: программиста/programmers
4: программиста/programmers
5: программистов/programmers
6: программистов/programmers
7: программистов/programmers
8: программистов/programmers
9: программистов/programmers
10: программистов/programmers
*/
Спустя 3 часа, 36 минут, 34 секунды (24.11.2010 - 10:14) vergin написал(а):
kirik
Цитата |
1: программист/programmer 2: программиста/programmers 3: программиста/programmers 4: программиста/programmers 5: программистов/programmers 6: программистов/programmers 7: программистов/programmers 8: программистов/programmers 9: программистов/programmers 10: программистов/programmers |
это у тебя такое склонение по-падежам?
Насколько мне припоминается курс русского языка, то просклонять слово "программист" можно так:
1. Программист
2. Программиста
3. Программисту
4. Программиста
5. Программистом
6. На программисте
Спустя 1 минута, 32 секунды (24.11.2010 - 10:16) kirik написал(а):
Цитата (vergin @ 24.11.2010 - 02:14) |
это у тебя такое склонение по-падежам? |
При чем тут падежи?
Спустя 2 минуты, 23 секунды (24.11.2010 - 10:18) vergin написал(а):
Цитата |
соответствующее склонение слова программист |
а какое еще бывает склонение?
Спустя 8 минут, 38 секунд (24.11.2010 - 10:27) kirik написал(а):
Цитата (vergin @ 24.11.2010 - 02:18) |
а какое еще бывает склонение? |
А склонение-то причем? Почитай первый пост..
Спустя 2 минуты, 36 секунд (24.11.2010 - 10:30) vergin написал(а):
Цитата |
Недавно знакомый подбросил задачку такого рода: написать скрипт принимающий цифру и выводящий соответствующее склонение слова программист, по принципу 1->программист 2->программиста и т.д. |
это? или у меня сутра просто день незадался )))
Спустя 3 минуты, 48 секунд (24.11.2010 - 10:33) kirik написал(а):
vergin
Да, ТС ошибся просто Имелись ввиду множественные формы.
Да, ТС ошибся просто Имелись ввиду множественные формы.
Цитата (vergin @ 24.11.2010 - 02:30) |
скрипт принимающий цифру ... по принципу 1->программист 2->программиста и т.д. |
И код ТС для этого же.
Спустя 2 часа, 46 минут, 40 секунд (24.11.2010 - 13:20) Zenith написал(а):
Ещё раз спасибо.
А где подобные задачи можно поискать?
А где подобные задачи можно поискать?
_____________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".