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

Аппроксимация полиномом.Не могу найти ошибку в программе.Си - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Сортировка массивов. http://www.cyberforum.ru/cpp-beginners/thread313597.html
Помогите пожалуйста написать на 2006 с++ сортировки одномерного массива методом Шелла, Шейкера, слиянием, быстрой сортировки по примеру пузырьковой #include <iostream.h> #include <stdlib.h> int main() { int n,i,j,b; cout<<"Vvedite razmer massiva -> "; cin>>n; cout<<"\n"; int *A=new int;
C++ Криптографические средства Помогите, пожалуйста! Тону и пропадаю! Срочно нужна программа! Огромнейшее спасибо за возможную помощь! Задание такое: Разработать программу, реализующую функции подготовки файла защищенной программы и проверки ее на предмет нарушения целостности. Алгоритм подготовки файла защищенной программы: • Вычислить хэш – значения в соответствии с алгоритмом ГОСТ 28147-89/Схема Quisquater -... http://www.cyberforum.ru/cpp-beginners/thread313587.html
C++ Округление мелкого числа до 0
Всем привет, времени мало поэтому пишу сюда суть такова - нужно сделать перемножение матриц 3х3 типа double потом вывести на экран все выходит хорошо, но есть 1 штука от которой я хочу избавится http://i034.***********/1106/c2/93d5619029c0.jpg я так понимаю это 1.9 в -16 степени, т.е --> 0 так вот как сделать так чтобы выводился на экран ноль а не эта штукенция? фрагмент программы
Определить позиции SelStart'a C++
Загружаю текст в RE. Там мне нужно поднести SelStart's к определенным символам Выделение происходит, но не на тех местах. Стоит свойство wordwrap=true, т.е. есть переносы текста Теперь сам алгоритм выделения sum=0; k=0; row_count=RE->Lines->Count; for(i=0; i < row_count; i++) { res=RE->Lines->Strings;
C++ работа с тестовым файлом http://www.cyberforum.ru/cpp-beginners/thread313569.html
пишу прогу и не знаю как написать кусок кода: нужно из файла (словаря) скопировать рандомное слово.
C++ Есть производный класс и базовый; при чём производный использует только ЧАСТЬ ресурсов базового, правильно ли это? Ну то есть базовый класс A, с полями, допустим, a, b, c, d. И я проектирую производный класс B и я железно знаю, что он будет использовать только поле a и b (c и d будет использовать другой производный класс C). Вот не знаю, правильно ли это. Ещё до реализации не дошло, вот думаю, может правильнее написать функции к классу A (вместо производных классов); и писать A.f (); вместо B b; ... подробнее

Показать сообщение отдельно
DreamForLives
0 / 0 / 0
Регистрация: 05.05.2011
Сообщений: 33
05.06.2011, 18:20     Аппроксимация полиномом.Не могу найти ошибку в программе.Си
Задание: "Апроксимация функции полиномом n-ого порядка. Программа есть,но она не работает. Считывает координаты точек из текстового файла, запрашивает порядок полинома - и вмсето результата ,компилятор вылетает( Помогите,пожалуйста найти ошибку!!???
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
#include "stdafx.h"
#include <stdio.h>
#include <process.h>
#include <math.h>
 
float *a; //объявляем указатель чтобы сделать потом массив. Это коэффиценты, которые мы ищем
float *b; //Правые части.
float *x; //координаты х.
float *y; //координаты у.
float **sums; //суммы степеней x,y при неизвестных коэффициентах полинома
 
int N; //количество начальных точек
int K; //степень многочлена(задаётся самому)
 
//N - number of data points
//K - polinom power
//K<=N
 
char filename[256]; //массив символов. Имя файла
FILE* InFile = NULL; //переменная для файла
 
void count_num_lines() //Функция, определяющая сколько точек заданно в файле
{
   int nelf = 0;       //флажок для строки
   do                  //цикл1 проверки всего файла
   {
      nelf = 0;        //устанавливаем флаг в 0, т.к. ещё не знаем на новой ли мы строке.
      while( (fgetc(InFile) != '\n') && (!feof(InFile)) )   //цикл2 проверки строки: если прочитаный символ(fgetc(InFile))
                                                            //не равен символу конца строки и конец файла ещё не достигнут( !feof(InFile) ),
                                                            //то мы на новой строке. Продолжается пока не дойдем до конца строки или конца файла.
         nelf=1;
      if(nelf) N++;                //мы уже дошли до конца строки, значит пора прибавить к кол-ву строк 1.
   }while(!feof(InFile));     //если не конец файла, то в начало цикла1, иначе выходим.
}
 
void freematrix()    //Функция для очистки занятой памяти
{
   for(int i = 0; i < K + 1; i++)  //цикл для очишения строк матрицы sums[]
   {
      delete [] sums[i];   //удаление строки в матрице.
   }
 
   delete [] a;    //удаления массива
   delete [] b;    //удаления массива
   delete [] x;    //удаления массива
   delete [] y;    //удаления массива
   delete [] sums;    //удаления массива sums, т.к. sums это массив массивов
}
 
