Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.10.2018, 10:17
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Вывод средней арифметической значений массива "getAverage" в php
Приведённый синтаксис взят с видеоурока на youtube.com ( https://www.youtube.com/watch?v=Q6MG...JTCS1XGTNkhTch ), где рассматривался вопрос о расчёте и выводе средней арифметической всех значений массива...

Проблема: средняя арифметическая при составлении данного синтаксиса изначально не была правильно рассчитана "машинкой/браузером... (или кто там в моём ПК эти математические расчёты производит я не знаю)" (кстати, настоящую среднюю арифметическую я отдельно проверил с помощью обычного калькулятора)!!!
Но почему-то стоит только закоментировать строку с присвоением значения "0" переменной "$sum" - результат средней арифметической тут же корректируется на правильный, но при этом браузер начинает ругаться, мол, переменная "$sum" неприсвоенная.
Ну а чтобы "заткнуть" браузер, мне пришлось применить знак "@" в строке, следующей после единственной закоментированной здесь, что не есть правильно с точки зрения программирования! :-(((

В ЧЁМ МОЯ ОШИБКА?... ЧТО Я ДЕЛАЮ НЕ ТАК???



<?php

function getAverage ($array) {
foreach ($array as $key => $value) {
// $sum = 0;
@$sum = $sum + $value;
echo $key."<br>";
}
return $sum / count ($array);
}

echo getAverage (array ("first" => 12, "sec" => 45, "third" => 23, "forth" => 55));

?>

Последний раз редактировалось garrip91, 30.10.2018 в 10:24.
Ответить с цитированием
  #2 (permalink)  
Старый 30.10.2018, 10:48
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

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

Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче:

$sum += $value;

Почему выдает сообщение парсер я уже писал, и что нужно делать, что не было предупреждений.
Ответить с цитированием
  #3 (permalink)  
Старый 30.10.2018, 12:34
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

очередное уточнение
Сообщение от laimas Посмотреть сообщение
Я вам уже ответил, что данная функция, это бесполезная трата времени, изучайте лучше стандартные функции языка для работы с массивами, так как они в дальнейшем очень облегчат жизнь при работе с массивами данных.

Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче:

$sum += $value;

Почему выдает сообщение парсер я уже писал, и что нужно делать, что не было предупреждений.
Теперь попытаюсь понять всё, что Вы мне написали......

Момент № 1, на который я сразу хотел бы обратить Ваше внимание:

Так, у этого хохляцкого (предположительно) долбоящера тоже было написано "$sum += $value;"... Я сначала повторил за ним и у меня то же самое получилось(( Зачем усложнять всё то, что и так сложнее некуда?
Ответить с цитированием
  #4 (permalink)  
Старый 30.10.2018, 12:43
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от garrip91
Зачем усложнять всё
Это как раз упрощение, читайте, а не смотрите мультики, а уроки лучше на хороших онлайн ресурсах изучать, если нет книг.
Ответить с цитированием
  #5 (permalink)  
Старый 30.10.2018, 18:16
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Сообщение от laimas Посмотреть сообщение
Ваша ошибка в том, что переменной $sum в начале каждой итерации присваивается значение 0, а значит последним ее значением будет значение последнего элемента массива. А то что собакой прибито, есть правильное действие, хотя записывается оно и короче:

$sum += $value;
Мои итерации вот так должны выглядеть образно, правильно?:

"first" => 12
"sec" => 45
"third" => 23
"forth" => 55

Тогда последнее значение у меня "55". А причём здесь тогда результат, который у меня выводится при присвоении значения "0" переменной "sum"???
Ответить с цитированием
  #6 (permalink)  
Старый 31.10.2018, 03:00
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Что тут сложного для понимания, если все написано явно:

foreach(...) {
$sum = 0;
$sum = $sum + $value;
}

Чему $sum буде равна в итоге? 55/4
Ответить с цитированием
  #7 (permalink)  
Старый 31.10.2018, 23:12
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Ответ на ответ
Я всё равно ничего не понял!
Ладно... С другой стороны подойдём к вопросу:
Как бы Вы составили всю эту хрень (синтаксис, код или как его там) для расчёта средней арифметической элементов данного массива?
ТОЛЬКО ПОПРОШУ С ПОДРОБНЫМИ ПОЯСНЕНИЯМИ......
Ответить с цитированием
  #8 (permalink)  
Старый 01.11.2018, 00:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от garrip91
Как бы Вы составили всю эту хрень
Есть стандартная функция для расчета суммы элементов одномерного массива - array_sum, что и надо использовать, писать для этого самопальные функции нет смысла. Для того чтобы понять работу цикла не обязательно оборачивать его в "загадочные" функции, а для понимания конструкций языка нужно читать, ссылка на руководство давалась.

Вопрос не затрагивающий циклов:

$a = 0;
$b = 2:
$a = $a + $b;

чему будет равна $a и почему?

Теперь касаемо циклов:

Дана комната, в корой на полке лежат шарики.
Вам разрешили забрать их все, но с условием - за один раз можно взять один шарик, то есть входить за каждым отдельно, а для хранения взятых шариков использовать карман.

Судя по вашему коду, вы бы поступили так:

1) Заходите в комнату.
2) Выворачиваете карман, опустошая его.
3) Берете шарик и кладете его в карман.
4) Выходите из комнаты.
и т.д. пока в комнате не закончатся шарики.

Вопрос - сколько в итоге шариков вы вынесете из комнаты таким способом?
Ответить с цитированием
  #9 (permalink)  
Старый 01.11.2018, 14:26
Аспирант
Отправить личное сообщение для garrip91 Посмотреть профиль Найти все сообщения от garrip91
 
Регистрация: 07.10.2018
Сообщений: 75

Ответ на ответ
Сообщение от laimas Посмотреть сообщение
Есть стандартная функция для расчета суммы элементов одномерного массива - array_sum, что и надо использовать, писать для этого самопальные функции нет смысла. Для того чтобы понять работу цикла не обязательно оборачивать его в "загадочные" функции, а для понимания конструкций языка нужно читать, ссылка на руководство давалась.

Вопрос не затрагивающий циклов:

$a = 0;
$b = 2:
$a = $a + $b;

чему будет равна $a и почему?

Теперь касаемо циклов:

Дана комната, в корой на полке лежат шарики.
Вам разрешили забрать их все, но с условием - за один раз можно взять один шарик, то есть входить за каждым отдельно, а для хранения взятых шариков использовать карман.

Судя по вашему коду, вы бы поступили так:

1) Заходите в комнату.
2) Выворачиваете карман, опустошая его.
3) Берете шарик и кладете его в карман.
4) Выходите из комнаты.
и т.д. пока в комнате не закончатся шарики.

