Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2009, 12:44   #1
bodrik
 
Аватар для bodrik
 
Регистрация: 17.12.2009
Сообщений: 4
Восклицание СЛАУ метод умножение вычитания

Вобщем проблемка такая,вот собственно для начала задача сама
Создайте программу, реализующую решение системы N линейных уравнений с N неизвестными по следующей схеме:
Схема умножения и вычитания
На вход программы должен подаваться текстовый файл, содержащий в первой строке число уравнений; во второй и последующих строках - матрицы коэффициентов и свободных членов. По запросу результаты вычислений должны также записываться в текстовый файл.
Т.е. сначалаа надо привести матрицу к треугольному виду,а потом найти корни,но у меня не все матрицы приводятся к треугольному виду...я уже сбился с толку что делать,исправьте код пожалуйста
Код:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
int main()
{
FILE *file_in, *file_out;
int a=0,y=0;
int n,i, j, x,l,tmp,s;
float k=0,max,det,h;
file_in=fopen("file.txt", "r");
fscanf(file_in, "%d", &a);
float**matrix;
float *buf;
float *root;
matrix=(float**)malloc((a)*sizeof(float));
for(i=0; i<a; i++)
matrix[i]=(float *)malloc((a)*sizeof(float));
buf=(float*)malloc((a)*sizeof(float));
root=(float*)malloc((a)*sizeof(float));
printf("%d\n",a);
for(i = 0; i < a; i++)
{

	for(j = 0; j <a; j++)
			{
				fscanf(file_in, "%f", &matrix[i][j]);
				printf("%2.0f ", matrix[i][j]);
			}
printf("\n");
}
for(i = 0; i < a; i++)
{
	fscanf(file_in, "%f", &buf[i]);
	printf("%2.0f \n", buf[i]);
}
fclose(file_in);
//perevod v treygol
for (i=0;i<a;i++) 
s=0;
{


	for (j=i;j<a;j++)
		{
			if (matrix[j][i]!=0)
				{
					s=j;
					j=n+1;
				}
		}
if (s!=0)
{
for (j=0;j<a;j++)
		{
			tmp=matrix[i][j];
			matrix[i][j]=matrix[s][j];
			matrix[s][j]=tmp;
		}
tmp=buf[i];
buf[i]=buf[s];
buf[s]=tmp;
}
}
	for (j=0;j<a;j++)
	{
		for (i=j+1;i<a;i++)
			{
			if (matrix[j][j]!=0)	
				{
					k=matrix[i][j]/matrix[j][j];
					printf("k=%f\n",k);
				}
			else k=0;
					for (l=0;l<a;l++)
						{
							matrix[i][l]-=k*matrix[j][l];
						}
				buf[i]-=k*buf[j];
			}
			
	}
printf("Triangle matrix\n");	
for(i = 0; i < a; i++)
{

	for(j = 0; j <a; j++)
			{
				printf("%2.0f ", matrix[i][j]);
			}
printf("\n");
}
printf("Your new vector\n");
for (i=0;i<a;i++)
		{
			printf ("%.2f ", buf[i]);
		}
printf("\n");
det=1;
	for (i=0;i<a;i++)
		{
			det*=matrix[i][i];
		}
printf("%f\n",det);
if (det==0) printf ("your system has infinite number of solutions or no solution\n");
else
{
 for (i=a-1;i>0;i--)
     {
          h=buf[i];
          for (j=i+1;j<a;j++)
               {
                    h-=matrix[i][j]*root[j];
            }
          root[i]=h/matrix[i][i];
          
     }
    
for (i=0;i<a;i++)
{
	printf("%f ",root[i]);
}
}
system("Pause");
return 0;
}
bodrik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ (метод простых итераций) XeN0N Помощь студентам 2 15.02.2009 21:33
СЛАУ Метод псевдообращения матриц, паскаль vdv08 Помощь студентам 8 19.11.2008 22:36