Система линейных алгебраических уравнений с матрицей порядка n методом Гаусса в среде программирования Turbo Pascal

Постановка, алгоритм решения системы линейных алгебраических уравнений методом Гаусса в среде программирования Turbo Pascal. Описание алгоритма, блок-схема задачи. Описание используемых операторов, проверка на наличие ошибок, результаты выполнения.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 16.01.2011
Размер файла 538,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Министерство образования и науки Российской Федерации

ФГОУ ВПО «Чувашский государственный университет им. И.Н. Ульянова»

Химико-фармацевтический факультет

Кафедра информационных систем

Курсовая работа по дисциплине:

«Информатика и программирование»

на тему:

«Система линейных алгебраических уравнений с матрицей порядка n методом Гаусса в среде программирования Turbo Pascal»

Оглавление

  • Введение
  • Глава 1. Постановка задачи
  • Глава 2. Алгоритм решения СЛУ методом Гаусса
    • 2.1 Описание алгоритма решения СЛУ методом Гаусса
    • 2.2 Блок-схема алгоритма решения задачи
  • Глава 3. Практическая реализация задачи
    • 3.1 Описание используемых операторов
    • 3.2 Реализация программы
    • 3.3 Результаты выполнения программы
  • Заключение
  • Список использованной литературы
  • Приложение
    • Листинг программы
    • Инструкции пользователю

Введение

При создании данной курсовой работы использовался язык программирования Turbo Pascal - очень гибкий и развитый в отношении типов данных.

Паскаль (Pascal) - язык программирования общего назначения. Один из наиболее известных языков программирования, широко применяется в промышленном программировании, обучении программированию в высшей школе, является базой для большого числа других языков. Был создан Николаусом Виртом в 1970, после его участия в работе комитета разработки стандарта языка Алгол-68.

Паскаль был создан как язык для обучения процедурному программированию (хотя, по словам Вирта, язык нельзя считать только учебным, поскольку язык, непригодный для написания реальных программ, для обучения использоваться не должен). Название языку дано в честь выдающегося французского математика, физика, литератора и философа Блеза Паскаля. Один из первых языков, для которых была создана реализация «на самом себе» - компилятор Паскаля был написан на самом Паскале. В начале 1970-х годов для переноса Паскаль-систем на различные аппаратные платформы была создана система Pascal-P, в которой был единый компилятор Паскаля в промежуточный язык (P-код) и для каждой платформы создавался быстрый интерпретатор P-кода. Заимствование этой системы привело к созданию системы UCSD-Pascal в Университете Сан-Диего (Калифорния, США), намного позже её идеи были заимствованы создателями языка Java (байт-код, компиляция в байт-код, интерпретатор байт-кода).

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

Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т. п. Наиболее бросающийся в глаза недостаток синтаксиса -- некритически заимствованная из Алгола структура управляющих конструкций (операторов if и циклов), требующая, как правило, постоянного использования составных операторов «begin - end». Полный разбор недостатков языка Паскаль был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования» (интересно, что эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.

Необходимо заметить, что многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 70-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. В начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники академик А. П. Ершов разработал алголо-паскалеподобный «алгоритмический язык».

Никлаус Вирт понимал недостатки созданного им языка, но, следуя традициям академической среды и собственным принципам, согласно которым «неподходящий инструмент надо не исправлять, а заменять», не стал его развивать дальше, а разработал новые языки семейства: Модула-2 и Оберон. В противоположность этому промышленные традиции и достоинства языка побудили многие коммерческие и некоммерческие организации продолжать разрабатывать и развивать системы программирования именно на основе языка Паскаль, подвергая язык произвольному расширению, добавляя в него, часто совершенно механически, новые средства и синтаксические конструкции.

Наиболее известной реализацией Паскаля является система Turbo Pascal (выросшая затем в Borland Pascal и далее в Delphi) фирмы Borland, в которой язык был значительно расширен, были устранены некоторые недостатки языка, добавлены новые возможности. Язык стал богаче, но в отсутствие отраслевой стандартизации, потерял переносимость и общность (до появления в 1998 году Kylix - Delphi для Linux, продукты Borland работали только на платформе DOS/Windows, в настоящее время Kylix фактически заморожена).

Важным шагом в развитии языка является появление свободного языка Паскаль GNU Pascal, который не только вобрал в себя черты других Паскалей, но и обеспечил чрезвычайно широкую переносимость написанных на нем программ (более 20 различных платформ, под более чем 10 различными операционными системами).

В настоящий момент пользуются популярностью такие версии языка как TMT Pascal, Free Pascal и GNU Pascal. Продолжает использоваться и Borland Pascal.

Глава 1. Постановка задачи

Задачей данной курсовой работы является создание программы решения систем линейных алгебраических уравнений с матрицей порядка n методом Гаусса в среде программирования Turbo Pascal.

Метод Гаусса (Карл Фридрих Гаусс (1777-1855) немецкий математик). В отличие от матричного метода и метода Крамера, метод Гаусса может быть применен к системам линейных уравнений с произвольным числом уравнений и неизвестных. Метод Гаусса - один из основных результатов линейной алгебры и аналитической геометрии, к нему сводятся множество других теорем и методов линейной алгебры (теория и вычисление определителей, решение систем линейных уравнений, вычисление ранга матрицы и обратной матрицы, теория базисов конечномерных векторных пространств и т.д.).

Задача поиска решений системы линейных уравнений имеет не только самостоятельное значение, но часто является составной частью алгоритма решения многих нелинейных задач. Основные методы решения системы линейных уравнений:

- метод Гаусса;

- метод обращения матрицы;

- итерационные методы.

Матрица A с элементами aij называется ступенчатой, если она обладает следующими двумя свойствами:

1. если в матрице есть нулевая строка, то все строки ниже нее также нулевые;

2. пусть aij не равное 0 - первый ненулевой элемент в строке с индексом i, т.е. элементы ail = 0 при l < j. Тогда все элементы в j-м столбце ниже элемента aij равны нулю, и все элементы левее и ниже aij также равны нулю: akl = 0 при k > i и l =< j.

Ступенчатый вид матрицы показан на рис.1:

Рис.1. Ступенчатый вид матрицы

Здесь тёмными квадратиками отмечены первые ненулевые элементы строк матрицы. Белым цветом изображаются нулевые элементы, серым цветом - произвольные элементы.

Алгоритм Гаусса использует элементарные преобразования матрицы двух типов.

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

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

Элементарные преобразования сохраняют определитель и ранг матрицы, а также множество решений линейной системы. Алгоритм Гаусса приводит произвольную матрицу элементарными преобразованиями к ступенчатому виду. Для ступенчатой квадратной матрицы определитель равен произведению диагональных элементов, а ранг - числу ненулевых строк (рангом по определению называется размерность линейной оболочки строк матрицы).

Метод Гаусса в математическом варианте состоит в следующем:

1. ищем сначала ненулевой элемент в первом столбце. Если все элементы первого столбца нулевые, то переходим ко второму столбцу, и так далее. Если нашли ненулевой элемент в k-й строке, то при помощи элементарного преобразования первого рода меняем местами первую и k-ю строки, добиваясь того, чтобы первый элемент первой строки был отличен от нуля;

2. используя элементарные преобразования второго рода, обнуляем все элементы первого столбца, начиная со второго элемента. Для этого от строки с номером k вычитаем первую строку, умноженную на коэффициент ak1/a11 .

3. переходим ко второму столбцу (или j-му, если все элементы первого столбца были нулевыми), и в дальнейшем рассматриваем только часть матрицы, начиная со второй строки и ниже. Снова повторяем пункты 1) и 2) до тех пор, пока не приведем матрицу к ступенчатому виду.

Программистский вариант метода Гаусса имеет три отличия от математического:

1. индексы строк и столбцов матрицы начинаются с нуля, а не с единицы;

2. недостаточно найти просто ненулевой элемент в столбце. В программировании все действия с вещественными числами производятся приближенно, поэтому можно считать, что точного равенства вещественных чисел вообще не бывает. Некоторые компиляторы даже выдают предупреждения на каждую операцию проверки равенства вещественных чисел. Поэтому вместо проверки на равенство нулю числа aij следует сравнивать его абсолютную величину ij с очень маленьким числом е (например, е = 0.00000001). Если ij=< е, то следует считать элемент aij нулевым;

3. при обнулении элементов j-го столбца, начиная со строки i + 1, мы к k-й строке, где k > i, прибавляем i-ю строку, умноженную на коэффициент r = -akj/aij :

Такая схема работает нормально только тогда, когда коэффициент r по абсолютной величине не превосходит единицы. В противном случае, ошибки округления умножаются на большой коэффициент и, таким образом, экспоненциально растут. Математики называют это явление неустойчивостью вычислительной схемы. Если вычислительная схема неустойчива, то полученные с ее помощью результаты не имеют никакого отношения к исходной задаче. В нашем случае схема устойчива, когда коэффициент r = -akj/aij не превосходит по модулю единицы. Для этого должно выполняться неравенство. Отсюда следует, что при поиске разрешающего элемента в j-м столбце необходимо найти не первый попавшийся ненулевой элемент, а максимальный по абсолютной величине. Если он по модулю не превосходит е, то считаем, что все элементы столбца нулевые; иначе меняем местами строки, ставя его на вершину столбца, и затем обнуляем столбец элементарными преобразованиями второго рода.

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

Суть метода заключается в последовательном исключении неизвестных. Рассмотрим систему линейных уравнений:

 

Разделим обе части 1-го уравнения на a11 ? 0, затем: 1) умножим на а21 и вычтем из второго уравнения 2) умножим на а31 и вычтем из третьего уравнения и т.д. Получим:, где d1j = a1j/a11, j = 2, 3, …, n+1. dij = aij - ai1d1j i = 2, 3, … , n; j = 2, 3, … , n+1. Далее повторяем эти же действия для второго уравнения системы, потом - для третьего и т.д.

Пример. Решить систему линейных уравнений методом Гаусса.

Составим расширенную матрицу системы.

А* =

Таким образом, исходная система может быть представлена в виде:

,

откуда получаем:x3 = 2;x2 = 5;x1= 1.

Глава 2. Алгоритм решения СЛУ методом Гаусса

2.1 Описание алгоритма решения СЛУ методом Гаусса

Пусть у нас есть система N линейных уравнений:

a11x1 + a12x2 + a13x3 + ... a1NxN = b1

a21x1 + a22x2 + a23x3 + ... a2NxN = b2

a31x1 + a32x2 + a33x3 + ... a3NxN = b3

...

aN1x1 + aN2x2 + aN3x3 + ... aNNxN = bN

где xi - неизвестные, aij - коэффициенты при неизвестных, bi - свободные члены в уравнениях, i,j пробегают значения от 1 до N.

Цель задачи - зная aij и bi найти xi.

Суть метода Гаусса состоит в том, что с помощью некоторых операций исходную систему уравнений можно свести к более простой системе. Эта простая система имеет треугольный вид:

a11x1 +

a12x2 +

a13x3 +

...

a1NxN = b1

a22x2 +

a23x3 +

...

a2NxN = b2

a33x3 +

...

a3NxN = b3

...

...

aNNxN = bN

Особенность этой системы - в строках с номером i все коэффициенты aij при j<i равны нулю.

Если мы смогли привести нашу систему уравнений к такому треугольному виду, то решить уравнения уже просто. Из последнего уравнения находим xN= bN / aNN. Дальше подставляем его в предпоследнее уравнение и находим из него xN-1. Подставляем оба найденных решения в следующее с конца уравнение и находим xN-2. И так далее, пока не найдем x1, на чем решение заканчивается. Такая процедура называется обратной прогонкой.

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

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

Нужно, чтобы во второй строке получилось уравнение, в которой отсутствует член при x1. Прибавим к этой строке первую строку, умноженную на некоторое число M.

(a11x1 + a12x2 + a13x3 + ... a1NxN = b1)*M +

a21x1 + a22x2 + a23x3 + ... a2NxN = b2

Получим

(a11*М + a21) x1 + ... = b1*M + b2

Для того, чтобы член при x1 равнялся нулю, нужно, чтобы M = - a21 / a11. Проделав эту операцию, получившееся уравнение запишем вместо второго и приступим к третьему уравнению. К нему мы прибавим первое уравнение, умноженное на M = - a31 / a11 и тоже получим ноль вместо члена при x1. Такую операцию нужно проделать над всеми остальными уравнениями. В результате получим систему такого вида:

a11x1 +

a12x2 +

