Форум программистов, компьютерный форум CyberForum.ru

Решить систему алгебраических линейных неоднородных уравнени - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Английские и русские буквы. http://www.cyberforum.ru/cpp-beginners/thread335375.html
Здравствуйте! Подскажите пожалуйста, как в С отличить русские буквы от английских? Я думаю что надо оперировать с кодами букв, но как именно-не соображу. Добавлено через 18 минут /* * File: main.cpp * Author: alchemist * Больше свинок для науки!
C++ Что делается этимим строчками void main() { srand((unsigned)time(NULL)); setlocale(0, ""); ..... } http://www.cyberforum.ru/cpp-beginners/thread335373.html
C++ Почему то не могу считать матрицу
Есть матрица порядка 3638. Мне нужно найти обратную к ней. ( В последствии порядок матрицы будет около 100 000) Есть код, вот только он не совсем рабочий. На маленьких матрицах порядка 3-4 он работает отлично, а вот на матрице порядка 3638 - не работает. В качестве результата выдает исходную матрицу. Помогите найти косяк. И по возможности сделать код "по-шустрее" Вот код на С++ #include...
наследование классов C++
Здарова, народ! :D Вот сижу и пытаюсь сделать задание из книги по которой "учимся программировать в универе", а там такой поворот событий :wall:, что я не понял как сделать. Помогите как накатать ето задание в коде. Теперь само задание: 1) добавьте в базовый и производный классы еще один конструктор с параметрами - толщиной оболочки thickness и наполнителем filter, обеспечив тем самым...
C++ Дорогие, помогите с линковкой libeay32.lib http://www.cyberforum.ru/cpp-beginners/thread335326.html
Здравствуйте, Уважаемые гуру! Собираю ntp-сервер, написанный на "с". Называется ntp 4.2.6p3 http://support.ntp.org/bin/view/Main/SoftwareDownloads Собираю его в Visual Studio 2003, в последствии буду интегрировать в свой проект. Проблема в следующем. В ntp используется openSSL и соответственно требуются либы. При линковке кричал, что не может найти libeay32.lib. Скачал openSSL, собрал его так:...
C++ Нужен алгоритм Как на с++ сделать так что б в игре противники двигались паралельно главному персонажу (которым непосредственно мы и управляем)... Заранее спасибо за идеи... PS Пробовал все реализовать так while(кол-во звезд на карте не ноль) { getch() while (!kbhit()) подробнее

Показать сообщение отдельно
-=ЮрА=-
Заблокирован
Автор FAQ
29.07.2011, 12:33     Решить систему алгебраических линейных неоднородных уравнени
hello19, на сей раз я убрал ошибки считывания ввёл оптимальную комбинацию strrchr и strtok f nfr;t протестировал программу на твоём контрольном примере, прилагаю матрицы, код и скриншот работы. На 3638х3638 пока не проверял - уж очень долго матрица А читается, пока нет времени
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#include <windows.h>
#include <stdio.h>
#include <math.h>
 
FILE * f;
double **A = (double **)malloc(sizeof(double));
double *B = (double *)malloc(sizeof(double));
double *X = (double *)malloc(sizeof(double));
char * str = (char *)malloc(sizeof(char));
 
bool printf_err(LPCTSTR sMSG);
char * file2str(FILE *f, char * s);
int str2vec(char * s, char * delim, double * vec);
 
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
    char * buf;
    int i,n,m = 0;bool bContinue = true;
    if(!(f = fopen("B.txt","rb+")))
        bContinue = printf_err("open B.txt");
    else
    {
        str = file2str(f, str);
        fclose(f);
    }
    if(bContinue)
    {
        buf = strchr(str,'\n');
        while(buf != 0)
        {
            buf = strchr(buf + 1,'\n');
            m++;
        }
        B = (double *)realloc((void *)B,(m = m + 1)*sizeof(double));
        if(m != (n = str2vec(str,"\n", B)))
            bContinue = printf_err("update vec B");
    }
    if(bContinue)
    if(!(f = fopen("A.txt","rb+")))
        bContinue = printf_err("open A.txt");
    else
    {
        str = file2str(f, str);
        fclose(f);
    }
    if(bContinue)
    {
        for(i = 0; i < m; i++)
            A[i] = (double *)malloc(m*sizeof(double));
        i--;
        buf = strrchr(str,'\n');
        while(buf != NULL && bContinue)
        {
            printf("UPDATING %04d ROW\r\n",i + 1);
            if(m != (n = str2vec(buf + 1, " ", A[i])))
            {
                printf("ERROR READING %d ROW m = %04d n = %04d\r\n", i + 1,m,n);
                bContinue = false;
            }
            str[strlen(str) - strlen(buf) - 1] = '\0';
            buf = strrchr(str,'\n');
            i--;
        }
        if(str)
        {
            printf("UPDATING %04d ROW\r\n",i + 1);
            if(m != str2vec(str, " ", A[i]))
            {
                printf("ERROR READING %d ROW\r\n", i + 1);
                bContinue = false;
            }
            str = (char *)realloc(str,sizeof(char));
        }
    }
    if(bContinue)
    {
        X = (double *)realloc((void *)X,m*sizeof(double));
        printf("\tCALCULATION ON GAUSS METHOD\r\n");
        printf("\t>FOVARD COURSE\r\n");
        PryamoiHod(m, A, B);
        printf("\t>BACK COURSE\r\n");
        ObratniHod(m, A, B, X);
        if(!(f = fopen("X.txt","wb+")))
            printf("ERROR OPEN X.txt\r\n");
        else
        {
            printf("\tSAVING RESULTS\r\n");
            for(i = 0;i < m; i++)
            {
                printf("X[%04d] = %lf\r\n",i + 1,X[i]);
                fprintf(f,"%.3f\r\n",X[i]);
            }
            fclose(f);
        }
    }
    system("pause");
    return 0;
}
 
bool printf_err(LPCTSTR sMSG)
{
    printf("ERROR %s : %s\r\n",sMSG,strerror(GetLastError()));
    return false;
}
 
char * file2str(FILE *f, char * s)
{
    long fLen = 0;
    if(f && s)
    {
        fseek(f,0,SEEK_END);
        fLen = ftell(f);
        fseek(f,0,SEEK_SET);
        s = (char *)realloc(s,fLen*sizeof(char));
        fread(s,1,fLen*sizeof(char),f);
        s[fLen] = '\0';
    }
    return s;
}
 
int str2vec(char * s, char * delim, double * vec)
{
    int n = 0;
    char * pch = strtok(s,delim);
    while(pch != NULL)
    {
        vec[n] = atof(pch);
        pch = strtok(NULL,delim);
        n++;
    }
    return 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];
                        for(j = k + 1; j < n; j++)
                        {
                                a[i][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];
        }
}
Миниатюры
Решить систему алгебраических линейных неоднородных уравнени  
Вложения
Тип файла: rar ABX_.rar (208 байт, 14 просмотров)
 
Текущее время: 13:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru