[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Условия для каждого n-нного числа
Guest
Нужно сделать представление каждому n-нному числу, с учетом того, что нет доступа к циклу (for, foreach), а есть только финальное число.

К примеру, есть 3 представления: черный, красный, синий — которые выводятся друг за другом, начиная с единицы.

Т.е. черными будут — 1, 4, 7, 10
красными — 2, 5, 8, 11
синими — 3, 6, 9, 12 и т.д.

Чтобы получилось так:

<?
$number = '254';

if(/* условие проверки */) {
echo 'Число '. $number .' является черным';
} elseif(/* условие проерки */) {
echo 'Число '. $number .' является красным';
} elseif(/* условие проерки */) {
echo 'Число '. $number .' является синим';
}
?>
sergeiss
Остаток от деления по модулю... См. хэлп: http://www.php.net/manual/ru/language.oper....arithmetic.php

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Guest
Что-то я не совсем понял.

С синими проблем нет, т.к. все числа делятся на 3 без остатка

if($number % 3 == 0) {
echo 'Число '. $number .' является синим';
}

А с остальными как быть?
paul85
Дорогой гость, вот решение:

$number = 21;
$check = (int)($number/3)*3;

if($check == $number)
echo 'число является синим';
elseif($check+1 == $number)
echo 'Число является черным';
else
echo 'Число является красным';



Или как предложил sergeiss (это наиболее эффективный вариант):
$number = 22;
$check = $number%3;

if($check == 0)
echo 'число является синим';
elseif($check == 1)
echo 'Число является черным';
elseif($check == 2) //или просто else
echo 'Число является красным';
Guest
paul85, спасибо за ответ.
sergeiss
paul85, если честно, то "твое" первое решение - это то же самое "остаток от деления по модулю", только сделанное без использования уже готового оператора smile.gif

И еще - я бы использовал не if-else, а switch. Более красиво будет.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
paul85
sergeiss, может быть. Только я беру не остаток, а последнее число предыдущего ряда. То есть своей операцией я могу вычислить отрезок. Я в математике не очень, но мне все-таки кажется что определенная разница в подходах есть.
sergeiss
Цитата (paul85 @ 8.05.2013 - 17:15)
Только я беру не остаток, а последнее число предыдущего ряда. То есть своей операцией я могу вычислить отрезок. Я в математике не очень, но мне все-таки кажется что определенная разница в подходах есть.

Ты знаешь, что такое "остаток от деления по модулю"?

Вот есть, допустим, число 254. Пусть будет оно, коли изначально было такое озвучено.

Остаток от деления 254 по модулю 5 будет 4. Как вычисляется? Просто: делим 254 на 5, получаем, что нацело делится 250 и остается 4. Вот 4 - и есть "остаток от деления по модулю". Ты же, paul85, пишешь то же самое, только чуть более подробно. Вот я и говорю
Цитата (sergeiss @ 8.05.2013 - 12:31)
то "твое" первое решение - это то же самое "остаток от деления по модулю", только сделанное без использования уже готового оператора

Или, иными словами, ты все делаешь правильно, но нерационально. Зачем мудрить, если есть готовое решение?

$rest = 254 % 5; // в $rest будет записано 4 - и можем уже анализировать это число.

Если напишем 254%10, то также получим 4.
Если же 254%2, то получим ноль. Потому что 254 делится на 2 нацело, без остатка.
254%7 даст нам... Щас посчитаю... Будет равно 2. Потому что 254 = 36*7 +2.


_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
paul85
Цитата
Зачем мудрить, если есть готовое решение?

Полностью согласен.
Быстрый ответ:

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