Постановка задания

Задание для всех вариантов звучит так (или, возможно, немного изменено, т к могут быть разные издания учебного пособия):

Для решения задачи следует применить указатель на указатель на массив и функции: ввода количества строк $n$ и столбцов $m$ и элементов двумерного массива, вывода элементов массива на экран, обработки массива в соответствии с заданием.

В главной функции нужно использовать указатель на указатель для динамического выделения памяти. При обработке заданного массива нельзя использовать дополнительные массивы.

Варианты заданий

ВариантЗадание
1.Дана квадратная вещественная матрица $A$ размером $n • n$. Вычислить $k$-ую степень этой матрицы.
2.Дана вещественная матрица размером $n • m$. Переставляя ее строки и столбцы, добиться того, чтобы наименьший элемент оказался в верхнем левом углу.
3.Дана вещественная матрица размером $n • m$. Упорядочить ее строки по возрастанию наименьших элементов в строках матрицы.
4.Задан массив размером $n • n$, состоящий из нулей и единиц. Повернуть элементы массива на 90° против хода часовой стрелки.
5.Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце (или наоборот, наибольшим в своей строке и наименьшим в своем столбце). Для заданной целочисленной матрицы размером $n • m$ определить все седловые точки.
6.Дана вещественная матрица размером $n • n$, все элементы которой различны. Найти скалярное произведение строки, в которой находится наименьший элемент матрицы, и столбца с наибольшим элементом.
7.Дана вещественная матрица размером $n • m$, Определить строки, содержащие хотя бы один нулевой элемент; столбец, в котором находится самая длинная серия одинаковых элементов.
8.Определить, является ли произведение двух вещественных матриц размером $n • n$ магическим квадратом. Для магического квадрата сумма элементов во всех строках и столбцах одинакова.
9.Даны две вещественные матрицы $A$ и $B$ размером $n • n$. Показать, что произведения матриц $A·B \neq B·A$.
10.Даны вещественная матрица $A$ и единичная матрица $E$ одинаковых размеров $n • n$. Показать, что произведения матрица $A·E \neq E·A$.
11.Дана вещественная матрица размером $n • m$. Найти сумму наименьших элементов ее нечетных строк и наибольших элементов ее четных строк.
12.Дана вещественная матрица $A$ размером $n • n$. Удалить из матрицы строку и столбец, где находится минимальный элемент, и затем определить обратную матрицу.
13.Дана вещественная матрица $A$ размером $n • n$. Составить матрицу $B$, в которой находятся все элементы матрицы $A$ между минимальным и максимальным элементами.
14.

Дана действительная квадратная матрица порядка $2 • n$. Получить новую матрицу, переставляя ее блоки размером $n • n$:

Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Условие задания для варианта №14

15.

Дана действительная квадратная матрица порядка $2 • n$. Получить новую матрицу, переставляя ее блоки размером $n • n$:

Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Условие задания для варианта №15

16.Дана вещественная матрица размером $n • m$. Определить максимальные элементы матрицы, лежащие выше главной диагонали, и все элементы, находящиеся в «окрестности» этих элементов.
17.Дана вещественная матрица $A$ размером $n • n$. Найти максимальную сумму элементов из всех диагоналей, параллельных главной, начиная с двухэлементной диагонали.
18.Дана вещественная матрица $A$ размером $n • n$. Найти минимальную сумму элементов из всех диагоналей, параллельных побочной, начиная с одноэлементной диагонали.
19.Дана вещественная матрица размером $n • m$. Определить минимальные элементы матрицы, лежащие ниже побочной диагонали, и все элементы, находящиеся в «окрестности» этих элементов.
20.Элемент матрицы называется седловой точкой, если он является наименьшим в своей строке и наибольшим в своем столбце (или наоборот, наибольшим в своей строке и наименьшим в своем столбце). Для заданной целой матрицы размером $n • m$ удалить все строки и столбцы, где находятся седловые точки.
21.Дана вещественная матрица размером $n • m$. Удалить из матрицы все строки и столбцы, где находятся минимальные элементы.
22.Дана вещественная матрица размером $n • m$. Удалить из матрицы все строки и столбцы с нулевыми элементами, которые лежат выше главной и побочной диагоналей матрицы.
23.Дана вещественная матрица размером $n • m$. Элемент матрицы назовем локальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы матрицы на значение, задаваемое с клавиатуры.
24.Дана вещественная матрица размером $n • m$. Составить новую матрицу, состоящую из строк и столбцов исходной матрицы, где находятся минимальные элементы матрицы.
25.Дана вещественная матрица размером $n • m$. Составить новую матрицу, состоящую из строк и столбцов исходной матрицы, где находятся максимальные элементы матрицы.

Лабораторная работа $№7$ предполагает написание программы на языке Си. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.

➡ Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.

Образец выполнения (вариант №18)

Условие задания

Дана вещественная матрица $A$ размером $n • n$. Найти минимальную сумму элементов из всех диагоналей, параллельных побочной, начиная с одноэлементной диагонали.

Алгоритм решения задачи

Прежде чем переходить непосредственно к кодированию данной лабораторной работы, нужно провести ее алгоритмизацию. Данный этап является обязательным и ни один профессиональный программист не опускает его в своей работе.

💡 Сразу хочется отметить, что работать с побочной диагональю, нежели с главной, менее приятно и более сложно!

Вспомним визуальные и формульные отличия главной и побочной диагоналей. Рассмотрим $2$ матрицы размером $5 • 5$. Не забывайте, что в языке программирования «чистый» Си индексация элементов любых массивов начинается с $0$, а не с $1$.

Работа с главной диагональюРабота с побочной диагональю
$7$-12058
11$17$33-9
65$-5$411
01229$-3$-2
31517-9$-8$
7-1205$8$
11173$3$-9
65$-5$411
0$12$29-3-2
$3$1517-9-8

Нужна зависимость, которая, например, получает индекс колонки элемента по индексу строки этого же элемента (иногда удобнее выражать индекс строки через индекс колонки):

индекс_колонки = ФУНКЦИЯ(индекс_строки)

Такая функция есть, при этом она достаточно простая:
индекс_колонки = индекс_строки или $j = i$, где

  • $i$ — индекс строки элемента, стоящего на главной диагонали;
  • $j$ — индекс колонки этого же элемента.

Действительно, если посмотреть на элементы главной диагонали (эти элементы имеют лазурный фон), то, очевидно, что у каждого из этих элементов номер строки и номер колонки совпадают:

$A[0][0] = 7$
$A[1][1] = 17$
$…$
$A[4][4] = -8$

индекс_колонки = ФУНКЦИЯ(индекс_строки)

Такая функция есть, при этом она гораздо сложнее, чем соответствующая функция для главной диагонали:
индекс_колонки = размер_матрицы — индекс_строки — 1 или $j = N — i — 1$, где

  • $N$ — размер квадратной матрицы;
  • $i$ — индекс строки элемента, стоящего на побочной диагонали;
  • $j$ — индекс колонки этого же элемента.

Действительно, если посмотреть на элементы побочной диагонали (эти элементы имеют желтый фон), то, очевидно, что для каждого из этих элементов работает вышеприведенная зависимость:

$A[0][4] = 8$
$A[1][3] = 3$
$…$
$A[4][0] = 3$

Рассмотрим квадратную матрицу размером $4 • 4$ (для удобства восприятия информации заполним матрицу натуральными числами, идущими по возрастанию):

Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Диагонали квадратной матрицы параллельные побочной💡 Нас интересуют элементы, стоящие на диагоналях, параллельные побочной диагонали. Как таковая побочная диагональ нас не интересует, так как принадлежащие ей элементы в расчетах участия не принимают.

Данная матрица имеет $6$ диагоналей, параллельных побочной диагонали (нумерация диагоналей условная):

$№$ диагонали$1$$2$$3$$4$$5$$6$
Элементы диагонали$1$$2, 5$$3, 6, 9$$8, 11, 14$$12, 15$$16$

