Матрицы в PHP практика - Задачи на матрицы
Матрицы практика - Задачи на матрицы
Задача №1
Есть матрица. Нужно найти min и max числа и поменять их местами.
Матрицы удобно выводить, используя тег pre.
Задача №2
Найти в матрице строку с наибольшей и наименьшей суммой элементов.
Задача №3
В квадратной числовой матрице найти максимальное значение по диагонали.
Подсказка: диагональ матрицы - это те ее ячейки, в которых i = j.
Задача №4
В квадратной числовой матрице посчитать сумму всех элементов по диагонали.
Задача №5
В квадратной числовой матрице посчитать количество повторяющихся значений.
Чтобы посчитать количество повторяющихся значений:
1. Был создан пустой массив $arRepeat
2. В ходе цикла в массив $arRepeat в качестве ключа/индекса заносится текущее значение матрицы.
3. Получается, что есть массив и есть ключ, но у этого индекса нет значения.
4. Инкремент "++" позволяет создать значение 1 и далее +1 каждый раз, когда индекс массива встречается в матрице.
5. В итоге мы имеем массив: его индексы - это значения матрицы, а его значения - это то число раз, которое индекс массива встречается в матрице.
PHP-код
// Задача №1 - Поиск min и max значений
echo "Задача №1 - Поиск min и max значений<p>";
echo "Исходная матрица<br>";
$arMatrix = [
[21, -6, 3, 0, 11],
[41, 7, -7, 3, 32],
[14, -1, 9, 4, 45],
[11, -8, 2, 8, 33],
[32, 3, -1, 7, 25]
];
// Создаем переменные $max и $min и их начальные значения
$max = $min = $arMatrix[0][0];
// Создаем переменные-координаты для $max и $min
$maxI = $maxJ = $minI = $minJ = 0;
for($i=0; $i<count($arMatrix); $i++){
for($j=0; $j<count($arMatrix[$i]); $j++){
// Выводим всю матрицу
echo $arMatrix[$i][$j]." ";
if($max < $arMatrix[$i][$j]){
$max = $arMatrix[$i][$j];
$maxI = $i;
$maxJ = $j;
}
if($min > $arMatrix[$i][$j]){
$min = $arMatrix[$i][$j];
$minI = $i;
$minJ = $j;
}
}
echo "<br>";
}
echo "<p>Максимальное значение матрицы и его координаты<br>";
echo $max."<br>";
echo "Индекс строки: ".$maxI."<br>";
echo "Индекс столбца: ".$maxJ."<p>";
echo "<p>Минимальное значение матрицы и его координаты<br>";
echo $min."<br>";
echo "Индекс строки: ".$minI."<br>";
echo "Индекс столбца: ".$minJ."<p>";
echo "<p>";
// Меняем местами $max и $min
$temp = $max; // Заносим максимальное число в переменную $temp
$arMatrix[$maxI][$maxJ] = $min; // В ячейку с максимальным числом - заносим минимальное число
$arMatrix[$minI][$minJ] = $temp; // В ячейку с минимальным числом - заносим максимальное число
echo "Итоговая матрица<br>";
// Выводим всю матрицу
for($i=0; $i<count($arMatrix); $i++){
for($j=0; $j<count($arMatrix[$i]); $j++){
echo $arMatrix[$i][$j]." ";
}
echo "<br>";
}
echo " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br>";
// Сравним как выглядит матрица при выводе с помощью ТОЛЬКО команды print_r
// И как выглядит матрица при использовании совместно с командой print_r ТЕГА <pre>
echo "Вывод матрицы - ТОЛЬКО команда print_r<br>";
echo print_r($arMatrix);
echo "<p>Вывод матрицы - Команда print_r и ТЕГ pre<br>";
echo "<pre>";print_r($arMatrix);echo"</pre>";
echo " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br> ";
// Задача №2 - Поиск суммы элементов в строке
echo "Задача №2 - Поиск суммы элементов в строке<p>";
$arMatrix2 = [
[9, 6, 3, 0, 11],
[1, 7, 7, 3, 13],
[4, 1, 9, 4, 14],
[1, 8, 2, 8, 13],
[2, 3, 1, 7, 12]
];
// Создаем пустой массив
$arSum = [];
// Выводим исходный массив и заносим в массив $arSum сумму элементов каждой строки
for($i=0; $i<5; $i++){
for($j=0; $j<5; $j++){
echo $arMatrix2[$i][$j]." ";
$arSum[$i] += $arMatrix2[$i][$j]."<br>";
}
echo "<br>";
}
// // Выводим массив $arSum
echo "<pre>";print_r($arSum);echo"</pre>";
// Создаем переменные maxSum и minSum, stMax и stMin - индексы строк
$maxSum = $minSum = $arSum[0];
$stMax = $stMin = 0;
for($i=0; $i<5; $i++){
if($maxSum < $arSum[$i]){
$maxSum = $arSum[$i];
$stMax = $i;
}
if($minSum > $arSum[$i]){
$minSum = $arSum[$i];
$stMin = $i;
}
}
echo "В строке №$stMax наибольшая сумма элементов ". $maxSum."<br>";
echo "В строке №$stMin наименьшая сумма элементов ". $minSum;
echo "<p>";
echo " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br> ";
// Задача №3 - Поиск максимального значения по диагонали
echo "Задача №3 - Поиск максимального значения по диагонали<p>";
$arMatrix3 = [
[29, 6, 13, 0, 31],
[21, 7, 17, 3, 33],
[34, 1, 59, 4, 44],
[21, 8, 12, 8, 33],
[32, 3, 11, 7, 32]
];
// Создаем переменные $max и $min и их начальные значения
$max = $min = $arMatrix3[0][0];
// Создаем переменные-координаты для $max и $min
$maxI = $maxJ = $minI = $minJ = 0;
for($i=0; $i<count($arMatrix3); $i++){
for($j=0; $j<count($arMatrix3[$i]); $j++){
// Выводим всю матрицу
echo $arMatrix3[$i][$j]." ";
if($i ==$j && $max < $arMatrix3[$i][$j]){
$max = $arMatrix3[$i][$j];
}
}
echo "<br>";
}
echo "<br>";
echo "Максимальное значение по диагонали: ". $max;
echo "<p>";
echo " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br> ";
// Задача №4 - Сумма всех элементов по диагонали
echo "Задача №4 - Сумма всех элементов по диагонали<p>";
$arMatrix4 = [
[2, 6, 3, 0, 1],
[1, 7, 7, 3, 1],
[4, 1, 3, 4, 1],
[1, 8, 2, 8, 1],
[2, 3, 1, 7, 3]
];
$sum = 0;
for($i=0; $i<5; $i++){
for($j=0; $j<5; $j++){
// Выводим всю матрицу
echo $arMatrix4[$i][$j]." ";
if($i ==$j){
$sum += $arMatrix4[$i][$j];
}
}
echo "<br>";
}
echo "<br>";
echo "Сумма всех элементов по диагонали: ". $sum;
echo "<p>";
echo " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <br> ";
// Задача №5 - Посчитать количество повторяющихся значений
echo "Задача №5 - Посчитать количество повторяющихся значений <p>";
$arMatrix5 = [
[2, 6, 3, 0, 1],
[12, 7, 7, 3, 1],
[4, 1, 3, 4, 1],
[1, 8, 2, 8, 1],
[2, 3, 1, 7, 3]
];
$arRepeat = [];
for($i=0; $i<5; $i++){
for($j=0; $j<5; $j++){
// Выводим всю матрицу
echo $arMatrix5[$i][$j]." ";
// Указываем в качестве ключа массива текущее значение матрицы
$arRepeat[$arMatrix5[$i][$j]]++;
}
echo "<br>";
}
echo "<br>";
echo "<pre>";print_r($arRepeat);echo"</pre>";
Результат
Задача №1 - Поиск min и max значений
Исходная матрица
21 -6 3 0 11
41 7 -7 3 32
14 -1 9 4 45
11 -8 2 8 33
32 3 -1 7 25
Максимальное значение матрицы и его координаты
45
Индекс строки: 2
Индекс столбца: 4
Минимальное значение матрицы и его координаты
-8
Индекс строки: 3
Индекс столбца: 1
Итоговая матрица
21 -6 3 0 11
41 7 -7 3 32
14 -1 9 4 -8
11 45 2 8 33
32 3 -1 7 25
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Вывод матрицы - ТОЛЬКО команда print_r
Array ( [0] => Array ( [0] => 21 [1] => -6 [2] => 3 [3] => 0 [4] => 11 ) [1] => Array ( [0] => 41 [1] => 7 [2] => -7 [3] => 3 [4] => 32 ) [2] => Array ( [0] => 14 [1] => -1 [2] => 9 [3] => 4 [4] => -8 ) [3] => Array ( [0] => 11 [1] => 45 [2] => 2 [3] => 8 [4] => 33 ) [4] => Array ( [0] => 32 [1] => 3 [2] => -1 [3] => 7 [4] => 25 ) ) 1
Вывод матрицы - Команда print_r и ТЕГ pre
Array
(
[0] => Array
(
[0] => 21
[1] => -6
[2] => 3
[3] => 0
[4] => 11
)
[1] => Array
(
[0] => 41
[1] => 7
[2] => -7
[3] => 3
[4] => 32
)
[2] => Array
(
[0] => 14
[1] => -1
[2] => 9
[3] => 4
[4] => -8
)
[3] => Array
(
[0] => 11
[1] => 45
[2] => 2
[3] => 8
[4] => 33
)
[4] => Array
(
[0] => 32
[1] => 3
[2] => -1
[3] => 7
[4] => 25
)
)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Задача №2 - Поиск суммы элементов в строке
9 6 3 0 11
1 7 7 3 13
4 1 9 4 14
1 8 2 8 13
2 3 1 7 12
Array
(
[0] => 29
[1] => 31
[2] => 32
[3] => 32
[4] => 25
)
В строке №2 наибольшая сумма элементов 32
В строке №4 наименьшая сумма элементов 25
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Задача №3 - Поиск максимального значения по диагонали
29 6 13 0 31
21 7 17 3 33
34 1 59 4 44
21 8 12 8 33
32 3 11 7 32
Максимальное значение по диагонали: 59
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Задача №4 - Сумма всех элементов по диагонали
2 6 3 0 1
1 7 7 3 1
4 1 3 4 1
1 8 2 8 1
2 3 1 7 3
Сумма всех элементов по диагонали: 23
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Задача №5 - Посчитать количество повторяющихся значений
2 6 3 0 1
12 7 7 3 1
4 1 3 4 1
1 8 2 8 1
2 3 1 7 3
Array
(
[2] => 3
[6] => 1
[3] => 5
[0] => 1
[1] => 7
[12] => 1
[7] => 3
[4] => 2
[8] => 2
)