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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Задержка http://www.cyberforum.ru/cpp-beginners/thread374591.html
Использую MinGW через NetBeans. Проблема состоит в том что такие команды как cin.get или же getchar() судя по всему игнорируются компилятором, так как в созданном исполняемом файле задержки в консоли...
C++ ПОМОГИТЕ НАПИСАТЬ В С++ Помогите написать прогу в С++ для задачи Log18. Даны координаты (как целые от 1 до 8) двух различных полей шахматной доски. Если король за один ход может перейти с одного поля на другое, вывести... http://www.cyberforum.ru/cpp-beginners/thread374587.html
Метод Крамера C++
Вот само задание: Написать программу, осуществляющую решение систем линейных уравнений методами Гаусса и Крамера. Программа должна обеспечить ввод с клавиатуры систем линейных уравнений произвольного...
C++ bitstream parsing
Всем привет! Сейчас у меня возник вопрос парсинга битового потока. Но как то не совсем все понятно. Маски, байтовые смещения и т.д. Может кто подскажет литературу или хорошо...
C++ Вопрос про конструктор класса по умолчанию http://www.cyberforum.ru/cpp-beginners/thread374557.html
http://s2.ipicture.ru/uploads/20111029/A7AtbNYV.jpg Пункт первый не могу немного понять.Т.е получается,что всегда лучше создавать самому конструктор класса ? Ппц,как так можно книги...
C++ Очень простой вопрос до смешного простой) как прервать выполнение ФУНКЦИИ в процессе работы программы? return 0; в этом случае не подходит т.к. завершает программу в целом, а мне нужно просто чтобы завершилась... подробнее

Показать сообщение отдельно
Larri
0 / 0 / 0
Регистрация: 29.09.2011
Сообщений: 16

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

29.10.2011, 20:07. Просмотров 1236. Ответов 22
Метки (Все метки)

После выполнения программы (она решает систему линейных уравнений) для случая наличия корней появляется ошибка.
Вот код:
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
#include <stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 4
typedef struct
{int*a;
bool l;//нулевой ли вектор
}lama;
int* WC(int *w1,int f,int n)//alfa na vector
{
    int i=0;
    int *w;
    w=(int*)malloc(n*sizeof(int));
    for(i=0;i<n;i++)
        w[i]=0;
    for(i=0;i<n;i++)
        w[i]=(w[i]+w1[i]*f)%2;
    return w;
}
int WW(int *w1,int *w2,int n)//skal proizv
{
    int i=0;
    int w=0;
    for(i=0;i<n;i++)
        w=(w+w1[i]*w2[i])%2;
    return w;
}
int* MW(int n, int *a, int *w)
{
    int i=0,j=0;
    int *w1;
    w1=(int*)malloc(n*sizeof(int));
    for (j=0;j<n;j++)
        w1[j]=0;
    for (j=0;j<n;j++)
        for(i=0;i<n;i++)
            w1[j]=(w1[j]+a[j*n+i]*w[i])%2;
    return w1;
}
lama form(int n,int *a,int *w1, int *w0)
{
    int i=0;
    int *w2;
    lama w;
    w.l=false;  
    int q,q1,e=0;
    w.a=(int*)malloc(n*sizeof(int));
    w2=(int*)malloc(n*sizeof(int));
    w2=MW(n,a,w1);
    q=(WW(MW(n,a,w2),w1,n))*(WW(w2,w1,n));  
    if(w0==NULL)
        for(i=0;i<n;i++)
        {
            w.a[i]=(w2[i]+WC(w1,q,n)[i])%2; //в двоичном сложении 1+1=1-1=0, если не учитывать перенос разряда
            e+=w.a[i];
        }
    else
    {
        q1=(WW(MW(n,a,w2),w0,n))*(WW(MW(n,a,w0),w0,n));
        for(i=0;i<n;i++)
        {
            w.a[i]=(w2[i]+WC(w1,q,n)[i]+WC(w0,q1,n)[i])%2;
            e+=w.a[i];          
        }
    }   
    if(e==0) w.l=true;
    free(w2);
    return w;
}
int*XX(int*a,int*w,int k,int n)//nepr
{
    int j,i,q;
    int*x;
    x=(int*)malloc(n*sizeof(int));  
    for(i=0;i<n;i++)
        x[i]=0;
    for(i=0;i<=k;i++)
    {       
        q=WW((w+i*n),w,n)*WW(MW(n,a,(w+i*n)),(w+i*n),n);
        for(j=0;j<n;j++)
            x[j]=(x[j]+q*w[i*n+j])%2;
    }   
    return x;
}
bool prov(int*a,int*x,int*b,int n)
{   
    int*b1,i,j=0;
    b1=(int*)malloc(n*sizeof(int));
    b1=MW(n,a,x);
    for(i=0;i<n;i++)
        if(b1[i]!=b[i]) j++;
    free(b1);
    if(j==0) return true;
    else return false;
}
int main()
{
    int *a,*b,*w,*x,i,j,k=0;
    lama p; 
    a=(int*)malloc(N*N*sizeof(int));
    b=(int*)malloc(N*sizeof(int));
    w=(int*)malloc(N*N*sizeof(int));
    /*srand(time(0));
    for(i=0;i<N;i++)
    {
        for(j=i;j<N;j++)
        {
            a[i*N+j]=rand()%2;
            if(i!=j) a[j*N+i]=a[i*N+j];
        }
        b[i]=rand()%2;
    }
    for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
            printf("\t %i", a[i*N+j]);
        printf ("\n");
        }   */
    for(i=0;i<N;i++)//-пользовательское задание матрицы А
        for(j=0;j<N;j++)
        {
            printf("Enter a[%i,%i]\n",i,j);
            scanf("%i",&a[i*N+j]);
        }
    for(i=0;i<N;i++)
    {
        printf("Enter b[%i]\n",i);
        scanf("%i",&b[i]);
    }
    for (i=0; i<N; i++)
    {
        for (j=0; j<N; j++)
            printf("\t %i", a[i*N+j]);
        printf ("\n");
    }
    for(i=0;i<N;i++)    
        printf("b[%i]=%i\n",i,b[i]);
    for(j=0;j<N;j++)
        w[j]=b[j];
    i=1;
    do
    {
        if(i==1) p=form(N,a,b,NULL);
        else p=form(N,a,(w+(i-1)*N),(w+(i-2)*N));
        for(j=0;j<N;j++)//было j<=N
        {
            w[i*N+j]=p.a[j];//запись вектора W[i] в матрицу омег            
        }
        k++;
        i++;
    }
    while(!p.l);
    if(p.l)
    {
        for (i=0; i<=k; i++)
        {
            for (j=0; j<N; j++)
                printf("\t %i", w[i*N+j]);
            printf ("\n");
        }
        x=XX(a,w,k,N);      
        if(!prov(a,x,b,N)) printf("answer does not exist\n");
        else 
        {
            printf("answer is true\n");
            printf("answer: ");
            for(i=0;i<N;i++)
                printf("%i ",x[i]);
            printf("\n");
        }
    }
    else printf("algorithm does not work\n");
    free(a);
    free(b);
    free(w);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru