Задача №12 - Сравнение элементов 2-х массивов

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


<?php
/* Даны два массива по 20 элементов каждый (заполните случайными числами,
так чтобы среди элементов массива при очередном
запуске программы могли встретиться и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов
2-ого массива - сравнение проводите пока не закончится та выборка, которая короче.*/

$N = 20;
$M = 20;          
$arrayN = [];
$arrayM = [];
$k = 2; // Каждый 3-й элемент массива №1
$f = 1; // Каждый 2-й элемент массива №2

// Заполняем массив №1 случайными числами

for ( $i = 0; $i < $N; $i++ ) {
    $arrayN[] = rand( -9, 9 ); 
}

// Заполняем массив №2 случайными числами

for ( $i = 0; $i < $M; $i++ ) {
    $arrayM[] = rand( -9, 9 ); 
}

echo "Массив №1:". '<br />';

foreach ($arrayN as $value) {
    echo "$value". ' ';
}

echo '<br />';

echo "Массив №2:". '<br />';

foreach ($arrayM as $value) {
    echo "$value". ' ';
}

echo '<br />'.'<br />';

while ($k < $N && $f < $M) {
    if ($arrayN[$k] > $arrayM[$f]) {
        echo $arrayN[$k]. "  больше, чем " .$arrayM[$f] . '<br />';
    } elseif ($arrayN[$k] == $arrayM[$f]) {
        echo $arrayN[$k]. "  равно " .$arrayM[$f] . '<br />';
    } else {
        echo $arrayN[$k]. "  меньше, чем " .$arrayM[$f] . '<br />';
    }
$k += 3;
$f += 2;
}       
?>

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

melisa's picture

Замечание

  1. $k = 2; // Каждый 3-й элемент массива №1
    $f = 1; // Каждый 2-й элемент массива №2</li>

    комментарии некорректны. Комментарии в коде всегда нужно писать для "дурака", который будет использовать ваш код (даже если вы думаете, что его никто не будет использовать - привычка - вторая натура). Поставьте себя на его место, представьте, что читающий не понимает что происходит, и пишите комментарий.

    То же относится и к названиям переменных/функций/методов. Старайтесь называть их как можно более информативно, желательно, чтобы название иллюстрировало то, что они в себе хранят или что делают. Например, $appleCount, $lastLoginDate, $brickAndMortarShop, donutEater(), emailMessageSender().

Задача

Дополните свой код 2мя функциями: создания и вывода массива на экран.

  • Если вы видите, что какой-то код у вас реализует одинаковую логику, лучше вынести его в функцию, и делать её вызов там, где требуется. Писать один код дважды - плохая практика.
  • Объединяйте код в функции так, чтобы они не имели побочного эффекта, т.е. либо выводит на экран сообщение, либо возвращает значение.

Пусть функция вывода массива принимает аргумент "Имя массива".
Дайте функциям информативные имена.

Pavel1989's picture

<?php
/* Даны два массива по 20 элементов каждый (заполните случайными числами,
так чтобы среди элементов массива при очередном
запуске программы могли встретиться и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов
2-ого массива - сравнение проводите пока не закончится та выборка, которая короче.*/
         
// Объявление функции создания массива и заполнения его случайными числами

function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( -9, 9 ); 
    }
    return $array;   
}

// Объявление функции вывода массива на экран

function outputArray($array)
{
    foreach ( $array as $value ) {
        echo($value). ' ';
    }        
}

$k = 2;
$f = 1;

$array1 = сreateArray(20); // Создание массива №1
$array2 = сreateArray(20); // Создание массива №2

outputArray($array1);
echo '<br />';
outputArray($array2);

echo '<br />'.'<br />';

// Сравнение каждого 3-го элемента первого массива с каждым 2-м элементом 2-го массива

while ($k < count($array1) && $f < count($array1)) {
    if ($array1[$k] > $array2[$f]) {
        echo $array1[$k]. "  больше, чем " .$array2[$f] . '<br />';
    } elseif ($array1[$k] == $array2[$f]) {
        echo $array1[$k]. "  равно " .$array2[$f] . '<br />';
    } else {
        echo $array1[$k]. "  меньше, чем " .$array2[$f] . '<br />';
    }
$k += 3;
$f += 2;
}      
?>
melisa's picture

Пусть функция вывода массива принимает аргумент "Имя массива".

Имелось ввиду, что "Имя массива" - строка, используемая в комментарии в выводе. Вот вы писали :

echo "Массив №1: <значения массива>";
echo "Массив №2: ...";

а теперь получилось, что на экран выводятся только значения. Сделайте, чтобы название массива тоже выводилось. А т.к., функция может быть использована много раз, и название каждый раз будет разное, нельзя выводить только универсальное название (точнее можно, но бессмысленно - не информативно). Но можно передавать название в качестве второго аргумента в функцию.

Pavel1989's picture

<?php
/* Даны два массива по 20 элементов каждый (заполните случайными числами,
так чтобы среди элементов массива при очередном
запуске программы могли встретиться и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов
2-ого массива - сравнение проводите пока не закончится та выборка, которая короче.*/
         
// Объявление функции создания массива и заполнения его случайными числами

function сreateArray($N)
{
    for ( $i = 0; $i < $N; $i++ ) {
         $array[] = rand( -9, 9 ); 
    }
    return $array;   
}

// Объявление функции вывода массива на экран

function outputArray($array, $index)
{
    echo "Массив ". $index.'<br />';
    foreach ( $array as $value ) {
        echo($value). ' ';
    }        
}

$k = 2;
$f = 1;

$array1 = сreateArray(20); // Создание массива №1
$array2 = сreateArray(20); // Создание массива №2

outputArray($array1, 1);
echo '<br />';
outputArray($array2, 2);

echo '<br />'.'<br />';

// Сравнение каждого 3-го элемента первого массива с каждым 2-м элементом 2-го массива

while ($k < count($array1) && $f < count($array1)) {
    if ($array1[$k] > $array2[$f]) {
        echo $array1[$k]. "  больше, чем " .$array2[$f] . '<br />';
    } elseif ($array1[$k] == $array2[$f]) {
        echo $array1[$k]. "  равно " .$array2[$f] . '<br />';
    } else {
        echo $array1[$k]. "  меньше, чем " .$array2[$f] . '<br />';
    }
$k += 3;
$f += 2;
}      
?>
melisa's picture

принято