X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Быстрая сортировка
kilogram
kilogram
Topic Starter сообщение 28.4.2012, 15:07; Ответить: kilogram
Сообщение #1


[PHP]<?php
$mas = array(5,3,-1,4,2,-300,6,-500,-100);
function sos($a1,$a2)
{
return $a2 - $a1;
}
function dobavka(&$mas, $func){
sortirovka($mas, 0, count($mas)-1, $func);
}

function sortirovka(&$mas,$min,$max,$func){
$i = $min;
$j = $max;
$x = $mas[($min+$max)/2];

do{
while($func($mas[$i], $x)<0) ++$i;
while($func($mas[$j], $x)>0) --$j;
if($i<=$j){
$element = $mas[$i];
$mas[$i] = $mas[$j];
$mas[$j] = $element;
$i++; $j--;
}
}while($i<=$j);

if($min<$j) sortirovka($mas,$min,$j, $func); //начало с серединой
if($i<$max) sortirovka($mas,$i,$max, $func); // середина с концом
}

dobavka($mas, 'sos');
foreach($mas as $rez)
echo $rez.' '.' ';

?>[/PHP]

Смущает, как в переменную $func можно добавить круглые скобки и записать выражение?
[PHP]while($func($mas[$i], $x)<0) ++$i;
while($func($mas[$j], $x)>0) --$j;[/PHP]
Что это означает? С функцией понимаю ,а вот с переменной, как она со скобками и внутри выражение?
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
BoL4oNoK
BoL4oNoK
сообщение 28.4.2012, 15:37; Ответить: BoL4oNoK
Сообщение #2


Если $func является какой-то функции, то проблем нет - с 0 сравниваться будет результат данной функции.

Смущает, как в переменную $func можно добавить круглые скобки и записать выражение?

Что Вам на выходе получит-то надо?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 28.4.2012, 20:55; Ответить: Arks
Сообщение #3


(kilogram @ 28.4.2012, 18:07) *
Смущает, как в переменную $func можно добавить круглые скобки и записать выражение?

Например вот так: http://www.html.by/threads/24812-Rekursija...ll=1#post144412

и да, эта сортировка не быстрее сортировки а-ля
[PHP]$a = array(5,3,-1,4,2,-300,6,-500,-100)
sort($a);
[/PHP]
Потому что не надо сравнивать производительность интерпретатора и машинного кода, какие бы супер-алгоритмы не использовались. php тоже возможно не дураки писали и учли оптимизации при хардкодинге функций сортировки, нэ?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kilogram
kilogram
Topic Starter сообщение 28.4.2012, 21:58; Ответить: kilogram
Сообщение #4


Попробовал написать такой код, который вычисляет квдадрат числа.

[php]
function santa($n)
{
return $n*$n;
}

function balta($n)
{
return $n(5);
}

echo balta("santa");
echo '<br />';
[/php]
Как-то странно так получилось, ради интереса написал santa в параметре функции и ошибок не выдало.
Это что, получается я передал всю функцию санта в функции балта?
В пхп разве если при вызове писать что-то в кавычках и оно совпадет с названием функции ранее где-то описаной в коде выше то передастся не строка ,а сама функция в качестве аргумента?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 28.4.2012, 22:50; Ответить: Arks
Сообщение #5


(kilogram @ 29.4.2012, 00:58) *
В пхп разве если при вызове писать что-то в кавычках и оно совпадет с названием функции ранее где-то описаной в коде выше то передастся не строка ,а сама функция в качестве аргумента?

передается строка, все верно.

А php-интерпретатор разыменовывает ссылку на функцию в эту строку при обращении через __invoke(со скобочками вызова) (в примере все равно разименовывает при вызове проверки is_callable)
[PHP]
function santa($n)
{
}

function balta($n) //$n = string 'santa', $n = string 'santa2'
{
return is_callable($n); //$n = & *santa() == true, $n = & *santa2() == false, т.к. у нас нету в программе ссылки на область(указатель - адрес памяти) содержащую функцию santa2
}

balta("santa");//true
balta("santa2");//false
[/PHP]
надеюсь наглядно показал?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
kilogram
kilogram
Topic Starter сообщение 29.4.2012, 0:52; Ответить: kilogram
Сообщение #6


Я так понял интерпретатор языка ПХП когда видит название переменной, а за ней скобки, подставляет значение этой переменной в название этой переменной со скобками,если значение этой переменной совпало с названием такой функции описаной где-то в коде.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 29.4.2012, 1:36; Ответить: Arks
Сообщение #7


kilogram, не где-то в коде, а в контексте вызова. Пример:
[PHP]
class A {
function a() {

}

function b($n) {
return is_callable ( $n );
}
}

$a = new A();
$a->b('a'); //false
т.е. фактически например был бы класс B с методом a(), разумеется т.к. & *A->a() != & *B->a() контекст вызова у них был бы разный(все внутренние переменные и т.п.)
[/PHP]

Интерпретатор ничего не пытается вызвать, он смотрит на тип данных адресованных указателем и определяет по нему являются ли эти данные функцией. К переменным это вообще прямого отношения не имеет, пример abc();//Fatal - call to undefined function - где тут переменные? В данном случае в контексте вызова(тут это вся программа) - нету объекта, реализующего интерфейс callable который адресует указатель, ссылка на который имела бы имя "abc". Короче почитайте проще основы языка С. Php вам пока нафиг не сдался если Вы не понимаете что такое ссылки и контекст вызова функции.

Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыБыстрая индексация страниц сайта и обратных ссылок - 2Index
38 2Index 6640 18.4.2024, 12:56
автор: 2Index
Открытая тема (нет новых ответов) In-to.cc - Простота использования, быстрая скорость обмена, индивидуальный подход к каждому пользователю, самые популярные направления обмена.
2 in_to 2305 13.3.2023, 14:15
автор: in_to
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыpocket-exchange.com - обмен электронных валют. Низкие курсы! Быстрая обработка заявок!
8 pocket_exchange 9358 12.8.2022, 15:30
автор: pocket_exchange
Горячая тема (нет новых ответов) Тема имеет прикрепленные файлыВечные ссылки на более 90 новостных порталах! Хороший Тиц и быстрая индексация!
98 Oksana10 52681 8.4.2021, 16:19
автор: Oksana10
Открытая тема (нет новых ответов) быстрая и бесплатная накрутка лайков Instagram01.ru
19 instagram01 5350 4.12.2019, 18:28
автор: -instagram01-


 



RSS Текстовая версия Сейчас: 20.4.2024, 0:04
Дизайн