Распечатка матрицы заданной формы - C (СИ)
Формулировка задачи:
Доброго времени этих дней!
Нужно вывести на экран матрицу такой вот формы, и найти максимальный элемент в заштрихованной области (ссылка на скрин):
Пока сидел в уборной придумал вот такое:
Все получалось, печатает нужную часть матрицы. Но печатает так, что левая диагональ (числа 11, 21, 31, 41) являются не диагональю а столбцом (ссылка на скрин, см. ниже), и при этом видно, что под матрицей идет большой отступ, что свидетельствует о том, что она зарезервировала место под невидимую нижнюю половину, которую я не печатаю.
Мне нужно заполнить пустые элементы матрицы нулями, чтобы числа 11, 21, 31, 41 стали диагональю, а не столбцом.
Как можно это сделать?
#include <stdio.h> int Mas[9][9]= { { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }, { 10, 11, 12, 13, 14, 15, 16, 17, 18}, { 19, 20, 21, 22, 23, 24, 25, 26, 27}, { 28, 29, 30, 31, 32, 33, 34, 35, 36}, { 37, 38, 39, 40, 41, 42, 43, 44, 45}, { 46, 47, 48, 49, 50, 51, 52, 53, 54}, { 55, 56, 57, 58, 59, 60, 61, 62, 63}, { 64, 65, 66, 67, 68, 69, 70, 71, 72}, { 73, 74, 75, 76, 77, 78, 79, 80, 81} }; /* { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }, { 0 , 11, 12, 13, 14, 15, 16, 17, 0 }, { 0 , 0 , 21, 22, 23, 24, 25, 0 , 0 }, { 0 , 0 , 0 , 31, 32, 33, 0 , 0 , 0 ), { 0 , 0 , 0 , 0 , 41, 0 , 0 , 0 , 0 }, ось таке от має вийти { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 }, { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } */ int main(void) { int i, j, n, m, p, x; int max; printf("Enter the matrix size: "); scanf("%d", &n); /*for (i=0; i<n; i++) { //j=i-1; for (j=0; j<n; j++) { printf("%2d", Mas[i][j]); } printf("\n"); }*/ p=0; m=n; max=0; for (i=0; i<n; i++) { for (j=p; j<m; j++) { printf("%4d", Mas[i][j]); if (max < Mas[i][j]) { max=Mas[i][j]; } } p++; m--; printf("\n"); } printf("Max: %d\n", max); system("pause"); }
Решение задачи: «Распечатка матрицы заданной формы»
textual
Листинг программы
for (i=0; i<n; i++) { for (int k=0; k<p; k++) printf("%4d", 0); for (j=p; j<m; j++) { printf("%4d", Mas[i][j]); if (max < Mas[i][j]) { max=Mas[i][j]; } } p++; m--; printf("\n"); }
Объяснение кода листинга программы
В данном коде реализована функция для печати заданной матрицы в формате, где каждое значение матрицы выравнивается по левому краю и имеет длину 4 символа.
- В первой строке объявлены три переменные:
i
- счётчик строк матрицы.k
- счётчик столбцов матрицы.p
- счётчик столбцов, отсчитываемый от левого края матрицы.
- Вторая строка - внешний цикл, который перебирает все строки матрицы.
- Третья строка - внутренний цикл, который перебирает все столбцы матрицы, начиная с правого края.
- Четвёртая строка - вывод значения элемента матрицы, увеличенного на единицу, чтобы выровнять его по левому краю.
- Пятая строка - проверка на максимальное значение в текущей строке. Если текущее значение больше максимального, то оно становится новым максимальным.
- Шестая строка - увеличение счётчика столбцов.
- Седьмая строка - уменьшение счётчика столбцов.
- Восьмая строка - перевод строки.
- Цикл повторяется для всех строк матрицы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д