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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.03.2011, 13:48   #1
Виктория Нисова
Новичок
Джуниор
 
Регистрация: 30.03.2011
Сообщений: 2
По умолчанию метода Гауса

Пожалуйста помогите мне написать программу, которая бы решала СЛАУ методом Гауса.
Нужно:
1)написать через функцию сам метод Гауса, затем ее вызвать;
2)отдельной функцие написать проверку так, что бы в ней выводилось на экран есть вообще решениЯ или их вовсе нет, если оно одно то вывести А*Х=В, где А-исходная матрица, Х-вектор неизвестных, В-то что должно получиться, сравнить свободные члены исходной матрицы с полученными.

Программа у меня написано, но не полностью... Посмотрите, пожалуйста.

PHP код:
#include "stdafx.h"
#include "conio.h"
#include <string.h>
#include "clocale"

#include <stdio.h> // Описания функций ввода-вывода
#include <math.h> // Описания математических функций
#include <stdlib.h> 

const int n=3;
void ReadData(float A[n][n+1])// функция считывания матрицы с файла
{
FILE *f;
f=fopen("input (2).txt","r");

{
printf("\t\tПрограмма находи решения системы уравнений по методу Гауса\n");
printf("Считанная матрица\n");
for (
int i=0;i<n;i++)
{

    for(
int j=0;j<n+1;j++)
    {
        
fscanf(f,"%f ",&A[i][j]);
        
printf("%f ",A[i][j]);
    }
printf("\n");
}
printf("\n\n");
fclose(f);
}
}

void check (float A[n][n+1],float R[n][n],float *Sh ,float *X)
{
    
int i,j;
    
floatC;
    
C=new float[n];
    
printf ("Проверка:\n");
    for(
j=0j<nj++)
        {
            
C[j]=0;
            for(
i=0;i<n;i++) 
            
C[j]=R[j][i]*X[i]+C[j];
        } 
    
printf("\n(");
    for (
i=0;i<n;i++)
    {   
        for(
j=0j<nj++)
        
printf ("%5.2f ",R[i][j]);
        
printf(") * ( %5.6f ) = %5.2f",X[i],C[i]);
        
printf("\n(");
    }
    
    for(
j=0;j<n;j++)
    {
printf("%4.2f ",C[j]);}
    
delete C;
}


/* ------------------------------------------------- */

void Gauss(float X[n],float A[n][n+1])
{
    
float B[n],temp,r// рабочий массив свободных членов
    
int i,j,k// рабочие переменные

    // копирование в рабочую матрицу A
    
for( 0ni++ ) 
    {
        
B[i] = A[i][n]; // копирование свободных членов
        
X[i] = 0;
    }

    
// прямой ход
    
for(0;n;i++)
    {
        if(
A[i][i] != 0)
        {
            
// вычитаем строку из последующих
            
for( = (1); nk++ )
            {
                
A[k][i] / A[i][i];
                for( 
inj++ ) A[k][j] -= A[i][j] * r;
                
B[k] -= B[i] * r;
            }
        }
        else 
        {
            
// ищем не нулевой элемент для строки
            
for(= (1);n;j++)
            {
                if(
A[j][i] != 0) break;
            }
            
// если не найден то решений нет
            
        
if(== n)
            {
                
printf("единственного решения нет\n");
                exit(
1);
            }
        
            
        else 
// если найден то меняем строки местами
            

                
// матрица
                
for(i;n;k++)
                {
                    
temp A[i][k];
                    
A[i][k] = A[j][k];
                    
A[j][k] = temp;
                }
                
// правая часть
                
temp B[i];
                
B[i] = B[j];
                
B[j] = temp;
                
// понижаем i на единицу чтобы цикл повторил проверки и попал в вычитание строки из последующих
                
i--;
            }
        }
    }

    
// обратный ход
    
for( n>= 0i-- )
    {
        
float s 0;
        for(
= (1);n;j++) += A[i][j] * X[j];
        
X[i] = ( B[i] - ) / A[i][i];
    }
    
// вывод треугольной матрицы
    
for( 0ni++ )
    { 
        for( 
0nj++ ) printf("%8.2lf "A[i][j] );
        
printf"%8.2lf"B[i] );
        
printf"\n" );
    }
}

void mainvoid )
{
float A[n][n+1], Sh[n], R[n][n];
setlocale(LC_ALL,"rus");
ReadData(A);

float X[n];// корни системы линейных уравнений
short ij// рабочие переменные
printf"Матрица в разобранном виде\n" );

for( 
0ni++ ) // цикл строк
{
printf"\n" ); // новая строка на мониторе
for( 0n+1j++ )
 
printf"%8.2f"A[i][j] );
//printf( " %8.2lf", B[i] );

}
//printf( "\n\n" );


for( 0ni++ )
for( 
0nj++ )
R[i][j]=A[i][j];



/*for( i = 0; i < n; i++ ) 
{
printf( "\n" ); //копия исходной матрицы.
for( j = 0; j < n; j++ )
 printf( "%8.2lf", R[i][j] );
}*/

for( 0ni++ )
    {
        
Sh[i] = A[i][n]; 
    }

printf"\nТреугольная форма:\n" );
Gauss(X,A);// решение методом Гаусса

printf"\n" );
printf"Решения: \n" );
printf"\n X= " );

for( 
0ni++ )
printf"%10.6f"X[i] );
printf"\n" );
    
check(A,R,Sh,X);
    
printf("\n\nСледовательно, решениями уравнения будут:\n");
for(
i=0;i<n;i++)
printf"%f \n",X[i]);
scanf("%d",&i);

Виктория Нисова вне форума Ответить с цитированием
Старый 31.03.2011, 12:22   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

что не написано? на чем остановились?
если что-то работает не так, то указывайте, что выдает неправильно, в каком месте, если ошибки рантайм - то в какой строке произошла ошибка, что сказал отладчик
попробуйте пошагово пройтись

а правильно написано-неправильно - эт к препу
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Старый 01.04.2011, 15:02   #3
Виктория Нисова
Новичок
Джуниор
 
Регистрация: 30.03.2011
Сообщений: 2
По умолчанию

Мне в ней нужно дописать (куда-то вставить) проверку на наличие корней:
если две строчки совпадают - то корней очень много,
а если две строчки различаются только свободными членами - то нет корней совсем...
Виктория Нисова вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение СЛАУ методом Гауса на Паскале Klik_1602 Помощь студентам 3 04.01.2011 22:00
Вызов метода из метода kuzjma PHP 8 10.12.2010 02:38
обратная матрица методом гауса manuk Общие вопросы C/C++ 0 15.03.2010 18:28
решение задач методом Гауса (Delphi) rozalija Помощь студентам 1 18.09.2009 23:28