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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
#1

ошибка) - C++

19.03.2013, 22:05. Просмотров 376. Ответов 17
Метки нет (Все метки)

помогите пожалуйста найти ошибку в коде)
код решает систему методом гаусса.
проблема в том, что программа останавливается на вводе матрицы а (ввод просто не заканчивается)
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
#include <iostream.h>
#include <math.h>
double a[5][5];
double b[5];
double x[5];
double m;
double s;
int i;
int j;
int k;
class Gauss
{
public: 
void iNput()
{
    cout << "vvedite massiv a"<<endl;
    for(i=1;i<=5;i++)
    for(j=1;j<=5;j++)
    cin >> a[i][j];
    cout << "vvedite massiv b"<<endl;
for(i=1;i<=5;i++)
    cin >>b[i] ;
}
 
void rAsschet()
{
for (i=1; i<5; i++)
for (j =i+1; j<=5;j++) 
{
    m=a[i][j]/a[i][i];
    b[j]=b[j]-m*b[i];
for(k=1;k<=5;k++)
    a[j][k]=a[j][k]-m*a[i][k];
}
    x[5]=b[5]/a[5][5];
for(i=4;i>0;i--)
{
    s=0;
for(j=i+1;j<=5;j++)
    s=s+a[i][j]*x[j];
    x[i]=(b[i]-s)/a[i][i];
}
}
void oUtput(){
for(i=1;i<=5;i++)
    cout<<"x"<<i<<"="<<x[i]<<endl;
}
};
void main()
{
    Gauss objiNput;
    Gauss objrAsschet;
    Gauss objoUtput;
    objiNput.iNput();
    objrAsschet.rAsschet();
    objoUtput.oUtput();
};
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2013, 22:08     ошибка) #2
C++
1
2
3
4
5
6
7
8
9
10
void iNput()
{
    cout << "vvedite massiv a"<<endl;
    for(i=0;i<5;i++)
    for(j=0;j<5;j++)
    cin >> a[i][j];
    cout << "vvedite massiv b"<<endl;
    for(i=0;i<5;i++)
    cin >>b[i] ;
}
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
19.03.2013, 22:15     ошибка) #3
У меня что то считает и зацикливания нету, у вас массив 5 на 5 то есть 25 элементов.

Вот что у меня вывело
vvedite massiv a
1
2
3
4
5
6
7
8
9
4
5
6
1
2
3
4
5
6
4
7
8
99
6
5
4
vvedite massiv b
1
2
3
4
5
x1=-243.667
x2=68.8333
x3=-262.5
x4=237.5
x5=-12.5

Добавлено через 3 минуты
alsav22, вы предложили шило на мыло ?
от 1 до 5 = нет выхода за пределы массива
вы от 0 до 4 = результат тот же
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:15  [ТС]     ошибка) #4
хм, а в чем моет быть проблема?
не могу вникнуть никак

если что - Visual 6.0
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2013, 22:20     ошибка) #5
Цитата Сообщение от egor2116 Посмотреть сообщение
alsav22, вы предложили шило на мыло ?
от 1 до 5 = нет выхода за пределы массива
Как это нету? Если массив объявлне как double b[5], то b[5] - выход за пределы массива.

Добавлено через 56 секунд
Цитата Сообщение от Hammer-On Посмотреть сообщение
не помогло, изменений нет(
Ввод проходит?
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
19.03.2013, 22:22     ошибка) #6
Если ошибку точно не какую не пишет, то могу посоветовать убрать ввод значений т.к. он утомительный и заменить кодом.
Убрать
C++
1
cin >> a[i][j];
заменить на что то типа этого
C++
1
a[i][j]=i*j;
тоже и с
C++
1
 cin >>b[i]
на
C++
1
b[i]=i*2
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:23  [ТС]     ошибка) #7
неа

Добавлено через 43 секунды
спасибо пробую
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
19.03.2013, 22:25     ошибка) #8
Как это нету? Если массив объявлне как double b[5], то b[5] - выход за пределы массива.
если бы был выход оно бы еще на этапе компиляции ругалось что то там Stack ....

Я код запускал без изменений, и все сработало, смотри выше в теме результат вывода
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:27  [ТС]     ошибка) #9
так, дело продвинулось) ввод пошел)
изменил массив на
C++
1
double a[6][6];
как и советовали и заработало
(не понимаю, почему до этого не заработало)
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
19.03.2013, 22:28     ошибка) #10
а я не понимаю как у меня работало?
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:31  [ТС]     ошибка) #11
вообще запутался как-то

Добавлено через 1 минуту
сейчас введу те же числа сверим ответы
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2013, 22:32     ошибка) #12
Цитата Сообщение от egor2116 Посмотреть сообщение
если бы был выход оно бы еще на этапе компиляции ругалось
Это ошибка времени выполнения, компилятор не отслеживает выход за пределы массива.
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
19.03.2013, 22:34     ошибка) #13
да ты прав, но почему у меня сработало без ошибок или даже предупреждений, пойду пошагово запущу.
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2013, 22:35     ошибка) #14
Цитата Сообщение от Hammer-On Посмотреть сообщение
вообще запутался как-то
Проверяйте индексы, я вам только на вводе показал, где ошибка, у вас и дальше индексы неправильные. И заполнение массива начинается с нулевого индекса.

Добавлено через 1 минуту
Цитата Сообщение от egor2116 Посмотреть сообщение
или даже предупреждений
Предупреждения компилятор выдаёт, а он это не отслеживает.
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:39  [ТС]     ошибка) #15
ввел всё тоже. поменял только
C++
1
2
3
double a[6][6];
double b[6];
double x[6];
иксы кроме х1=1 по нулям

Добавлено через 39 секунд
ага, понял иду фиксить

Добавлено через 59 секунд
хотя, нет, теперь вроде нечего фиксить
egor2116
338 / 369 / 42
Регистрация: 20.01.2013
Сообщений: 1,123
19.03.2013, 22:47     ошибка) #16
Прикол, не замечал рань за IDE такого
выполняю код
C++
1
2
3
double a[5]={1,2,3,4,5};
for(int j=0;j<=10;j++)
    cout<<a[j]<<endl;
Вывод
1
2
3
4
5
6.64593e-316
-2.31103e-42
-1.33821
-1.49557e-41
-1.33816
1.59115e-314

Вообщем у меня не ругается при выходе за границы массива прикол
alsav22
5415 / 4811 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2013, 22:53     ошибка) #17
Цитата Сообщение от egor2116 Посмотреть сообщение
Вообщем у меня не ругается при выходе за границы массива
И у меня не ругается, поэтому следить за этим - дело того, кто код пишет.
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:55  [ТС]     ошибка) #18
всем спасибо, заработало)
Yandex
Объявления
19.03.2013, 22:55     ошибка)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru