Учебные задачи PHP. Задача 12
Primary tabs
<?php
$number = 20;
for ($i = 0; $i < $number; $i ++) { // заполняем 1-й массив
$arrInitial[] = rand(-10, 10);
}
for ($i = 0; $i < $number; $i ++) { // заполняем 2-й массив
$arrSecond[] = rand(-10, 10);
}
for ($i = 3; $i < $number; $i = $i + 3) { // обходим каждый 3-ой элемент массива и заполняем новый массив $initial
$initial[] = $arrInitial[$i];
}
for ($i = 0; $i < count($arrSecond); $i = $i + 2) { // обходим каждый 2-ой элемент массива и заполняем новый массив $second
$second[] = $arrSecond[$i];
}
for ($i = 0; $i < count($initial); $i ++) { // обходим оба массива $initial и $second и делаем сравнение их значений. Кол-во проходов делаем по количеству элементов массива $initial.
if ($initial[$i] == $second[$i]) {
echo "$initial[$i] равно $second[$i] <br>";
} elseif ($initial[$i] > $second[$i]) {
echo "$initial[$i] больше $second[$i] <br>";
} else {
echo "$initial[$i] меньше $second[$i] <br>";
}
}
?>- Log in to post comments
- 12007 reads
vedro-compota
Tue, 04/23/2019 - 10:56
Permalink
для обхода массива
для обхода массива предпочтительно ипользовать цикл foreach.
_____________
матфак вгу и остальная классика =)
vedro-compota
Tue, 04/23/2019 - 11:00
Permalink
без пересборки
Вы сдесь перестраивали массивы для сравнения, попробуйте провести сравнение в одном цикле, без построения новых массивов.
_____________
матфак вгу и остальная классика =)
Laven
Thu, 04/25/2019 - 11:16
Permalink
Модифицировал код задачи
Выкладываю код как промежуточное решение. Позже выложу код, "запакованный" в функцию.
<pre><?php $number = 9; for ($i = 0; $i < $number; $i ++) { // заполняем 1-й массив $a[] = rand(-10, 10); } print_r($a); for ($i = 0; $i < $number; $i ++) { // заполняем 2-й массив $b[] = rand(-10, 10); } print_r($b); $i = 2; $j = 1; while (($i < count($a)) && ($j < count($b))) { if ($a[$i] == $b[$j]) { echo "$a[$i] равно $b[$j] <br>"; } elseif ($a[$i] > $b[$j]) { echo "$a[$i] больше $b[$j] <br>"; } else { echo "$a[$i] меньше $b[$j] <br>"; } $i = $i + 3; $j = $j + 2; } ?>Laven
Thu, 04/25/2019 - 13:07
Permalink
Решение задачи в виде функции
<?php function generationArray($number) // Создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // заполняем 1-й массив $arr[] = rand(-10, 10); } return $arr; } function comparingArrays($a, $b, $n, $m) { $i = $n - 1; // введен поправочный параметр "-1" $j = $m - 1; // введен поправочный параметр "-1" $initialArr = $a; $secondArr = $b; while (($i < count($initialArr)) && ($j < count($secondArr))) { if ($initialArr[$i] == $secondArr[$j]) { echo "$initialArr[$i] равно $secondArr[$j] <br>"; } elseif ($initialArr[$i] > $secondArr[$j]) { echo "$initialArr[$i] больше $secondArr[$j] <br>"; } else { echo "$initialArr[$i] меньше $secondArr[$j] <br>"; } $i = $i + 3; $j = $j + 2; } } $number = 9; // количество элементов массива function generationArray $n = 3; // сравнивать каждый $n-ый элемент 1-ого массива $m = 2; // сравнивать каждый $m-ый элемент 2-ого массива $a = generationArray($number); $b = generationArray($number); comparingArrays($a, $b, $n, $m); ?>melisa
Fri, 04/26/2019 - 15:20
Permalink
function comparingArrays($a,
нет смысла передавать $n и $m в качестве параметров в функцию, т.к. внутри Вы в любом случае прибавляете 3 и 2
Т.е. даже если Вы передадите 8 и 9, сравнение начнётся с 8 и 9 номеров, но каждого 3 и 2, как и было.
В качестве параметров внутрь функции стоит передавать только то, что повлияет непосредственно на её работу.
$initialArr = $a; $secondArr = $b;Вы присваиваете новые имена массивам "вручную". Но можно дать эти имена уже аргументам функции, и это произойдёт автоматически.
Почему?
Локальная область видимости.
melisa
Fri, 04/26/2019 - 15:10
Permalink
тонкости перевода
inital переводится как начальный/исходный. при порядковом счёте используйте всё-таки first - первый
comparingArrays - сравнивая массивы; лучше compareArrays - сравнить массивы, ну или arrayСomparing - сравнение массивов
Конечно, на работоспособность кода это не влияет, но влияет на его читабельность.
Также, забегая немного вперёд, для выхода на работу программистом придётся подтянуть знания английского. Обычно требуется хотя бы уровень "могу читать документацию на английском" :)
Laven
Fri, 04/26/2019 - 22:20
Permalink
Исправил код задачи
Благодарю за проверку. Сделал исправления в части наименований сущностей и сути кода.
<pre><?php function generateArray($number) // Создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // заполняем массив $arr[] = rand(-10, 10); } return $arr; } function compareArrays($firstArr, $secondArr, $n, $m) { $i = $n; $j = $m; while (($i < count($firstArr)) && ($j < count($secondArr))) { if ($firstArr[$i] == $secondArr[$j]) { echo "$firstArr[$i] равно $secondArr[$j] <br>"; } elseif ($firstArr[$i] > $secondArr[$j]) { echo "$firstArr[$i] больше $secondArr[$j] <br>"; } else { echo "$firstArr[$i] меньше $secondArr[$j] <br>"; } $i = $i + 3; // сравнивать каждый 3-ий элемент 1-ого массива $j = $j + 2; // сравнивать каждый 2-ой элемент 2-ого массива } } $number = 9; // количество элементов массива function generateArray $n = 0; // начинать обход с $n-ого элемента 1-ого массива $m = 0; // начинать обход с $m-ого элемента 2-ого массива $a = generateArray($number); $b = generateArray($number); compareArrays($a, $b, $n, $m); ?>vedro-compota
Fri, 04/26/2019 - 23:27
Permalink
английский важнен, но умнение программировать - важнее)
требуется это далеко не всегда и не самое главное) если что- без паники
_____________
матфак вгу и остальная классика =)
melisa
Tue, 04/30/2019 - 17:18
Permalink
нет смысла передавать n и m
нет смысла передавать $n и $m в качестве параметров в функцию.
В качестве параметров внутрь функции стоит передавать только то, что повлияет непосредственно на её работу.
$n, $m - в Вашем случае, это внутренняя логика функции.
Laven
Tue, 04/30/2019 - 18:55
Permalink
Исправил код задачи
<pre><?php function generateArray($number) // Создание массива случайных чисел { for ($i = 0; $i < $number; $i ++) { // заполняем массив $arr[] = rand(-10, 10); } return $arr; } function compareArrays($firstArr, $secondArr) { $i = 2; // начинать обход массива с 3-го элемента массива $j = 1; // начинать обход массива с 2-го элемента массива while (($i < count($firstArr)) && ($j < count($secondArr))) { if ($firstArr[$i] == $secondArr[$j]) { echo "$firstArr[$i] равно $secondArr[$j] <br>"; } elseif ($firstArr[$i] > $secondArr[$j]) { echo "$firstArr[$i] больше $secondArr[$j] <br>"; } else { echo "$firstArr[$i] меньше $secondArr[$j] <br>"; } $i = $i + 3; // сравнивать каждый 3-ий элемент 1-ого массива $j = $j + 2; // сравнивать каждый 2-ой элемент 2-ого массива } } $number = 12; // количество элементов массива function generateArray $a = generateArray($number); $b = generateArray($number); compareArrays($a, $b); ?>melisa
Tue, 04/30/2019 - 19:00
Permalink
принято
принято