За последние 24 часа нас посетили 58320 программистов и 1832 робота. Сейчас ищут 970 программистов ...

Перестанавливаем цифры у двузначного числа. Перевёртыш.

Тема в разделе "PHP для новичков", создана пользователем [pandora], 17 окт 2012.

  1. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    Собственно одно из моих заданий в универе) Код написала. Он прилагается ниже. Реализовала одной функцией. Проверку выполнила. Вопрос теперь вот в чём: Можно его ещё как-нибудь реализовать? При помощи чего? Готового решения написать не прошу. Просто подбросте идею =) Заранее благодарна =))

    [​IMG]
    Код (PHP):
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    2. <html xmlns="http://www.w3.org/1999/xhtml">
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    5. <title>Homework #2.11</title>
    6. </head>
    7.  
    8. <body>
    9. <div align="center">
    10.  
    11. <form action="homework_2.php" method="post">
    12. <input name="number" type="text" size="10" maxlength="2" />
    13. <input name="button" type="submit" value="Go!" />
    14. </form>
    15.  
    16.  
    17. <?php
    18. $number = $_POST[number];
    19.  
    20.  
    21. //Проверка на случай, если число не введено.
    22. if(empty($number))
    23. {echo "<br/><font color='#FF0000'>FORM IS EMPTY OR = 0! WRITE A NUMBER! </font>";}
    24.  
    25. else{
    26.     
    27. //Проверка на случай, если введено не числовое значение.
    28. if(is_numeric($number))  
    29. { 
    30.  
    31.  
    32.  
    33.  
    34. //Результат:
    35. echo "<br/> [color=#FF0000]Your answer is: ".$number=strrev($number)[/color]
    36. ;} 
    37.  
    38.  
    39. else
    40. {echo "<br/><font color='#FF0000'>YOU ENTERED NOT A NUMERIC VALUE! YOU ENTERED LETTERS! PLEASE, TRY AGAIN =) </font>";}  
    41.  
    42.   
    43.    ;} 
    44.  
    45. ?>
    46. </div>
    47. </body>
    48. </html>
     
  2. FIZy_

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

    С нами с:
    11 окт 2012
    Сообщения:
    11
    Симпатии:
    0
    1)Переводим строку в массив где каждый элемент массива это один символ. Записываем в новую строку второй и потом первый элемент массива.
    2)Если это токо двахзначное число можно перемешать символы в исходной строке функцией str_shuffle() до тех пор когда новая перемешаная строка будет не равна исходной.
     
  3. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    FIZy_ Второй вами предложанный вариант я кстати недавно сделала) А за первый спасибо, да)
    Далее,
    3. substr() Можно использовать ещё эту функцию. Выдернуть цифры, и засунуть в переменные, а потом поменять местами.
    4. Выдернуть при помощи регулярных выражений.

    Тема актуальна. Продолжаем список... Предлагаем варианты.
     
  4. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    можешь еще так
    Код (PHP):
    1. list($a,$b) = $number;
    2. echo $b.$a;
    3.  
    А зачем столько вариантов, кто больше придумает тому приз дадут? :)
     
  5. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Код (Text):
    1.  
    2. $str = '2354325';
    3. $i = 0;
    4. $j = strlen($str)-1;
    5. while ($i < $j) {
    6.     list($str[$i], $str[$j]) = array($str[$j], $str[$i]);
    7.     $i ++;
    8.     $j --;
    9. }
    Добавлено спустя 15 минут 17 секунд:
    О.. оно двузначное. Тогда
    $rev = floor($str / 10) + ($str % 10) * 10;
     
  6. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    тогда уж
    Код (Text):
    1. <?php
    2. echo $number[1].$number[0];
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Алилуя! Таки нашелся человек который умеет программировать.
     
  8. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    кстати есть проверка на непустое значение и числовое. а вот на то, что там 2 знака - нет)

    $number = $_POST[number]; // вот так тоже не очень хорошо писать.
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    pandora,
    Код (PHP):
    1. // вариант 1
    2. $d = '0123456789';
    3. for($x=0,$m=strlen($d); $x<floor($m/2); ++$x) 
    4.     list($d{$x},$d{$m-$x-1}) = array($d{$m-$x-1},$d{$x});
    5. echo $d;
    6.  
    7. // вариант 2
    8. $d = '0123456789';
    9. for($x=strlen($d); --$x>=0;) {
    10.     $d.=$d[$x];
    11.     $d[$x]=null;
    12. }
    13. echo $d; 
     
  10. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    iliavlad
    Да, я вчера после публикации задумалась о том, что число можно ввести и однозначное)) И сделала проверку и на это))
    if($number<10)
    {echo "Вы ввели однозначное число, введите двухзначное";} Вот так-то =)

    smitt Ну приблизительно так, да)

    MiksIr, интересный вариант)

    runcore Это вин! =) Самый настоящий)

    Всем спасибо за варианты =) Думаю этого хватит)
     
  11. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему это вы вдруг решили, что среди чисел, меньших десяти нет двузначных? о_О там есть числа с бесконечным количеством знаков, ващета.

    Добавлено спустя 1 минуту 7 секунд:
    это феил, говнокод, индусский код, незнание функций пхп и увольнение =)

    Добавлено спустя 7 минут 55 секунд:
    Код (PHP):
    1. $i = (int) $_GET['i'];
    2. if ($i > 9 AND $i < 100) {
    3.   $i = implode('', array_reverse(str_split($i)));
    4. }
    5. var_dump($i); 
     
  12. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Этот вариант уже предложил FIZy_.

    Еще полезно бывает использовать error_reporting для отлова своих багов...
     
  13. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    фак! я говно
     
  15. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    на все случаи готовых функций нет! надо уметь решать любую задачу и своими силами.
    тем более задание как раз в том и состояло, как я понял, чтоб сделать перестановку БЕЗ использования ГОТОВЫХ функций.
    а с готовыми любой школьник может)
     
  16. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    $_POST[number] нотис + не найдена константа =)

    Код (PHP):
    1. <?php
    2. $echo='';
    3. if(isset($_POST['button'])) {
    4.     if(isset($_POST['number']) && trim($_POST['number'])!=='') {
    5.         $number=intval($_POST['number']);
    6.         if($number>=0) {
    7.             $echo=strrev($number);
    8.         } else {
    9.             $echo='Нельзя отрицательные числа!';
    10.         }
    11.     } else {
    12.         $echo='Вы ничего не ввели!';
    13.     }
    14. }
    15. ?>
    16. <!DOCTYPE html>
    17. <html>
    18. <head>
    19.     <meta charset="utf-8">
    20.     <title>
    21.         Homework #2.11
    22.     </title>
    23. </head>
    24. <body>
    25.     <div align="center">
    26.         <p>
    27.             <?=$echo?>
    28.         </p>
    29.         <form method="post">
    30.             <input type="text" name="number" maxlength="2" value="">
    31.             <input type="submit" name="button" value="Send">
    32.         </form>
    33.     </div>
    34. </body>
    35. </html>
     
  17. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    sobachnik смотрит на нас как на говно =)

    в пхп надо именно функции знать, ибо они в разы быстрее любого кода. просто ты еще хуже чем я знаешь функции и отмазываешь свою совесть.
    тогда метод FIZy_-iliavlad всё равно запобеждает твои циклы.

    походу не любой ;) ибо мы стобой сфейлились
     
  18. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    igordata, ты чего троллишь то?

    ты хоть сообщение топикстартера прочти. там ясно написано, что ТопикСтартер РЕШИЛ задачу с помощью встроенной функции strrev().
    при этом был задан вопрос:
    как нибудь еще - это значит БЕЗ использования этой функции.
    я, и другие участники, привели решения.
    я вообще постарался готовые функции реверса не использовать, чтоб показать ТСу как вообще можно это сделать. чтоб поднять алгоритмическую прокаченность ТСа.

    теперь вопросы:
    - как на основании всего этого ты, ВНЕЗАПНО, понял что Я плохо знаю встроенные функции php? не если тебя это както греет, то пожалуйста - продолжай так считать)))
    - если тебе приятно называть себя говном, это твой фетишь, меня то зачем к себе пытаешься причислять?
    - соревнования чей метод будет БЫСТРЕЕ и ОПТИМАЛЬНЕЕ и не стояло. так к чему эта жалкая попытка указать мне что мои реализации чемто хуже других? но опятьже, если тебе приятно думать что я лузер в программировании, то продолжай ошибаться) мой код говорит о моем уровне лучше чем слова, так же как и твой о тебе

    ты еще и модератор тут? ну тогда твое поведение чести тебе точно не делает. забань себя дня на три) для профилактики
     
  19. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Наверное ты прав
     
  20. [pandora]

    [pandora] Активный пользователь

    С нами с:
    18 сен 2012
    Сообщения:
    71
    Симпатии:
    1
    Я конечно немного удивлена резонансом, который был вызван моим постом. Хотя по-правде, мне было крайне интересно почитать и сравнить ваши точки зрения =)

    igordata
    Функции безусловно самый оптимальный вариант, но мне и вправду были нужны другие возможные варианты)

    почему это вы вдруг решили, что среди чисел, меньших десяти нет двузначных? о_О там есть числа с бесконечным количеством знаков, ващета.
    Это как? о_О У меня на самой html форме стояло ограничение на два знака ващемто, о каком бесконечном количестве простите идёт речь?
    Если число будет больше 10-ти, то выполняется весь мой код, если меньше, то селяви, не судьба) Или я опять чего-то путаю?

    Your Согласна, спасибо)

    runcore
    Как раз это мне и было нужно) Вы просто няша! :)
     
  21. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Минус сто меньше десяти и пройдёт вашу проверку.

    Добавлено спустя 2 минуты 9 секунд:
    А блин косяк это была проверка наоборот. Прости.
     
  22. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Если имено подразумевается под числом, то это не будет "01 или 00". =)

    Код (PHP):
    1. if($number>=0) {
    2.     if(strlen(substr($number,0,2))===2) {
    3.         $echo=strrev($number);
    4.     } else {
    5.         $echo='Строка должна быть двузначным числом!';
    6.     }
    7. } else {
    8.     $echo='Нельзя отрицательные числа!';
    9. } 
    Если, кто - то попытается отправить при помощи js, вас input не спасет.