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

МНК, повреждение кучи - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Электронные часы http://www.cyberforum.ru/cpp-beginners/thread96616.html
Приветствую всех специалистов по программированию!!! Мне срочно нужна ваша помощь! помогите пожалуйста разработать программу на С++ в графическом режиме, которая будет показывать в середине экрана время, которое стоит на компе, и оно должно менятся, пока не нажата клавиша, ну короче (какое время на рабочем столе установлено, такое и надо отображать, если на рабочем столе меняется, то и прога...
C++ Рекурсивное вычисление Доброе время суток!!! Помогите пожалуйста решить две задачи с помощью рекурсии. За ранее огромное спасибо!!! Задача №1. Написать функцию, которая рекурсивно вычисляет сумму чисел в заданном диапазоне. Задача №2. Легенда гласит, что где-то в Ханое находится храм, в котором размещена следующая конструкция: на основании укреплены 3 алмазных стержня, на один из которых при сотворении мира... http://www.cyberforum.ru/cpp-beginners/thread96599.html
C++ Используя оператор For и else
Составить программу каторые выводить четные цифры Используя оператор For спс заранее)))))
C++ Функция без условия
Нужно написать программу к этой функции( толкового словесного условия к ней не давали ) Вот f(2)=3x(в кубе, тоесть в 3-й степени)-2x(в квадрате, тоесть во 2-й степени)+4x-1 Тоесть программа и есть сама эта формула(функция)! Помогите пож-ста! Добавлено через 4 минуты Нам вообще ничего не говорили насчет этих заданий без письменного условия и не приводили примеры!
C++ Определить максимальное значение напряжения в сети http://www.cyberforum.ru/cpp-beginners/thread96540.html
Народ, плз, помогите :help: В течение суток через каждый час проведены 24 замера напряжения в сети. Определить максимальное значение напряжения в сети в интервале (20,6) час и время, когда оно было зафиксировано. на языке С
C++ Найти наибольший среди отрицательных чисел массива Люди,пожалуйста help:help: Сформировать целочисленный массив A(85), элементами которого являются случайные числа из диапазона . Найти величину наибольшего среди отрицательных чисел этою массива. на языке С подробнее

Показать сообщение отдельно
Neibot
1 / 1 / 0
Регистрация: 17.02.2010
Сообщений: 3

МНК, повреждение кучи - C++

17.02.2010, 19:38. Просмотров 2504. Ответов 4
Метки (Все метки)

Аппроксимация методом наименьших квадратов..

Если не использовать динамическую память, все работает замечательно..

Если описывать массивы как динамические - программа работает через раз.. Если количество исходных точек невелико - скажем, 5, то все хорошо.. Если например 20 - выкидывает - программа пытается записать данные за пределами кучи..

Что не так здесь в работе с динамической памятью?

Дебаггер тыкает в 46 строку..

код
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
#include "stdafx.h"
#include "math.h"
#include "windows.h"
#include <iostream>
#include <fstream>
 
using namespace std;
 
char buffer[100];           
int n, m;
 
void main()
{
    AnsiToOem("Введи количество исходных точек: ", buffer);
    cout << buffer; cin >> n; cout << endl << endl;
    AnsiToOem("Введи желаемую степень полинома: ", buffer);
    cout << buffer; cin >> m; cout << endl << endl;
 
    long double *x=new long double [m+1], *y=new long double [m+1];
    long double **b=new long double *[m+1];
        for(int i=0; i<m+1; i++)
        b[i]=new long double[m+1];
    long double *c=new long double [m+1];
    long double *cr=new long double [m+1];
    
    ifstream inputfile("input.txt");
    if(!inputfile) 
    {
        AnsiToOem("Где входной файл??? >_<", buffer);
        cerr << buffer << endl << endl;
        AnsiToOem("Положи input.txt в одну директорию с этим exe-файлом..", buffer);
        cerr << buffer << endl << endl;
        system ("PAUSE");
        exit(1);
    }
    for(int i=0; i<n; i++)
    {
        inputfile >> x[i];
        inputfile >> y[i];
    }
 
    for(int k=0; k<m+1; k++)
    {
        for(int j=0; j<m+1; j++)
        {
            b[k][j]=0;
            for (int i=0; i<n; i++)
                b[k][j]+=pow(x[i], j+k);
        }
        c[k]=0;
        for(int i=0; i<n; i++)
            c[k]+=pow(x[i],k)*y[i];
    }
 
    for (int k=0; k<m; k++)
    {
        int imax=k;
        long double mx=b[k][k];
        for(int i=k; i<m+1; i++)        
            if(fabs(mx)<fabs(b[i][k]))
            {
                mx=b[i][k];
                imax=i;
            }
 
        mx=c[k];        
        c[k]=c[imax];
        c[imax]=mx;
 
        for(int j=k; j<m+1; j++)
        {
            mx=b[k][j];     
            b[k][j]=b[imax][j];
            b[imax][j]=mx;
        }
        
        for(int i=k+1; i<m+1; i++)          
        {
            for(int j=k; j<m+1; j++)
                b[i][j]-=b[k][j]*b[i][k]/b[k][k];
            c[i]-=c[k]*b[i][k]/b[k][k];
            b[i][k]=0;
        }
    }
 
    for(int i=0; i<m+1; i++)                    
        cr[i]=c[i];
    for(int i=m; i>=0; i--)
    {
        for(int j=i+1; j<m+1; j++)
            cr[i]-=b[i][j]*cr[j];
        cr[i]=cr[i]/b[i][i];
    }
        
    AnsiToOem("Найденные решения СЛАУ:", buffer);
    cout << endl << endl << buffer << endl << endl;
    for(int i=0; i<m+1; i++)
    {
        AnsiToOem("Корень №", buffer);
        cout << buffer << i+1 << ": " << cr[i] << endl;
    }
    cout << endl << endl;
    system ("PAUSE");
    system ("cls");
 
    delete[] x,y,b,c,cr; 
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru