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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2015, 21:12   #1
bazik
 
Аватар для bazik
 
Регистрация: 05.03.2015
Сообщений: 4
По умолчанию Помогите с методом ГАУССА (С, не ++)

Написал программку, с тестовой матрицей, но она не хочет работать, уже не знаю, что делать. Есть подозрения, что намудрил со скобками где-то. Спасайте!

Код:
#include "stdafx.h"
#include "math.h"

main()
{
	const int N = 4;
	int i, j, s, k;
	double c, d = 1;
	double x[N];
	double b[N] = { 1,2,3,4 };
	double a[N][N] = { 5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };

	printf("\n  Начальный массив А:\n");
	for (i = 0; i<N; i++)
	{
		printf("\n");
		for (j = 0; j<N; j++)
		{
			printf("%1.f", a[i][j]);
		}
	}
	printf("\n Нчальный массив В:\n");

	for (i = 0; i<N; i++)
	{
		printf("%1.f\n", b[i]);
	}
	for (s = 0; s<N - 1; s++)
	{
		k = s;
		for (i = s + 1; i<N; i++)
		{
			if (fabs(a[k][s])<fabs(a[i][s]))
				k = i
				if (k != a)
				{
					d = -d;
					c = b[k]; b[s] = b[k]; b[s] = c;
					for (j = s; j<N; j++)
					{
						c = a[s][j]; a[s][j] = a[k][j]; a[k][j] = c;
					}
				}
			for (i = s + 1; i<N; i++)
			{
				c = a[i][s] / a[s][s];
				b[i] = b[i] - b[s] * c;
				for (j = s + 1; j<N; j++)
				{
					a[i][j] = a[i][j] - a[s][j] * c;
				}
			}
			printf("\n Полученный массив А:\n");

			for (i = 0; i<N; i++)
			{
				printf("\n");
				for (j = 0; j<N; j++)
				{
					printf("%1.f", a[i][j]);
				}
			}
			printf("\n\n Полученный массив В:\n");
			for (i = 0; i<N; i++)
			{
				printf("%1.f\n", b[i]);
			}
			for (i = N - 1; i>-1; i--)
			{
				c = b[i];
				for (j = i + 1; j<N; j++)
				{
					c = c - a[i][j] * x[j];
				}
				x[i] = c\a[i][i];
			}
			printf("\n Корни массива: \n");
			for (i = 0; i<N; i++)
			{
				d = d*a[i][i];
			}
		}
		printf("\n det A =%1.f \n", d);
		return 0;
	}
}
Ctrl+W?
bazik вне форума Ответить с цитированием
Старый 19.10.2015, 22:46   #2
lightfrag
 
Регистрация: 19.10.2015
Сообщений: 5
По умолчанию

Код:
#include <stdlib.h>
#include <stdio.h>
#include <math.h>

#define N 4

int main()
{

	int i, j, s, k;
	double c, d = 1;
	double x[N];
	double b[] = { 1.,2.,3.,4. };
	double a[][N] = { 5.,6.,7.,8.,9.,10.,11.,12.,13.,14.,15.,16.,17.,18.,19.,20. };

	printf("\n  Начальный массив А:\n");
	for (i = 0; i<N; i++)
	{
		printf("\n");
		for (j = 0; j<N; j++)
		{
			printf("%1.lf", a[i][j]);
		}
	}
	printf("\n Нчальный массив В:\n");

	for (i = 0; i<N; i++)
	{
		printf("%1.lf\n", b[i]);
	}
	
	
	for (s = 0; s<N - 1; s++)
	{
		k = s;
		for (i = s + 1; i<N; i++)
		{
			if (fabs(a[k][s])<fabs(a[i][s]))
				k = i;
				if (k != a)
				{
					d = -d;
					c = b[k]; b[s] = b[k]; b[s] = c;
					for (j = s; j<N; j++)
					{
						c = a[s][j]; a[s][j] = a[k][j]; a[k][j] = c;
					}
				}
			for (i = s + 1; i<N; i++)
			{
				c = a[i][s] / a[s][s];
				b[i] = b[i] - b[s] * c;
				for (j = s + 1; j<N; j++)
				{
					a[i][j] = a[i][j] - a[s][j] * c;
				}
			}
			printf("\n Полученный массив А:\n");

			for (i = 0; i<N; i++)
			{
				printf("\n");
				for (j = 0; j<N; j++)
				{
					printf("%1.lf", a[i][j]);
				}
			}
			printf("\n\n Полученный массив В:\n");
			for (i = 0; i<N; i++)
			{
				printf("%1.lf\n", b[i]);
			}
			for (i = N - 1; i>-1; i--)
			{
				c = b[i];
				for (j = i + 1; j<N; j++)
				{
					c = c - a[i][j] * x[j];
				}
				x[i] = c/a[i][i];
			}
			printf("\n Корни массива: \n");
			for (i = 0; i<N; i++)
			{
				d = d*a[i][i];
			}
		}
		printf("\n det A =%1.lf \n", d);
		return 0;
	}
}
На самом деле практически все лишь ошибки синтаксиса были.
lightfrag вне форума Ответить с цитированием
Старый 20.10.2015, 13:22   #3
bazik
 
Аватар для bazik
 
Регистрация: 05.03.2015
Сообщений: 4
По умолчанию

Цитата:
Сообщение от lightfrag Посмотреть сообщение
На самом деле практически все лишь ошибки синтаксиса были.
Спасибо! Кстати нам запрещают делать с define, беспощадные численные методы
Ctrl+W?
bazik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Паскаль: Помогите пожалуйста решить СЛАУ методом Гаусса (также найти определитель, невязку и обр. матрицу), в консоле Delphi Джесс1 Помощь студентам 0 03.05.2015 10:43
С# Методом Гаусса - Зейделя _Anna Помощь студентам 0 16.11.2013 21:50
Решение СЛАУ методом Гаусса и методом Крамера. R1k1 Помощь студентам 0 24.03.2012 19:17
Помогите,плиз! Задача на паскль! Решение линейных уравнений методом Гаусса! vdv08 Помощь студентам 4 21.10.2008 23:33