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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.04.2014, 14:30   #1
Игорь Петренко
Новичок
Джуниор
 
Регистрация: 13.04.2014
Сообщений: 1
По умолчанию

Код:
#include "stdafx.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50

void glavelem(int k, double mas[][N + 1], int n, int otv[])
{
	int i, j, i_max = k, j_max = k;
	double temp;
	//Ищем максимальный по модулю элемент
	for (i = k; i < n; i++)
	for (j = k; j < n; j++)
	if (fabs(mas[i_max][j_max]) < fabs(mas[i][j]))
	{
		i_max = i;
		j_max = j;
	}
	//Переставляем строки
	for (j = k; j < n + 1; j++)
	{
		temp = mas[k][j];
		mas[k][j] = mas[i_max][j];
		mas[i_max][j] = temp;
	}
	//Переставляем столбцы
	for (i = 0; i < n; i++)
	{
		temp = mas[i][k];
		mas[i][k] = mas[i][j_max];
		mas[i][j_max] = temp;
	}
	//Учитываем изменение порядка корней
	i = otv[k];
	otv[k] = otv[j_max];
	otv[j_max] = i;
}
void glavelem(int k, double mas[][N + 1], int n, int otv[]);

int main(void)
{
	double mas[N][N + 1];
	double x[N]; //Корни системы
	int otv[N]; //Отвечает за порядок корней
	int i, j, k, n;
	//Ввод данных
	
	do
	{
		printf("vvedite 4islo ur ");
		scanf_s("%d", &n);
		if (N < n)
			printf("Slishkom bol'shoe");
	} while (N < n);
	printf("vvedite sistemu:\n");
	for (i = 0; i < n; i++)
	for (j = 0; j < n + 1; j++)
		scanf_s("%lf", &mas[i][j]);
	//Вывод введенной системы

	printf("Sistema\n");
	for (i = 0; i < n; i++)
	{
		for (j = 0; j < n + 1; j++)
			printf("%7.2f ", mas[i][j]);
		printf("\n");
	}
	//Сначала все корни по порядку
	for (i = 0; i < n + 1; i++)
		otv[i] = i;
	//Прямой ход метода Гаусса
	for (k = 0; k < n; k++)
	{ //На какой позиции должен стоять главный элемент
		glavelem(k, mas, n, otv); //Установка главного элемента
		if (fabs(mas[k][k]) < 0.0001)
		{
			printf("Net reshenii");

		}
		for (j = n; j >= k; j--)
			mas[k][j] /= mas[k][k];
		for (i = k + 1; i < n; i++)
		for (j = n; j >= k; j--)
			mas[i][j] -= mas[k][j] * mas[i][k];
		
	}
	
	//Обратный ход
	for (i = 0; i < n; i++)
		x[i] = mas[i][n];
	for (i = n - 2; i >= 0; i--)
	for (j = i + 1; j < n; j++)
		x[i] -= x[j] * mas[i][j];
	//Вывод результата
	printf("Otvet\n");
	for (i = 0; i < n; i++)
	for (j = 0; j < n; j++)
	if (i == otv[j])
	{ //Расставляем корни по порядку
		printf("%f\n", x[j]);
		break;
	}

	getchar();
}
программа решает слау методом гаусса

Последний раз редактировалось Stilet; 13.04.2014 в 15:40.
Игорь Петренко вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
есть текст программы, но не могу скомпилировать fopen Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 02.05.2011 11:42
Очень нужна помощь с написанием программы... срочно(буду благодарен за помощь) 5Paladin5 Помощь студентам 3 02.07.2009 09:12
Нужна помощь с лабой, не могу написать программу.... Tanushka5606 Паскаль, Turbo Pascal, PascalABC.NET 3 05.05.2009 18:51
Паскаль. Не могу найти ошибку. Нужна помощь! Nexx Помощь студентам 10 06.12.2007 19:12
Нужна помощь с задачей...никак не могу разобраться( Gekata Паскаль, Turbo Pascal, PascalABC.NET 4 13.12.2006 14:02