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

Гаусс для коллекции - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ malloc - cannot convert from 'void *' to 'double *' http://www.cyberforum.ru/cpp-beginners/thread104777.html
Здравствуйте. У меня тут текст программы для дискретного преобразования Фурье. Проблему составляют строчки, где есть комменты . Я смотрел в описании функции, вроде всё правильно.Но MS Visual St 2008 c++ упрямо выдает ошибку:cannot convert from 'void *' to 'double *' В чём может быть причина? int DFT(int dir,int m,double *x1,double *y1) { long i,k; double arg; double cosarg,sinarg;...
C++ Перегрузка оператора вывода на консоль для шаблонного класса Следующий код компилируется, но не линкуется: #include <iostream> using namespace std; template <typename T> class A { public: A() : elem (0) {} http://www.cyberforum.ru/cpp-beginners/thread104761.html
C++ Структуры, массивы, сортировка
Люди Help! Уже второй день сижу над задачей и не могу понять в чём проблема. Задача такая: 1) Описать структуру с именем TRAIN, содержащую следующие поля: -название пункта назначения -номер поезда -время отправления 2) Написать программу, выполняющую следующие действия: -ввод с клавиатуры данных в массив, состоящий из 9-ти структур типа TRAIN, записи должны быть упорядочены по номерам...
Создать класс время с полями: час(0-23), минута (0-59), секунда (0-59) C++
Создать класс время с полями: час(0-23), минута (0-59), секунда (0-59). В классе описать конструктор, а также функции-члены установки времени, получения часа, минуты и секунды, а также две функции вывода на экран: вывода по шаблону "16 часов 18 минут 3 секунды" и "4 p.m 18 минут 3 секунды". Функции-члены установки полей класса должны проверять корректность задаваемых параметров. Если Вы...
C++ Файл. Ввод/вывод. http://www.cyberforum.ru/cpp-beginners/thread104709.html
нуждаюсь в вашей помощи. создать входной файл из нескольки строк символов. создать выходной файл в который записать 3 строчку с входного и защитить от дальнейшей записи(тут я полагаю поставить атрибут только для чтения). Исходный файл стереть.
C++ Реализовать класс Список (List) для хранения строк (максимальная длина строки – 20 символов). начала изучать си++. классы. вот написала прогу, а там видать где-то ошибка, я её найти не могу...и программа не работает. если вас не затруднит, то помогите мне в отыскании этой ошибки. тема:Создание классов на языке С++ условие: Реализовать класс Список (List) для хранения строк (максимальная длина строки – 20 символов). Список значений должен быть реализован в виде списка связанного... подробнее

Показать сообщение отдельно
vet
 Аватар для vet
175 / 175 / 13
Регистрация: 08.04.2009
Сообщений: 1,309
22.03.2010, 14:45     Гаусс для коллекции
taras atavin, код немного был с помарками и немного глючил =))), я вроде исправил,но щас другая проблема, стал корни считать как - то в разнобой, вот пример(но код оч хороший, нули на глав диаг и те "пережевывает", что не во всех реализациях Гаусса бывает):
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
#include <iostream>
#include <cmath>
#include <ctime>
 
using namespace std;
 
void Gauss(double *a, double *b, double *x,int n) // Г* - Г¬Г*òðèöГ* êîýôôèöèåГ*òîâ, ñòðîêè ïîäðÿä, b - ñâîáîäГ*ûå ÷ëåГ*Г», x - ðåøåГ*ГЁГҐ.
{
 int i,j,k,t;
 double kof,s;
 double temp;
 for (i=n-1; i>0; --i) // Г–ГЁГЄГ« ГЇГ® ГіГ°Г*ГўГ*ГҐГ*ГЁГїГ¬ - âû÷èòГ*åìûì
 {
  for (t=i, j=i-1; j>=0; --j) //Èùåì ñòðîêó Г± Г¬Г*ГЄГ±ГЁГ¬Г*ëüГ*ûì Гў i-òîì ñòîëáöå êîýôôèöèåГ*òîì.
  {
   if (fabs(a[i*n+t])<fabs(a[i*n+j]))
   {
    t=j;
   }
  }
  if (a[i*n+t]==0.0)
  {
   return;
  }
  if (t!=i) // Åñëè Г®Г*Г* Г*ГҐ i-ГІГ*Гї
  {
   for (k=n-1; k>=0; --k) // ГЊГҐГ*ГїГҐГ¬ ГҐВё Г± i-òîé
   {
    temp=a[k*n+t];
    a[k*n+t]=a[k*n+i];
    a[k*n+i]=temp;
   }
  }
  for (j=i-1; j>=0; --j) // Г–ГЁГЄГ« ГЇo ГіГ°Г*ГўГ*ГҐГ*ГЁГїГ¬-óìåГ*ГјГёГ*åìûì
  {
   kof=a[i+j*n]/a[i*n+i]; // kof=a[j][i]/a[i][i];
   for (a[i+j*n]=0.0, b[j]-=b[i]*kof, k=i-1; k>=0; --k) // Г–ГЁГЄГ« ГЇГ® ñòîëáöГ*Г¬
   {
    a[k+j*n]-=a[k+i*n]*kof; // a[k][j]-=a[k][i]*kof
   }
  }
 }
 x=new double [n];
 if (x)
 {
  for (i=0; i<n; ++i)
  {
   for (s=0.0, j=i-1; j>=0; --j)
   {
    s+=a[j+i*n]*x[j]; //s+=a[j][i]*x[j]
   }
   x[i]=(b[i]-s)/a[i*n+i]; // x[i]=(b[i]-s)/a[i][i];
   //cout << x[i] << "\n";
  }
 }
 cout << "\n";
 for (i=0; i<n; ++i)
cout << "x " << x[i] << endl;
}
 
 
main()
{
srand((unsigned)time(NULL));
      int n = 6;
     double gauss2[6] ={1,5,3,7,6,3};
      double M[36]={0, 0, 1,0, 0, 0,0, 0, 0, -1, 0, 0,0, 8, 0, 0, 0, 4,0, 0, 0, 0, 6,0, 0, 6, 0, 0, 0, 0,1, 0, 0, 0, 0, 0 };
        
      double *y = new double[n];
 
    /*  for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
                {
                    //cin >> M[i+j*n];
                     M[i+j*n] = rand()/100;
//cout << "gauss1["<< i << "][" << j << "]=";
//cin >> gauss1[i][j];
                }
        }
*/
for(int i=0; i<n; i++)
        {
            for(int j=0; j<n; j++)
                {
                     cout << M[i*n+j] << "  ";
                }
                cout << gauss2[i] << endl;
        }   
      Gauss(M,gauss2,y,n);
       cin.get();
}
Ответ такой: 1, -5, -1.25, 1.17, 1, 3
А должен быть: 3, 1, 1, -5, 1.17, -1.25 (подстановкой в ур-ния проверял)
Весь день седня долбаюсь никак не хочет в нормальном порядке корни искать =(((
Может есть идеи по этому поводу???

Добавлено через 23 часа 56 минут
Может есть мысли по этому поводу???
 
Текущее время: 14:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru