Темы для предварительной проработки. · Операторы циклаязыка C

· Операторы циклаязыка C. Вложенные циклы.

· Условный оператор языка C.

· Матрици.

Задание

Создать квадратную матрицу целых чисел размером 9х9. В индивидуальных заданиях указано, какую обработку матрицы требуется выполнить.

Если по условию задания матрицу следует заполнить случайными числами, рекомендуем выбирать эти числа из диапазона 0 – 99. Если по условию задания в матрицу следует записатьЛП — линейную последовательность чисел, имеется в виду последовательность: 1, 2, 3, ... Программу разработатьсиспользованием меню!!!

Варианты индивидуальных заданий

Вариант Содержание задания Иллюстрация
Заполнить матрицу ЛП, от левого верхнего угла по диагонали: влево — вниз.  
Заполнить секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей, ЛП, от левого верхнего угла вниз — вправо. Остаток матрицы заполнить нулями.  
Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно побочной диагонали  
Заполнить матрицу случайны­ми числами. Отобразить симметрично относительно вертикальной оси секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей.  
Заполнить матрицу случайными числами. Отобразить верхнюю половину матрицы на нижнюю зеркально симметрично относи­тельно горизонтальной оси.  
Заполнить секторы матрицы, которые лежат выше и ниже главной и побочной диагоналей, ЛП, от левого верхнего угла вниз — вправо. Остаток матрицы заполнить нулями.  
Заполнить матрицу случайны­ми числами. Отобразить главную и побочную диагонали симметрично относительно вертикальной оси.  
Заполнить матрицу случайны­ми числами. Разместить на главной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к главной.  
Заполнить секторы матрицы, которые лежат выше и ниже главной и побочной диагоналей ЛП, от левого верхнего угла вправо — вниз. Остаток матрицы заполнить нулями.  
Заполнить матрицу случайны­ми числами. Отобразить симметрично относительно горизонтальной оси секторы матрицы, которые лежат выше и ниже главной и побочной диагоналей.  
Заполнить матрицу случайны­ми числами. Развернуть матрицу на 180o.  
Заполнить матрицу ЛП, от левого нижнего угла по диагонали: влево — вверх.  
Заполнить секторы матрицы, которые лежат влево и вправо от главной и побочной диагоналей ЛП, от левого верхнего угла вправо — вниз. Остаток матрицы заполнить нулями.  
Заполнить матрицу ЛП, от левого верхнего угла по диагонали: вправо — вверх.  
Заполнить матрицу случайны­ми числами. Отобразить главную и побочную диагонали симметрично относительно го­ризонтальной оси.  
Заполнить матрицу ЛП, от правого верхнего угла по диагонали: влево — вниз.  
Заполнить матрицу случайны­ми числами. Развернуть матрицу на 90o против часовой стрелки.  
Заполнить матрицу случайны­ми числами. На побочной диагонали разместить суммы элементов, которые лежат на той же строке и столбце.  
Заполнить матрицу случайны­ми числами. На главной диагонали разместить суммы элементов, которые лежат на той же строке и том же столбце.  
Заполнить матрицу случайными числами. Отобразить правую половину матрицы на левую зеркально симметрично относи­тельно вертикальной оси.  
Заполнить матрицу нулями, после чего заполнить диагонали матрицы ЛП от левого верхнего угла по спирали: вниз — вправо — вверх — влево.  
Заполнить матрицу случайными числами. Отобразить левую половину матрицы на правую зеркально симметрично относи­тельно вертикальной оси.  
Заполнить матрицу нулями, после чего заполнить диагонали матрицы ЛП от центра по спирали: вниз — влево — вверх — вправо.  
Заполнить матрицу случайны­ми числами. Развернуть матрицу на 90o по часовой стрелке.  
Заполнить матрицу нулями, после чего заполнить диагонали матрицы ЛП от центра по спирали: вниз — вправо — вверх — влево.  
Заполнить матрицу случайны­ми числами. Разбить матрицу на квадраты размером 3х3. В центре каждого квадрата поместить сумму остальных элементов квадрата.  
Заполнить матрицу случайными числами. Отобразить матрицу симметрично относительно глав­ной диагонали  
Заполнить матрицу нулями, после чего заполнить диагонали матрицы ЛП от левого верхнего угла по спирали: вправо — вниз — влево — вверх.  
Заполнить матрицу случайными числами. Отобразить нижнюю половину матрицы на верхнюю зеркально симметрично относи­тельно горизонтальной оси.  
Заполнить матрицу случайны­ми числами. Разместить на побочной диагонали суммы элементов, которые лежат на диагоналях, перпендикулярных к побочной.  
Заполнить нечетные диагонали, симметричные побочной, с левого верхнего угла заданнимобразом. Остаток матрицы заполнить нулями.  
Заполнить главнуюи побочные диагонали матрицы ЛП начинаяс верхнего угла главной диагонали и останавливая заполнение в нижнемуглу побочной диагонали (средин­ную точку заполнявать один раз, если она есть). Остаток матрицы заполнить нулями.  
Заполнить матрицуиз центра, распространяя ЛП вобестороны параллельно строкам и столбцам.  
Заполнить матрицу ЛП по диагоналям, симметричным побочной, с левого верхнего угла заданнымобразом — на каждой из диагоналей числа однаковыевдоль нее.  
Заполнить матрицу ЛП змейкой, начинаяеес левого верхнего угла матрицы вниз изаполняяее на следующем столбце в обратном направле­нии.  
Заполнить матрицуслучайны­ми числами. Отобразить левые частиглавнойи побочной диагоналей симметрично от­носительно вертикальной оси.  
Заполнить матрицу ЛП змейкой, начинаяеес нижнего правого угла матрицывлево изаполняяее на следующей строке в обратном направле­нии.  
Заполнить матрицуиз центра, распространяя ЛП во обе стороны параллельно главной и побочной диагоналям.  
Заполнить матрицуслучайны­ми числами. На срединных строкахи столбцах разместить суммы элементов, лежащихв соответствующихстрокахи столбцах.  
Заполнить нечетные диагона­ли, симметричные главной, с правого верхнего угла задан­нымобразом. Остаток матри­цы заполнить нулями.  

 

