Автор: Пользователь скрыл имя, 30 Марта 2012 в 07:12, курсовая работа
Си (англ. C) — стандартизированный процедурный язык программирования, разработанный в начале 1970-х годов сотрудниками Bell Labs Кеном Томпсоном и Денисом Ритчи как развитие языка Би. Си был создан для использования в операционной системе UNIX
Цель работы – разработка пакета прикладных программ для вычисления определителя матрицы произвольного порядка.
ВВЕДЕНИЕ
1. АНАЛИЗ ВОПРОСА И ПОСТАНОВКА ЗАДАЧИ
1.1. Выбор метода решения
1.2. Выбор инструментальных средств
1.3. Выбор аппаратных средств
1.4. Выводы по первой главе
2. ПРАКТИЧЕСКАЯ РЕАЛИЗАЦИЯ
2.1. Общая структура программного модуля
2.2. Блок - схемы алгоритмов и их описание
2.3. Контрольный текстовый пример
2.4. Выводы по второй главе
ЗАКЛЮЧЕНИЕ
БИБЛИОГРАФИЧЕСКИЙ СПИСОК
ПРИЛОЖЕНИЕ
* Наименование: нет.
* Назначение: вычисляет функцию Крамера *
* Описатель: float *Kramer(float **A, float*B, int Razm) *
* Входные параметры:
* float **A – исходная матрица;
* float*B – столбец свободных членов;
* int Razm – размерность матрицы. *
* Выходные параметры: нет.
* Возвращаемое значение: x.
* Внешние ссылки: printf, getch.
******************************
*Программист: Кравченко Д.С. Группа: ИА-22
******************************
float *Kramer(float **A, float*B, int Razm)
{float *X = new float[Razm], // выделение памяти для столбца с решением
**A_= new float*[Razm], // матрица с замененным столбцом
det, // определитель матрицы
det_; // определитель матрицы A_
// определение детерминанта матрицы
det=Det(A,Razm);
// если детерминант матрицы равен нулю то выход
if(!det)
{ printf("\n\n The matrix determinant is equal to zero,"
"\n\t the further decision is not possible..."
"\n\n Press any key for exit...");
getch();
// очищение памяти перед выходом
delete[] A;
delete[] X;
return NULL; // возвращает ноль
}
// решение матрицы методом Крамера
// копирование матрицы A в матрицу A_
for(int i=0; i<Razm; i++)
{ A_[i]=new float[Razm];
for(int j=0; j<Razm; j++)
A_[i][j] = A[i][j];
}
for(i=0; i<Razm; i++)
{ // заменяем i-й столбец столбцом свободных членов
for(int j=0; j<Razm; j++)
A_[j][i] = B[j];
// определим детерминант полученной матрицы
det_ = Det(A_,Razm);
X[i] = det/det_; // нахождение неизвестного
// восстанавливаем столбец старыми значениями
for(j=0; j<Razm; j++)
A_[j][i] = A[j][i];
}
return X;
}
/*****************************
* Дата: 23/05/10 Время: 16:55 Версия: v.1.0
* Компилятор: BC v.3.1.
* Лист 1/Листов 2
* ******************************
* Проект:PROJECT2.PRJ
* Файл: project.cpp
* Наименование: нет.
* Назначение: решает матрицу произвольного порядка методом Крамера *
* Описатель: void main(void)
* Входные параметры: нет.
* Выходные параметры: нет.
* Возвращаемое значение: нет.
* Внешние ссылки: printf, scanf, getch .
******************************
*Программист: Кравченко Д.С. Группа: ИА-22
******************************
void main(void)
{
int Razm; // хранит в себе размерность матрицы
float **A, // двумерный массив указателей на элементы матрицы
*B, // столбец свободных членов
*X; // столбец с решением
printf("\n Enter dimension of a matrix: ");
scanf("%d",&Razm);
printf("\n Matrix filling:\n\n"); // запонение матрицы
A = new float*[Razm]; // выделение памяти для матрицы
B = new float[Razm]; // выделение памяти для столбца B
for(int i=0; i<Razm; i++)
{ A[i] = new float[Razm]; // выделение памяти для каждого элемента
// ввод элементов матрицы с клавиатуры
for(int j=0; j<Razm; j++)
{ printf("Enter element (%d,%d): ",i+1,j+1);
scanf("%f",&A[i][j]);
}
// ввод свободных членов
printf("Enter element B[%d]: ",i+1);
scanf("%f",&B[i]);
}
// отобразить матрицу на экране
printf("\n\n Matrix:\n");
for(i=0; i<Razm; i++)
{ printf("\n");
for(int j=0; j<Razm; j++)
printf("%f\t",A[i][j]);
printf("| %f",B[i]);
}
printf("\n\n\t For continue press any key...");
getch();// задержка
// решение матрицы методом Крамера
X=Kramer(A,B,Razm);
if(!X) return; // если нет решения выход
printf("\n\n he answer:");
for(i=0; i<Razm; i++)
printf("\n X%d = %f",i+1,X[i]);
printf("\n\n Press any key...");
getch();
}