real* IMVL_di; // инвертированная диагональ
integer* IMVL_col_ind; // номера столбцов
integer* IMVL_row_ptr; // начала строк
real* IMVL_Solve; // решение СЛАУ
real* IMVL_right; // вектор правой части
integer IMVL_end_list; // конец списка
integer* IMVL_list; // список
/***********************************************************
Определение методов
***********************************************************/
/***** Создание матрицы *****/
integer IMVL_CreateMatrix( integer Dimension, // размер матрицы
integer DumpMemory, // кусок памяти
real Epsilon // точность
)
{
/* Локальные перменные */
integer i;
/* Определяем точность */
IMVL_EPS = Epsilon;
/* Создаём память для программы */
#ifdef __cplusplus
IMVL_memory = new byte[DumpMemory];
#else
IMVL_memory = (byte *)malloc(DumpMemory);
#endif
/* Если памяти мало говорим об этом */
if(IMVL_memory == NULL) return IMVL_OUT_OF_SPACE;
/* Устанавливаем размер матрицы */
IMVL_dim = Dimension;
/* Подготавливаем список */
IMVL_list = (integer *)IMVL_memory;
IMVL_end_list = 2*IMVL_dim;
for(i=0 ; i<IMVL_end_list ; i++) IMVL_list[i] = -1;
/* Возвращаем успешное завершение */
return IMVL_OK;
}
/***** Создание вектора *****/
real* IMVL_CreateVector(integer Dim)
{
real *tptr = (real *)IMVL_start_ptr;
IMVL_start_ptr += sizereal * Dim;
return tptr;
}
/***** Создание элемента матрицы *****/
integer IMVL_CreateElement( integer i, // номер строки
integer k // номер столбца
)
{
/* Локальные переменные */
integer NextElem;
/* Начало нужной строки */
integer CurElem = 2*i;
/* Пока не найдём будем искать */
while(1)
{
/* Если последний элемент в списке и
он сам не последний*/
if( IMVL_list[CurElem+1] == -1 &&
IMVL_list[CurElem] != k)
{
/* Создаём элемент в списке */
IMVL_list[IMVL_end_list] = k;
IMVL_list[IMVL_end_list+1] = -1;
/* Настраиваем указатель на созданный элемент */
IMVL_list[CurElem+1] = IMVL_end_list;
/* Меняем размер действительного списка */
IMVL_end_list += 2;
/* Элемент добавлен */
return IMVL_OK;
}
else
{
/* Берём следующий элемент */
NextElem = IMVL_list[CurElem+1];
/* Если элемент между двумя соседями */
if( IMVL_list[CurElem] < k &&
IMVL_list[NextElem] > k)
{
/* Создаём элемент */
IMVL_list[IMVL_end_list] = k;
IMVL_list[IMVL_end_list+1] = NextElem;
/* Настраиваем указатель на новый элемент */
IMVL_list[CurElem+1] = IMVL_end_list;
/* Меняем размер действительного списка */
IMVL_end_list += 2;
/* Элемент добавлен */
return IMVL_OK;
}
else
{
/* Если элемент уже существует */
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.