Никто и неговорит что этого не нужно знать, только если ты намерен учиться _программировать_ велкАм в паскаль и литературу по алгоритмам и структурам данных. Лучшее что-то сложно посоветовать. А если ты уже умеешь _программировать_ и хочешь изучить пхп, то задачи на сортировки в пхп - это бред. Учиться _программировать_ на пхп - это в принципе противопоказано. Не тот это язык, на котором учатся программировать. Если уже умеешь программировать то сортировки полюбому должен знать, а следовательно достаточно их только повторить vb
Это намек на то, что не всегда нужно n^2 сравнений, чтобы полностью отсортировать. В данном случае достаточно 2*(n-1) сравнений: первый проход - чтобы упорядочить единственную неупорядоченную пару (1,0), а второй - чтобы убедиться, что все стоит на своих местах. В твоем же случае даже на полностью упорядоченном массиве функция будет отрабатывать по n^2, что явно излишне n^2 имеет место только в том случае, если самый маленький элемент стоит в самом конце, или наоборот, а вероятность этого довольно слабая. В общем, оптимизируй ;-) правка: чуток напутал с "проходами"
Хелло ворлд имеет значение на чем написать? Какова полезность этих слов? Паскаль штука такая, которая на мой взгляд просто то что надо для обучения программированию. И в первую очередь за счет того что не позволяет разводить такой бардак как в С++ или еще хуже РНР, паскаль сразу учит касоте кода...
Фишка в том, что в наше время на паскале практически не пишут полезные приложения. Если человек учит PHP, он вдохновляется тем, что потом напишет крутой портал или ЦМС. Если же он пишет на паскале, то в его голове неизменно крутится мысль, что он учит паскаль только ради того, чтобы научиться программированию, и потом ему прийдется учить другой язык. А где та грань, после которой с паскаля можно переходить на PHP? Кто ему скажет "все, ты научился, можешь учить другой язык"? Это бесцельное изучение, без явно выраженной цели. Практически невозможно добиться успеха в чем-то, когда не видишь четко и ясно перед собой цель. Да, нужно знать несколько языков, чтобы быть хорошим программистом. Ибо программист - это не просто кодер, и язык программирования - это всего лишь инструмент. Только паскаль, как бы удобен он не был для обучения, все же он потерял свою привлекательность, поскольку нет никаких ясных, понятных и, главное, привлекательных целей, чтобы его изучать. И поэтому интуитивно новечки бросаются на более популярные языки. Так как не понятно, зачем учить паскаль, и сколько его учить. А можно ли переходить с паскаля, прочитав от корки до корки учебник по этому прекрасному языку? А прочитать - означает ли понять? А может быть нужно сначала попрактиковаться на паскале более продолжительное время, чтобы в голове не образовалась каша из языков? Но сколько? Нету!... Нету цели! Нет признаков того, что можно переходить на другой язык. Как не крути, а все равно начинающий программист быстро соскучится и перепрыгнет на изучения другого языка, так и не встав крепко на ноги. Единственное, что имеет смысл, это идти в какое-нибудь учебное заведение, в котором преподают паскаль. Так у него будет цель: отучиться положенный срок, превзойти одногрупников в программировании на изучаемом языке, на отлично выполнить все задания. И главное, конечная цель будет четко определена по времени. А иначе нет смысла пинать людей на изучение паскаля. Не будет ни у кого стимула им заниматься, и мало кому это принесет большую пользу. Можете закидать меня камнями, если вы все начинали с паскаля, не имея при этом никакого другого стимула и интереса к его изучению, кроме как обучение основам програмирования, и осознанно штудировали его с мыслью о том, что это вам нужно только для того, чтобы потом хорошо программировать на других языках.
Ну что ж... попробуем... мой вариант... Критиков в студию! Код (Text): <? // Сортировка в "правильном" порядке пузырьковым методом. // Для обратного порядка рекомендую написать вторую функцию, // т.к. порядок прохождения массива нужно будет изменить. function my_sort(&$arr){ for ($i=1; $i < count($arr); $i++){ //Проходим все эл-ты массива if ($arr[$i-1] > $arr[$i]){ //Если текущий эл-т меньше предыдущего, то... $temp = $arr[$i-1]; //..."Меняем местами ".$arr[$i-1]." и ".$arr[$i]." $arr[$i-1] = $arr[$i]; $arr[$i] = $temp; $i--; //После перепозиционированния проверим текущий //элемент еще один раз, но уже с новыми соседями. } } return $arr; } $my_arr = array(1,0,2,3,4,5,6,7,8,9); echo ("<b>Исходный массив:</b><br>"); print_r($my_arr); echo ("<br><b>Отсортированный массив:</b><br>"); print_r(my_sort($my_arr)); ?>
имеется ввиду оптимизация по времени исполнения?.... хатя сейчас наверно только по времени выполнения и есть смысл. ну для пхп еще оптимизация получаемого кода, наверно. еще вопрос: как лучше передать в функцию массив? 1. function sample ( &$arr) 2. function sample ( $arr) { .. return $arr;} или может быть 3. function sample (&$arr) { .. return $arr;} соответственно вызывать 1. sample($arr) 2. $arr=sample($arr) 3. оба варианта
Гы ) Да ничего не делать! )) Делай то, что хочется. Другого, думаю, делать и не станешь Если видишь смысл тренироваться на паскале - тренируйся на здоровье. А не видишь - никакие советы изучать его тебя не переубедят, и все равно будешь учиться на PHP, если тебе не станет интересен паскаль
Нет. Имеется в виду оптимизация алгоритма. Второый случай выглядит более наглядно, чем первый. Но во втором случае происходит копирование массива, что будет работать чуток медленнее, чем передача по ссылке. В третьем случае ты сам себя путаешь. Чтобы выбрать между первым и вторым способом, попробуй засечь время выполнения функции (можно прокрутить сто-тыщщу вызовов в цикле), и посмотреть, насколько выигрыш от передачи по ссылке сопоставим со временем выполнения самой функции. Не зубадь поделиться результатами тестирования
topas, а что это за алгоритм ? хотелось бы найти его описание на русском. и убедиться в его устойчивости.
Raa: Смущает только, что когда мы начинали, на нем можно было еще писать что-то полезное. А сейчас - разве что поучиться. А ведь хочется, чтобы твоя программа не просто заработала, но еще и была полезной. Если хочешь учится на Паскале и чтобы твоя прога была полезной начинай сразу с Delphi. Там можно создать много простых и красивых прикладных программ. До того времени как стал заниматься вебом я только на делфи и программил. Очень хорошая среда. А вообще лучше сначала потратить время на создание простых и бесполезных программ, и научится программированию. А потом уже переходить к большим проектам, кторые имеют пользу.
Паскаль плавно мутировал в Delphi, на котором что-то да пишут до сих пор. Так же я бы советовал поучить assembler.
karatist, насчет устойчивости.... думать надо, а мне лениво... вон Raa какие хитрые массивы подкидывает так что если видишь каку-ть bug говори... а про описание на русском... что ж... если не изменяет память, то это обыкновенный пузырек...
Согласен. А не слишком ли для новичков сразу влазить в ООП среду?... Полюбому Грех не знать асм Короче, господа учащиеся, вам - прямая дорога в высшие учебные заведения. мне кажется, это самое лучшее, что можно посоветовать. Учиться все равно самому прийдется, и без желания - никуда, но всестороннему развитию ВУЗы способствуют неплохо
Самый простой способ научиться программировать, т.е. создавать аглоритмы, писать блок схемы. Затрат минимум - листок бумаги и карандаш, наглядности максимум - по стрелкам видно куда переходить при тех или иных условиях А вот где реализовать этот алгоритм, зависит от поставленной задачи: для веб - PHP, ASP, Perl...., для винды - Delphi, C. Например, аглоритм решения квадратного уравнения один, а реализовать можно на чем угодно.
Признаться, впервые вижу такой пузырек ) Похож, но немножко не такой. Работает - это еще не значит, что алгоритм правильный. Написал - теперь доказывай ;-) И сложность алгоритма заодно выведи Кстати: Notice: Undefined offset: -1 Нотисы - нехорошо.
Основной закон оптимизации — никогда не расчитывать в циклах то, что можно расчитать до них. Код (Text): $sz = sizeof( $arr ); for ( $i = 1; $i < $sz; $i++ )
2Raa не согласен... у нас на потоке из 120 человек закончило только человек 40... паскаль изучался на первом курсе... досконально язык знают человек пять от силы (из 120)... может конечно "промышленной электроннике" не нужны программисты, но как-никак корочки "инженер-программист" специальность выдает ... имхо: нужно брать учебник по паскалю (например Фаронов) и штудировать его со всеми примерами... пропустить раздел с указателями правда рекомендую... крестики нолики и все такое... мне было например это было интересно... когда почувствуешь силы, можешь написать например bmp редактор... конечно, получится мож так себе, но удовольствия будет немерено... Да какие угодно можно поставить задачи и попытаться реализовать их на паскале... было бы желание... начинать с пхп это самоуничтожение в себе программиста, хотя если желание велико, то почему бы и нет конечно... но... но... рекомендую всем паскаль...
С вашего позволения, я поумничаю ) В данном случае считаю, что vasa_c справделиво заметил допускаемую многими оплошность: вычисление размера массива внутри цикла по нему. Я сам не могу себя отучить от этой привычки. А вообще, оптимизации бывают разными: оптимизация производительности, объема используемой памяти, и... даже объема кода. Как правило, оптимизация по одному из параметров требует уступок со стороны других параметров. Поэтому, имеет смысл помнить о том, что оптимизируя одно ты теряешь в другом. Например, в некоторых случаях вынос условия за пределы цикла увеличивает в несколько раз и без того большой код, делая неудобным его сопровождение. Если этот код вызывается раз в сто лет, то вполне можно пожертвовать тем ничтожным выиграшем ради объема кода. Т.е., происходит обратная оптимизация: объема кода в ущерб производительности.
Извини, не понял с чем именно Я может недостаточно четко подчеркнул свою мысль. Я с тобой согласен. Паскаль - весч. Если у тебя есть желание им заниматься - это великолепно.