Задача №11. Задайте случайным образом массив из 20-ти элементов (целых чисел). Найдите минимальное число и напечатайте его.

Задача из этого списка.

<?php
/* Задайте случайным образом массив из 20-ти элементов (целых чисел). Найдите минимальное число и напечатайте его. */
function createRandomArray($amountElems) {
	while($amountElems > 0) {
		$randomArray[] = rand(1, 99);
		$amountElems--;
	}
	return $randomArray;
}
function findMinNumberInArray($randomArray) {
	$currentMinNum = $randomArray[0]; //берём минимум из первого числа массива
	foreach($randomArray as $elem) {
		if($elem < $currentMinNum) { 
			$currentMinNum = $elem; //перезаписывает текущий минимум, если новое число из массива меньше.
		}
    }
    return $currentMinNum;
}
$randomArray = createRandomArray(20);
$currentMinNum = findMinNumberInArray($randomArray);
echo $currentMinNum;

Key Words for FKN + antitotal forum (CS VSU):

melisa's picture

  1. Вы не объявили переменную $randomArray перед циклом while, поэтому, если передать в функцию createRandomArray() в качестве аргумента 0, то получим ошибки:

    E_NOTICE : type 8 -- Undefined variable: randomArray -- at line ..
    E_WARNING : type 2 -- Invalid argument supplied for foreach() -- at line ...

    Исправьте.

  2. Переменную $currentMinNum можно не объявлять, а написать в одну строку:
    echo findMinNumberInArray($randomArray);
Sver4ok's picture

<?php
/* Задайте случайным образом массив из 20-ти элементов (целых чисел). Найдите минимальное число и напечатайте его. */
function createRandomArray($amountElems) {
	if($amountElems <= 0) { //на случай, если вводят не натуральное число
		$randomArray[] = 0;
	}
	while($amountElems > 0) {
		$randomArray[] = rand(1, 99);
		$amountElems--;
	}
	return $randomArray;
}
function findMinNumberInArray($randomArray) {
	$currentMinNum = $randomArray[0]; //берём минимум из первого числа массива
	foreach($randomArray as $elem) {
		if($elem < $currentMinNum) { 
			$currentMinNum = $elem; //перезаписывает текущий минимум, если новое число из массива меньше.
		}
    }
    return $currentMinNum;
}
$randomArray = createRandomArray(10);
print_r($randomArray);
echo findMinNumberInArray($randomArray);
melisa's picture

  1. Массив объявлен неверно.
    Если Вы напечатаете массив после Вашего присвоения:
    if($amountElems <= 0) { //на случай, если вводят не натуральное число
        $randomArray[] = 0;
    }
    print_r($randomArray);

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

     $randomArray = [];
  2. Проверка if в данном случае лишняя.
    function createRandomArray($amountElems) {
        if($amountElems <= 0) { //на случай, если вводят не натуральное число
            $randomArray[] = 0;
        }
        while($amountElems > 0) {
            $randomArray[] = rand(1, 99);
            $amountElems--;
        }
        return $randomArray;
    }

    Давайте представим, что в функцию передан 0 или число меньше 0. Тогда тело while просто никогда не будет выполнено, и скрипт перейдёт к следующей строке:

    return $randomArray;

    Тут-то и вылетает ошибка о том, что скрипт не знает такой переменной.

    С другой стороны, если в функцию передано положительное число, объявление массива никак не повредит результату - пустой массив будет переопределён внутри while

  3. А вот во второй функции проверку if можно добавить, т.к. Вы смело обращаетесь к [0] элементу:
    $currentMinNum = $randomArray[0]; //берём минимум из первого числа массива

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

Sver4ok's picture

Я думал ноль должен показывать был при нуле. Ну если при нуле должен ничего не показывать, то тогда так:

<?php
/* Задайте случайным образом массив из 20-ти элементов (целых чисел). Найдите минимальное число и напечатайте его. */
function createRandomArray($amountElems) {
		$randomArray = [];
	while($amountElems > 0) {
		$randomArray[] = rand(1, 99);
		$amountElems--;
	}
	return $randomArray;
}
function findMinNumberInArray($randomArray) {
	if(!empty($randomArray)) {
		$currentMinNum = $randomArray[0]; //берём минимум из первого числа массива
		foreach($randomArray as $elem) {
			if($elem < $currentMinNum) { 
				$currentMinNum = $elem; //перезаписывает текущий минимум, если новое число из массива меньше.
			}
	    }
		return $currentMinNum;
	}
}
$randomArray = createRandomArray(10);
echo findMinNumberInArray($randomArray);
melisa's picture

в 4 строке лишние 4 отступа, а так всё верно.
принято