«Единственный способ творить великие дела – это любить то, что ты делаешь»
PHP
site.komp36.ru Создание сайтов. Твой сайт фотографа Что есть на сайте? Несколько фото галерей: свадебная, постановочная съемка, love story, детские фото. Договор на фотосъемку, прайс-лист.
site.komp36.ru Продающий лендинг «Установка и продажа окон» Установка и продажа окон, установка дверей, перегородок. Одностраничный продающий сайт. Заявки прямо с сайта
site.komp36.ru Универсальный лендинг. Любая тема сайта - 4900 руб. Лендинг адаптируется под любую тему: ремонт, отделка, продажа окон, дверей, лестниц, мебели и многое другое
site.komp36.ru Создание сайтов. Сайт сервисного центра. Сайт компании. Новости и отзывы. Несколько прайс-листов – под каждый отдельная страница. Возможность размещения статей

Матрицы в 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
)