[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: ошибка
Rain8207
помогите найти ошибку, простой скрипт, находит среднее арифметическое из чисел в массиве.


<?php

$mass = array(1 => 3, 2 => 4, 3 => 6, 4 => 13);

function func1 ($mass) {
$i = 1;
$sum = 0;
$sa = 0;
while ($i != 3) {
$sum = $sum + $mass[i];
$i++;
}
$sa = $sum / 4;
return $sa;
}

func1($sa);
echo 'Среднее арифметическое = '.$sa;

?>


на выходе получается "Среднее арифметическое = "



Спустя 2 минуты, 12 секунд (10.12.2011 - 23:08) inpost написал(а):
func1($sa); - Что за переменная sa? Её нет в скрипте!

Спустя 2 минуты, 10 секунд (10.12.2011 - 23:10) redreem написал(а):
$sum = $sum + $mass[i];


заменить на

$sum = $sum + $mass[$i];


Спустя 22 секунды (10.12.2011 - 23:10) Rain8207 написал(а):
хм, я ввел её в функции, а потом после выполнения действий вернул её, и вызвал функцию с её значением, видно что-то не понимаю.

Спустя 2 минуты, 4 секунды (10.12.2011 - 23:12) redreem написал(а):
<?php

$mass = array(1 => 3, 2 => 4, 3 => 6, 4 => 13);

function func1 (&$mass) {
$i = 1;
$sum = 0;
$sa = 0;
while ($i != 3) {
$sum = $sum + $mass[$i];
$i++;
}
$sa = $sum / 4;
return $sa;
}

echo 'Среднее арифметическое = '. func1($mass);

?>

Спустя 4 минуты, 23 секунды (10.12.2011 - 23:17) redreem написал(а):
а еще лучше так:

<?php
$mass = array(1 => 3, 2 => 4, 3 => 6, 4 => 13);

function func1 (&$mass) {
$sum = 0;
foreach ($mass as $i => $v) $sum = $sum + $v;
return $sum / count($mass);
}

echo 'Среднее арифметическое = '. func1($mass);
?>


:)

Спустя 7 минут, 39 секунд (10.12.2011 - 23:24) Rain8207 написал(а):
я вот понять немогу, вызов функции возвращает то значение что указанно в return? тоесть пишу:

echo func1 ($mass);

а возвращается $sum, потому что оно в return записанно?

Спустя 41 секунда (10.12.2011 - 23:25) Self написал(а):
$mass = array(1 => 3, 2 => 4, 3 => 6, 4 => 13);
$sa = array_sum($mass)/count($mass);
echo 'Среднее арифметическое = '.$sa;


Спустя 4 секунды (10.12.2011 - 23:25) Dron19 написал(а):
Попробуй так, если со своей функцией хочешь
<?php
$mass = array(3,5,7,4,6,3,35,435,64); // создаем массив

function func1 ($mass) { // объявляем функцию
$i = 0; // приравниваем i к нулю =)
$size = sizeof($mass); // получаем размер массива
while ($i != $size) { // прогоняем в цикле по числу значений в массиве
$sum += $mass[$i]; // складываем все значения
$i++; // прибавляем единицу к начальному значению
}
$sa = $sum / $size; // заносим в переменную sa среднее ариф. знач.
return $sa; // возвращаем результат
}

echo 'Среднее арифметическое = '. func1($mass); // задаем функции параметр и выводим

?>

Спустя 2 минуты, 36 секунд (10.12.2011 - 23:28) Rain8207 написал(а):
мне бы было полезнее не готовые скрипты кидать, а объяснить что в моём не так, суть то там правильна, а вот с устройством функции и её возвратом у меня проблемы.
Я как понимаю, функция - штука изолированная, ну вот я и достал из неё переменную $sa с помощью return. Но кажется неправильно понимаю.

Спустя 4 минуты, 34 секунды (10.12.2011 - 23:32) Dron19 написал(а):
я прокомментировал твой код и немного его сократил

Спустя 6 минут, 6 секунд (10.12.2011 - 23:38) Rain8207 написал(а):
Хоть убейте, не понимаю :(

echo 'Среднее арифметическое = '. func1($mass);


почему мы пишем func1($mass); а не func1($sa);
Инструкцией return мы вытаскиваем значение переменной $sa из функции в основной скрипт, ну и нужно отобразить эту переменную, => вызвать функцию и указать в скобках $sa, как бы поймать его после того как вытащили из функции. А на деле $mass там написанно..

Спустя 5 минут, 18 секунд (10.12.2011 - 23:44) Winston написал(а):
Цитата (Rain8207 @ 10.12.2011 - 22:38)
почему мы пишем func1($mass); а не func1($sa);

Почитай про аргументы функций.
PS: у Self'a самое лучшее решение.

Спустя 1 минута, 45 секунд (10.12.2011 - 23:45) Dron19 написал(а):
вот смотри, ты в функции прописал return $sa; -это означает, что функция возвращает значение переменной са, которая находится в локальной области видимости, то есть внутри функции, внешне ты ее использовать не можешь, а функция сама принимает параметр в виде массива и с ним работает, что-то там делает и в итоге возвращает результат, который указан внутри нее

Спустя 1 минута, 43 секунды (10.12.2011 - 23:47) Dron19 написал(а):
Цитата (Winston @ 10.12.2011 - 20:44)
Цитата (Rain8207 @ 10.12.2011 - 22:38)
почему мы пишем func1($mass); а не func1($sa);

Почитай про аргументы функций.
PS: у Self'a самое лучшее решение.

дело не в том, чье лучшее решение, человек разобраться в своем коде хочет, вот я и пытаюсь ему помочь

Спустя 5 минут, 6 секунд (10.12.2011 - 23:52) Rain8207 написал(а):
Dron19, спасибо, теперь дошло)

Спустя 1 минута, 34 секунды (10.12.2011 - 23:54) Dron19 написал(а):

$word = "Hello"; // создаем переменную и приравниваем значение

function test($t) { // тут мы даем названием аргументам функции
if($t == "Hello") return 5; else return 10;
}

echo test($word); // то есть мы переменной t в функции
// приравниваем значение переменной word и уже работаем с
// переменной t как с word и что-то там делаем и в итоге решаем, что вернет функция
// а вот то, что она вернет, мы уже выводим на экран



Попробуй разобраться в этом коде, если поймешь, то думаю вопросы исчезнут, несколько раз проговори алгоритм сам себе

Спустя 1 минута, 18 секунд (10.12.2011 - 23:55) Winston написал(а):
Цитата (Dron19 @ 10.12.2011 - 22:54)
if($t == "Hello") return 5; else return 10;

И еще про тернарный оператор почитай smile.gif

Спустя 12 секунд (10.12.2011 - 23:55) Dron19 написал(а):
Цитата (Rain8207 @ 10.12.2011 - 20:52)
Dron19, спасибо, теперь дошло)

обращайся wink.gif



Спустя 1 минута, 8 секунд Dron19 написал(а):
Цитата (Winston @ 10.12.2011 - 20:55)
Цитата (Dron19 @ 10.12.2011 - 22:54)
if($t == "Hello") return 5; else return 10;

И еще про тернарный оператор почитай smile.gif

да пусть пока в этом разберется, если бы я тернарный написал, то опять бы вопросы возникли wink.gif

Спустя 1 час, 18 минут, 10 секунд (11.12.2011 - 01:13) johniek_comp написал(а):
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.