void allocmatrix()     //функция для выделения памяти под все матрицы и массивы
{
   a = new float[K+1]; //выделение памяти для массива
   b = new float[K+1]; //выделение памяти для массива
   x = new float[N]; //выделение памяти для массива
   y = new float[N]; //выделение памяти для массива
   sums = new float*[K+1]; //выделение памяти для массива sums
 
   if(x==NULL || y==NULL || a==NULL || sums==NULL)  //проверка на ошибки выделения памяти
   {
      printf("\nNot enough memory to allocate. N=%d, K=%d\n", N, K);  //вывод ошибки
      exit(-1);
   }
 
   for(int i = 0; i < K + 1; i++)
   {
      sums[i] = new float[K + 1];   // выделение памяти для каждого элемента массива sums. Теперь sums это матрица
      if(sums[i] == NULL)  //проверка на ошибки
      {
         printf("\nNot enough memory to allocate for %d equations.\n", K+1);
      }
   }
 
   for(int i = 0; i < K + 1; i++)  //цикл для инициализации массивов нулями
   {
      a[i]=0;
      b[i]=0;
      for(int j=0; j < K + 1; j++)
      {
         sums[i][j] = 0;
      }
   }
 
   for(int k = 0; k < N; k++)   //цикл для инициализации массивов нулями
   {
      x[k]=0;
      y[k]=0;
   }
}
 
void readmatrix()   //Функция для чтения из файла
{
   for(int k = 0; k < N; k++)  //чтение из файла
   {
       fscanf(InFile, "%f", &x[k]);  //чтение х
       fscanf(InFile, "%f", &y[k]);  //чтение у
   }
   
   for(int i = 0; i < K + 1; i++)  //заполнение матрицы sums
   {
      for(int j = 0; j < K + 1; j++)
      {
         sums[i][j] = 0;
         for(int k = 0; k < N; k++)
         {
            sums[i][j] += pow(x[k], i + j);  // sums[i][j] = sums[i][j] + x[k]^(i+j)
         }
       }
   }
   
   for(int i = 0; i < K + 1; i++)  //заполнение массива правых частей
   {
      for(int k = 0; k < N; k++)
      {
         b[i] += pow(x[k], i) * y[k];
      }
   }
}
 
void printresult()  //функция вывода результатов
{
   printf("\n");
   for(int i = 0; i < K + 1; i++)
   {
       printf("a[%d] = %f\n", i, a[i]);
   }
}
 
void diagonal()  //Функция, убирающая нули с главной диагонали.
{
   float temp = 0;
 
   for(int i = 0; i < K + 1; i++)
   {
      if( sums[i][i] == 0)
      {
         for(int j=0; j < K + 1; j++)
         {
            if(j == i) 
               continue;
            if(sums[j][i] != 0 && sums[i][j] != 0)
            {
               for(int k=0; k < K + 1; k++)
               {
                  temp = sums[j][k];
                  sums[j][k] = sums[i][k];
                  sums[i][k] = temp;
               }
               temp = b[j];
               b[j] = b[i];
               b[i] = temp;
               break;
            }
         }
      }
   }
}
 
void cls() //Функция очистки экрана
{
   for(int i=0; i<25; i++) 
      printf("\n");
}
 
 
void main()
{
       cls();
 
   do
   {
      printf("\nInput filename: ");
      scanf("%s", filename);                       //считывание имя файла с экрана(ручной ввод)
 
      InFile = fopen(filename, "rt");              //открытие файла
   }while(InFile == NULL);                         //пока открытие неудачно
 
   count_num_lines();                      // чтение кол-ва начальных точек
   printf("\nNumber of points: N=%d", N);  //выыод на экран
 
   do
   {
      printf("\nInput power of approximation polinom K<N: ");
      scanf("%d", &K);                                          //чтение степени полинома с экрана
   } while(K >= N);                                             //пока К меньше или равно N
 
   allocmatrix(); //выделение памяти
 
   rewind(InFile);                //помещаем указатель в файле в начало
   readmatrix();                  //читаем из файла 
 
   diagonal();   //убираем нули с диагонали
 
   fclose(InFile);   //закрываем файл
 
  //Основная часть программы
 
   for(int k = 0; k < K + 1; k++)
   {
      for(int i = k + 1; i < K + 1; i++)
      {
         if(sums[k][k] == 0)
         {
            printf("\nSolution is not exist.\n");
            return;
         }
 
         float M = sums[i][k] / sums[k][k];
         for(int j = k; j < K + 1; j++)
         {
            sums[i][j] -= M * sums[k][j];
         }
         b[i] -= M * b[k];
      }
   }
 
 
   for(int i = (K + 1) - 1; i >= 0; i--)
   {
      float s = 0;
      for(int j = i; j < K + 1; j++)
      {
         s = s + sums[i][j] * a[j];
      }
      a[i] = (b[i] - s) / sums[i][i];
   }
 
   printresult();  //вывод результата
   freematrix();  //очистка памяти
   _getch();
}
 Комментарий модератора 
Используйте теги форматирования кода! Не цитирования, форматирования.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru