За последние 24 часа нас посетили 17706 программистов и 1712 роботов. Сейчас ищут 1630 программистов ...

Помощь начинабщему №2 (Практикум)

Тема в разделе "PHP для новичков", создана пользователем Alukard, 14 авг 2006.

  1. ml

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

    С нами с:
    8 июл 2006
    Сообщения:
    5
    Симпатии:
    0
    скорее заказчик решает :)
     
  2. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Alukard
    Сделай пузырьковую сортировку.

    Давай вместе помозгуем, что нам надо.

    Представь классный журнал.
    В журнале от А до Я в алфавитном порядке написаны фамилии учеников:

    Абдулаев
    Батарейкин
    Васечкин
    Герасимов
    Ежиков
    Иванов
    Козлов
    Петров
    Сидоров
    Щукин

    Сейчас они в алфавитном порядке.
    А пришли к нам 3 человека, чьи фамилии не шли по алфавиту, но на данной странице были записаны в конец:

    Азбукин
    Константинов
    Чебурашкин

    За один заход ты можешь поменять местами только двух человек, стоящих рядом, а потом еще двух стоящих рядом, но дальше, и так до конца этого массива в этом проходе.
    Т. е. чтобы новички встали на место, нужно до определенного момента поднимать их на одну строку выше.


    Суперподсказка.
    Два цикла for.
    Одно условие if.
    Одна буферная переменная, для замены.
    Прогонять первый цикл надо до длины массива минус один элемент.
     
  3. Alukard

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

    С нами с:
    27 июн 2006
    Сообщения:
    110
    Симпатии:
    0
    Петр, спасибо что пытаешься разьяснить но я пока на цыфрах попробую, так легче :)
    Raa, ну как я понял меня щас должны посвятить этими сортировками, а потом сделаю твое задание :)
    З.Ы. Пока заданий больше ненадо...делаю сортировку цыфр, пузырчатым методом...
     
  4. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    Alukard
    Может проще по аське пообщаться? В приват пиши.

    "Пузырчатым методом" - улыбнуло ))
     
  5. Sleven

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

    С нами с:
    18 июл 2006
    Сообщения:
    99
    Симпатии:
    0
    Адрес:
    Сургут
    если потребуется - могу свой предоставить. :)
     
  6. Lobster

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

    С нами с:
    10 авг 2006
    Сообщения:
    29
    Симпатии:
    0
    эх, я бы тоже принял участие, но пока мало знаю пхп. читаю книгу PHP5 (Максим Кузнецов, Игорь Симдянов) тока начал, это моя первая книга по пхп, дошел тока до работы с файлами и дирректориями :(.

    ЗЫ: и еще не понял цикл for и while . :( может кто подскажет
     
  7. pascal

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

    С нами с:
    22 апр 2006
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Москва
    а что там непонятного?

    смотри....

    допустип что тебе надо прибавлять к какому то числу хранящемуся в переменной $a число хранящееся в $b определенно колличество раз... например 5 раз...

    когда заранее точно известно колличество повторений лучше испольтзовать цикл for...

    так вот пишем следующий код

    <?php

    //определяем переменные
    $a = 3;
    $b = 2;

    //цикл проходящий 5 раз
    for($i=1; $i<=5; $i++)
    {
    $a = $a + $b;
    }

    echo "$a";

    ?>

    в данном цикле используется переменная - счетчик $i... на каждом проходе цикла эта переменная будет увеличиваться на столько на сколько нам нужно... в данном случае на единицу ($i++ равносильно $i = $i + 1;) и весь цикл будет продолжаться до тех пор пока выполняется второе условие в нашем случае $i<=5;

    цикл while применяется тогда когда нам не известно точное колличество повторений... например нам нужно складывать числа пока результат не будет больше 10... тада пишем:

    <?php

    //определяем переменные
    $a = 3;
    $b = 2;

    while($a<=10)
    {
    $a = $a + $b;
    }

    echo "$a"

    ?>
     
  8. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Это ему нужно не по PHP книгу читать, а про программирование как таковое. Сомневаюсь, что Максим Кузнецов и Игорь Симдянов учат в своей книге программированию на примере PHP5.
     
  9. pascal

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

    С нами с:
    22 апр 2006
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    Москва
    Почитай книгу Окулова "Основы программирования". Я по ней учился программированию... Там подробно и с примерами учат как самому писать алгоритмы.
     
  10. Lobster

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

    С нами с:
    10 авг 2006
    Сообщения:
    29
    Симпатии:
    0
    у меня нет возможности купить себе еще одну книгу (дело не в деньгах)

    поэтому довольствуюсь тем что есть, а есть пхп5 и все :(!
     
  11. vb

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

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    мда.... сортировки сортировки... какое отношение это имеет к пхп слабо представлю....

    "Придумать алгоритм сортировки" - гы :)))

    Вообще они уже придуманы, и чтобы изобрести что-то новое - это уж точно не к начинающему.

    Чего дальше новичку пхп предложите? Стеки и очереди? :)

    По моему сортировку нет смысла столько размусоливать - достоточно прочитать любую книгу по структурам данных и алгоритмам - например Альфреда Ахо или Вирта и человек в шоколоде - знаком со всеми основами алгоритмов. Дальше уже думать - углубляться в тему или идти дальше.

    Я из своего опыта уже не раз разочаровался в пхп, потому как написание на нем сложных алгоритмов с активным использованием паттернов проектирования порождает тормознутую систему :(

    Сортировка пузырьковым методом достоточно тормознутая и в качестве примера не годится. В пхп человек не будет применять свои функции сортировки, потому как это будет медленнее встроенных, а сдедовотельно нет смысла заморачиваться с ними. Только для общего развития.

    На мой взгляд, так как язык в большинстве случаев идет в связке с базами данных человеку надо хорошенько поработать именно над этим вопросом.

    Далее нужно разобраться с регулярными выражениями и всеми функции по работе с ними, ибо это мощная фича языка.

    Кроме того, я бы уделил внимание функциям по работе с массивами, в пхп их очень много, и лучше их знать.

    Файлы...

    После надо подумать на что заострить внимание.

    Осталось придумать задачу на то что написано выше...
    могу предложить такую:
    Есть поля ввода - select, textarea.
    В select выбирается база данных.
    В textarea вводятся SQL запросЫ (разделитель ";", см. phpmyadmin ). После нажатия кнопки submit все запросы должны отработать для выбранной БД. Информация о невыполненных запросах(ошибках) должна выводиться. С указанием подробностей (пхп-файл, функция, номер строки, номер sql ошибки, причина, сам запрос).

    Вывод результатов должен формироваться в html таблицах. Количество полей и их содержание заранее не известно. Таблицы должны строиться не менее чем из трех html шаблонов типа:
    1. <table ...> ...</table> - таблица
    2. <tr>....</tr> - запись
    3. <td ...>...</td> - ячейка
    Результат записывается в сгенерированную из этих шаблонов таблицу.

    Шаблоны должны находиться в html файлах и не должны содержать ни одной строчки пхп - ТОЛЬКО HTML.
    в пхп файлах не должно быть ни одной строчки HTML.

    Вроде все написал.

    С уважением, vb
     
  12. karatist

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

    С нами с:
    15 авг 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Орел
    не согласен с vb. сортировка - хорошее задание.
    если начинать со сложных вещей, или точнее пропуская самые простые вещи, все равно вскоре придешь к тому что надо осознать как работает самое простое.

    выполняя как можно более простую задачу способен понять логику языка. разбираясь с задачей организовать регистрацию на сайте будешь скорее думать не о синтаксе php, а о том что такое HTML, СУБД и прочие неподъемные на первый взгляд вещи.

    про алгоритмы: это действительно имеет мало связи с пхп. пусть испытуемый сам решит воспользоваться готовым алгоритмом с помощью к примеру:
    http://algolist.manual.ru/sort/
    http://www.avhohlov.narod.ru/p0010ru.htm
    http://ru.wikipedia.org/wiki/%D0%90%D0% ... 0.BA.D0.B8

    или самому придумать алгоритм.

    я тоже ньюби в пхп и если ALL не против хотел бы представить на суд свой код сортировки:

    Код (Text):
    1.  
    2. <?php
    3. $ar = array (1,12,334,5,6,7,9,0);
    4.  
    5.     foreach ($ar as $value) {
    6.     echo $value;
    7.     echo "\n<br>";
    8.     }
    9.  
    10. function sorting($arr, $direction=0, $algo=0){
    11. // direction = forward|0
    12. //         reverse|1
    13. // algo      = bubble|0 - number of itterations n*(n-1)
    14. //         
    15.  switch ($algo) {
    16.  case "bubble":
    17.  case 0:
    18.  default:
    19.   for ($i = 0; $i <= count($arr)-1; $i++) {
    20.     for ($j = 0; $j <= count($arr)-2; $j++) {
    21.      switch ($direction) {
    22.      case "reverse":
    23.      case "1":
    24.       if ($arr[$j] < $arr[$j+1]) {
    25.        $temp = $arr[$j];
    26.        $arr[$j] = $arr[$j+1];
    27.        $arr[$j+1] = $temp;
    28.       }
    29.       break;
    30.      case "forward":
    31.      case "0":
    32.      default:
    33.       if ($arr[$j] > $arr[$j+1]) {
    34.        $temp = $arr[$j];
    35.        $arr[$j] = $arr[$j+1];
    36.        $arr[$j+1] = $temp;
    37.       }
    38.      } //switch
    39.     } //for
    40.   } //for
    41.  } //switch
    42.   return $arr;
    43. }
    44.     $ar1 = sorting($ar,"1","bubble");
    45.  
    46.     echo "<br><br>";
    47.     foreach ($ar1 as $value) {
    48.     echo $value;
    49.     echo "\n<br>";
    50.     }
    51.  
    52. ?>
    53.  
     
  13. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Поддерживаю :) Разбираться с функциями работы с файлами или с базами данных не зная элементарного - это поспешно. Хотя, конечно, сортировка не имеет прямого отношения к PHP.

    И вообще, если человек сам не научится, то никто его не научит. Те, кто хотят, штудируют книги. А те, кто просят научить программированию, как правило самим программированием не интересуются. по алгоритмическим задачам есть целые сайты. Практические задачи можно придумать себе самому: достаточно покапаться в интернете и захотеть сделать что-то свое, но, естественно, лучше :) Ко мне не раз обращались уже с просьбой научить программированию, дать какие-то задания... Я сделал вывод, что это бесполезное занятие. Вот лично мне никто заданий не давал. Я их сам всегда придумывал. Конечно, может я и ошибаюсь. Это моя субъективная точка зрения, основанная на моих попытках помочь "нуждающимся".
     
  14. karatist

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

    С нами с:
    15 авг 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Орел
    понятное дело, что задачу можно ставить и самому, а от форума я жду критики которая поможет мне вырасти быстрее, чем если бы я варился в собственному соку.
     
  15. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Ну так в чем же проблема? Выбери задачу, реализуй, обнародуй сорцы - и мы тебе устроим публичную порку :))) Благо, критиковать любят все. И медом прикармливать не надо. Попросишь - тебя так раскритикуют, что мало не покажется :)))) Так и ты получишь свою критику, и мы не будем спорить по поводу того, какие задачи тебе нужно давать :) Как тебе такой вариант? ;-)
     
  16. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Не понимаю... зачем изобретать колесо... php тем и приятен, что предоставляет инструмент...
    Код (Text):
    1. Example 1. sort() example
    2.  
    3. <?php
    4.  
    5. $fruits = array("lemon", "orange", "banana", "apple");
    6. sort($fruits);
    7. reset($fruits);
    8. while (list($key, $val) = each($fruits)) {
    9.     echo "fruits[" . $key . "] = " . $val . "\n";
    10. }
    11.  
    12. ?>  
    13.  
    14. The above example will output:
    15.  
    16. fruits[0] = apple
    17. fruits[1] = banana
    18. fruits[2] = lemon
    19. fruits[3] = orange
    Разве этого недостаточно... поправьте меня еси не прав... :)
     
  17. karatist

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

    С нами с:
    15 авг 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Орел
    2 Raa: код на два сообщения выше. начнем с простого. комментарии - велком.

    2topas: задание - исполнить без использования станд функций. более общая задача - разобраться в началах. не понял начала - как идти дальше?
    просто здесь встречаются начинающие не только в пхп, но и в программировании в общем. а это уже ..хмм..
     
  18. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Если без стандартных функций, то согласен... но...
    имхо начинать нужно именно с Pascale... а браться за Си или ПХП не зная азов программирования... что-то сомнительно я к этому отношусь...
     
  19. Петр

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

    С нами с:
    20 мар 2006
    Сообщения:
    1.253
    Симпатии:
    0
    Адрес:
    Центр Вселенной
    topas
    Вот я всем в приватной беседе рекомендую начинать с паскаля.
    Паскаль для того и был разработан, чтобы обучать программированию.
    От этого он и строгий язык.
    И стиль выработается, и знания по основам программирования будут.
     
  20. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Код настолько трудночитабильный, что лично мне лень в нем разбираться. Как-то отступы у тебя гуляют, да и маловаты они.

    Не стоит писать функцию на все случаи жизни. Напиши отдельно функцию на пузырькового метода, и отдельно для линейного, и отдельно еще для какого-то. На то они и функции, чтобы каждая занималась чем-то своим. А у тебя получается универсальная функция. Если еще немного доработать, то получится, что ты будешь в качестве параметра передавать строку типа "отсортируй массив" или "почисти картошку", а она тебе будет делать что не прикажешь :) Если простая функция содержит несколько страниц кода, то следует подумать о том, чтобы разбить ее.

    Не нужно для направления сортировки ставить switch. Управлять этим можно путем введения булевой переменной, и используя ее в логическом выражении сравнения. Таким образом, один участок кода будет сортировать в любом направлении.
     
  21. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Смущает только, что когда мы начинали, на нем можно было еще писать что-то полезное. А сейчас - разве что поучиться. А ведь хочется, чтобы твоя программа не просто заработала, но еще и была полезной.
     
  22. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Еще вместо
    PHP:
    1. for ($i = 0; $i <= count($arr)-1; $i++)
    обычно пишут
    PHP:
    1. for ($i = 0; $i < count($arr); $i++)
    Незачем писать лишние операторы.

    И еще вопрос. Сколько сравнений выполнит твоя функция, чтобы отсортировать по возрастанию такой массив?
    PHP:
    1. $arr = array(1,0,2,3,4,5,6,7,8,9)
    И сколько на самом деле нужно выполнить сравнений, чтобы полностью его отсортировать?
     
  23. karatist

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

    С нами с:
    15 авг 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Орел
    да вроде все в соответсвии с рекомендациями...
    почитаю мануал по PEAR. там вроде с этим строго.

    согласен. максимализм мешает, и фантазии о создании супер пуупр библиотек.

    согласен. идея приходила на ум, но почему-то я пытался все в месте сравнения усложнить, что так оставить мне показалось будет оптимальнее.
     
  24. karatist

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

    С нами с:
    15 авг 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Орел
    принимается.
    про алгоритм: должно быть n**2, или точнее n*(n-1) в классическом пузырьковом... или это намек на то что следут использовать другие алгоритмы?
     
  25. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Оптимальность - весч нужная. Только не всегда стоит гнаться за ней в ущерб всему остальному. Часто то, что ты оптимизируешь, будет составлять мене одного процента от общего выполняемого кода, в том числе и скомпилированного кода используемых тобой библиотек. Программируя - программируй так, чтобы упрощать свою работу.

    Что касается данного случая, то никакой оптимизации у тебя не произошло. Ты все равно в цикле прокручиваешь switch. В случае, сли бы тебе пришлось выжимать последнюю каплю оптимальности из этой функции, условный оператор следовало бы вынести поверх циклов, таким образом, чтобы в каждом из случаев работали свои циклы, а внурти них уже не было никаких повторяющихся проверок направления.