Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Посчитать среднее арифметическое с помощью цикла

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Без описания
lawer85
Отправлено: 08 Января, 2013 - 11:37:21
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




Нужно вычислить среднее арифметическое ряда чисел 3 6 9 13 16 19 23 26 29. У меня никак не получается это сделать. Я пока привел код к такому виду

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. for ($a = 3, $b = 13, $c = 23, $s = 0; $a <= 9, $b <= 19, $c <= 29;) {
  4. $s = $a + $b + $c;
  5. $a = $a + 3;
  6. $b = $b + 3;
  7. $c = $c + 3;
  8. echo "$s<br />";
  9. }
  10. ?>


Но этот код складывает 3 + 13 + 23; 6 + 16 + 26; 9 + 19 + 29; а как теперь эти 3 результата сложить и разделить на 9 (кол-во цифр)?

(Отредактировано автором: 08 Января, 2013 - 11:38:17)

 
 Top
NoPaper
Отправлено: 08 Января, 2013 - 11:49:20
Post Id



Посетитель


Покинул форум
Сообщений всего: 315
Дата рег-ции: Янв. 2012  
Откуда: Минск


Помог: 9 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $nums = array(3, 6, 9, 13, 16, 19, 23, 26, 29);
  3. echo array_sum($nums)/count($nums);
  4.  
 
 Top
lawer85
Отправлено: 08 Января, 2013 - 11:59:47
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




NoPaper пишет:
PHP:
скопировать код в буфер обмена
  1.  
  2. $nums = array(3, 6, 9, 13, 16, 19, 23, 26, 29);
  3. echo array_sum($nums)/count($nums);
  4.  


Спасибо, но я только начинаю изучать PHP и мне нужно это сделать именно с помощью оператора цикла.
 
 Top
IllusionMH
Отправлено: 08 Января, 2013 - 12:03:06
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




lawer85, раз вы сделали такой цикл, в котором фигурирует все числа кроме "средних" трех, то просто запишите массивом, и сделайте как предложил выше NoPaper
Если слегка оторваться от вашего варианта, то в данной последовательности можно найти 2 закономерности = 2 цикла. На случай если все-таки чисел будет больше то
PHP:
скопировать код в буфер обмена
  1. $c = 0;
  2. $s = 0;
  3. for ($i = 0; $i < 3; $i++) {
  4.   $m = 10 * $i;
  5.   for ($j = 0; $j++ < 3;) {
  6.     $s += $m + $j * 3;
  7.     $c++;
  8.     // либо с массивом
  9.     $arr[] = $m + $j * 3;
  10.   }
  11. }
  12. $med1 = $s / $c;
  13. //либо для массива
  14. $med2 = array_sum($arr)/count($arr);


upd. поправил недостающие $

(Отредактировано автором: 08 Января, 2013 - 12:17:28)

 
 Top
DelphinPRO
Отправлено: 08 Января, 2013 - 12:05:01
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. $nums = array(3, 6, 9, 13, 16, 19, 23, 26, 29);
  2. $sum = 0;
  3. for($i=0;$i<count($nums);$i++){
  4.     $sum += $nums[$i];
  5. }
  6. echo $sum/count($nums);


PHP:
скопировать код в буфер обмена
  1. $nums = array(3, 6, 9, 13, 16, 19, 23, 26, 29);
  2. $sum = 0;
  3. foreach($nums as $num){
  4.     $sum += $num;
  5. }
  6. echo $sum/count($nums);

(Отредактировано автором: 08 Января, 2013 - 12:05:30)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
EuGen Администратор
Отправлено: 08 Января, 2013 - 12:08:15
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




PHP:
скопировать код в буфер обмена
  1. $rgData = array(3, 6, 9, 13, 16, 19, 23, 26, 29);
  2. $iCount = count($rgData);
  3. $mSum   = $iCount?$iCount*($rgData[0]+$rgData[$iCount-1])/2:null;

?


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
lawer85
Отправлено: 08 Января, 2013 - 12:11:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




Всем спасибо. Видимо я не правильно выразился. Можно ли это сделать с помощью оператора цикла, не прибегая к использованию массива, т.к. его еще не знаю? Просто не хочется перескакивать в изучении тем PHP
 
 Top
EuGen Администратор
Отправлено: 08 Января, 2013 - 12:15:56
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




lawer85 пишет:
Можно ли это сделать с помощью оператора цикла, не прибегая к использованию массива

Это можно сделать и без функций суммирования массива и без цикла (см. пример выше)


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
IllusionMH
Отправлено: 08 Января, 2013 - 12:16:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




lawer85, вариант без массива есть в моем посте, если не включать строки под соответствующими комментариями.
 
 Top
lawer85
Отправлено: 08 Января, 2013 - 12:24:30
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




IllusionMH

