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

Методы гаусса, крамера, база данных - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Win32 VS 10 и простейшее диалоговое окно http://www.cyberforum.ru/cpp-beginners/thread552672.html
MessageBoxW: невозможно преобразовать параметр 2 из "const char " в "LPCWSTR" Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции. #include <windows.h> int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MessageBox(NULL, "Hello, Win32...
C++ Указатель char* программа которая удаляет из введенной с клавиатуры строки начальные пробелы #include <iostream> void new_string(char* p) { int i = 0; while(*p++ == ' ') { http://www.cyberforum.ru/cpp-beginners/thread552655.html
задача с++, при любых числах пишет true! C++
//Сумма двух первых цифр заданного четырехзначного числа //равна сумме двух его последних цифр. #include<iostream.h> #include<conio.h> #include<stdio.h> #include<math.h> int main(void){ int odin,des,sot,tis; int a; cout<<"Vvedit 4-oh znachne chislo";
C++ ОДУ 1-го порядка методом Эйлера
очень нужна программа к курсовой на тему :Решение задачи Коши для обыкновенного дифференциального уравнения первого порядка методом Эйлера Добавлено через 10 часов 26 минут очень нужна программа к курсовой на тему :Решение задачи Коши для обыкновенного дифференциального уравнения первого порядка методом Эйлера
C++ С++ debian - программа работает странно http://www.cyberforum.ru/cpp-beginners/thread552613.html
Добрый день всем. может кто знает в чём дело вот программа #include <iostream> #include <string> #include <fstream> #include <map> #include <cstdlib> //using namespace std;
C++ Задача на побитовые операции Дана задача,помогите пожалуйста с решением или подскажите примеры подобных программ. Сама задача: Даны три целых числа А, В, С. Если в числах установлены биты, заданные в первой строке задания (табл. 6.1), то выполнить расчет выражения, записанного в первой строке, иначе, если в числах А, В, С установлены биты, заданные во второй строке задания, то выполнить расчет выражения, записанного во... подробнее

Показать сообщение отдельно
Razlom
Сообщений: n/a

Методы гаусса, крамера, база данных - C++

19.04.2012, 16:15. Просмотров 446. Ответов 0
Метки (Все метки)

Добрый день. Столкнулся с некоторым числом проблем, которые в силу недостатка опыта, а возможно и ума, не могу решить. Просьба помочь советом, если вас это не затруднит. Сразу скажу, код кривоват, мягко говоря.

1. Создание базы данных.
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
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <iostream.h>
struct base
{
    char fam[15];
    char name[10];
    char fath[20];
    char number[7];
    char adres[40];
    long balans;
      };
void vvod(int nom, struct base *db)
{
    printf("vvedite svedenia %d:\n",(nom+1));
    cout<<"vvedite familiu: \n";
     gets(db->fam);
    cout<<"vvedite imya:\n";
     gets(db->name);
    cout<<"vvedite otchestvo:\n";
         gets(db->fath);
    cout<<"vvedite adres:\n";
     gets(db->adres);
    cout<<"vvedite nomer telefona:\n";
    gets(db->number);
    db->balans=((rand()%30)*(-1)*1000);
    return;
}
void main(void)
{
    struct base bd[50];
    int i,N,tday,opl;
    char c,fam_p[20],num_p[7],tmp[80];
    cout<<"Vvedite razmer basi dannih<50:\n";
    cin>>N;
    cout<<"vvedite dannie:\n";
    for (i=0;  i<N; i++)
    vvod(i,&bd[i]);
    cout<<"vvedite chislo:\n";
    cin>>tday;
    if (tday==1)
        for (i=0; i<N; i++)
        {
            opl=rand()%30*1000;
           bd[i].balans=bd[i].balans+opl;
        }
        goto menu;
menu:
    cout<<"MENU:\n";
    cout<<"1. rabota s basoi dannih\n";
    cout<<"2. poisk po familii\n";
    cout<<"3. poisk po nomeru\n";
    cout<<"4. formirovanie spiska dolzhnikov\n";
    cout<<"5. vihod\n";
    goto nav;
nav:
    cout<<"viberite punkt\n";
    cin>>c;
    switch(c)
    {
    case('1'):
    goto rabota;
    case('2'):
    goto poiskf;
    case('3'):
        goto poiskn;
    case('4'):
    goto spis;
    case('5'):
        goto exit;
    default:
        puts("proverte pravilnost vvoda\n");
        goto nav;
    }
rabota:
    for(i=0; i<N; i++)
    cout<<(i+1)<<' '<<bd[i].fam<<' '<<bd[i].name<<' '
    <<bd[i].fath<<' '<<bd[i].adres<<
    ' '<<bd[i].number<<"\n";
cout<<"redactirovat? y/n\n";
cin>>c;
switch(c)
{case('y'):
goto redact;
case('n'):
goto menu;
default:
{cout<<"nevernyy vvod\n";
goto menu;}}
redact:
    puts("menu redactirovania\n");
    puts("1. izmenenie nomera\n");
    puts("2. izmenenie imeni\n");
    puts("3. izmenenie familii\n");
    puts("4. izmenenie otchestva\n");
    puts("5. izmenenie adresa\n");
    puts("6. dobavlenie\n");
    puts("7. udalenie\n");
    puts("8. v menu\n");
red:
    cout<<"viberite punkt:\n";
    cin>>c;
    switch(c)
    {
    case('1'):
        goto red_n;
    case('2'):
        goto red_i;
    case('3'):
        goto red_f;
    case('4'):
        goto red_ot;
    case('5'):
        goto red_ad;
    case('6'):
        goto add;
    
    case('8'):
        goto menu;
    default:
        puts("nevernyy vvod\n");
        goto red;
    }
red_n: //изменение номера
    puts("viberite nomer zapisi:\n");
    cin>>i;
    if(i>N)
    {
    cout<<"neverny vvod!\n";
        goto red_n;
    }
    cout<<"vvedite novy nomer:\n";
    gets(bd[i-1].number);
    goto povt;
red_i: //изменение имени
    puts("viberite nomer zapisi:\n");
    cin>>i;
    if(i>N)
    {
        puts("neverny vvod!\n");
        goto red_i;
    }
    puts("vvedite novoe imya:\n");
    gets(bd[i-1].name);
    goto povt;
red_f: //изменение фамилии
    puts("viberite nomer zapisi:\n");
    cin>>i;
    if(i>N)
    {
        puts("neverny vvod!\n");
        goto red_f;
    }
    puts("vvedite novuyu familiyu:\n");
    gets(bd[i-1].fam);
 
    goto povt;
red_ot: //изменение отчества
    puts("viberite nomer zapisi:\n");
    cin>>i;
    if(i>N)
    {
        puts("neverny vvod!\n");
        goto red_ot;
    }
    puts("vvedite novoe otchestvo:\n");
    gets(bd[i-1].fath);
    goto povt;
red_ad: //изменение адреса
    puts("viberite nomer zapisi:\n");
    cin>>i;
    if(i>N)
    {
        puts("neverny vvod!\n");
        goto red_ad;
    }
    puts("vvedite novy adres:\n");
    gets(bd[i-1].adres);
    goto povt;
add: //добавление записи
    puts("vvedite dannie:\n");
    vvod(N, &bd[N]);
    N=N+1;
    goto povt;
poiskf: //поиск по фамилии
    puts("vvedite familyu:\n");
    
    gets(fam_p);
    c=0;
    for(i=0; i<N; i++){
    if (bd[i].fam==fam_p)
    {cout<<bd[i].number<<' '<<bd[i].fam<<' '<<bd[i].name<<
    ' '<<bd[i].fath<<' '<<bd[i].adres<<"\n";
    c++;} }
    if (c==0)
        cout<<"net sovpadeniy!\n";
    puts("nazmite r dlya povtora\n");
    scanf("%c",&c);
    switch(c)
    {
    case('r'):
        goto poiskf;
    default:
        goto menu;
    }
poiskn: //поиск по номеру
    puts("vvedite nomer:\n");
    gets(num_p);
    for(i=0; i<N; i++)
        if (bd[i].number==num_p)
                            printf("%7s %20s %15s %20s %80s\n",bd[i].number,bd[i].fam,bd[i].name,bd[i].fath,bd[i].adres);
    puts("nazmite r dlya povtora\n");
    scanf("%c",&c);
    switch(c)
    {
    case('r'):
    goto poiskf;
    default:
        goto menu;
    }
 
povt:
    puts("neobhodima eshe operaciya? y/n\n");
    scanf("%c",&c);
    switch(c)
    {
    case('y'):
        goto red;
    case('n'):
        goto menu;
    default:
        puts("neverny vvod!\n");
        goto povt;
    }
spis: 
    c=0;
    for (i=0; i<N; i++)
        if (bd[i].balans<0)
            {
                printf("%7s %20s %15s %20s %80s %d\n",bd[i].number,bd[i].fam,bd[i].name,bd[i].fath,bd[i].adres,bd[i].balans);
                c++;}
        if (c==0)
            puts("zadolzhennostey net!\n");
        goto menu;
exit:
    puts("nazhmite knopku dlya zakritiya programmi\n");
}
В данном случае возникают ошибки:
а) При попытке изменить фамилию/имя/отччество/адрес, все либо не работает корректно, либо после первого изменения при попытке изменить следующее значение оно просто стирается.
б) не работают поиски. Вообще.
в) необходимо сделать удаление записей. Первоначально я планировал использовать код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
del:
    cout<<"vvedite nomer udalyaemoy zapisi:\n";
    cin>>c;
    if(c>(N+1))
    {
        puts("neverny vvod!\n");
        goto del;
    }
    for(i=(c-1); i<N; i++)
    {
        bd[i].number=bd[i+1].number;
        bd[i].fam=bd[i+1].fam;
        bd[i].name=bd[i+1].name;
        bd[i].fath=bd[i+1].fath;
        bd[i].adres=bd[i+1].adres;
        bd[i].balans=bd[i+1].balans;              
    }
    N=N-1;
Однако в процессе столкнулся с тем, что даже при расстановке указателей компилятор ругается.
Не обращайте внимания на printf, puts и scanf, я их понемного заменяю.

2. Метод Гаусса.
Описанный в данной теме алгоритм вызвал несколько вопросов, а именно:
а) все условия типа
for (j=i-1; j>=0; --j)
расцениваются как always true, помогает убрать =, однако, боюсь, после этого они работать перестанут. Как поступить?
б)
a[k+t*n]&=a[k+i*n];
a[k+i*n]&=a[k+t*n];
a[k+t*n]&=a[k+i*n];
выдают "Illegal use of floating point". Решения я не нашел.

3. Метод Крамера.
Подойдет ли описанный здесь алгоритм для расчета СЛАУ 10го порядка?

Заранее благодарен. К сожалению, я очень ограничен во времени, что и послужило причиной обращения.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru