[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Решение задачки
Zenith
Недавно знакомый подбросил задачку такого рода: написать скрипт принимающий цифру и выводящий соответствующее склонение слова программист, по принципу 1->программист 2->программиста и т.д.
Вроде как решил.
Осталось всего два вопроса: можно ли сделать тоже, но компактнее? И где взять ещё таких задачек?
Заранее спасибо за ваше мнение.

<?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)
а какое еще бывает склонение?

А склонение-то причем? smile.gif Почитай первый пост..

Спустя 2 минуты, 36 секунд (24.11.2010 - 10:30) vergin написал(а):
Цитата

Недавно знакомый подбросил задачку такого рода: написать скрипт принимающий цифру и выводящий соответствующее склонение слова программист, по принципу 1->программист 2->программиста и т.д.


это? smile.gif или у меня сутра просто день незадался )))

Спустя 3 минуты, 48 секунд (24.11.2010 - 10:33) kirik написал(а):
vergin
Да, ТС ошибся просто smile.gif Имелись ввиду множественные формы.
Цитата (vergin @ 24.11.2010 - 02:30)
скрипт принимающий цифру ... по принципу 1->программист 2->программиста и т.д.

И код ТС для этого же.

Спустя 2 часа, 46 минут, 40 секунд (24.11.2010 - 13:20) Zenith написал(а):
Ещё раз спасибо.
А где подобные задачи можно поискать?


_____________
"Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете". (с) Макконнелл, "Совершенный код".
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.