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

ошибка) - C++

Восстановить пароль Регистрация
 
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:05     ошибка) #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
#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();
};
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.03.2013, 22:05     ошибка)
Посмотрите здесь:

типизированный файл, ошибка ошибка при выходе C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 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
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
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
5282 / 4801 / 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
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
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
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
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
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
19.03.2013, 22:28     ошибка) #10
а я не понимаю как у меня работало?
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.03.2013, 22:31  [ТС]     ошибка) #11
вообще запутался как-то

Добавлено через 1 минуту
сейчас введу те же числа сверим ответы
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.03.2013, 22:32     ошибка) #12
Цитата Сообщение от egor2116 Посмотреть сообщение
если бы был выход оно бы еще на этапе компиляции ругалось
Это ошибка времени выполнения, компилятор не отслеживает выход за пределы массива.
egor2116
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
19.03.2013, 22:34     ошибка) #13
да ты прав, но почему у меня сработало без ошибок или даже предупреждений, пойду пошагово запущу.
alsav22
5282 / 4801 / 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
 Аватар для egor2116
337 / 368 / 42
Регистрация: 20.01.2013
Сообщений: 1,100
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
5282 / 4801 / 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     ошибка)
Ответ Создать тему
Опции темы

Текущее время: 10:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru