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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.02.2012, 22:53   #1
Johnny_Grunge
 
Регистрация: 21.01.2012
Сообщений: 6
Восклицание Чтение из файла( C++)

Помогите пожалуйста сделать чтение из файла в этой задаче.

Составить программу решения системы N линейных алгебраических уравнений с N неизвестными. Метод Гаусса.


Код:
#include "stdafx.h"
#include <windows.h>//malloc, system("pause")
#include <stdio.h>  //i/o
#include <conio.h>  //getch
#include <math.h>
 
void ShowVector(int n, double * vec);
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
        int i,j,n;
        double **a, *b, *x;
        do
        {
                printf("Enter NUM of equations: ");
                scanf("%d",&n);
                //Выделяем память под матрицу А и векторы В и Х
                a = (double **)malloc(n*sizeof(double));
                b = (double *)malloc(n*sizeof(double));
                x = (double *)malloc(n*sizeof(double));
                for(i = 0; i < n; i++)
                {
                        a[i] = (double *)malloc(n*sizeof(double));
                        //Ввод a
                        for(j = 0; j < n; j++)
                        {
                                printf("a[%d][%d] = ",i + 1,j + 1);
                                scanf("%lf",&a[i][j]);
                        }
                }
                //Ввод b
                for(i = 0; i < n; i++)
                {
                        printf("b[%d] = ",i + 1);
                        scanf("%lf",&b[i]);
                }
                
                printf("\tSee input\r\n");
                printf("Matrix A:\r\n");
                for(i = 0; i < n; i++)
                        ShowVector(n, a[i]);
                printf("Vector B:\r\n");
                ShowVector(n, b);
                
                printf("\tSolving on Gauss method\r\n");
                PryamoiHod(n, a, b);
                printf("Forvard Gauss course\r\n");//Прямой ход
                printf("Matrix A:\r\n");
                for(i = 0; i < n; i++)
                        ShowVector(n, a[i]);
                printf("Vector B:\r\n");
                ShowVector(n, b);
 
                ObratniHod(n, a, b, x);
                printf("Back Gauss course\r\n");//Обратный ход
                printf("Matrix A:\r\n");
                for(i = 0; i < n; i++)
                        ShowVector(n, a[i]);
                printf("Vector B:\r\n");
                ShowVector(n, b);
 
                printf("Results :\r\n");
                ShowVector(n, x);
 
                printf("Press Y for new input\r\n");
                //Чистим память
                free((void *)a);
                free((void *)b);
                free((void *)x);
        }
        while(toupper(getch()) == 'Y');
        return 0;
}
 
void ShowVector(int n, double * vec)
{
        for(int i = 0; i < n; i++)
                printf("%.3f ",vec[i]);
        printf("\r\n");
}
 
 
void PryamoiHod(int n, double **a, double *b)
{
        double v;
        for(int k = 0,i,j,im; k < n - 1; k++)
        {
                printf("UPDATING %04d ROW\r\n",k + 1);
                im = k;
                for(i = k + 1; i < n; i++)
                {
                        if(fabs(a[im][k]) < fabs(a[i][k]))
                        {
                                im = i;
                        }
                }
                if(im != k)
                {
                        for(j = 0; j < n; j++)
                        {
                                                        
                                v                = a[im][j];
                                a[im][j] = a[k][j];
                                a[k][j]  = v;
                        }
                        v     = b[im];
                        b[im] = b[k];
                        b[k]  = v;
                }
                for(i = k + 1; i < n; i++)
                {
                        v               = 1.0*a[i][k]/a[k][k];
                        a[i][k] = 0;
                        b[i]    = b[i] - v*b[k];
                                                if(v != 0)
                        for(j = k + 1; j < n; j++)
                                a[i][j] -= v*a[k][j];
                }
        }
}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
        double s = 0;
        x[n - 1] = 1.0*b[n - 1]/a[n - 1][n - 1];
        for(int i = n - 2, j; 0 <= i; i--)
        {
                printf("UPDATING %04d ROW\r\n",n - i - 1);
                s = 0;
                for(j = i + 1; j < n; j++)
                {
                        s = s+a[i][j]*x[j];
                }
                x[i] = 1.0*(b[i] - s)/a[i][i];
        }
}
Johnny_Grunge вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
чтение из файла maxandmin Общие вопросы C/C++ 1 21.07.2010 17:40
Чтение из файла (С) spirit_trapper Помощь студентам 4 26.05.2010 19:37
[C++] чтение из файла proga. Помощь студентам 1 25.09.2009 23:28
Чтение из файла e@gle Общие вопросы Delphi 3 14.12.2008 17:21
Чтение из файла Amen БД в Delphi 2 09.12.2008 10:40