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

доделать программу для решения СЛАУ - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Написать функцию для удаления строки из двумерного массива http://www.cyberforum.ru/cpp-beginners/thread756810.html
Написать функцию для удаления строки из двумерного массива. Оставшиеся строки должны быть расположены плотно, недостающие элементы заменяются 0. С помощью разработанных функций исключить из массива строки с номерами от А до В.
C++ Перегрузка потокового ввода/вывода Вот сама перегрузка ostream& operator<< (ostream& out, Poli& outstream) { out<<"Степень полинома="<<outstream.n<<endl; for(int i=0;i<outstream.n;i++){ out<<"x="<<outstream.x<<"; "; } out<<endl; for(int i=0;i<outstream.n;i++){ out<<"k="<<outstream.k<<"; "; } http://www.cyberforum.ru/cpp-beginners/thread756801.html
C++ While do. Вычислить
Косяк в условиях,помогите исправить,задание я прикрепил если нужно #include<iostream> #include <math.h> using namespace std; int main() { setlocale (LC_ALL,".ACP"); double k,E,m,L,d0,d ; const double Pi=3.14;
Точки пересечения прямой и функции с множеством точек C++
Как найти количество пересечений прямой y с множеством точек (x,y)?
C++ Процедуры и Функции. Найти сумму элементов массива Т, имеющих четные порядковые номера http://www.cyberforum.ru/cpp-beginners/thread756791.html
Программу нужно сделать с процедурами и функциями Вот задание само: Дан произвольный массив Т размерности n. Найти сумму элементов массива Т, имеющих четные порядковые номера, а также сумму элементов массива Т, имеющих нечетные порядковые номера. Исходные данные взять самостоятельно. В функциях и процедурах плаваю ваще( #include <iostream> #include <cstdlib> #include <ctime> using...
C++ В заданном массиве натуральных чисел заменить все числа на такие числа, которые получаться из исходного записью его цифр в обратном порядке Ребят выручайте не могу зачет сдать из-за этой лабы =( не могу сделать. надо сделать через тип данных вектор. " В заданном массиве натуральных чисел { A1, A2, .... An } заменить все числа на такие числа, которые получаться из исходного записью его цифр в обратном порядке. Например для числа 156 на 651. " Как препод объяснил надо каждое число в массиве перевернуть на обратное ему Надеюсь на... подробнее

Показать сообщение отдельно
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
14.01.2013, 22:33     доделать программу для решения СЛАУ
Мне кажется, что так код еще менее читаем.
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
#include <cmath>
#include <iostream>
#include <iomanip>
 
double **createExtendexMatrix(int numberOfEquations) {
  double **result = new double*[numberOfEquations];
  for (int i = 0; i < numberOfEquations; ++i) {
    result[i] = new double[numberOfEquations + 1];
  }
  return result;
}
 
double **copyExtendexMatrix(double **matrix, int numberOfEquations) {
  double **result = new double*[numberOfEquations];
  for (int i = 0; i < numberOfEquations; ++i) {
    result[i] = new double[numberOfEquations + 1];
    for (int j = 0; j < numberOfEquations + 1; ++j) {
      result[i][j] = matrix[i][j];
    }
  }
  return result;
}
 
void destroyExtendedMatrix(double **matrix, int numberOfEquations) {
  for (int i = 0; i < numberOfEquations; ++i)
    delete[] matrix[i];
  delete[] matrix;
}
 
void printRow(double *row, int size) {
  for (int i = 0; i < size; ++i)
    std::cout << std::fixed << std::setw(10) << std::setprecision(4) << row[i];
}
 
void printExtendedMatrix(double **matrix, int numberOfEquations) {
  for (int i = 0; i < numberOfEquations; ++i) {
    printRow(matrix[i], numberOfEquations + 1);
    std::cout << std::endl;
  }
}
 
// ïîèñê ñòðîêè äëÿ Г§Г*ìåГ*Г»
int findLineToSwap(double **matrix, int numberOfEquations, int start) {
  double maximum = fabs(matrix[start][start]);
  int result = start;
  for (int k = start; k < numberOfEquations; ++k) {
    if (fabs(matrix[start][k]) > maximum) {
      maximum = fabs(matrix[start][k]);
      result = k;
    }
  }
  return result;
}
 
// ГІГ°Г*Г*ñôîðìГ*öèÿ ГЈГ*ГіГ±Г±Г*
double **transformExtendedMatrix(double **matrix, int numberOfEquations,
  double **result) {
  if (matrix != result) {
    for (int i = 0; i < numberOfEquations; ++i)
      for (int j = 0; j < numberOfEquations + 1; ++j)
        result[i][j] = matrix[i][j];
  }
 
  for (int j = 0; j < numberOfEquations - 1; ++j) {
    // êîððåêöèÿ îøèáêè ГЇГіГІГҐГ¬ ïåðåñòГ*Г*îâêè ñòðîê
    int swapLine = findLineToSwap(result, numberOfEquations, j);
    if (swapLine != j) {
      double *tmp = result[j];
      result[j] = result[swapLine];
      result[swapLine] = tmp;      
    }
    // âû÷èòГ*Г*ГЁГҐ ñòðîê
    for (int i = j + 1; i < numberOfEquations; ++i) {
      double multiplier = result[i][j] / result[j][j];
      for (int k = 0; k < numberOfEquations + 1; ++k) {
        result[i][k] -= multiplier * result[j][k];
      }
    }
  }
 
  return result;  
}
 
double *getResultsFromTransformedMatrix(double **transformedMatrix,
  int numberOfEquations, double *results) {
  double **matrix = copyExtendexMatrix(transformedMatrix, numberOfEquations);
  
  for (int i = numberOfEquations - 1; i > -1; --i) {
    results[i] = matrix[i][numberOfEquations] /= matrix[i][i];
    matrix[i][i] = 1;
    for (int j = i - 1; j > -1; --j) {
      double multiplier = matrix[j][i] / matrix[i][i];
      for (int k = 0; k < numberOfEquations + 1; ++k)
        matrix[j][k] -= multiplier * matrix[i][k];
    }
  }
  
  destroyExtendedMatrix(matrix, numberOfEquations);
  return results;
}
 
int main(int argc, char *argv[]) {
  int numberOfEquations = 3;
  double **matrix = createExtendexMatrix(numberOfEquations);
  matrix[0][0] = 1; matrix[0][1] = -2; matrix[0][2] = 1; matrix[0][3] = 5.7;  
  matrix[1][0] = 3.1; matrix[1][1] = 0; matrix[1][2] = -1; matrix[1][3] = 1.8;  
  matrix[2][0] = 0; matrix[2][1] = 1; matrix[2][2] = -3.4; matrix[2][3] = -3.3;  
 
  double **transformedMatrix = createExtendexMatrix(numberOfEquations);
  std::cout << "EXTENDED MATRIX" << std::endl;
  printExtendedMatrix(matrix, numberOfEquations);
 
  transformedMatrix = transformExtendedMatrix(matrix, numberOfEquations, transformedMatrix);
  std::cout << "TRANSFORMED MATRIX" << std::endl;
  printExtendedMatrix(transformedMatrix, numberOfEquations);
 
  double *results = getResultsFromTransformedMatrix(transformedMatrix,
    numberOfEquations, new double[numberOfEquations]);;
  std::cout << "RESULTS" << std::endl;
  printRow(results, numberOfEquations);
 
  for (int i = 0; i < numberOfEquations; ++i) {
    for (int j = 0; j < numberOfEquations; ++j) {
      matrix[i][j] *= results[j];
    }
  }
  std::cout << std::endl << "CHECK MATRIX" << std::endl;
  printExtendedMatrix(matrix, numberOfEquations);
 
  delete [] results;
  destroyExtendedMatrix(matrix, numberOfEquations);
  destroyExtendedMatrix(transformedMatrix, numberOfEquations);
 
  std::cin.peek();
  return 0;
}

Не по теме:

Цитата Сообщение от Максим1827
Спасибо!ты сделай, что можешь, я потом отблагодарю!
А я такой сижу и весь верю, прямо весь такой верю.

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