5. Пример решения задачи

Заполнить секторы матрицы, которые лежат выше и ниже главной и побочной диагоналей, ЛП, от левого верхнего угла вниз — вправо. Остаток матрицы заполнить нулями.  

5.1. Разработка алгоритма решения

Если обозначим размерность матрицы как S, номер строкикак L, а номер столбцакак R, и (имея в виду, что реализация алгоритма будет выполнена на языке С) договоримся, что нумерация строк и столбцов будет начинаться с 0, то можно определить, что в строке с номером L ненулевые элементы в верхней частиматрицы лежат на столбцахс номерамиR1=L<R<R2=S–L, ав нижнейR1=S–L–1<R<R2=L. Следовательно, алгоритм может состоять из перебора матрицы строка за строкой с определением для каждого элемента, удовлетворяют ли его индексы вышеприведенным условиям. Если да — элементу присваивается следующее значение из ЛП, если нет — 0.

Но можно несколько упростить алгоритм, обойдя вычисления граничных значений для каждого элемента и необходимости определения, в верхнюю или нижнюю часть матрицы ми попадаем. Обратим внимание на то, что для первой строки (L=0) R1=1, R2=S–2. Для каждой следующей строкиR1 увеличивается на 1, аR2уменьшается на 1. .Когда пересекаем середину матрицы, то направление модификации изменяется на противоположное: теперь для каждой следующей строкиR1уменьшается на 1, аR2 увеличивается на 1. Признаком пересечения середины может быть условиеR1>R2, оно выполняется в момент пересечения. Схема алгоритма показана на рисунке.

Вместе с описанными выше переменнымиR1 и R2, , которые получают начальные значения для первой строки матрицы, ми вводим переменнуюddсначальным значением 1 — это то значение, которое будет модифицироватьR1 и R2 для каждойследующейстроки, ипеременную k— в которой будет значение текущего члена ЛП, начальное значение — 1 (блок 2). Далее организуются вложенные циклы. Во внешнем цикле перебираются строки (блок 3), а во внутреннем — столбцы матрицы (блок 4). В каждой итерации внутреннего цикла номер столбца Rсравнивается с граничными значениями R1, R2 (блоки 5,6). Еслион лежит впределахот R1доR2, то текущему члену матрицы присваивается значенмеk— текущего члена ЛП, а потомkувеличивается на 1 (блок 7). Если нет, тотекущему членуприсваивается значения 0 (блок 8).

После выхода из внутреннего цикла модифицируются граничные значения:R1 увеличиваетсянаdd, аR2 уменьшатся наdd(блок 9). Напомним, чтоначальное значение dd=1. Когда выполняется условие R1>R2(блок 10) присваиваем ddзначение –1, далее модификация границ будет соответствовать правилам для нижней части матрицы.

После выхода из внешнего цикла, который начался в блоке 3, вновь организуются вложенные циклы перебора строк (блок 12) и столбцов (блок 13). В каждой итерации внутреннего цикла выводится значение одного элемента матрицы (блок 14), после выхода из внутреннего цикла начинается новая строка вывода (блок 15).