Пример решения. 12. Сравнить каждый 3-й эл-т одного массива с каждым 2-м второго.
Primary tabs
Задача из этого списка
<?php
/*Даны два массива по 20 элементов каждый (заполните случайными числами, так
чтобы среди элементов массива при очередном запуске программы могли встретиться
и отрицательные и положительные числа).
Сравните каждый 3-ий элемент 1-ого массива с каждый 2-ым элементов 2-ого массива
- сравнение проводите пока не закончится та выборка, которая короче.
Например пусть мы имеем два массива (запишу лишь начальные элементы):
1 | 2 | -10 | 5 | 0 | 12 | 2 | 8 ....
0 | 3 | 4 | 9 | 7 | 5 | -8 | 3.....
для них программа должна вывести:
-10 меньше 3
12 больше 9
- других сравнений не последует, так как новых из "каждых третьих элементов"
в 1-ом массиве больше нет. */
function create_array() // Создание массива случайных чисел
{
for ($i = 1; $i < 21; $i++) {
$arr[$i] = rand(-20,20);
}
return $arr;
}
function new_array ($array, $k) // Создание нового массива, из каждого k-элемента предыдущего
{
$j = 1;
for ($i = 1; $i <= count($array); $i++) {
if ($i%$k == 0) {
$n_array[$j] = $array[$i];
$j++;
}
}
return $n_array;
}
function comparing_arrays ($a, $b) // Сравнение массивов
{
$i = 1;
while (($i < count($a))&&($i < count($b))) {
if ($a[$i] < $b[$i]) {
echo $a[$i], " меньше ", $b[$i], "<br>";
}
elseif ($a[$i] > $b[$i]) {
echo $a[$i], " больше ", $b[$i], "<br>";
}
elseif ($a[$i] == $b[$i]) {
echo $a[$i], " равно ", $b[$i], "<br>";
}
$i++;
}
}
$first = create_array(); // Создание случайных массивов
$second = create_array();
foreach ($first as $k => $value) {
echo $k, "=", $value, "<br>";
}
echo "<br>";
$n_first = new_array($first, 3); // Создание новых массивов
$n_second = new_array($second, 2);
foreach ($n_second as $k => $value) {
echo $k, "=", $value, "<br>";
}
echo "<br>";
comparing_arrays($n_first, $n_second); // Сравнение массивов- Log in to post comments
- 8803 reads
vedro-compota
Mon, 04/24/2017 - 18:15
Permalink
Альтернативное решение
Вы использовали функцию для перестройки массивов -- это неплохой способ. Однако, предположим, что вы не можете перестроить массивы и вынуждены обходить их "одновременно" в одном цикле, т.е. представьте решение без ф-и new_array().
_____________
матфак вгу и остальная классика =)
melisa
Tue, 04/25/2017 - 08:59
Permalink
альтернативное решение
<?php function create_array() // Создание массива случайных чисел { for ($i = 1; $i < 21; $i++) { $arr[$i] = rand(-20,20); } return $arr; } function comparing_arrays ($a, $b, $n, $m) // Сравнение массивов { $i = $n; $j = $m; 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>"; } elseif ($a[$i] == $b[$j]) { echo $a[$i], " равно ", $b[$j], "<br>"; } $i += $n; $j += $m; } } $first = create_array(); $second = create_array(); foreach ($first as $value) { echo $value, " "; } echo "<br>"; foreach ($second as $value) { echo $value, " "; } echo "<br>"; comparing_arrays($first, $second, 3, 2);melisa
Mon, 04/24/2017 - 18:21
Permalink
Можно ли как-то изменить
Можно ли как-то изменить начало нумерации массива с [0] на [1] не в процессе создания, а когда уже создан? без помощи циклов?
$j = 1; for ($i = 1; $i <= count($array); $i++) { if ($i%$k == 0) { $n_array[$j] = $array[$i]; $j++; } }Вот в этом месте хотелось бы упростить
vedro-compota
Mon, 04/24/2017 - 18:40
Permalink
можно всегда проверять ненастоящий индекс
Как бы считаем не от $0$, а от $0+1$:
$k = 2; // каждый второй for ($i = 0; $i <= count($array); $i++) { if (($i + 1)%$k == 0) { echo $array[$i]; } }-- проверяем тот же самый элемент, но под "виртуальным" номер, как бы делая "сдвиг".
_____________
матфак вгу и остальная классика =)