Чтение RSS каналов

Форум

Открыть Ответить

Помогите доработать решение задачки по php

0

0
1
05.02.2019 10:30:0005.03.2021 09:54:32
Привет, коллеги.
Я решил, что пора подтянуть свои не ахти какие знания в php.

Вот задачка: Создайте переменную $studentsCount - присвойте ей случайное значение от 1 до 1000000. Создайте программу, которая выведет в нужной форме текстовое сообщение, например такие “на учебе 100 студентов”, или “на учебе 2 студента” и т.д.

Я решил её вот так:
$studentsCoun = rand(1, 1000000);
  

    if( ($studentsCoun % 100 >= 11) && ($studentsCoun % 100 <= 19) ){
        
        echo "На учебе ".$studentsCoun." студентов";
    
    } else {
    
        if($studentsCoun % 10 == 1):
           
          echo "На учебе ".$studentsCoun." студент";  
        
        elseif ($studentsCoun % 10 == 2 || $studentsCoun % 10 == 3 || $studentsCoun % 10 == 4):
        
          echo "На учебе ".$studentsCoun." студента";
          
        else:
        
          echo "На учебе ".$studentsCoun." студентов";
          
        endif; 
                
    }


Куратор написал замечание по решению. Все правильно, все работает, но "В условии для остатков 2, 3, 4 можно уменьшить количество логических опереаторов."

Ни как не могу понять, как там уменьшить количество "ИЛИ"?
4.01

4.01
2
05.02.2019 18:39:0705.02.2019 18:39:33
Все таки понял. Оказалось все элементарно. Аж стыдно, что сразу не понял.

Было:
($studentsCoun % 10 == 2 || $studentsCoun % 10 == 3 || $studentsCoun % 10 == 4)


Стало:
($studentsCoun % 10 == 2 || $studentsCoun % 10 <= 4)
4.01

4.01
3
03.03.2019 16:01:1003.03.2019 16:03:29
$max=10000;
$count = rand(1, $max);
$where=array("в магазин", "в кафе", "есть", "спать", "гулять");
$how=array("молча ушли", "смотались", "решили пойти");
$i=rand(0,(count($where)-1));
$k=rand(0,(count($how)-1));

echo "На учебе  из ".$max." студентов, на месте только  ".$count." чел.  
Остальные ".($max - $count)." чел. ".$how[$k]." ".$where[$i];
4.25

4.25
4
06.03.2019 09:33:28
Использую древнею как ...... функцию

//Функция вывода множественный; многочисленный
function plural($n, $form1, $form2, $form5){
$n = abs($n) % 100;
$n1 = $n % 10;
if ($n > 10 && $n < 20) return $form5;
if ($n1 > 1 && $n1 < 5) return $form2;
if ($n1 == 1) return $form1;
return $form5;
}
3.66

3.66
5
15.12.2020 21:15:5715.12.2020 21:25:12

Было:

($studentsCoun % 10 == 2 || $studentsCoun % 10 == 3 || $studentsCoun % 10 == 4)


Стало:
($studentsCoun % 10 == 2 || $studentsCoun % 10 <= 4)



Не совсем верно.
$studentsCoun % 10 <= 4 - это ещё и 3, и 2, и 1, и 0...
Поэтому, запись $studentsCoun % 10 == 2 - тоже не имеет смысла.

Правильнее будет так:
elseif ($studentsCoun % 10 > 1 && $studentsCoun % 10 < 5):


т.е., получаем диапазон от 2 и до 4 - что и требовалось в исходной записи.
5

5
Открыть Ответить
Хотите опробовать SLAED CMS в действии?

Технологии

PHP MySQL HTML 5 CSS 3 jQuery jQuery UI

Контакты

  • D-49179, Deutschland
    Ostercappeln, Im Siek 6
  • +49 176 61966679

  • https://slaed.net
Идеи и предложения
Обратная связь