Пример решения. 12. Сравнить каждый 3-й эл-т одного массива с каждым 2-м второго.

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

<?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); // Сравнение массивов

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

vedro-compota's picture

Вы использовали функцию для перестройки массивов -- это неплохой способ. Однако, предположим, что вы не можете перестроить массивы и вынуждены обходить их "одновременно" в одном цикле, т.е. представьте решение без ф-и new_array().

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

melisa's picture

<?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's picture

Можно ли как-то изменить начало нумерации массива с [0] на [1] не в процессе создания, а когда уже создан? без помощи циклов?

   $j = 1;
    for ($i = 1; $i <= count($array); $i++) {
        if ($i%$k == 0) {
            $n_array[$j] = $array[$i];
            $j++;
        }
    }

Вот в этом месте хотелось бы упростить

vedro-compota's picture

Как бы считаем не от $0$, а от $0+1$:

$k = 2; // каждый второй
 for ($i = 0; $i <= count($array); $i++) {
     if (($i + 1)%$k == 0) {
          echo $array[$i];
     }
 }

-- проверяем тот же самый элемент, но под "виртуальным" номер, как бы делая "сдвиг".

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