Задача №12. Даны два массива по 20 элементов каждый. Сравните каждый 3-ий элемент 1-го массива с каждый 2-ым элементом 2 массива
Primary tabs
Задача из этого списка
<?php /* Даны два массива по 20 элементов каждый (заполните случайными числами, так чтобы среди элементов массива * при очередном запуске программы могли встретиться и отрицательные и положительные числа). Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов 2-ого массива - сравнение проводите пока не закончится та выборка, которая короче. */ function createRandomArray() { //функция создания массива из 20 чисел for($a = 1; $a <= 20; $a++) { $randomArray[$a] = rand(-99, 99); } return $randomArray; } function compareArrays($finalArrayA, $finalArrayB) { //функция сравнения двух массивов foreach($finalArrayA as $key => $elem1) { $elem2 = $finalArrayB[$key]; if($elem1 > $elem2) { echo "$elem1 больше $elem2<br>"; } elseif($elem1 < $elem2) { echo "$elem1 меньше $elem2<br>"; } else { echo "$elem1 равно $elem2<br>"; } } } $arrayA = createRandomArray(); $arrayB = createRandomArray(); foreach($arrayA as $key => $elem1) { //Выделяет каждый третий элемент из одного массива и каждый второй элемент из второго - в отдельные массивы $elem2 = $arrayB[$key]; if($key % 3 == 0) { $finalArrayA[] = $elem1; } if($key % 2 == 0) { $finalArrayB[] = $elem2; } } echo compareArrays($finalArrayA, $finalArrayB);
- Log in to post comments
- 13065 reads
melisa
Thu, 07/12/2018 - 15:05
Permalink
замечания
Как мы обсуждали ранее, область видимости внутри функции
отличается от области видимости снаружи.
Не следует называть локальные переменные именами, совпадающими
с глобальными - это может ввести в заблуждение того, кто будет читать Ваш код.
Конкретно: рассмотрим функцию compareArrays().
Эта функция сравнивает какие-то абстрактные 2 массива. Почему тогда
аргументы функции Вы назвали $finalArrayA и $finalArrayB?
Функции всё равно, final они или не final. Лучше назвать их $firstArray и $secondArray.
Она и так выводит на экран значения, а Вы вызываете её с оператором echo:
Это лишнее.
Решение рабочее, но предоставьте другой вариант решения с перебором
обоих массивов в одном цикле.
Если возникнут затруднения, воспользуйтесь примечанием к этой задаче.
Sver4ok
Thu, 07/12/2018 - 22:32
Permalink
Добавил альтернативное решение.
melisa
Tue, 07/17/2018 - 16:43
Permalink
замечания
в первом массиве может быть сколько угодно элементов. Это неверное условие.
нет смысла передавать 3 и 2 в качестве параметров.
Во-первых, они не могут быть изменены по условию (если это произойдёт, условие задачи не будет выполнено).
Во-вторых, эти параметры не влияют на логику функции, а значит, бессмысленны. Для чего можно было бы ввести параметры здесь? Например, чтобы универсализировать задачу, выполняемую функцией. Тогда условие звучало бы так:
На Ваш выбор: удалите лишние аргументы из функции или усовершенствуйте код.
Sver4ok
Tue, 07/17/2018 - 21:57
Permalink
пофиксил
А можно кстати для красоты добавлять пробелы, чтобы был оператор на одной вертикали? Особенно это в ООП заметил что как-то симпатичнее выглядит. Ну тип:
melisa
Wed, 07/18/2018 - 12:41
Permalink
-
Нет, так нельзя, верните как было.
Это тоже для Вас. Наверное, не заметили. Всё-таки исправьте.
А вот в первой функции теперь творится неразбериха.
Теперь коментарий не соответствует тому, что делаем функция, если передать в неё 0, то будет выведена ошибка о неизвестной переменной, да и в данном контексте предыдущая логика этой функции вполне была нормальной - жёстко создавался массив из 20 элементов. Второй вариант тоже подходит, но лучше верните как было. Ну или исправьте, чтобы то, что есть было без ошибок.
Все эти ошибки по невнимательности, в них нет чего-то такого, что Вы не знаете. Просто ещё раз просматривайте свой код после того, как написали. А после этого запускайте со всевозможными вариантами параметров. Важно уметь протестировать свой код.
Sver4ok
Wed, 07/18/2018 - 17:14
Permalink
Не совсем понял тогда, объясните плез
Но первый и второй массив жёстко задан в 20 чисел.
Тута не массив, а переменная. Типа я перевёл как (КлючПервогоМассива), у меня плоховат английский пока что. Она увеличивается на +3 в цикле, то бишь берёт каждый третий ключ из первого массива. А Кину пока что отредактированный код первого варианта:
melisa
Wed, 07/18/2018 - 17:20
Permalink
Но первый и второй массив
Это Вы знаете, что первый и второй массив так заданы. И первая функция знает об этом. А функция compareArrays() - не знает. Она может принять в качестве аргументов массивы любой длинны. Откуда тогда внутри неё взялось условие "пока не дошли до 20 элемента"? ей должно быть всё равно, сколько элементов в массиве.
Это снова камень в огород Вашего понимания области видимости.
Sver4ok
Wed, 07/18/2018 - 18:11
Permalink
А, понял, тогда так:
melisa
Thu, 07/19/2018 - 11:22
Permalink
да, только
да, только функцию count() лучше прописать прямо в условии:
melisa
Thu, 07/19/2018 - 11:22
Permalink
принято
принято