Вопрос - сколько в итоге шариков вы вынесете из комнаты таким способом?
1. $a будет равна 2, как я могу предположить(но опять же я в этом не
уверен)

2. Ну смотря сколько этих шариков в комнате...
Ну или пока не устану (если иное не оговорено условием конечно) ))

Но я ещё никак не могу понять связь между этой загадкой и тем синтаксисом, который здесь привёл первоначально!((

3. Ну так, какой синтаксис Вы бы использовали для расчёта средней арифметической значений того самого массива всё-таки???

Последний раз редактировалось garrip91, 01.11.2018 в 14:30.
Ответить с цитированием
  #10 (permalink)  
Старый 01.11.2018, 14:57
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от garrip91
я могу предположить(но опять же я в этом не
уверен)
Ну смотря сколько этих шариков в комнате.
Да, тяжелый случай, как же вы программировать собираетесь?

Не важно сколько шариков, вынесете вы таким способом всего один! Как можно вынести больше, если первое, что вы делаете зайдя в комнату, это выворачиваете карман, тем самым выбрасывая ранее взятый шарик. Каждый раз выходя из комнаты, вы выносите по одному шарику. А чтобы забрать все, пиджак с карманом должен висеть вне комнаты - зашли, взяли шарик, вынесли его, положили в карман пиджака, пошли за следующим. Вот тогда можно вынести все.

Так же и в циклах - если переменная должна хранить сумму, произведение и прочее, то она инициализируется вне цикла, до него, один раз. Вот что у вас:

foreach ($array as $key => $value) {
    $sum = 0; //каждый раз при каждой итерации вы обнуляете переменную (выворачиваете свой карман)
    sum = $sum + $value; //затем к нулю прибавляете значение текущей итерации, то есть предыдущих значений нет
}


$sum = 0; //инициализировали переменную (пиджак с карманом вне команты)
foreach ($array as $key => $value) {
    $sum = $sum + $value; //теперь к $sum хранящей сумму прибавляется текущее значение 
}


РНР выдавало предупреждение, что переменная $sum у вас не инициализирована, но это не является ошибкой, РНР будет использовать с первоначальным значением null.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вывод средней арифметической значений массива "getAverage" в php garrip91 Общие вопросы Javascript 3 30.10.2018 10:50
вывод данных из массива JSON Vincent Vega jQuery 19 04.03.2016 13:44
Вывод всех значений из массива JSON TTATPuOT jQuery 1 05.12.2015 14:00
Ввод диапазона значений массива с клавиатуры Воскобоенко Общие вопросы Javascript 11 06.06.2015 22:34
Некорректный вывод значений массива running Общие вопросы Javascript 9 28.10.2014 03:47