За последние 24 часа нас посетил 22171 программист и 1682 робота. Сейчас ищет 1581 программист ...

Логические задачи, не могу разобраться

Тема в разделе "Вопросы от блондинок", создана пользователем Mr. T, 29 янв 2012.

  1. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Добрый день, есть, к примеру, следующий код
    Код (PHP):
    1. <?php
    2. $array = array(1, 2, 3);
    3. $arrayCount = count($array);
    4. if ($arrayCount = 0) {
    5.     echo 'Array doen\'t have any elements.';
    6. } else {
    7.     echo 'Array has ' . $arrayCount . ' elements.';
    8. } 
    . Почему выводится
    . Если я правильно понимаю, то в условие идет присвоение значения, так почему же тогда не
    .

    И второй пример кода
    Код (PHP):
    1. <?php
    2. for($i = 0; $i < 3; ++$i)
    3. {
    4.     echo $i;
    5. }
    6. echo '<br>';
    7. for($i = 0; $i < 3; $i++)
    8. {
    9.     echo $i;
    10. } 
    . Первый и второй цикл выведет
    . Если я правильно понимаю, то итератор $i в обеих циклах будет начинаться с 0, инкриментация перед $i или после значения не имеет, т.к. в любом случае операция инкриментирования будет выполнения перед вызовом следующего шага, я прав?
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    там одно равно. а это операция присваивания. соотв там теперь ноль живет.

    Добавлено спустя 1 минуту 48 секунд:
    во втром случае я думаю разницы не будет.
     
  3. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Я понимаю, что одно равно, поэтому и решил спросить, т.к. не понимаю немного, наверное. Если одно равно, то переменной $arrayCount мы присвоили 0, соответственно истина, поэтому должно быть
    . Почему же наоборот? Тут что-то еще с типами данных?
     
  4. asokol

    asokol Активный пользователь

    С нами с:
    17 янв 2012
    Сообщения:
    162
    Симпатии:
    0
    Результатом выполнения $arrayCount = 0 будет не истина, а 0.
     
  5. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Я понимаю, что $arrayCount будет равно 0. Нужно, наверное, дебагером посмотреть, может быть, пойму тогда почему так...
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    0 трактуется как else
     
  7. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    равносильно
    Код (Text):
    1. if(0)
    что равносильно
    что не выполнится. вопросы?
     
  8. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Спасибо, разобрался :)
     
  9. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Добрый день, есть еще одна задача. Дано, что есть число в десятичной системе исчисления, его нужно преобразовать в двоичную систему исчисления и проверить является ли оно палиндромом, не используя функции для работы со строками.

    У меня одна проблема. Как не используя функции для работы со строками развернуть число, чтобы проверить является ли оно палиндромом?
     
  10. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Какую-то хрень написал
     
  11. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    strlen - функция обработки строк.
    Так бы и strrev сгодился бы =)
     
  12. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Код (PHP):
    1.     $bin = '';
    2.     for ($i = strlen($result) - 1; $i >= 0; $i--){
    3.         $bin .= $result[$i];
    4.     } 
    - не подходит. Как я написал выше, не используя функции для работы со строками. Для преобразования числа из десятичной системы исчисления в двоичную систему исчисления есть функция http://php.net/manual/en/function.strrev.html, но повторюсь, что функции для работы со строками использовать нельзя :)
     
  13. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    Mr. T, если все остальное, что написал topas, кроме strlen, не является функциями обработки строки, то topas перепишет тебе strlen на свою strlen_by_topas =)
     
  14. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    нет, не перепишу
     
  15. AndreJM

    AndreJM Активный пользователь

    С нами с:
    25 янв 2012
    Сообщения:
    522
    Симпатии:
    0
    То есть просто лень или не сможешь?
     
  16. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    некогда
     
  17. Mr. T

    Mr. T Активный пользователь

    С нами с:
    10 ноя 2010
    Сообщения:
    733
    Симпатии:
    0
    Адрес:
    Украина, г. Киев
    Слышал одним ухом, что это можно реализовать с помощью побитовых операторов, но могу ошибаться :)

    Update:
    Поискал в Гуугле, если я прав, то здесь нужно сделать битовый циклический сдвиг, только я пока что не знаю как это реализовать, буду дальше смотреть, но за ценные советы буду благодарен :)