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

Решение для задачи из списка

<?php 
/**
 * Решение для задачи №3 из курса PHP
 * 
 * Вывести на экран N случайных чисел (каждое с новой строки).
 * Для каждого числа, начиная со второго, рядом выводить - 
 * больше ли оно предыдущего или меньше.
 */

	$n = 15; //переменная для хранения требуемого количества элементов
	$randNums = getRandNumber($n);//Служебная переменная для хранения массива случайных чисел получаемых функцией

	for ($i = 0; $i < count($randNums); $i++){ //Цикл для вывода чисел
		if($i < 1){
			echo $randNums[$i]."<br>";
		}else{
			if($randNums[$i] < $randNums[$i-1]){
				echo $randNums[$i]." меньше предыдущего<br>";
			}elseif($randNums[$i] > $randNums[$i-1]){
				echo $randNums[$i]." больше предыдущего<br>";
			}else{
				echo $randNums[$i]." равно предыдущему<br>";
			}
		}
	}

  
  function getRandNumber($count) {
		//Функция принимает на входе в качестве параметра число элементов. 
		//возвращает массив элементов
		$numbers = [];
		for ($i=0; $i < $count; $i++) { 
			$numbers [] = rand();
		}
		return $numbers;
	}

?>

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

vedro-compota's picture

Напишите ещё два варианта решения:

  1. используйте foreach вместо for для обхода массива при выводе. Как будет выглядеть код?
  2. напишите третий вариант решения без использования массивов с реализацией решения в виде функции

_____________
матфак вгу и остальная классика =)

toyrik's picture

1. используйте foreach вместо for для обхода массива
при выводе. Как будет выглядеть код?

<?php 
/**
 * Решение для задачи №3 из курса PHP
 * 
 * Вывести на экран N случайных чисел (каждое с новой строки).
 * Для каждого числа, начиная со второго, рядом выводить - 
 * больше ли оно предыдущего или меньше.
 * 
 * UPD используйте foreach вместо for для обхода массива при выводе. 
 * Как будет выглядеть код?
 */

	$n = 15; //переменная для хранения требуемого количества элементов
	
	foreach (getRandNumber($n) as $num => $value) {
		if ($num < 1) {
			echo $value."<br>";
			$prev = $value;
		}else{
			if($value < $prev){
				echo $value." меньше предыдущего<br>";
				$prev = $value;
			}elseif($value > $prev){
				echo $value." больше предыдущего<br>";
				$prev = $value;
			}else{
				echo $value." равно предыдущему<br>";
				$prev = $value;
			}
		}					
	}
  
  function getRandNumber($count) {
		//Функция принимает на входе в качестве параметра число элементов. 
		//возвращает массив элементов
		$numbers = [];
		for ($i=0; $i < $count; $i++) { 
			$numbers [] = rand();
		}
		return $numbers;
	}

?>
2. напишите третий вариант решения без использования
массивов с реализацией решения в виде функции
<?php 
/**
 * Решение для задачи №3 из курса PHP
 * 
 * Вывести на экран N случайных чисел (каждое с новой строки).
 * Для каждого числа, начиная со второго, рядом выводить - 
 * больше ли оно предыдущего или меньше.
 * 
 * UPD напишите третий вариант решения без использования 
 * массивов с реализацией решения в виде функции
 */
	numSeriesCompare(14);

	function numSeriesCompare($count = null)	{
		
		for ($i=0; $i < $count ; $i++) { 
			$current = rand(0, 99);
			if($i < 1){
			echo $current."<br>";
			$prev = $current;
			}else{
				if($i > 0 && $current > $prev){
					echo $current." больше предыдущего<br>";
					$prev = $current;
				}elseif ($i > 0 && $current < $prev) {
					echo $current." меньше предыдущего<br>";
					$prev = $current;
				}else{
					echo $current." равно предыдущему<br>";
					$prev = $current;
				}
			}
		}
	}
?>
vedro-compota's picture

if ($num < 1) {
            echo $value."<br>";
            $prev = $value;

-- это код судя по всему никогда не выполняется, внутри цикла. Исправьте.

_____________
матфак вгу и остальная классика =)

toyrik's picture

Не знаю на сколько точно понял мысль... но получилось вот так.

<?php

/**
 * Решение для задачи №3 из курса PHP
 * 
 * Вывести на экран N случайных чисел (каждое с новой строки).
 * Для каждого числа, начиная со второго, рядом выводить - 
 * больше ли оно предыдущего или меньше.
 * 
 * UPD используйте foreach вместо for для обхода массива при выводе. 
 * Как будет выглядеть код?
 */
$n = 15; //переменная для хранения требуемого количества элементов
showCompareArray(getRandNumber($n));

function showCompareArray($array)
{
  echo $array[0] . "<br>";
  $prev = $array[0];
  foreach ($array as $num => $value) {
    if ($num > 1) {
      if ($value < $prev) {
        echo $value . " меньше предыдущего<br>";
        $prev = $value;
      } elseif ($value > $prev) {
        echo $value . " больше предыдущего<br>";
        $prev = $value;
      } else {
        echo $value . " равно предыдущему<br>";
        $prev = $value;
      }
    }
  }
}

function getRandNumber($count)
{
  //Функция принимает на входе в качестве параметра число элементов. 
  //возвращает массив элементов
  $numbers = [];
  for ($i = 0; $i < $count; $i++) {
    $numbers [] = rand();
  }
  return $numbers;
}

?>
vedro-compota's picture

/**
 * Решение для задачи №3 из курса PHP
 * 
 * Вывести на экран N случайных чисел (каждое с новой строки).
 * Для каждого числа, начиная со второго, рядом выводить - 
 * больше ли оно предыдущего или меньше.
 * 
 * UPD напишите третий вариант решения без использования 
 * массивов с реализацией решения в виде функции
 */
    numSeriesCompare(14);
 
    function numSeriesCompare($count = null)    {
         
        for ($i=0; $i < $count ; $i++) { 
            $current = rand(0, 99);
            if($i < 1){
            echo $current."<br>";
            $prev = $current;
            }else{
                if($i > 0 && $current > $prev){
                    echo $current." больше предыдущего<br>";
                    $prev = $current;
                }elseif ($i > 0 && $current < $prev) {
                    echo $current." меньше предыдущего<br>";
                    $prev = $current;
                }else{
                    echo $current." равно предыдущему<br>";
                    $prev = $current;
                }
            }
        }
    }
?>

код неправильно отформатирован, в данном случае это и пробелы между скобками и ключевыми словами и отступы.

_____________
матфак вгу и остальная классика =)

toyrik's picture

<?php 
/**
 * Решение для задачи №3 из курса PHP
 * 
 * Вывести на экран N случайных чисел (каждое с новой строки).
 * Для каждого числа, начиная со второго, рядом выводить - 
 * больше ли оно предыдущего или меньше.
 * 
 * UPD напишите третий вариант решения без использования 
 * массивов с реализацией решения в виде функции
 */
	numSeriesCompare(14);

	function numSeriesCompare($count = null)
	{
		for ($i=0; $i < $count ; $i++) { 
			$current = rand(0, 99);
			if ($i < 1) {
				echo $current."<br>";
				$prev = $current;
			} else {
				if ($i > 0 && $current > $prev) {
					echo $current." больше предыдущего<br>";
					$prev = $current;
				} elseif ($i > 0 && $current < $prev) {
					echo $current." меньше предыдущего<br>";
					$prev = $current;
				} else {
					echo $current." равно предыдущему<br>";
					$prev = $current;
				}
			}
		}
	}
?>
vedro-compota's picture

решение засчитано

_____________
матфак вгу и остальная классика =)