a13x3 +

...

a1NxN = b1

a22x2 +

a23x3 +

...

a2NxN = b2

a32x2 +

a33x3 +

...

a3NxN = b3

...

aN2x2 +

aN3x3 +

...

aNNxN = bN

После этого будем избавляться от членов при x2 в третьем, четвертом, N-ом уравнении. Для этого нужно к уравнению с j-м номером прибавить 2-ое уравнение, умноженное на M = - aj2 / a22. Проделав эту операцию над всеми остальными уравнениями, получим систему где нет членов с x2 в уравнениях с номером больше 2.

И так далее... Проделав это для третьего члена, четвертого... до тех пор, пока не кончатся уравнения, получим в итоге систему треугольного вида.

2.2 Блок-схема алгоритма решения задачи

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Глава 3. Практическая реализация задачи

3.1 Описание используемых операторов

алгебраический уравнение гаусс turbo рascal

Program - оператор ввода заголовка программы.

ClrScr - процедура очистки экрана и возврата курсора в верхний левый угол.

Var - зарезервированное слово, которое означает, что далее будут описаны одна или несколько переменных.

Array [диапазон] of <тип данных> - массив. При описании массива используются зарезервированные слова Array и of (массив, из). За словом Array в квадратных скобках указывается диапазон, с помощью которого компилятор определяет общее число элементов массива. После слова of пишется тип данных, из которых будет состоять массив.

Begin … End - составной оператор, указывающий на начало и конец программы или составляющей части программы. Именно в этом разделе происходят все действия. Фактически, весь раздел операторов, обрамленный словами Begin . . . End, представляет собой один составной оператор. Поскольку зарезервированное слово End является закрывающей операторной скобкой, оно одновременно указывает и конец предыдущего оператора.

WriteLn - с помощью этого оператора происходит ввод данных. После ввода происходит вывод данных на экран, и перевод курсора в начало следующей строки.

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

:= (знак присваивания) - один из основных операторов. Пара символов «:=» означает «присвоить значение». Из толкования смысла оператора видно, что он используется для присваивания символу какого-либо значения, которое может быть выражено как набором символов, так и математическим выражением.

If <условие> then <оператор1> else <оператор2> - составной оператор, позволяющий проверить некоторое условие и в зависимости от результатов проверки выполнить то или иное действие. If, then, else - зарезервированные слова (если, то, иначе); <условие> - произвольное выражение логического типа; <оператор1>, <оператор2> - любые операторы языка Turbo Pascal. Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение <условие>.

Если результат есть TRUE (истина), то выполняется <оператор1>, а <оператор2> пропускается; если результат есть FALSE (ложь), наоборот, <оператор1> пропускается, а выполняется <оператор2>.

For <пар_цик> := <нач_знач> to <кон_знач> do <оператор> - составной оператор. Здесь for, to, do - зарезервированные слова (для, до, выполнить);

<пар_цик> - параметр цикла - переменная типа integer;

<нач_знач> - начальное значение - выражение того же типа;

<кон_знач> - конечное значение - выражение того же типа;

<оператор> - произвольный оператор Borland Pascal.

При выполнении оператора For вначале вычисляется выражение <нач_знач> и осуществляется присваивание <пар_цик>: = <нач_знач>. После этого циклически повторяется:

1. проверка условия <пар_цик> <= <кон_знач>; если условие не выполнено, оператор For завершает свою работу;

2. выполнение оператора <оператор>;

3. наращивание переменной <пар_цик> на единицу.

3.2 Реализация программы

Для решения поставленной задачи в программе были заданы следующие переменные:

xi - неизвестные;

aij - коэффициенты при неизвестных;

bi - свободные члены в уравнениях;

n - размерность;

i - номера строк;

j - номера столбцов;

k - номер обнуляемого столбца;

r - служит для запоминания номера текущей строки;

max - максимальный элемент столбца;

c - дополнительная переменная для переставления строк местами;

s - сумма для нахождения xi, где s = aij.xj;

M - коэффициент, необходимый для приведения матрицы к треугольному виду, где М = aij/ajj.

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

for i:=1 to n do { открываем внешний цикл по номеру строки}

begin

for j:=1 to n do { открываем внутренний цикл по номеру столбца}

begin

Write('a[',i,',',j,']='); { вводим значение коэффициентов при неизвестных}

Read(a[i,j]);

end;

Write('b[',i,']='); { в качестве последнего элемента каждой строки}

Readln(b[i]); {вводим значение свободного члена}

Writeln;

end;

Далее приводим матрицу к ступенчатому виду: находим максимальный элемент столбца и меняем строки местами; затем обнуляем элементы k-го столбца, начиная со строки i=k+1, для чего из i -й строки вычитаем k-ю строку, умноженную на коэффициент M = aik/akk :

for k:=1 to n do { открываем цикл по номеру столбца}

begin

max:=abs(a[k,k]); { сохраняем в max модуль диагонального элемента текущей строки}

r:=k; { в r запоминаем номер текущей строки}

for i:=k+1 to n do {открываем внутренний цикл по номеру строки для просмотра элементов, лежащих ниже диагонального }

if abs(a[i,k])>max then { если модуль текущего элемента больше max, то}

begin

max:=abs(a[i,k]); { сохраняем его значение в max }

r:=i; { в r запоминаем номер текущей строки }

end;

for j:=1 to n do { открываем цикл по номеру столбца}

begin

c:=a[k,j]; { меняем местами элементы текущей строки}

a[k,j]:=a[r,j]; { и строки, содержащей максимальный элемент}

a[r,j]:=c;

end;

c:=b[k];

b[k]:=b[r];

b[r]:=c;

for i:=k+1 to n do { открываем цикл по номерам строк, лежащих }

begin { ниже диагонали}

M:=a[i,k]/a[k,k]; { находим коэффициент для текущей строки}

for j:=k to n do { в цикле по номеру строки}

begin

a[i,j]:=a[i,j]-a[k,j]*M; { присваиваем элементам строки}

end; {новые значения}

b[i]:=b[i]-b[k]*M; { последним элементом строки является новое}

end; { значение свободного члена}

end;

Теперь находим решение системы уравнений, где:

if a[n,n]=0 then { если последний элемент диагонали равен 0, то…}

if b[n]=0 then { если последний свободный член равен 0, то бесконечное} Writeln('Uravnenie imeet beskonechnoe mnogestvo resheniy') { мн-во решений}

else { иначе - нет решений}

Writeln('Uravnenie ne imeet resheniy')

else { иначе, если последний элемент диагонали не равен 0}

begin

for i:=n downto 1 do { открываем обратный цикл по номеру строки}

begin

s:=0; { обнуляем сумму}

for j:=i+1 to n do {открываем цикл по номерам столбцов, лежащих }

begin { правее диагонального элемента }

s:=s+a[i,j]*x[j]; { накапливаем сумму}

end;

x[i]:=(b[i]-s)/a[i,i]; { находим неизвестное в текущей строке}

end;

В заключении происходит вывод ответа:

for i:=1 to n do

Writeln('x[',i,']=',x[i]:5:1); .

3.3 Результаты выполнения программы

В результате решения поставленной задачи получили программу, решающую системы линейных уравнений методом Гаусса. Процесс набора программы в среде Turbo Pascal показан на рисунках 2 и 3.

Рис.2. Процесс набора программы в среде Turbo Pascal

Рис.3. Процесс набора программы в среде Turbo Pascal

При проверке на наличие ошибок - ошибок не найдено (рис.4).

Рис.4. Проверка на наличие ошибок

Для проверки работы программы рассмотрим конкретный пример.

Пусть дана система линейных уравнений размерностью 4:

Составим расширенную матрицу системы.

А* =

Таким образом, исходная система может быть представлена в виде:

,

откуда получаем: x3 = 2; x2 = 5; x1= 1.

Теперь введем размерность и коэффициенты при неизвестных заданной системы в программу. Получим решение: x1= 1; x2 = 5; x3 = 2 (рис.5). Таким образом, результаты тестирования на ЭВМ и ручного счета совпали, программа работает правильно.

Рис.5. Результат выполнения программы.

Заключение

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

Работа выполнена на языке Turbo Pascal фирмы Borland, прочно вошедшем в мир программирования в 1983 году и до сих пор являющимся удобным языком программирования для начинающих программистов, а также просто хорошим языком программирования, к которому обращаются как прикладные программисты, так и системные. Однако, при необходимости, данная программа может быть легко переписана на любой другой современный язык программирования.

