Alukard Сделай пузырьковую сортировку. Давай вместе помозгуем, что нам надо. Представь классный журнал. В журнале от А до Я в алфавитном порядке написаны фамилии учеников: Абдулаев Батарейкин Васечкин Герасимов Ежиков Иванов Козлов Петров Сидоров Щукин Сейчас они в алфавитном порядке. А пришли к нам 3 человека, чьи фамилии не шли по алфавиту, но на данной странице были записаны в конец: Азбукин Константинов Чебурашкин За один заход ты можешь поменять местами только двух человек, стоящих рядом, а потом еще двух стоящих рядом, но дальше, и так до конца этого массива в этом проходе. Т. е. чтобы новички встали на место, нужно до определенного момента поднимать их на одну строку выше. Суперподсказка. Два цикла for. Одно условие if. Одна буферная переменная, для замены. Прогонять первый цикл надо до длины массива минус один элемент.
Петр, спасибо что пытаешься разьяснить но я пока на цыфрах попробую, так легче Raa, ну как я понял меня щас должны посвятить этими сортировками, а потом сделаю твое задание З.Ы. Пока заданий больше ненадо...делаю сортировку цыфр, пузырчатым методом...
эх, я бы тоже принял участие, но пока мало знаю пхп. читаю книгу PHP5 (Максим Кузнецов, Игорь Симдянов) тока начал, это моя первая книга по пхп, дошел тока до работы с файлами и дирректориями . ЗЫ: и еще не понял цикл for и while . может кто подскажет
а что там непонятного? смотри.... допустип что тебе надо прибавлять к какому то числу хранящемуся в переменной $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" ?>
Это ему нужно не по PHP книгу читать, а про программирование как таковое. Сомневаюсь, что Максим Кузнецов и Игорь Симдянов учат в своей книге программированию на примере PHP5.
Почитай книгу Окулова "Основы программирования". Я по ней учился программированию... Там подробно и с примерами учат как самому писать алгоритмы.
у меня нет возможности купить себе еще одну книгу (дело не в деньгах) поэтому довольствуюсь тем что есть, а есть пхп5 и все !
мда.... сортировки сортировки... какое отношение это имеет к пхп слабо представлю.... "Придумать алгоритм сортировки" - гы )) Вообще они уже придуманы, и чтобы изобрести что-то новое - это уж точно не к начинающему. Чего дальше новичку пхп предложите? Стеки и очереди? По моему сортировку нет смысла столько размусоливать - достоточно прочитать любую книгу по структурам данных и алгоритмам - например Альфреда Ахо или Вирта и человек в шоколоде - знаком со всеми основами алгоритмов. Дальше уже думать - углубляться в тему или идти дальше. Я из своего опыта уже не раз разочаровался в пхп, потому как написание на нем сложных алгоритмов с активным использованием паттернов проектирования порождает тормознутую систему Сортировка пузырьковым методом достоточно тормознутая и в качестве примера не годится. В пхп человек не будет применять свои функции сортировки, потому как это будет медленнее встроенных, а сдедовотельно нет смысла заморачиваться с ними. Только для общего развития. На мой взгляд, так как язык в большинстве случаев идет в связке с базами данных человеку надо хорошенько поработать именно над этим вопросом. Далее нужно разобраться с регулярными выражениями и всеми функции по работе с ними, ибо это мощная фича языка. Кроме того, я бы уделил внимание функциям по работе с массивами, в пхп их очень много, и лучше их знать. Файлы... После надо подумать на что заострить внимание. Осталось придумать задачу на то что написано выше... могу предложить такую: Есть поля ввода - select, textarea. В select выбирается база данных. В textarea вводятся SQL запросЫ (разделитель ";", см. phpmyadmin ). После нажатия кнопки submit все запросы должны отработать для выбранной БД. Информация о невыполненных запросах(ошибках) должна выводиться. С указанием подробностей (пхп-файл, функция, номер строки, номер sql ошибки, причина, сам запрос). Вывод результатов должен формироваться в html таблицах. Количество полей и их содержание заранее не известно. Таблицы должны строиться не менее чем из трех html шаблонов типа: 1. <table ...> ...</table> - таблица 2. <tr>....</tr> - запись 3. <td ...>...</td> - ячейка Результат записывается в сгенерированную из этих шаблонов таблицу. Шаблоны должны находиться в html файлах и не должны содержать ни одной строчки пхп - ТОЛЬКО HTML. в пхп файлах не должно быть ни одной строчки HTML. Вроде все написал. С уважением, vb
не согласен с 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): <?php $ar = array (1,12,334,5,6,7,9,0); foreach ($ar as $value) { echo $value; echo "\n<br>"; } function sorting($arr, $direction=0, $algo=0){ // direction = forward|0 // reverse|1 // algo = bubble|0 - number of itterations n*(n-1) // switch ($algo) { case "bubble": case 0: default: for ($i = 0; $i <= count($arr)-1; $i++) { for ($j = 0; $j <= count($arr)-2; $j++) { switch ($direction) { case "reverse": case "1": if ($arr[$j] < $arr[$j+1]) { $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } break; case "forward": case "0": default: if ($arr[$j] > $arr[$j+1]) { $temp = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $temp; } } //switch } //for } //for } //switch return $arr; } $ar1 = sorting($ar,"1","bubble"); echo "<br><br>"; foreach ($ar1 as $value) { echo $value; echo "\n<br>"; } ?>
Поддерживаю Разбираться с функциями работы с файлами или с базами данных не зная элементарного - это поспешно. Хотя, конечно, сортировка не имеет прямого отношения к PHP. И вообще, если человек сам не научится, то никто его не научит. Те, кто хотят, штудируют книги. А те, кто просят научить программированию, как правило самим программированием не интересуются. по алгоритмическим задачам есть целые сайты. Практические задачи можно придумать себе самому: достаточно покапаться в интернете и захотеть сделать что-то свое, но, естественно, лучше Ко мне не раз обращались уже с просьбой научить программированию, дать какие-то задания... Я сделал вывод, что это бесполезное занятие. Вот лично мне никто заданий не давал. Я их сам всегда придумывал. Конечно, может я и ошибаюсь. Это моя субъективная точка зрения, основанная на моих попытках помочь "нуждающимся".
понятное дело, что задачу можно ставить и самому, а от форума я жду критики которая поможет мне вырасти быстрее, чем если бы я варился в собственному соку.
Ну так в чем же проблема? Выбери задачу, реализуй, обнародуй сорцы - и мы тебе устроим публичную порку )) Благо, критиковать любят все. И медом прикармливать не надо. Попросишь - тебя так раскритикуют, что мало не покажется ))) Так и ты получишь свою критику, и мы не будем спорить по поводу того, какие задачи тебе нужно давать Как тебе такой вариант? ;-)
Не понимаю... зачем изобретать колесо... php тем и приятен, что предоставляет инструмент... Код (Text): Example 1. sort() example <?php $fruits = array("lemon", "orange", "banana", "apple"); sort($fruits); reset($fruits); while (list($key, $val) = each($fruits)) { echo "fruits[" . $key . "] = " . $val . "\n"; } ?> The above example will output: fruits[0] = apple fruits[1] = banana fruits[2] = lemon fruits[3] = orange Разве этого недостаточно... поправьте меня еси не прав...
2 Raa: код на два сообщения выше. начнем с простого. комментарии - велком. 2topas: задание - исполнить без использования станд функций. более общая задача - разобраться в началах. не понял начала - как идти дальше? просто здесь встречаются начинающие не только в пхп, но и в программировании в общем. а это уже ..хмм..
Если без стандартных функций, то согласен... но... имхо начинать нужно именно с Pascale... а браться за Си или ПХП не зная азов программирования... что-то сомнительно я к этому отношусь...
topas Вот я всем в приватной беседе рекомендую начинать с паскаля. Паскаль для того и был разработан, чтобы обучать программированию. От этого он и строгий язык. И стиль выработается, и знания по основам программирования будут.
Код настолько трудночитабильный, что лично мне лень в нем разбираться. Как-то отступы у тебя гуляют, да и маловаты они. Не стоит писать функцию на все случаи жизни. Напиши отдельно функцию на пузырькового метода, и отдельно для линейного, и отдельно еще для какого-то. На то они и функции, чтобы каждая занималась чем-то своим. А у тебя получается универсальная функция. Если еще немного доработать, то получится, что ты будешь в качестве параметра передавать строку типа "отсортируй массив" или "почисти картошку", а она тебе будет делать что не прикажешь Если простая функция содержит несколько страниц кода, то следует подумать о том, чтобы разбить ее. Не нужно для направления сортировки ставить switch. Управлять этим можно путем введения булевой переменной, и используя ее в логическом выражении сравнения. Таким образом, один участок кода будет сортировать в любом направлении.
Смущает только, что когда мы начинали, на нем можно было еще писать что-то полезное. А сейчас - разве что поучиться. А ведь хочется, чтобы твоя программа не просто заработала, но еще и была полезной.
Еще вместо PHP: for ($i = 0; $i <= count($arr)-1; $i++) обычно пишут PHP: for ($i = 0; $i < count($arr); $i++) Незачем писать лишние операторы. И еще вопрос. Сколько сравнений выполнит твоя функция, чтобы отсортировать по возрастанию такой массив? PHP: $arr = array(1,0,2,3,4,5,6,7,8,9) И сколько на самом деле нужно выполнить сравнений, чтобы полностью его отсортировать?
да вроде все в соответсвии с рекомендациями... почитаю мануал по PEAR. там вроде с этим строго. согласен. максимализм мешает, и фантазии о создании супер пуупр библиотек. согласен. идея приходила на ум, но почему-то я пытался все в месте сравнения усложнить, что так оставить мне показалось будет оптимальнее.
принимается. про алгоритм: должно быть n**2, или точнее n*(n-1) в классическом пузырьковом... или это намек на то что следут использовать другие алгоритмы?
Оптимальность - весч нужная. Только не всегда стоит гнаться за ней в ущерб всему остальному. Часто то, что ты оптимизируешь, будет составлять мене одного процента от общего выполняемого кода, в том числе и скомпилированного кода используемых тобой библиотек. Программируя - программируй так, чтобы упрощать свою работу. Что касается данного случая, то никакой оптимизации у тебя не произошло. Ты все равно в цикле прокручиваешь switch. В случае, сли бы тебе пришлось выжимать последнюю каплю оптимальности из этой функции, условный оператор следовало бы вынести поверх циклов, таким образом, чтобы в каждом из случаев работали свои циклы, а внурти них уже не было никаких повторяющихся проверок направления.