Я попробовал так

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $c = 0;
  3. $s = 0;
  4. for ($i = 0; $i < 3; $i++) {
  5.   $m = 10 * $i;
  6.   for ($j = 0; $j++ < 3;) {
  7.     $s += $m + $j * 3;
  8.     $c++;
  9.   }
  10.  echo "$s";
  11. }
  12.  
  13. ?>


Вывелось 1866144 на экран хотя поидее должно быть 16
 
 Top
IllusionMH
Отправлено: 08 Января, 2013 - 12:39:32
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




lawer85, вы в цикле 3 раза выводите в одну строку сумму для соответствующих троек чисел
При этом не делите на кол-во элементов, о каком среднем арифметическом может идти речь?

http://codepad[dot]viper-7[dot]com/J9KrBo
как видно, оба варианта дают правильные 16

upd. Эх, на секунды опередил пост где разобрались с проблемой

(Отредактировано автором: 08 Января, 2013 - 12:44:13)

 
 Top
lawer85
Отправлено: 08 Января, 2013 - 12:39:54
Post Id


Частый гость


Покинул форум
Сообщений всего: 189
Дата рег-ции: Янв. 2013  


Помог: 1 раз(а)




lawer85 пишет:
IllusionMH

Я попробовал так

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $c = 0;
  3. $s = 0;
  4. for ($i = 0; $i < 3; $i++) {
  5.   $m = 10 * $i;
  6.   for ($j = 0; $j++ < 3;) {
  7.     $s += $m + $j * 3;
  8.     $c++;
  9.   }
  10.  echo "$s";
  11. }
  12.  
  13. ?>


Вывелось 1866144 на экран хотя поидее должно быть 16


Прошу прощения, пропустил это



Все ок спасибо!
 
 Top
sawenya
Отправлено: 12 Ноября, 2013 - 20:00:59
Post Id



Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Нояб. 2013  


Помог: 0 раз(а)




Думаю, что вот так будет то что нужно )

$x=0;
$y=0;
$z=0;
for ($a=3, $b=13, $c=23; $a <= 9, $b<=19, $c<=29; $a +=3, $b +=3, $c +=3) {
$x += $a;
$y+=$b;
$z +=$c;
}
$result_1 = $x + $y + $z;
$result = $result_1/9;
echo "$result <br />";
 
 Top
Bugap
Отправлено: 14 Июня, 2015 - 20:02:20
Post Id


Новичок


Покинул форум
Сообщений всего: 2
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




Пусть уже прошло 2 года с момента последнего сообщения. но все-же хочется внести свою лепту по данной задаче (я так понимаю, что она была взята из курса по PHP Михаила Русакова).
Комментарии не стал стирать, чтобы людям была понятна логика работы данного двойного цикла... И префиксный инкремент был выбран намеренно по объективным причинам. Так что это не очеПятка!
Вот еще одно решение:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.         $sum = 0; $count = 0;
  3.         for($i=0; $i<=20; $i += 10) {
  4.                 for($x=3; $x<=9; $x += 3) {
  5.                         $sum += $i+$x;
  6.                         ++$count;
  7.                         // $md = $sum/$count;
  8.                         // echo "\$i+\$x = ".($i+$x); echo "<br>";
  9.                         // echo "\$sum = $sum"; echo "<br>";
  10.                         // echo "\$count = $count"; echo "<br>";
  11.                         // echo "\$md = $md"; echo "<hr>";
  12.                 }
  13.         }
  14.         echo $md = $sum/$count;
  15. ?>
 
 Top
todasky
Отправлено: 20 Июня, 2015 - 13:22:02
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июнь 2015  


Помог: 0 раз(а)




//3 + 6 + 9 + 12 + 15 + 18 + 21 + 24 + 27 - арифметическая прогрессия + 3
//3+ 6 + 9+ 13 + 16 + 19 + 23 + 26 + 29 надо получить
// закономерность в ряде - добавляется к первой цифре после 10 единица Условие if
// и ещё единица после 20 и ещё один Условный оператор if ($i>20) n++;
//получается ряд 3+6+9+(12+1)+16+19+(22+1)+26+29

for($i = 3; $i < 30; $i+=3)
{
$n = $i; // переменная n хранит сумму чисел 3 + 6 + 9 + 12 + 15 + 18 + 21 + 24 + 27


if ($n > 10) $n++; // 3+6+9+(12+1)+16+19
if ($n > 20) $n++; // (22+1)+26+29

$sum_1 +=$n; //суммируем все переменные

echo "Итерация $n <br>";

}
$sum = $sum_1/9; // делим сумму на количество

//(количество чисел в уроках по Русакову PHP, ещё не известно как подсчитать)
//будет рассмотрено в последующих уроках, в массивах, поэтому пишем девятку

echo "Среднее арифметическое = $sum";
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB