--- tags: Python Step --- # Практика по теме 9. Двумерные структуры данных На сайте http://pythontutor.ru/lessons/2d_arrays/problems/2d_max/ решить все задачи к занятию *9. Двумерные массивы* Выслать *архив с решениями всех задач (файлы с расширением .py) и скриншотом с сайта*, на котором видно количество решенных задач и имя текущего пользователя. ## [Задача 1. Максимум](http://pythontutor.ru/lessons/2d_arrays/problems/2d_max/) Найдите индексы первого вхождения максимального элемента. Выведите два числа: номер строки и номер столбца, в которых стоит наибольший элемент в двумерном массиве. Если таких элементов несколько, то выводится тот, у которого меньше номер строки, а если номера строк равны то тот, у которого меньше номер столбца. Программа получает на вход размеры массива `n` и `m`, затем `n` строк по `m` чисел в каждой. :::spoiler Решение ``` python (n, m) = [int(s) for s in input().split()] a = [[int(s) for s in input().split()] for i in range(n)] max = a[0][0] max_i = max_j = 0 for i in range(len(a)): for j in range(len(a[i])): if a[i][j] > max: max = a[i][j] max_i, max_j = i, j print(max_i, max_j) ``` ::: ## [Задача 2. Снежинка](http://pythontutor.ru/lessons/2d_arrays/problems/snowflake/) Дано нечетное число `n`. Создайте двумерный массив из `n×n` элементов, заполнив его символами "." (каждый элемент массива является строкой из одного символа). Затем заполните символами "\*" среднюю строку массива, средний столбец массива, главную диагональ и побочную диагональ. В результате звездочки в массиве должны образовывать изображение снежинки. Выведите полученный массив на экран, разделяя элементы массива пробелами. :::spoiler Решение ``` python n = int(input()) a = [['.'] * n for i in range(n)] for i in range(n): for j in range(n): if i == (n // 2) or j == (n // 2) or i == j or (i+j)==n-1: a[i][j] = '*' print(' '.join(a[i])) ``` ::: ## [Задача 3. Шахматная доска](http://pythontutor.ru/lessons/2d_arrays/problems/chessboard/) Даны два числа `n` и `m`. Создайте двумерный массив размером `n×m` и заполните его символами "." и "\*" в шахматном порядке. В левом верхнем углу должна стоять точка. :::spoiler Решение ``` python n, m = [int(i) for i in input().split()] a = [['.'] * m for i in range(n)] for i in range(n): for j in range(m): if (i + j) % 2 != 0: a[i][j] = '*' print(' '.join(a[i])) ``` ::: ## [Задача 4. Диагонали, параллельные главной](http://pythontutor.ru/lessons/2d_arrays/problems/diagonals/) Дано число `n`. Создайте массив размером n×n и заполните его по следующему правилу. На главной диагонали должны быть записаны числа 0. На двух диагоналях, прилегающих к главной, числа 1. На следующих двух диагоналях числа 2, и т.д. :::spoiler Решение ``` python n = int(input()) a = [[0] * n for i in range(n)] for i in range(n): for j in range(n): a[i][j] = abs(i - j) print(' '.join([str(s) for s in a[i]])) ``` ::: ## [Задача 5. Побочная диагональ](http://pythontutor.ru/lessons/2d_arrays/problems/secondary_diagonal/) Дано число `n`. Создайте массив размером `n×n` и заполните его по следующему правилу: Числа на диагонали, идущей из правого верхнего в левый нижний угол равны 1. Числа, стоящие выше этой диагонали, равны 0. Числа, стоящие ниже этой диагонали, равны 2. Полученный массив выведите на экран. Числа в строке разделяйте одним пробелом. :::spoiler Решение ``` python n = int(input()) a = [[1] * n for i in range(n)] for i in range(n): for j in range(n): if j < n - i - 1: a[i][j] = 0 elif j > n - i - 1: a[i][j] = 2 print(' '.join([str(s) for s in a[i]])) ``` ::: ## [Задача 6. Поменять столбцы](http://pythontutor.ru/lessons/2d_arrays/problems/swap_columns/) Дан двумерный массив и два числа: `i` и `j`. Поменяйте в массиве столбцы с номерами `i` и `j` и выведите результат. Программа получает на вход размеры массива `n` и `m`, затем элементы массива, затем числа `i` и `j`. Решение оформите в виде функции `swap_columns(a, i, j)`. :::spoiler Решение ``` python ``` :::