Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
report.docx
Скачиваний:
119
Добавлен:
28.03.2015
Размер:
1.47 Mб
Скачать
      1. Метод Крамера

Таблица идентификаторов

В таблице 2 приведены основные идентификаторы, используемые в программе, реализующей метод Крамера на языке С++.

Таблица 2 – Идентификаторы для метода Крамера

A

Исходная матрица коэффициентов СЛАУ

matrix

Промежуточная матрица коэффициентов, необходимая для подсчета опеределителей

result

Матрица коэффициентов решения

det

Определитель исходной СЛАУ

agreed

Флаг отличия определителя от 0

factor, temp, counter, sum

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

Код программы:

#include <iostream> #include <math.h> using namespace std; ons tint nMax = 100; int n = 0; double A[nMax][nMax + 1]; double result[nMax]; bool agreed = false; double factor; double e = 0.0001; double matrix[nMax][nMax]; double temp, sum, counter, det; int I, j, k, m; double Det() { counter = 0; for(I = 0; I < n – 1; i++) { if(matrix[i][i] == 0) { for(j = I + 1; j < n && matrix[i][i] == 0; j++) { if(matrix[j][i] != 0) { for(k = 0; k < n + 1; k++) { temp = matrix[i][k]; matrix[i][k] = matrix[j][k]; matrix[j][k] = temp; counter++; } } } } for(j = I + 1; j < n; j++) { factor = -(matrix[j][i]/matrix[i][i]); for(k = 0; k < n + 1; k++) { matrix[j][k] += matrix[i][k]*factor; } } } sum = matrix[0][0]; for(I = 1; I < n; i++) { sum *= matrix[i][i]; } return pow(-1, counter)*sum; } double startdDet() { for(I = 0; I < n; i++) { for(j = 0; j < n; j++) { matrix[i][j] = A[i][j]; } } return Det(); } double modDet(int num) { for(I = 0; I < n; i++) { for(j = 0; j < n; j++) { if(j != num) { matrix[i][j] = A[i][j]; } else { matrix[i][j] = A[i][n]; } } } return Det(); } void Cramer() { det = startdDet(); if(det == 0) { cout <<”determinant is 0.”<< endl; agreed = false; } else { for(m = 0; m < n; m++) { result[m] = modDet(m)/det; } cout << endl; agreed = true; } } int main() { do { cout <<”Enter number of equations (1 – 100): “; cin >> n; } while(n < 1 || n > 100); cout <<”--------------------------“<< endl; for(I = 0; I < n; i++) { for(j = 0; j < n; j++) { cout <<”Input a(“<< I + 1<<’,’<< j + 1 <<”): “; cin >> A[i][j]; } cout <<”Input b(“<< I + 1 <<”): “; cin >> A[i][n]; } Cramer(); cout <<”--------------------------“<< endl; if(agreed) { for(I = 0; I < n; i++) { cout <<”X(“<< I + 1 <<”) = “<< result[i] << endl; } } else { cout <<”impossible to solve the system of linear equations with this method.”<< endl; } cout << endl; system (“pause”); return 1; }

Пример работы программы:

Рисунок 2.5 – окно с результатом работы программы, реализующей метод Крамера на языке С/С++ (Король)

Рисунок 2.6 – окно с результатом работы программы, реализующей метод Крамера на языке С/С++ (Скворцова)

На рисунках 2.5 и 2.6 показаны результаты работы программы, реализующей метод Крамера на языке С/С++. Программа предлагает ввести количество неизвестных, затем последовательно ввести коэффициенты при неизвестных и заполнить столбец свободных членов. После чего результат выводится на экран.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]