Выполнение курсовой работы позволило углубить знания и расширить навыки по разработке алгоритмов и их реализации на персональном компьютере.

Список использованной литературы

1. Ильин В. А., Позняк Э. Г. Линейная алгебра: Учебник для вузов/6-е изд., стер. - М.: ФИЗМАТЛИТ, 2004. - 280 с.

2. Кассера В.Ф. Turbo Pascal 7.0. - Диасофт, 2003. - 345 с.

3. Кремер Н.Ш. Высшая математика для экономистов: учебник для студентов вузов/3-е издание. - М.:ЮНИТИ-ДАНА,2006. - 471 с.

4. Культин Н.Б. Turbo Pascal в задачах и примерах. - СПб:БХВ - Петербург, 2002. - 256с.: ил.

5. Моргун А. Н. Программирование на языке Паскаль (Pascal). Основы обработки структур данных. - М.: Диалектика, 2006. - 608 с.

6. Фаронов В.В. Turbo Pascal. Наиболее полное руководство. - BHV-Санкт-Петербург, 2007. - 571 с.

7. http://ru.wikipedia.org/wiki/Turbo_Pascal

Приложение

Листинг программы

program Gauss;

Uses Crt;

Var n,i,j,k,r:integer;

max,c,s,M:real;

a:array [1..100,1..100] of real;

b:array [1..100] of real;

x:array [1..100] of real;

begin

ClrScr;

Write('Vvedite razmernost:');

Readln(n);

for i:=1 to n do

begin

for j:=1 to n do

begin

Write('a[',i,',',j,']=');

Read(a[i,j]);

end;

Write('b[',i,']=');

Readln(b[i]);

Writeln;

end;

for k:=1 to n do

begin

max:=abs(a[k,k]);

r:=k;

for i:=k+1 to n do

if abs(a[i,k])>max then

begin

max:=abs(a[i,k]);

r:=i;

end;

for j:=1 to n do

begin

c:=a[k,j];

a[k,j]:=a[r,j];

a[r,j]:=c;

end;

c:=b[k];

b[k]:=b[r];

b[r]:=c;

for i:=k+1 to n do

begin

M:=a[i,k]/a[k,k];

for j:=k to n do

begin

a[i,j]:=a[i,j]-a[k,j]*M;

end;

b[i]:=b[i]-b[k]*M;

end;

end;

Writeln('Stupenchatij vid sistemi:');

Writeln;

for i:=1 to n do

begin

for j:=1 to n do

Write(a[i,j]:5:1,' ');

Write('|');

Writeln(b[i]:5:1);

Writeln;

end;

Writeln('Otvet:');

Writeln;

if a[n,n]=0 then

if b[n]=0 then

Writeln('Uravnenie imeet beskonechnoe mnogestvo resheniy')

else

Writeln('Uravnenie ne imeet resheniy')

else

begin

for i:=n downto 1 do

begin

s:=0;

for j:=i+1 to n do

begin

s:=s+a[i,j]*x[j];

end;

x[i]:=(b[i]-s)/a[i,i];

end;

for i:=1 to n do

Writeln('x[',i,']=',x[i]:5:1);

end;

readln;

end.

Инструкции пользователю

Для запуска программы, созданной в среде Turbo Pascal, обычно используют файл с расширением .EXE.

Если запуск с помощью этого файла не возможен, то следует выполнить следующие действия:

1. Открыть программу Turbo Pascal;

2. Выбрать меню File > Open;

3. В появившемся окне выбрать нужный вам файл с расширением .PAS;

4. Нажать ENTER.У вас появится текст программы;

5. Чтобы запустить программу необходимо нажать клавиши Ctrl+F9 или в меню Run > Run.

После всех выполненных действий на экране монитора появится окно программы.

Для того чтобы начать работу с программой необходимо:

1. Ввести размерность матрицы.

2. Нажать ENTER.

3. Поочередно ввести коэффициенты при неизвестных и свободные члены уравнения (после каждого ввода нажимать ENTER).

4. После завершения ввода данных нужно нажать ENTER, после чего программа выдаст решение введенной системы линейных уравнений.

5. Выход из программы происходит нажатием кнопки ENTER.

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.