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

Необработанное исключение по адресу - C++

Восстановить пароль Регистрация
 
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 12:57     Необработанное исключение по адресу #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
#include <iostream>
#include <conio.h>
#include <math.h>
#include <clocale>
using namespace std;
                                                                         //помилка в визначенні відрізка ізоляції (ЕОМ вибирає [1;2]) 
float func(float);//основна функція
float der1(float);//похідна 1-го порядку
float der2(float);//похідна 2-го порядку
float f3(float,float);//третя формула
float f7(float,float);//сьома формула
 
 
void main()
{
    setlocale (LC_ALL,"Russian");
    int id;//id-номер x[nt](наближений корінь р-ня)
    float x[255],n,t,a,b,c,e,i[2],j[2];
    bool vi,fl;
    /* x*x+4sin(x)=0
    x є (-в€ћ;+в€ћ)
    F'(x)=2x+4cos(x)
    2x+4cos(x)=0
    2(x+2cosx)=0
    cos(x)=-x/2 */
    
    cout<<"Минченко Антон    П-11\n Oтделить корни уравнения x^2+4sinx=0 и уточнить один из них c точностью\n Е = 0.001.\n";
 
    n=func(0);
    t=func(1);
    if((n*t)<0) {a=0;b=1;}//знаходження відрізка ізоляції
    else
    {i[1]=0;
    i[0]=-1;
    j[0]=1;
    j[1]=2;
   
    vi=0;
    while(vi==0)
    if((func(i[1])*func(i[0]))<0) {a=i[0];b=i[1];vi=1;}        //знаходження відрізка ізоляції
    else if((func(j[0])*func(j[1]))<0) {a=j[0];b=j[1];vi=1;}
    else 
    {i[1]--;//декрементація
    i[0]--;
    j[0]++;//інкрементація   
    j[1]++;}
    }
 
    cout<<"["<<a<<";"<<b<<"]\n";
 
    if(der2(a)*func(a)>0) {c=a;e=b;}//якщо добуток похідної другого порядку та функції >0 ,то а-нерухомий кінець відрізка
    else {c=b;e=a;}//інакше b-нерухомий кінець відрізка
 
    cout<<c<<"-неподвижный конец отрезка\n";
 
    id=0;
    x[0]=c;
 
 
fl=0;
     if(der1(c)*der2(c)>0)//якщо добуток похідної першого порядку та похідної другого порядку більший нуля,то
            fl=1;
 
    vi=0;
    while(vi==0)
    {id++;
    if(fl==1) x[id]=f3(x[id-1],e);
    else x[id]=f7(x[id-1],e);
    if(abs(x[id]-x[id-1])<=0.001) vi=1;
    }
 
    cout<<x[id];
    getch();
    }
 
float func(float d)
{
    return d*d+4*sin(d);
}
 
float der1(float d)
{
    return 2*d+4*cos(d);
}
 
float der2(float d)
{
    return 2-4*sin(d);
}
 
float f3(float d, float e)
{
    return d-(func(d)*(e-d))/(func(e)-func(d)); 
}
 
float f7(float d, float e)
{
    return d-(func(d)*(e-d))/(func(d)-func(e));
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.11.2013, 12:57     Необработанное исключение по адресу
Посмотрите здесь:

C++ Необработанное исключение по адресу
C++ Необработанное исключение по адресу 0x00ED4891 в strings.exe: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCCCCCCCC
C++ Необработанное исключение по адресу 0x00105FD7 в Динамические структуры: 0xC0000005: нарушение прав доступа при чтении по адресу 0xCDCDCE09
C++ Исправить ошибку: необработанное исключение по адресу, нарушение прав доступа при записи по адресу
Необработанное исключение по адресу, нарушение прав доступа при записи по адресу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.11.2013, 13:01     Необработанное исключение по адресу #2
строки 39 - 47 неизменяется vi, происходит обращение по адресу не принадлежащему массиву.
это раз
в функциях нет проверки деления на 0
это два

Не по теме:

форматирование кода -- тихий ужасЪ
- три

triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 13:09  [ТС]     Необработанное исключение по адресу #3
Цитата Сообщение от Cra3y Посмотреть сообщение
строки 39 - 47 неизменяется vi, происходит обращение по адресу не принадлежащему массиву.
Программа правильно вычесляет и выводит отрезок изоляции,значит в 39-47 всё правильно.
Цитата Сообщение от Cra3y Посмотреть сообщение
в функциях нет проверки деления на 0
Я решал это уравнение вручную (на листке),то там никак не может быть деление на 0 (только если программа неправильно работает).
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.11.2013, 13:13     Необработанное исключение по адресу #4
Значит смотрите строки 65-74
У Вас полюбому переполнение индекса массива
И я не вижу инициализации переменной id
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 13:14  [ТС]     Необработанное исключение по адресу #5
Цитата Сообщение от Cra3y Посмотреть сообщение
Значит смотрите строки 65-74
У Вас полюбому переполнение индекса массива
И я не вижу инициализации переменной id
ВС выделяет мне массив иксов красным:
+ x 0x001ff654 {-2.00000000, -2.13296127, -2.50680089, -3.44574976, -5.51666355, -9.73294258, -18.2557201, ...} float[255]

Значит здесь ошибка:
C++
1
2
3
4
5
6
7
 vi=0;
    while(vi==0)
    {id++;
    if(fl==1) x[id]=f3(x[id-1],e);
    else x[id]=f7(x[id-1],e);
    if(abs(x[id]-x[id-1])<=0.001) vi=1;
    }
id-56 строка.
Разница в между иксами в массиве постоянно увиличивается,а должно быть наоборот.Видимо программа использует не ту формулу.Походу ошибка в алгоритме.
А ошибку выбивает наверно через то,что я дал 255 элементов,а их не хватает и программа заходит за 255...
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
02.11.2013, 13:18     Необработанное исключение по адресу #6
Цитата Сообщение от Cra3y Посмотреть сообщение
строки 39 - 47 неизменяется vi
Изменяется в концах 40-й и 41-й строк.
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.11.2013, 13:19     Необработанное исключение по адресу #7
посмотрите содержимое id после исключения в отладчике
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 13:21  [ТС]     Необработанное исключение по адресу #8
Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрите содержимое id после исключения в отладчике
C++
1
2
3
4
5
fl=0;
     if(der1(c)*der2(c)>0)//якщо добуток похідної першого порядку та похідної другого порядку більший нуля,то
            fl=1;
 
     cout<<fl;
Мне почему-то выводит ,что fl="0-2".
Вот ,походу, здесь и ошибка.
Max Dark
02.11.2013, 13:22
  #9

Не по теме:

"Милорд, не хватает пробелов и отступов" )

triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 13:24  [ТС]     Необработанное исключение по адресу #10
Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрите содержимое id после исключения в отладчике
А как делать отладку в VS 2010(ато я всегда работал ток в 2005,а здесь рус.язык и другой интерфейс).
Tulosba
02.11.2013, 13:26
  #11

Не по теме:

Цитата Сообщение от triadec_96 Посмотреть сообщение
а здесь рус.язык и другой интерфейс
кто ж Вас тянул русский-то ставить.

Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.11.2013, 13:28     Необработанное исключение по адресу #12
Я давно VS не пользовался, но помоему клавиши не изменились F5 -запуск под отладчиком F6 - пошагово, с пропуском заходов в функции
По меню посмотрите, там клавиши должны быть указаны
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 13:28  [ТС]     Необработанное исключение по адресу #13
Цитата Сообщение от Tulosba Посмотреть сообщение

Не по теме:


кто ж Вас тянул русский-то ставить.

да не знал какую версию устанавливал.
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 13:32  [ТС]     Необработанное исключение по адресу #14
Цитата Сообщение от Cra3y Посмотреть сообщение
посмотрите содержимое id после исключения в отладчике
-4194304

ooo...fl уже 0.
прогерс!
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.11.2013, 13:41     Необработанное исключение по адресу #15
вставьте в цикл проверку на id>=размера массива
если привысит выводите что решение не найдено)после выход из проги
и ковыряйте дальше логику программы(Извиняюсь, я сейчас на веселе %))

и добавте в цикл вывод переменных в консоль, в частности того же индекса иногда помогает
triadec_96
 Аватар для triadec_96
11 / 11 / 0
Регистрация: 27.12.2012
Сообщений: 433
Завершенные тесты: 1
02.11.2013, 14:07  [ТС]     Необработанное исключение по адресу #16
Цитата Сообщение от Cra3y Посмотреть сообщение
вставьте в цикл проверку на id>=размера массива
если привысит выводите что решение не найдено)после выход из проги
и ковыряйте дальше логику программы(Извиняюсь, я сейчас на веселе %))

и добавте в цикл вывод переменных в консоль, в частности того же индекса иногда помогает
я так и сделал.
нашёл одну ошибку в функции f7.
Ищу ещё ошибки в алгоритме.

Добавлено через 8 минут
Цитата Сообщение от Cra3y Посмотреть сообщение
вставьте в цикл проверку на id>=размера массива
если привысит выводите что решение не найдено)после выход из проги
и ковыряйте дальше логику программы(Извиняюсь, я сейчас на веселе %))
и добавте в цикл вывод переменных в консоль, в частности того же индекса иногда помогает
всё.Нашёл ошибки,исправил их.Программа работает правильно.
Спасибо огромное)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 14:14     Необработанное исключение по адресу
Еще ссылки по теме:

Необработанное исключение по адресу 0x009F6F05 C++
Ошибка: необработанное исключение по адресу C++
C++ Необработанное исключение по адресу

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

Или воспользуйтесь поиском по форуму:
Max Dark
В поиске работы
 Аватар для Max Dark
1546 / 1399 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
02.11.2013, 14:14     Необработанное исключение по адресу #17
И да, единственное решение уравнения находится на отрезке -2*pi/3 ... -pi/4
ибо
cos(0) = 1, -(0)/2 = 0
cos(1) = 0, -(1)/2 = -0.5
cos(-1) = 0, -(-1)/2 = 0.5

Добавлено через 3 минуты
Немного не те константы вместо 1 надо pi
Но смысл я думаю понятен
Yandex
Объявления
02.11.2013, 14:14     Необработанное исключение по адресу
Ответ Создать тему
Опции темы

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