Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.04.2011, 18:16   #1
Erwin
Новичок
Джуниор
 
Регистрация: 30.04.2011
Сообщений: 2
По умолчанию Интегрирование(ошибка при подсчете)

Доброго времени суток!

Прога считает определенные интеграл на заданном отрезке.
Пользователь вводит начало и конец отрезка (я ввожу 0.1 и 0.6 соответственно в связи с особенностью интегрирования функции), ну и понеслась.
Ошибка возникает в 46 строчке при расчете I.
Трейсил прогу, выяснил, что значение y[1][0] почему то равно -9.2559631349317831e+061, хотя при заполнении массива y[5][5] значение присваивается вполне нормально... да и на скрине значение иксов с приставкой АСС. Подскажите где ошибся

скрин

Код:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
void main()
{
        setlocale(LC_ALL,"Russian");
        int i, j, k;
        double xn, xk, x[5], y[5][5], h, I, iz;
 
        cout << "Введите начало отрезка (нижний предел): ";
        cin >> xn; cout << endl;
        cout << "Введите конец отрезка (верхний предел): ";
        cin >> xk; cout << endl;
        
        h = (xk - xn)/4;
 
        cout << "Шаг = " <<h <<endl <<"\n";
 
        for (i=0; i<5; i++)
        {       
                x[i] = xn + i * h; 
        }
                
        for (i=0; i<5; i++)
        {       y[i][0] = asin(sqrt(x[i]));
                
                cout << "x["<<i<<"] = " << x[i] << cout<< "\ty["<<i<< "] = " << y[i][0] << endl;
        }
        cout << "\n\t\tТАБЛИЦА РАЗНОСТЕЙ" <<endl <<"\n";
        cout << "\t1\t\t2\t\t3\t\t4" <<"\n";
        k = 0;
        for(i=0; i<5; i++)
        {       for(j=0; j<5-k; j++)
                {y[j][i+1] = y[j+1][i] - y[j][i];}
                k++;    
        }
        k = 0;
        for(i = 0; i<5; i++)
        {       for(j=1; j<5-k; j++)
                {cout << y[i][j]<<"\t" ;}
                cout<<endl;
                k++;
        }
 
        I=h*((y[0][0]+y[4][0])/2.0+y[1][0]+y[2][0]+y[3][0]);
        cout << "\nПриближенное значение = " <<I;
 
        iz=(asin(sqrt(x[4]))*x[4]+1/2.0*((x[4]*sqrt(-x[4]*(x[4]-1)))/(x[4]*x[4]-x[4]*(x[4]-1)))+1/2.0*atan(sqrt((-x[4]*(x[4]-1)))/x[4]))-
                (asin(sqrt(x[0]))*x[0]+1/2.0*((x[0]*sqrt(-x[0]*(x[0]-1)))/(x[0]*x[0]-x[0]*(x[0]-1)))+1/2.0*atan(sqrt((-x[0]*(x[0]-1)))/x[0]));
        cout << "\n\nИстинное значение = " <<iz;
        cout << "\n\nПогрешность = " << iz-I;
        _getch();
        }
Erwin вне форума Ответить с цитированием
Старый 03.05.2011, 19:43   #2
EC.cpp
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 30
По умолчанию

В этом куске проблема:
Код:
        for(i=0; i<5; i++)
        {       for(j=0; j<5-k; j++)
                {y[j][i+1] = y[j+1][i] - y[j][i];}
                k++;    
        }
при i=0, j=4 происходит обращение к несуществующему (к не инициализированному) элементу массива y[5][0] и так далее.
Но это же тебе не ЭТО, а это С++, по этому обращение к элементу вне области массива программа успешно производит (хотя в зависимости от настроек компилятора, могут выдаваться предупреждения - но данный кусок программы находится в цикле, поэтому наверно нет их), величина такого элемента как раз является верхним или нижнем пределом типа массива double:
-9.2559631349317831e+061

Последний раз редактировалось EC.cpp; 03.05.2011 в 19:52. Причина: орфография
EC.cpp вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Интегрирование(ошибка при заполнении массива) Erwin Помощь студентам 0 30.04.2011 17:27
при подсчете хеш-суммы ошибка Integer Overflow. как обойти? Человек_Борща Общие вопросы Delphi 2 09.02.2011 11:20
ошибка при исполнении (что то при установке компонентов) designer999 Компоненты Delphi 0 18.10.2010 22:03
Неисправность в подсчете символов в строке(С++) allmax Помощь студентам 3 17.01.2010 16:06
исправить в задаче ощибку при подсчете суммы ряда пыхонин филипп Помощь студентам 1 05.01.2009 13:12