Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Не могу понять код функции, определние максимума функции 
V
    Опции темы
Tikson
Дата 28.6.2012, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 6.2.2007

Репутация: нет
Всего: нет



источник http://php.su/lessons/?lesson_3 , комментарии не мои

сам пример кода
Код

<?PHP
function arr_max($arr) // Определяем функцию arr_max принимающую один аргумент
{
 // Входящие данные: Массив
 // Исходящие данные: значение элемента в массиве.
 
  // Устанавливаем значение нулевого элемента как максимального
  $max = $arr[0]; 

  for ($i = 1; isset($arr[$i]); $i++) // для каждого элемента массива
    if ($arr[$i] > $max) // проверяем что больше. Текущее значение или максимум
      $max = $arr[$i]; // Если максимум больше, то меняем максимум на новый

    $arr[1] = 95; // Поменяем значение первого элемента массива. Не задумывайтесь почему. Чуть позже увидите.

        // функция возвращает результат. 
        // Результат в данном случае самое большое число в массиве
    return $max;
}

// Закончилось определение функции. Дальше продолжение скрипта.


$ar1 = array(4, 6, 12, 9, '5', 23);
$ar2 = 'dabcjfutZfgh';

echo arr_max($ar1)."<br>\n"; // Выведет 23

echo '$ar1[1]'.$ar1[1]; // выведет 6 (а не 95, помните ту загадочную строку функции?). Получается значение не изменилось 
// Напомним: в одинарных кавычках значения переменных не подставляются

// подумайте над результатами такого вызова:
echo arr_max($ar2);
?> 



Непонятно:
1)почему isset ? И как это работает не пойму.Я понимаю это так- isset проверяет установлена ли переременная или нет...как работает не понятно
2) далее проверяется больше ли $arr $max тоесть больше ли $arr 6 $max 4, больше. Но в коменнатриях написано что $max должно быть больше $arr 
далее понятно что $max будет присвоено 6
3)потом непонятно что значит $arr[1] = 95.
первый круг еще не пройден значит после того как $max присвоили наибольшее число в массиве $ar1 число 6 будет заменено на 95, тоесть дальше будет сравнение 12 с 95, тогда почему в примере говорится что будет выведено чисто 23??? а не 95?

4)результат этого вывода - echo arr_max($ar2); неясен, написано что результат в одинарных ковычках не выводится, значит и тут ничего не выведется(даже без ошибок)

помогите


Это сообщение отредактировал(а) Tikson - 30.6.2012, 11:15
PM MAIL   Вверх
The_Aleksey
Дата 28.6.2012, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


<?php
*


Профиль
Группа: Участник
Сообщений: 112
Регистрация: 10.10.2007
Где: Москва

Репутация: 5
Всего: 6



Мне кажется функцию, которая ищет максимум массива можно написать проще, например так:

Код

function maximum($array)
{
    if(count($array)==0) return -1;
    $max = $array[0];
    foreach($array as $a) 
    {
        if($a>$max) $max=$a;
    }
    return $max;
}
$ar = array(4, 6, 12, 9, 5, 23);
echo maximum($ar);

PM MAIL   Вверх
Aliance
Дата 29.6.2012, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 14
Всего: 137



Цитата(Tikson @  28.6.2012,  13:23 Найти цитируемый пост)
1)почему isset ? И как это работает не пойму.Я понимаю это так- isset проверяет установлена ли переременная или нет...как работает не понятно

Если переменная нигде не объявлена в коде - isset вернет false, иначе true. Полезна в двух случаях:
- если переменная задается при каком-либо условии (хотя правильнее было бы объявлять ее до условия, а в условии просто назначать значение);
- если проверяются ключи в массиве (хотя правильнее было бы использовать функцию array_key_exists()).

Цитата(Tikson @  28.6.2012,  13:23 Найти цитируемый пост)
2) далее проверяется больше ли $arr $max тоесть больше ли $arr 6 $max 4, больше. Но в коменнатриях написано что $max должно быть больше $arr 
далее понятно что $max будет присвоено 6

Не понял что тут не ясно.

Цитата(Tikson @  28.6.2012,  13:23 Найти цитируемый пост)
3)потом непонятно что значит $arr[1] = 95.
первыввй круг еще не пройден значит после тго как $max присвоили наибольшее число в массиве $ar1 число 6 будет заменено на 95, тоесть дальше будет сравнение 12 с 95, тогда почему в применен говорится что будет выведено чисто 23??? а не 95?

Думаю, что код просто из 4ых версий php, когда все значения по умолчанию передавались по значению. Тогда получалось, что мы меняем массив $arr в области видимости (scope) функции, а в глобальной области видимости массив остается без изменений (решалось это путем простановки амперсанда до аргумента функции). В php же версий 5 (точно не помню с какой версии, 5.2 или 5.3?) все переменные по умолчанию передаются по ссылке, и получается что все-таки максимум будет не 6, а 95. Могу ошибаться, но бегло взглянув на код мне так думается.

Цитата(Tikson @  28.6.2012,  13:23 Найти цитируемый пост)
4)результат этого вывода - echo arr_max($ar2); неясен, написано что результат в одинарных ковычках не выводится, значит и тут ничего не выведется(даже без ошибок)

строка 'dabcjfutZfgh' - это фактически массив из строковых букв, по одной штуке. Так что 'dabcjfutZfgh'[3] == 'c'. А при сравнении букв между собой происходит их что ли сортировка. Таким образом "максимум" строки - буква Z в верхнем регистре.
PM MAIL WWW ICQ Skype   Вверх
Tikson
Дата 29.6.2012, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 6.2.2007

Репутация: нет
Всего: нет



Спасибо, буду разбираться.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0557 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.