Наша конечная цель — найти минимальную сумму элементов из всех диагоналей, параллельных побочной.

То есть нам нужно будет пройтись по каждой из этих шести диагоналей и просуммировать принадлежащие ей элементы. Следовательно, нам нужно получить формулы, позволяющие просканировать элементы нужной нам диагонали, параллельной побочной.

Например, зададимся вопросом, как пройтись по элементам диагонали $№2$, то есть просуммировать элементы $2$ и $5$? Для этого мы должны рассмотреть лишь фрагмент заданной матрицы размером $2 • 2$; для этого фрагмента искомая диагональ $№2$ будет являться главной побочной диагональю. А работать с формулой, позволяющей обрабатывать элементы побочной диагонали, мы уже умеем.

Значит, выделяя фрагмент нужного размера из заданной матрицы, мы сможем обращаться к элементам нужной нам диагонали, параллельной побочной исходной матрицы.

➡ Все это можно достаточно просто закодировать через циклические структуры (идеально подойдет управляющий цикл $for(;;)$).

С пробежкой по диагоналям $№1$, $№2$ и $№3$ проблем нет вообще. А как правильно обработать диагонали под $№4$, $№5$ и $№6$? Снова пытаться выводить зависимость? Есть способ более простой! Рассмотрим следующее изображение:

Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Центр симметрии при определении параллельных побочной других диагоналей

Элемент $A[0][1]$ имеет значение равно $2$. Обратимся к элементу, симметричному относительного «красной точки». Это элемент $A[3][2] = 15$. Нам нужно попытаться вывести зависимость, которая получает индекс строки и индекс колонки этого симметричного элемента. А эта зависимость, оказывается, есть!

➡ Для получения индекса строки:
индекс_строки_симметричного_элемента = размер_матрицы — индекс_строки — 1.

➡ Для получения индекса колонки:
индекс_колонки_симметричного_элемента = размер_матрицы — индекс_колонки — 1.

Проверяем (не забываем, что для данного примера размер матрицы равен $4$)!

  • $3 = 4 — 0 — 1$ — верно!
  • $2 = 4 — 1 — 1$ — верно!

Проверьте «желтые» элементы самостоятельно.

Теперь у нас все готово, чтобы перейти к анализу функций, требующихся для успешного программирования поставленной задачи.

Необходимые программные функции для кодирования

Ниже представлен список необходимых функций, требующихся для успешного решения поставленной задачи (самое главное — помнить о том, что функция должна строго решать какую-то конкретную одну задачу).

Название функцииНазначение функции
1FillMatrixВвод размера квадратной матрицы (порядка матрицы) и заполнение данной вещественной матрицы числами вводом с клавиатуры
2PrintMatrixВывод квадратной матрицы в табличном виде на экран
3GetMinSumSecondaryDiagonalНахождение минимальной суммы элементов из всех диагоналей, параллельных побочной диагонали

😡 Также составители хотят, чтобы студенты использовали для динамического выделения памяти оператор new, а для удаления динамической памяти оператор delete.

Все хорошо, да вот только это операторы языка программирования С++ и к языку «чистый» Си они не имеют абсолютно никакого отношения.

В языке Си для динамического перераспределения памяти используют функции malloc, calloc, realloc и free. По идее, именно эти функции и нужно бы применять…

Реализация задачи на языке Си

Результаты работы программы

№ тестаРезультаты
1Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Тест в консоли №1
2Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Тест в консоли №2
3Лабораторная работа №7. Степанов. Си. Программирование. МГТУ им.Баумана. Тест в консоли №3

Стоимость заказа работы

➡ Стоимость программы из любого варианта составляет $250$ рублей.
➡ Стоимость детального алгоритма из любого варианта составляет $250$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).

Также дополнительно вы можете заказать у нас:

  • Построение аккуратной ГОСТовой блок-схемы. Ориентировочная стоимость $250$ рублей.
  • Отчет о проделанной работе (иногда в вузах есть требование — предоставить отчет к лабораторной работе). Ориентировочная стоимость $150$ рублей.

Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более 10 минут.