Элину я пока еще не учил. Заслуга в ориентации на программирование этой способной студентки лежит, в основном, на преподавателях МУК и преподавателе программирования на 1 курсе Шустиковой О.В. Моя же роль заключалась только в помоци Ольге Владимировне.
Вложение | Размер |
---|---|
PRZ.zip | 83.96 КБ |
Обработка квадратных матриц Хусаинова Э.С.
Министерство общего и профессионального образования
Свердловской области
ГОУ СПО «Красноуфимский педагогический колледж»
Обработка квадратных матриц
ПРОЕКТ
Выполнила: Хусаинова Э.С.,
студентка 101 группы
Руководитель: Шуститкова О.В.,
преподаватель кафедры математики
г. Красноуфимск
2011 год
Развитие современного общества предполагает широкое использование компьютерных и информационных технологий, на основе которых создаются разнообразные информационные системы. Обычно получаемая в них информация анализируется человеком, который будет играть определяющую роль. Такие информационные системы являются автоматизированными, так как в их функционировании принимает участие человек.
Компьютерные программы получают результаты, обрабатывая данные. Легкость, с которой выполняется этот процесс, зависит от того, насколько точно типы данных соответствуют реальной задаче. Следовательно, очень важно, чтобы в языке была предусмотрена поддержка соответствующего разнообразия типов и структур данных.
Современные концепции типов данных развиваются на протяжении последних 40 лет. В ранних языках программирования все структуры данных, соответствующие конкретным задачам, моделировались небольшим количеством основных структур данных, поддерживаемых этими языками.
Двумя самыми распространенными структурными (нескалярными) типами данных являются массивы и записи. Они, а также несколько других типов данных, задаются операторами типов, или конструкторами, используемыми для создания переменных данного типа.
В данной работе я попытаюсь проанализировать основные операции, выполняемые над квадратными матрицами, какие операции предусмотрены с переменными данного типа.
Актуальность темы заключается в том, что умение работать с квадратными матрицами пригодится при решении систем уравнений. Существует целый арсенал численных методов решения систем уравнений, базирующийся на понятии матрица.
Цель моей работы – изучение конструкции квадратной матрицы, углубление знаний и расширение навыков по разработке квадратных матриц, и их реализации на персональном. Исходя из этого, я поставила следующие задачи:
1) Изучить литературу по данной теме.
2) Составить план своей работы.
3) Изучить алгоритмическую конструкцию квадратной матрицы.
4) Рассмотреть её применение в Паскале.
5) Научиться решать задачи с квадратными матрицами.
Алгоритмический язык Pascal разработан профессором Цюрихского технологического института Никлаусом Виртом в 1969-71 годах для обучения студентов структурному программированию. Идеи, заложенные в основу создания языка, позволили фирме Borland International значительно расширить алгоритмические средства языка, а удобный интерфейс (меню команд) и высокая скорость компиляции (процесса перевода текста программы в машинные коды) сделали язык Turbo-Pascal одним из самых распространенных среди начинающих и профессиональных программистов.
Процесс программирования начинается, как правило с составления алгоритма - последовательности операций, описывающих процесс решения задачи. Графическая запись алгоритма представляется в виде блок-схемы. Составление алгоритма заключается в логическом описании процесса решения задачи и требует знания элементов математической логики. Следует отметить, что программированию предшествует важнейший этап - постановка задачи. Постановка задачи может включать широкий спектр вопросов (разработка математических и физических моделей, вывод расчетных формул и т. п. ). Программист должен четко представлять явление или формулу, которые он алгоритмизирует.
Программирование заключается в записи алгоритма на языке программирования и отладке программы. Текст программы записывается в текстовом редакторе, затем программа компилируется - переводится транслятором (переводчиком) в машинные коды и запускается на выполнение. Процесс отладки программы начинается с выявления:
синтаксических ошибок в тексте ( неверно записанных операторов ),
ошибок при выполнении программы ( недопустимые математические действия, операции с числами, превосходящими предельные значения ),
алгоритмических ошибок ( неверно составлен или запрограммирован алгоритм ), и заканчивается, как правило написанием новой программы, поскольку каждый программист знает, что программу можно усовершенствовать до бесконечности, а отлаженную программу лучше не изменять.
Структура программ на языке Pascal напоминает программы на С. Тем не менее в Pascal предусмотрена возможность описания внутренних локальных процедур и создания вложенной иерархии имен. Программа на Pascal представляет собой единый программный блок, в котором содержатся определения используемых подпрограмм.
В Pascal имеется достаточно широкий набор простых и структурированных типов данных: целые и вещественные числа, символьные данные, перечисления, логические (булевы) значения, массивы, записи, последовательные файлы и ограниченный тип множеств. Оператор type позволяет программисту определять новые типы данных, хотя не обеспечивает группирование и инкапсуляцию определения нового типа данных с набором подпрограмм, обеспечивающих выполнение основных операций над объектами данных этого нового типа. Кроме того, указатель и операция создания новых объектов данных любого типа позволяют программисту конструировать новые объекты связанных данных непосредственно во время выполнения программы.
Подпрограммы принимают форму функций (если они возвращают одно какое-либо значение) или процедур (если их действие сводится к модификации переданных параметров или глобальных переменных). Операторы управления последовательностью действий базируются на конструкциях структурного программирования: составных операторах, условных операторах и операторах выбора (case), а также трех видах операторов цикла. В Pascal имеется также оператор goto, который редко используется и без которого практически всегда можно обойтись. Вызов подпрограмм и возвращение значений осуществляется с помощью обычной рекурсивной структуры вызова-возврата.
Поскольку Pascal имеет блочную структуру, большая часть структур управления данными для ссылок на переменные использует стандартные статические правила определения области видимости и характеристику вложенности блока в самой программе. Параметры могут передаваться по ссылке или по значению.
Pascal можно эффективно реализовать на обычном аппаратном компьютере. Идеология языка включает только те языковые свойства, для которых существуют хорошо изученные и эффективные методики реализации. Во время трансляции почти для всех операций возможен статический контроль типов, так что необходимость в динамическом контроле минимальна, но при этом обеспечивается полная безопасность выполнения. Обычно программа транслируется в выполняемый машинный код, но в некоторых реализациях Pascal результатом трансляции является виртуальный машинный код, который затем интерпретируется и выполняется при помощи некоторого программно-моделируемого интерпретатора. Во время выполнения программ на Pascal центральный стек используется для записей активации подпрограмм, область динамически распределяемой памяти отводится под объекты данных, созданных для прямого манипулирования с помощью переменных-указателей, а область статически распределяемой памяти используется для хранения сегментов кода подпрограмм и вспомогательных подпрограмм из библиотеки поддержки выполнения.
Из вспомогательных подпрограмм нужны в основном стандартные программы ввода-вывода для последовательных файлов и процедуры для управления ресурсами памяти.
Хотя Pascal в целом очень удобный и полезный язык, у него есть свои недостатки, перечень которых приведен ниже.
1. В определении этого языка имеется некоторое противоречие между идеологией самого языка и его реализацией. Например, конструкция forward нужна только для того, чтобы компиляция могла выполняться в один проход, - это следствие представлений о том, что таким образом достигается максимальная эффективность компиляции. Но это не всегда верно. Например, компилятор PL/C для языка PL/I совершал три прохода и вместе с тем являлся одним из самых эффективных среди наиболее распространенных компиляторов своего времени . Кроме того, в настоящее время при использовании недорогих быстродействующих компьютеров скорость компиляции не имеет большого значения.
2. Возможно, самой главной слабостью языка Pascal является то, что массивы рассматриваются как отдельные типы, а не как агрегация различных объектов одного типа. Это приводит к тому, что, например, array [1. .10] of Integer и аггау[1. .20] of integer представляют собой/разные типы данных. В результате алгоритмы обработки массивов усложняются, поскольку массивы различных размеров невозможно передать общей подпрограмме (например, подпрограмме перемножения матриц). Строки реализованы как массивы символов, что также затрудняет их обработку в случае строк различной длины.
3. Синтаксис определения процедуры в Pascal выглядит следующим образом: заголовок процедуры локальные переменные локальные параметры begin тело процедуры end. Поскольку в программе может содержаться большое количество вложенных локальных процедур, то определение локальной переменной, которая используется в какой-либо процедуре, оказывается (синтаксически) сильно отдаленным от места ее использования в теле подпрограммы. Это приводит к затруднениям при создании документации и чтении больших программ на Pascal.
4. Возможности, предоставляемые языком, должны выполняться не с помощью пропуска некоторой информации, а явным указанием этой информации. В Pascal передача параметров нарушает это правило. Все параметры в Pascal передаются по значению, если только в списке параметров не указан явным образом атрибут var, который означает, что соответствующий параметр должен передаваться по ссылке. Многие начинающие программисты часами
рассматривали листинги программ, стараясь обнаружить ошибку, связанную с пропуском ключевого слова var.
5. Pascal был реализован таким образом, что компиляция программы представляла собой единый процесс, то есть не была предусмотрена возможность компилировать отдельные программные модули.В большинстве реализаций, однако, эту проблему удалось решить:
было принято соглашение, что допускаются дополнительные внешние процедуры, аналогичные заголовочным файлам с расширением h в языке С. Но такая нестандартная реализация ограничивает возможность перенесения программ на Pascal на другие машины.
6. Хотя в Pascal допускается определение новых типов данных для поддержки абстракций, в нем фактически не предусмотрена возможность инкапсуляции и сокрытия информации. Это замечание является скорее не критикой данного языка, а комментарием, касающимся общего уровня развития программирования в 1970 г., когда создавался Pascal.
Массив - это множество однотипных элементов, объединённых общим именем и занимающих в компьютере определённую область памяти. Количество элементов в массиве всегда конечно. В общем случае массив - это структурированный тип данных, состоящий из фиксированного числа элементов, имеющих один и тот же тип. Название регулярный тип (или ряды) массивы получили за то, что в них объединены однотипные (логически однородные) элементы, упорядоченные (урегулированные) по индексам, определяющим положение каждого элемента в массиве. В качестве элементов массива можно использовать любой тип данных, поэтому вполне правомерно существование массивов записей, массивов указателей, массивов строк, массивов и т.д.Элементами массива могут быть данные любого типа, включая структурированные.Тип элементов массива называется базовым. Особенностью языка Паскаль является то, что число элементов массива фиксируется при описании и в процессе выполнения программы не меняется. Элементы, образующие массив, упорядочены таким образом, что каждому элементу соответствует совокупность номеров (индексов), определяющих его местоположение в общей последовательности. Доступ к каждому отдельному элементу осуществляется путем индексирования элементов массива. Индексы представляют собой выражения любого скалярного типа (чаще целого), кроме вещественного. Тип индекса определяет границы изменения значений индекса. Для описания массива предназначено словосочетание array of (массив из).
Массивом называется совокупность данных, выполняющих аналогичные функции, и обозначаемая одним именем. Если за каждым элементом массива закреплен только один его порядковый номер, то такой массив называется линейным, или одномерным.
Массив в Паскале
Представление массива в разделе описания переменных:
<имя массива>:= array <количество элементов> of <тип переменной>;
Каждый элемент массива в общем виде описывается как А[I], где А - имя массива, I - номер или индекс массива (0<=I<=N, но практически употребляется 1<=I<=N) A[I] - значение элемента массива.
Writeln;
им можно присваивать любые значения, соответствующие их типу.
Двумерные массивы Паскаля – матрицы
Двумерный массив в Паскале трактуется как одномерный массив, тип элементов которого также является массивом (массив массивов). Положение элементов в двумерных массивах Паскаля описывается двумя индексами. Их можно представить в виде прямоугольной таблицы или матрицы.
Рассмотрим двумерный массив Паскаля размерностью 3*3, то есть в ней будет три строки, а в каждой строке по три элемента:
Каждый элемент имеет свой номер, как у одномерных массивов, но сейчас номер уже состоит из двух чисел – номера строки, в которой находится элемент, и номера столбца. Таким образом, номер элемента определяется пересечением строки и столбца. Например, a 21 – это элемент, стоящий во второй строке и в первом столбце.
Квадратная матрица - это двумерный массив, в котором количество строк равно количеству столбцов. Обращение к элементу происходит также как и в обычном двумерном массиве A[i,j].
Перечислим основные свойства квадратной матрицы (рис. 3.1.):
1. Квадратные матрицы имеют главную и побочную диагонали. Например, для матрицы А на главной диагонали лежат элементы 1,4,9, на побочной - 45,4,12.
1 | 31 | 45 |
10 | 4 | 18 |
12 | 10 | 9 |
Рис. 3.1.
Если i = j - элементы расположены на главной диагонали;
i > j - элементы расположены ниже главной диагонали;
i < j - элементы расположены выше главной диагонали;
i > j - элементы расположены на главной диагонали и ниже;
i< j - элементы расположены на главной диагонали и выше;
i+j = n+1 - элементы расположены на побочной диагонали;
i+j < n+1 - элементы расположены над побочной диагональю;
i+j > n+1 - элементы расположены под побочной диагональю.
2. Квадратная матрица, у которой все элементы, исключая элементы главной диагонали, равны нулю, называется диагональной матрицей (рис. 3.2.)
1 | 0 | 0 |
0 | 2 | 0 |
0 | 0 | 3 |
Рис. 3.2.
3. Диагональная матрица, у которой все элементы, стоящие на главной диагонали равны 1, называется единичной матрицей (рис. 3.3.):
1 | 0 | 0 |
0 | 1 | 0 |
0 | 0 | 1 |
Рис. 3.3.
Обращение к элементу главной диагонали выглядит как A[i,i], к элементу побочной как A[i,n-i+1], где n – количество строк матрицы.
При составлении программ с массивами выполняются несколько этапов:
1. Объявление массива.
2. Заполнение его одним из трех способов: с клавиатуры, по правилу, случайным образом.
3. В зависимости от условия задачи выполнение расчетов или сортировки элементов матрицы.
4. Печать массива.
Все эти этапы применимы и к квадратной матрице. Рассмотрим объявление матрицы. Под объявлением понимают выделение в памяти компьютера необходимого количества ячеек под элементы матрицы. Это количество называют размерностью и определяют как произведение количества строк на количество столбцов. Применительно к квадратной матрице размерность определяется как N*N, где N - количество строк матрицы.
Объявление квадратной матрицы в общем виде выглядит следующим образом:
<имя массива>: array [1..N,1..N] of <тип массива>;
i,j,n:integer;
Например, объявляется целочисленная квадратная матрица из 5 строк
var A: array [1..5,1..5] of integer;
i,j: integer;
Для заполнения квадратной матрицы используется один из трех уже известных нам стандартных блоков:
Блок заполнения массива с клавиатуры
for i:=l to N do
for j:=l to N do begin
write ('A[‘,i,’,’,j,’]=’);
readln (a[i,j]);
writeln
end;
Блок заполнения массива случайным образом
randomize;
for i:=l to N do
for j:=l to N do A[i,j]:= random(50);
Блок заполнения массива по правилу
for i:=l to N do
for j:=l to N do A[i,j]:= <правило>;
Рассмотрим следующую задачу: сформировать матрицу вида (рис 3.4.):
program zadacha;
var a: array [1..5, 1..5] of integer;
i,j,n: integer;
begin
n=5;
2 | 2 | 2 | 2 | 2 |
2 | 2 | 2 | 2 | 2 |
2 | 2 | 2 | 2 | 2 |
2 | 2 | 2 | 2 | 2 |
2 | 2 | 2 | 2 | 2 |
Рис. 3.4.
Блок заполнения массива по правилу
for i:=l to n do
for j:=l to n do A[i,j]:= 2;
Пусть элементы главной диагонали равны 5 (рис 3.5.):
Блок заполнения элементов главной диагонали массива
for i:=l to n do
A[i,i]:= 5;
5 | 2 | 2 | 2 | 2 |
2 | 5 | 2 | 2 | 2 |
2 | 2 | 5 | 2 | 2 |
2 | 2 | 2 | 5 | 2 |
2 | 2 | 2 | 2 | 5 |
Рис. 3.5.
Что изменится в этой программе, если матрица будет выглядеть так (рис 3.6.):
Добавится блок заполнения элементов побочной диагонали.
Блок заполнения элементов побочной диагонали массива
for i:=l to n do
A[i,n-i+1]:= 4;
5 | 2 | 2 | 2 | 4 |
2 | 5 | 2 | 4 | 2 |
2 | 2 | 4 | 2 | 2 |
2 | 4 | 2 | 5 | 2 |
4 | 2 | 2 | 2 | 5 |
Рис. 3.6.
Распечатаем полученную матрицу:
Блок печати элементов массива
Вывод элементов матрицы осуществляется последовательно, необходимо напечатать элементы каждой строки и каждого столбца. При этом хотелось бы, чтобы элементы, стоящие в одной строке, печатались рядом, т.е. в строку, а элементы столбца располагались один под другим.
for i:=l to n do begin
for j:=l to n do write ('A[‘,i,’,’,j,’]=’,A[i,j]);
writeln
end;
writeln
end.
Рассмотрим матрицу вида (рис. 3.7.).
Особенностью этой матрицы является то, что ненулевыми являются элементы главной диагонали и элементы, расположенные над главной диагональю.
5 | 2 | 2 | 2 | 2 |
0 | 5 | 2 | 2 | 2 |
0 | 0 | 5 | 2 | 2 |
0 | 0 | 0 | 5 | 2 |
0 | 0 | 0 | 0 | 5 |
Рис. 3.7.
Как будет выглядеть блок заполнения матрицы?
При объявлении числовой матрицы, все ее элементы заполняются нулями, значит в нашем случае, для заполнения матрицы нам достаточно указать блоки заполнения ее главной диагонали и блок заполнения элементов над главной диагональю, т.е.:
Блок заполнения элементов главной диагонали массива
for i:=l to n do A[i,i]:= 5;
Блок заполнения элементов над главной диагональю массива
for i:=1 to n-1 do
for j:=i+l to n do A[i,j]:= 2;
В предложенной матрице заполнить следует элементы на и под главной диагональю (рис. 3.8).
5 | 0 | 0 | 0 | 0 |
3 | 5 | 0 | 0 | 0 |
3 | 3 | 5 | 0 | 0 |
3 | 3 | 3 | 5 | 0 |
3 | 3 | 3 | 3 | 5 |
Рис. 3.8.
Блок заполнения элементов главной диагонали массива
for i:=l to n do A[i,i]:= 5;
Блок заполнения элементов под главной диагональю массива
for i:=2 to n do for j:=l to i-1 do A[i,j]:= 3;
Заполнение матрицы вида (рис. 3.9).
1 | 1 | 1 | 1 | 7 |
1 | 1 | 1 | 7 | 0 |
1 | 1 | 7 | 0 | 0 |
1 | 7 | 0 | 0 | 0 |
7 | 0 | 0 | 0 | 0 |
Рис. 3.9.
Блок заполнения элементов побочной диагонали массива
for i:=l to n do A[i,n-i+1]:= 7;
Блок заполнения элементов над побочной диагональю массива
for i:=1 to n-1 do
for j:=l to n-i do A[i,j]:= 1;
0 | 0 | 0 | 0 | 7 |
0 | 0 | 0 | 7 | 1 |
0 | 0 | 7 | 1 | 1 |
0 | 7 | 1 | 1 | 1 |
7 | 1 | 1 | 1 | 1 |
Рис. 3.10.
Заполнение матрицы вида (рис. 3.10).
Блок заполнения элементов побочной диагонали массива
for i:=l to n do A[i,n-i+1]:= 7;
Блок заполнения элементов под побочной диагональю массива
for i:=n downto 2 to n do
for j:= n-i+2 to n do A[i,j]:= 1;
Мы познакомились с новым видом массивов – квадратной матрицей, узнали, как индексируются элементы квадратной матрицы, что такое главная, побочная диагонали, как они формируются по правилу, с клавиатуры, случайным образом, а также научились распечатывать значения элементов массивов по строкам и по столбцам.
Процесс решения задач на компьютере – это совместная деятельность человека и ЭВМ. Этот процесс можно представить виде нескольких последовательных этапов. На долю человека приходятся этапы, связанные с творческой деятельностью – постановкой, алгоритмизацией, программированием задач анализом результатов, а на долю компьютера - этапы обработки информации с соответствии с разработанным алгоритмом.
Первый этап – постановка задачи. На этом этапе участвует человек, хорошо представляющий предметную область задачи. Он должен чётко определить цель задачи, дать словесное описание содержания задачи и предложить общий подход к её решению. Для вычисления суммы двух целых чисел человек, знающий, как складываются числа, может описать задачу следующим образом: ввести два целых числа, сложить их и вывести сумму в качестве результата решения задачи.
Второй этап – математическое и информационное моделирование. Цель этого этапа – создать такую математическую модель решаемой задачи, которая может быть реализована в компьютере. Существует целый ряд задач, где математическая постановка сводится к простому перечислению формул и логических условий. Этот этап тесно связан с первым этапом, и его можно отдельно не рассматривать, однако возможно, что для полученной модели известны несколько методов решения, и тогда предстоит выбрать лучший.
Для вышеописанной задачи данный этап сведётся к следующему: введённые в компьютер числа запомним в памяти под именами А и В, затем вычислим значение этих чисел по формуле А+В, и результат запомним в памяти под именем Summa.
Третий этап – алгоритмизация задачи. На основе математического описания необходимо разработать алгоритм решения.
Четвёртый этап – программирование. Программой называется план действий, подлежащий выполнению некоторым исполнителем, в качестве которого может выступать компьютер. Составление программы обеспечивает возможность выполнение алгоритма и соответственно поставленной задачи исполнителем – компьютером. Во многих задачах при программирование на алгоритмическом языке часто пользуются заменой блока алгоритма на один или несколько операторов, введением новых блоков, замена одних блоков на другими.
Пятый этап – ввод программы и исходных данных в ЭВМ. Программа и исходные данные вводятся в ЭВМ с клавиатуры с помощью редакторов текстов, и для постоянного хранения осуществляется их запись на гибкий или жёсткий магнитный диск.
Шестой этап – тестирование и отладка программы. На этом этапе происходит исполнение алгоритма с помощью ЭВМ, поиск и исключение ошибок. При этом программисту приходится выполнять рутинную работу по проверке работы программы, поиску и исключению ошибок, и поэтому для сложных программ этот этап часто требует гораздо больше времени и сил, чем написание первоначального текста программы.
Отладка программы – сложный и нестандартный процесс. Исходный план отладки заключается в том, чтобы оттестировать программу на контрольных примерах.
Контрольные примеры стремятся выбрать так, чтобы при работе с ними программа прошла все основные пути блок – схемы алгоритма, поскольку на каждом из путей могут быть свои ошибки, а детализация плана зависит от того, как поведёт себя программа на этих примерах: на одном может зациклиться (т.е. бесконечно повторять одно и то же действие); на другом – дать явно неверный или бессмысленный результат и т.д. Сложные программы отлаживаются отдельными фрагментами.
Для повышения качества выполнения этого этапа используются специальные программы – отладчики, которые позволяют исполнить программу “по шагам” с наблюдением за изменением значений переменных, выражений и других объектов программы, с отслеживанием выполняемых операторов.
Седьмой этап – исполнение отлаженной программы и анализ результатов. На этом этапе программист запускает программу и задаёт исходные данные, требуемые по условию задачи.
Полученные в результате решения выходные данные анализируются постановщиком задачи, и на основе этого анализа вырабатываются соответствующие решения, рекомендации, выводы. Например, если при решение задачи на компьютере результат сложения двух чисел 2 и 3 будет 4, то следует сделать вывод о том, что надо изменить алгоритм и программу.
Возможно, что по итогам анализа результатов потребуется пересмотр самого подхода к решению задачи и возврат к первому этапу для повторного выполнения всех этапов с учётом приобретённого опыта. Таким образом, в процессе создания программы некоторые этапы будут повторяться до тех пор, пока мы получи алгоритм и программу, удовлетворяющие показанным выше свойствам.
Рассмотрим на примере задачи.
Задача: Дана квадратная матрица размерности n×n. Найти сумму всех элементов, стоящих выше главной диагонали, транспонировать данную матрицу, вывести матрицу, заданной размерности по спирали. Заполнять матрицу случайными числами.
Матрицей называется прямоугольная таблица чисел, содержащая m строк одинаковой длины (или n столбцов одинаковой длины). Матрица записывается в виде
или, сокращенно А=, где i=1,m (т.е. i=1,2,3,…,m) – номер строки, j=1,n (т.е. j=1,2,3,…,n) – номер столбца. Матрицу А называют матрицей размера m x n b и пишут. Числа , составляющие матрицу, называют ее элементами. Элементы, стоящие на диагонали, идущей из верхнего угла, образуют главную диагональ. Матрица, у которой число строк равно числу столбцов, называется квадратной.
Исходные данные: размерность матрицы.
Требования к входным данным:
Ввод исходных данных осуществляется в соответствующие ячейки поля пользовательской формы.
Предусматривается проверка на допустимость исходных данных и повторение ввода при ошибочных данных.
Ожидаемые результаты:
Для заполнения квадратной матрицы используется блок заполнения массива случайным образом:
For i:=1 to n do
For j:=1 to n do a[i,j]:=random(100)-random(100);
Для вычисления суммы элементов, находящихся выше главной диагонали проверяем условие:
i < j - элементы расположены выше главной диагонали;
Для того, чтобы транспонировать данную матрицу заменяем значения строк и столбцов матрицы:
for i:=1 to n do
begin
for j:=1 to n do
write(a[j,i]:5);
Для вывода матрицы в виде спирали используем условие:
while i <= n*n do
и начинаем движение от верхнего левого угла по спирали к центру.
Program Matrica;
Uses crt;
Var a,b:array[1..100,1..100] of integer;
i,j,n,s:integer;
//Процедура ввода матрицы
Procedure Vvod;
Begin
For i:=1 to n do
For j:=1 to n do a[i,j]:=random(100)-random(100);
End;
//Процедура вывода матрицы
Procedure Vyvod;
Begin
For i:=1 to n do
begin
For j:=1 to n do Write (a[i,j]:5);
writeln;
end;
End;
//Подсчет суммы элементов, стоящих выше главной диагонали
Procedure Summa;
Begin
s:=0;
for i:=1 to n do
begin
for j:=1 to n do
if i
end;
End;
//Ввод матрицы по спирали
Procedure Spiral;
Var
k, l, X, Y : integer;
i: integer;
Begin
i := 1;
X := 1;
Y := 0;
l := n;
while i <= n*n do
begin
//движение вправо
for k:=1 to l do
begin
Inc(Y); //увеличивает y на 1
B[X, Y] := i;
Inc(i);
end;
Dec(l); //уменьшает l на 1
//движение вниз по спирали
for k:=1 to l do
begin
Inc(X);
b[X, Y] := i;
Inc(i);
end;
//движение влево по спирали
for k:=1 to l do
begin
Dec(Y);
B[X, Y] := i;
Inc(i);
end;
Dec(l);
//движение вверх по спирали
for k:=1 to l do
begin
Dec(X);
B[X, Y] := i;
Inc(i);
end;
end;
end;
//Ввод матрицы по спирали
Procedure Vyvod_spirali;
Begin
for i:=1 to n do
begin
for j:=1 to n do
Write(b[i,j]:5);
WriteLn;
end;
End;
//Процедура транспонирования матрицы
Procedure transponirovanie;
Begin
for i:=1 to n do
begin
for j:=1 to n do
write(a[j,i]:5);
writeln;
end;
End;
Begin
TextColor (1);
write ('Введите размерность квадратной матрицы:'); readln(n);
Vvod;
TextColor (0);
vyvod;
summa;
TextColor (1);
writeln('Сумма элементов, стоящих выше главной диагонали: ',s);
readln;
clrscr;
TextColor (1);
writeln ('Данная матрица:');
TextColor (0);
Vyvod;
TextColor (1);
writeln ('Транспонированная матрица:');
TextColor (0);
transponirovanie;
readln;
clrscr;
TextColor (1);
writeln ('Вывод квадратной матрицы, введенной размерности по спирали:');
TextColor (0);
Spiral;
Vyvod_spirali;
end.
На данный момент мировая компьютерная индустрия развивается очень стремительно. Производительность систем возрастает, а следовательно возрастают возможности обработки больших объёмов данных. Операционные системы класса MS-DOS уже не справляются с таким потоком данных и не могут целиком использовать ресурсы современных компьютеров. Поэтому она больше нигде широко не используется. Все стараются перейти на более совершенные ОС, какими являются UNIX и Windows. Но из-за “непопулярности “ , UNIX мало кто использует этот ОС. Во всем мире все, начиная от домохозяек и заканчивая корпоративными пользователями, пользуются Windows.
В данной работе мы рассмотрели основное понятие программирования.
Не смотря на внешне кажущуюся простоту данной программы, он таит в себе ряд сложностей, которые реализуются с использованием всех основных приемов Pascal. На мой взгляд, изучая программирование в Турбо Паскаль, можно освоить основные приемы программирования.
Целью данной работы, являлось углубление знаний и расширение навыков по разработке массивам и их реализации на персональном компьютере. Я проанализировала соответствующую литературу по данной теме, изучила конструкцию квадратной матрицы, научилась решать задачи. На мой взгляд, разработанная мной программа, вполне отвечает поставленным целям.
Ф.И.О.: Хусаинова Элина Сиреневна
Телефон: 8-952-138-32-91
E-mail: estelle_1993@mail.ru
Образование: полное среднее
Место учебы: Государственное образовательное учреждение среднего и профессионального образования «Красноуфимский педагогический колледж»
"Не жалею, не зову, не плачу…"
Прыжок (быль). Л.Н.Толстой
Волшебная фортепианная музыка
Ледяная внучка
Снеговик