Форум программистов, компьютерный форум 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
26.07.2011, 10:42     Решить систему алгебраических линейных неоднородных уравнени
Вот код, суть в следующем, считываю текстовую матрицу и записываю её уже как матрицу double в файл, а затем уж из него читаю из него, вроде косяки ушли...
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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include <math.h>
#include <stdio.h>
#include <windows.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));
char * buf;
 
char * fgetstr(FILE * f, char * s);
int double2bin(char * s, char delim, FILE *f);
void swapvec(int m, double * vec);
void vec2file(FILE *f, int m, double * vec);
 
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
 
int main()
{
    int i, m = 0;
    printf("\tPROGRAM START\r\n");
    if(!(f = fopen("B.txt","rb+")))
        printf("ERROR OPEN B.txt\r\n");
    else
    {
        str = fgetstr(f, str);
        fclose(f);
        if(!(f = fopen("binB.txt","wb+")))
            printf("ERROR OPEN binB.txt\r\n");
        else
        {
            m = double2bin(str,'\n',f);
            fclose(f);
        }
    }
    if(0 < m)
    {
        if(!(f = fopen("A.txt","rb+")))
            printf("ERROR OPEN A.txt\r\n");
        else
        {
            i = 0;
            str = fgetstr(f, str);
            fclose(f);
            if(!(f = fopen("binA.txt","wb+")))
                printf("ERROR OPEN binB.txt\r\n");
            else
            {
                buf = strrchr(str,'\n');
                while(buf)
                {
                    printf("READING %04d ROW\r\n",i + 1);
                    if(m != double2bin(buf,' ',f))
                    {
                        printf("READING ERROR A.txt\r\n");
                        return 1;
                    }
                    str[strlen(str) - strlen(buf)] = '\0';
                    buf = strrchr(str,'\n');
                    i++;
                }
                if(str)
                {
                    printf("READING %04d ROW\r\n",i + 1);
                    if(m != double2bin(str,' ',f))
                    {
                        printf("READING ERROR A.txt\r\n");
                        return 1;
                    }
                    fclose(f);
                }
            }
        }
        A = (double **)realloc((void *)A,m*sizeof(double));
        for(i = 0; i < m; i++)
            A[i] = (double *)malloc(m*sizeof(double));
        B = (double *)realloc((void *)B,m*sizeof(double));
        X = (double *)realloc((void *)X,m*sizeof(double));
        if(!(f = fopen("binB.txt","rb+")))
             printf("ERROR OPEN binB.txt\r\n");
        else
        {
            fread((void *)B,1,m*sizeof(double),f);
            fclose(f);
            swapvec(m,B);
            if(!(f = fopen("binA.txt","rb+")))
                printf("ERROR OPEN binA.txt\r\n");
            else
            {
                for(i = 0; i < m; i++)
                {
                    fread((void *)A[i],1,m*sizeof(double),f);
                    swapvec(m,A[i]);
                }
                fclose(f);
                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");
                        vec2file(f, m, X);
                        fclose(f);
                }
            }
        }
    }
    system("pause");
    return 0;
}
 
char * fgetstr(FILE * f, char * s)
{
        int fLen = 0;
        if(s)
        {
            fseek(f,0,SEEK_END);
            fLen = ftell(f);
            fseek(f,0,SEEK_SET);
            s = (char *)realloc(s,fLen);
            fread(s,1,fLen,f);
            s[fLen] = '\0';
        }
        return s;
}
 
int double2bin(char * s, char delim, FILE *f)
{
    int nCount = 0;
    double buf;
    char * chBuf = strrchr(s,delim);
    while(chBuf)
    {
        buf = atof(chBuf + 1);
        fwrite((void *)&buf,1,sizeof(double),f);
        s[strlen(s) - strlen(chBuf)] = '\0';
        chBuf = strrchr(s,delim);
        nCount++;
    }
    if(s)
    {
        buf = atof(s); 
        fwrite((void *)&buf,1,sizeof(double),f);
        nCount++;
    }
    return nCount;
}
 
void swapvec(int m, double * vec)
{
    double buf;
    for(int i = 0; i < m/2; i++)
    {
        buf = vec[m - i -1];
        vec[m - i -1] = vec[i];
        vec[i] = buf;
    }
}
 
void vec2file(FILE *f, int m, double * vec)
{
        for(int i = 0;i < m; i++)
        {
                printf("X[%04d] = %lf\r\n",i + 1,X[i]);
                fprintf(f,"%.3f\r\n",X[i]);
        }
        fprintf(f,"%s","\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];
                        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];
        }
}
 
Текущее время: 15:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru