Учебные задачи PHP. Задача 2

Список учебных задач PHP здесь

Условие: Вывести на экран сумму N случайных чисел.

Сначала я решил таким образом:

<?php
for ($value = 0; $value < 1; $value++)
{
	$value1 = rand(-21, 35);
	$sum = $value1 + rand(-21, 35);
	echo "Сумма рандомных значений: ", $sum, "<br>";
}
?>

Это работает, но здесь складываются только 2 рандомных значения. Можно конечно прописать таким образом с десяток переменных, дать им рандомные значения и сложить, но сделать это например с сотней рандомных чисел уже сложней. Новое решение позволяет считать сумму любого количества рандомных чисел:

<?php
$array_for = array();
$N = 9;
for ($value = 0; $value < $N; $value++)
{
	$num = rand(-21, 35);
		echo $num, "<br>";
	$array_for[]= $num;
}
	$sum = array_sum ($array_for);
	echo "Сумма $value рандомных значений: ", $sum;
?>
melisa's picture

  1. for ($value = 0; $value < 1; $value++)
    {
        $value1 = rand(-21, 35);
        $sum = $value1 + rand(-21, 35);
        echo "Сумма рандомных значений: ", $sum, "<br>";
    }

    Первый вариант не решает поставленную задачу: найти сумму N чисел, как Вы сами отметили ниже.
    А также, если говорить об этом отрезке кода, абстрагируясь от задачи, то здесь неверно применён цикл for. У Вас изначально условие цикла предполагает только одну итерацию, а значит, и цикл не нужен вовсе:

        $value1 = rand(-21, 35);
        $sum = $value1 + rand(-21, 35);
        echo "Сумма рандомных значений: ", $sum, "<br>";

    Если что-то можно опустить, лучше это опустить.

    Да и вообще тогда уж:

    echo "Сумма рандомных значений:" . rand(-21, 35)+rand(-21, 35);
  2. Можно конечно прописать таким образом с десяток переменных, дать им рандомные значения и сложить, но сделать это например с сотней рандомных чисел уже сложней.

    Очень и очень разумно. Правильно, здесь нужно использовать цикл.

  3. $array_for = array();

    В PHP7 используется сокращённый вариант объявления - такой:

    $array_for = [];
  4. $array_for = array();
    for ($value = 0; $value < $N = 9; $value++)
    {
        $num = rand(-21, 35);
            echo $num, "<br>";
        $array_for[]= $num;
    }
        $sum = array_sum ($array_for);
        echo "Сумма $value рандомных значений: ", $sum;

    ;
    Здесь нарушены отступы. Всё должно быть чётко. Это также важно для читаемости.

  5. $array_for = array();
    for ($value = 0; $value < $N = 9; $value++)
    {
        $num = rand(-21, 35);
            echo $num, "<br>";
        $array_for[]= $num;
    }
        $sum = array_sum ($array_for);
        echo "Сумма $value рандомных значений: ", $sum;

    Решение рабочее. Представьте, пожалуйста, также решение без использования функции array_sum()

rvsokolov's picture

Спасибо — переписал в соответствии с camelCase, объявил массив через [ ], отступы поправил

<?php
$arrayFor = [];
$n = 9;
for ($value = 0; $value < $n; $value++)
{
    $num = rand(-21, 35);
       echo $num, "<br>";
    $arrayFor[]= $num;
}
    $sum = array_sum ($arrayFor);
    echo "Сумма $value рандомных значений: ", $sum;
?>
melisa's picture

Отступы не изменились. Здесь ошибки в 7, 10 и 11 строках.

rvsokolov's picture

Сложение N числа рандомных значений

<?php
$arrayFor = [];
$n = 9;
for ($value = 0; $value <$n; $value++) {
	$num = rand (-21, 35);
	echo $num, "<br>";
	$arrayFor[] = $num;
}
$sum = 0;
foreach ($arrayFor as $randomNumber) {
	$sum = $sum + $randomNumber;
}
echo "Сумма $value рандомных значений равна: ", $sum;
?>
melisa's picture

$sum = $sum + $randomNumber;

Запишите это короче с помощью комбинированого оператора

rvsokolov's picture

Использую комбинированный оператор:

<?php
$arrayFor = [];
$n = 9;
for ($value = 0; $value <$n; $value++) {
	$num = rand (-21, 35);
	echo $num, "<br>";
	$arrayFor[] = $num;
}
$sum = 0;
foreach ($arrayFor as $randomNumber) {
	$sum += $randomNumber;
}
echo "Сумма $value рандомных значений равна: ", $sum;
?>
melisa's picture

принято