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

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

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

  1. vb

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

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Никто и неговорит что этого не нужно знать, только если ты намерен учиться _программировать_ велкАм в паскаль и литературу по алгоритмам и структурам данных. Лучшее что-то сложно посоветовать. А если ты уже умеешь _программировать_ и хочешь изучить пхп, то задачи на сортировки в пхп - это бред. Учиться _программировать_ на пхп - это в принципе противопоказано. Не тот это язык, на котором учатся программировать.
    Если уже умеешь программировать то сортировки полюбому должен знать, а следовательно достаточно их только повторить

    vb
     
  2. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Это намек на то, что не всегда нужно n^2 сравнений, чтобы полностью отсортировать. В данном случае достаточно 2*(n-1) сравнений: первый проход - чтобы упорядочить единственную неупорядоченную пару (1,0), а второй - чтобы убедиться, что все стоит на своих местах. В твоем же случае даже на полностью упорядоченном массиве функция будет отрабатывать по n^2, что явно излишне :) n^2 имеет место только в том случае, если самый маленький элемент стоит в самом конце, или наоборот, а вероятность этого довольно слабая. В общем, оптимизируй ;-)

    правка: чуток напутал с "проходами" :)
     
  3. vb

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

    С нами с:
    6 июн 2006
    Сообщения:
    911
    Симпатии:
    0
    Адрес:
    Saint-Petersburg
    Хелло ворлд имеет значение на чем написать? Какова полезность этих слов?

    Паскаль штука такая, которая на мой взгляд просто то что надо для обучения программированию. И в первую очередь за счет того что не позволяет разводить такой бардак как в С++ или еще хуже РНР, паскаль сразу учит касоте кода...
     
  4. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    наверное, именно поэтому я и никогда не писал "хелло ворлд" :)))

    Никто ж не спорит.
     
  5. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Фишка в том, что в наше время на паскале практически не пишут полезные приложения. Если человек учит PHP, он вдохновляется тем, что потом напишет крутой портал или ЦМС. Если же он пишет на паскале, то в его голове неизменно крутится мысль, что он учит паскаль только ради того, чтобы научиться программированию, и потом ему прийдется учить другой язык. А где та грань, после которой с паскаля можно переходить на PHP? Кто ему скажет "все, ты научился, можешь учить другой язык"? Это бесцельное изучение, без явно выраженной цели. Практически невозможно добиться успеха в чем-то, когда не видишь четко и ясно перед собой цель. Да, нужно знать несколько языков, чтобы быть хорошим программистом. Ибо программист - это не просто кодер, и язык программирования - это всего лишь инструмент. Только паскаль, как бы удобен он не был для обучения, все же он потерял свою привлекательность, поскольку нет никаких ясных, понятных и, главное, привлекательных целей, чтобы его изучать. И поэтому интуитивно новечки бросаются на более популярные языки. Так как не понятно, зачем учить паскаль, и сколько его учить. А можно ли переходить с паскаля, прочитав от корки до корки учебник по этому прекрасному языку? А прочитать - означает ли понять? А может быть нужно сначала попрактиковаться на паскале более продолжительное время, чтобы в голове не образовалась каша из языков? Но сколько? Нету!... Нету цели! Нет признаков того, что можно переходить на другой язык. Как не крути, а все равно начинающий программист быстро соскучится и перепрыгнет на изучения другого языка, так и не встав крепко на ноги. Единственное, что имеет смысл, это идти в какое-нибудь учебное заведение, в котором преподают паскаль. Так у него будет цель: отучиться положенный срок, превзойти одногрупников в программировании на изучаемом языке, на отлично выполнить все задания. И главное, конечная цель будет четко определена по времени. А иначе нет смысла пинать людей на изучение паскаля. Не будет ни у кого стимула им заниматься, и мало кому это принесет большую пользу.

    Можете закидать меня камнями, если вы все начинали с паскаля, не имея при этом никакого другого стимула и интереса к его изучению, кроме как обучение основам програмирования, и осознанно штудировали его с мыслью о том, что это вам нужно только для того, чтобы потом хорошо программировать на других языках.
     
  6. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Ну что ж... попробуем... мой вариант... Критиков в студию!
    Код (Text):
    1. <?
    2. //  Сортировка в "правильном" порядке пузырьковым методом.
    3. //  Для обратного порядка рекомендую написать вторую функцию,
    4. //  т.к. порядок прохождения массива нужно будет изменить.
    5. function my_sort(&$arr){
    6.     for ($i=1; $i < count($arr); $i++){  //Проходим все эл-ты массива
    7.         if ($arr[$i-1] > $arr[$i]){      //Если текущий эл-т меньше предыдущего, то...
    8.            $temp = $arr[$i-1];           //..."Меняем местами ".$arr[$i-1]." и ".$arr[$i]."
    9.            $arr[$i-1] = $arr[$i];
    10.            $arr[$i]   = $temp;
    11.            $i--;                         //После перепозиционированния проверим текущий
    12.                                          //элемент еще один раз, но уже с новыми соседями.
    13.         }
    14.     }
    15.     return $arr;
    16. }
    17.  
    18.     $my_arr = array(1,0,2,3,4,5,6,7,8,9);
    19.     echo ("<b>Исходный массив:</b><br>");
    20.     print_r($my_arr);
    21.     echo ("<br><b>Отсортированный массив:</b><br>");
    22.     print_r(my_sort($my_arr));
    23. ?>
     
  7. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Черт возьми ты прав, а что делать?
     
  8. karatist

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

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

    еще вопрос: как лучше передать в функцию массив?
    1. function sample ( &$arr)
    2. function sample ( $arr)
    {
    ..
    return $arr;}

    или может быть
    3. function sample (&$arr)
    {
    ..
    return $arr;}

    соответственно вызывать
    1. sample($arr)
    2. $arr=sample($arr)
    3. оба варианта
     
  9. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Гы :)) Да ничего не делать! :))) Делай то, что хочется. Другого, думаю, делать и не станешь :) Если видишь смысл тренироваться на паскале - тренируйся на здоровье. А не видишь - никакие советы изучать его тебя не переубедят, и все равно будешь учиться на PHP, если тебе не станет интересен паскаль :)
     
  10. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Мне третий вариант больше нравится... использовать мне будет удобно... :)
     
  11. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    А на таком массиве пробовал потестить?

    PHP:
    1. $my_arr = array(9,1,8,2,7,3,6,4,5,0);
     
  12. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    угу... понял косяк :)_
    а попробуй так:
    PHP:
    1.  
    2.     $i--;$i--;
    3.  
    ... Не знаю как... но работает :)
     
  13. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Нет. Имеется в виду оптимизация алгоритма.

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

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

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

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

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

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

    Если хочешь учится на Паскале и чтобы твоя прога была полезной начинай сразу с Delphi. Там можно создать много простых и красивых прикладных программ. До того времени как стал заниматься вебом я только на делфи и программил. Очень хорошая среда.

    А вообще лучше сначала потратить время на создание простых и бесполезных программ, и научится программированию. А потом уже переходить к большим проектам, кторые имеют пользу.
     
  16. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Паскаль плавно мутировал в Delphi, на котором что-то да пишут до сих пор.
    Так же я бы советовал поучить assembler. :)
     
  17. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    karatist, насчет устойчивости.... думать надо, а мне лениво... вон Raa какие хитрые массивы подкидывает :)
    так что если видишь каку-ть bug говори... а про описание на русском... что ж... если не изменяет память, то это обыкновенный пузырек... :)
     
  18. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    Согласен. А не слишком ли для новичков сразу влазить в ООП среду?...

    Полюбому :) Грех не знать асм :)

    Короче, господа учащиеся, вам - прямая дорога в высшие учебные заведения. мне кажется, это самое лучшее, что можно посоветовать. Учиться все равно самому прийдется, и без желания - никуда, но всестороннему развитию ВУЗы способствуют неплохо :)
     
  19. Mavir

    Mavir Guest

    Самый простой способ научиться программировать, т.е. создавать аглоритмы, писать блок схемы. Затрат минимум - листок бумаги и карандаш, наглядности максимум - по стрелкам видно куда переходить при тех или иных условиях :)

    А вот где реализовать этот алгоритм, зависит от поставленной задачи: для веб - PHP, ASP, Perl...., для винды - Delphi, C.

    Например, аглоритм решения квадратного уравнения один, а реализовать можно на чем угодно.
     
  20. Raa

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

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

    Кстати: Notice: Undefined offset: -1

    Нотисы - нехорошо.
     
  21. vasa_c

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

    С нами с:
    22 мар 2006
    Сообщения:
    1.760
    Симпатии:
    0
    Адрес:
    гор.Ленинград
    Основной закон оптимизации — никогда не расчитывать в циклах то, что можно расчитать до них.
    Код (Text):
    1. $sz = sizeof( $arr );
    2. for ( $i = 1; $i < $sz; $i++ )
     
  22. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    2Raa не согласен... у нас на потоке из 120 человек закончило только человек 40... паскаль изучался на первом курсе... досконально язык знают человек пять от силы (из 120)... может конечно "промышленной электроннике" не нужны программисты, но как-никак корочки "инженер-программист" специальность выдает :(...
    имхо: нужно брать учебник по паскалю (например Фаронов) и штудировать его со всеми примерами... пропустить раздел с указателями правда рекомендую... крестики нолики и все такое... мне было например это было интересно... когда почувствуешь силы, можешь написать например bmp редактор... конечно, получится мож так себе, но удовольствия будет немерено... Да какие угодно можно поставить задачи и попытаться реализовать их на паскале... было бы желание... начинать с пхп это самоуничтожение в себе программиста, хотя если желание велико, то почему бы и нет конечно... но... но... рекомендую всем паскаль...
     
  23. karatist

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

    С нами с:
    15 авг 2006
    Сообщения:
    23
    Симпатии:
    0
    Адрес:
    Орел
    принимается. сам уже дошел.
     
  24. Raa

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

    С нами с:
    28 июл 2006
    Сообщения:
    209
    Симпатии:
    0
    С вашего позволения, я поумничаю :))

    В данном случае считаю, что vasa_c справделиво заметил допускаемую многими оплошность: вычисление размера массива внутри цикла по нему. Я сам не могу себя отучить от этой привычки.

    А вообще, оптимизации бывают разными: оптимизация производительности, объема используемой памяти, и... даже объема кода. Как правило, оптимизация по одному из параметров требует уступок со стороны других параметров. Поэтому, имеет смысл помнить о том, что оптимизируя одно ты теряешь в другом. Например, в некоторых случаях вынос условия за пределы цикла увеличивает в несколько раз и без того большой код, делая неудобным его сопровождение. Если этот код вызывается раз в сто лет, то вполне можно пожертвовать тем ничтожным выиграшем ради объема кода. Т.е., происходит обратная оптимизация: объема кода в ущерб производительности.
     
  25. Raa

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

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