|
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 5
|
|
Вычисление определителя15.05.2016, 11:19. Показов 2489. Ответов 5
Метки нет (Все метки)
Здравствуйте, дорогие форумчане!
Помогите, пожалуйста, отладить программу вычисления определителя на Cи++ Текст программы: #include "stdafx.h" #include <stdlib.h> #include <ctime> #include <iostream> #include <stdio.h> //Здесь находится объявление функции fopen и объявлен тип структуры FILE #include <time.h> using namespace std; #define N 20 int main() { FILE *f1; f1 = fopen("tests.txt", "r"); setlocale(LC_CTYPE, "rus"); int A [N][N]; // В массив A записываем матрицу int n; fscanf (f1, "%d", &n); cout <<n << endl;; for (int i = 0; i<n; i++) { for (int j = 0; j<n; j++) { fscanf (f1, "%d", &A[i][j]); printf ("%3d", A[i][j]); //cout << A[i][j] << " "; } cout << endl; } // Теперь в массиве A[][] записана матрица из файла // ВЫЧИСЛЕНИЕ ОПРЕДЕЛИТЕЛЯ int i = 1; int r; int p = 1; double eps; int X; //X - значение определителя r = n; eps = 0.00001; while (i<=r) {//Выбор ведущего элемента A[v][i] int v=i; for (int j = i+1; j <= n; j++) if (abs (A[j][i])>abs(A[v][i])) v = j; if (abs (A[v][i]) < eps) r = i-1; //ОШИБКА????? д.б (n-1)??? else {//перестановка строк if (v!=i) {p = -p; for (int j = i; j<=n; j++) {int z = A[i][j]; A[i][j] = A [v][j]; A[v][j] = z;} } //вычитание строк матрицы //Здесь нет ошибки? Получается, что элемент делится на диагональный, равный 0 for (int k = i+1; k<=n; k++) {int c = A[k][i]/A[i][i]; for (int j = i; j<=n; j++) A[k][j] = A[k][j] - c*A[i][j]; } i++; } } // вычисление определителя if (r<n) X = 0; //Если ранг r меньше количества строк, то система имеет бесконечно много решений else {X = p*A[1][1]; for (int i = 2; i<=n; i++) X*=A[i][i]; //Определитель = произведению элементов, стоящих на диагонали в матрице A } //Вывод определителя cout << "Определитель равен = " << X << endl; fclose(f1); return 0; } Конец программы. При введении матрицы 4 (это размерность) 1 1 1 1 0 2 2 2 0 0 3 3 7 7 7 11 определитель должен получаться 24, а меня программа выдает совершенно дикое число - 1546188240 Также пробовала протестировать программу вручную (с бумагой и ручкой). Во-первых, получаются нули на диагонали (но такого не должно быть), т.к. определитель автоматически равен 0 в этом случае. И во-вторых, в предпоследнем цикле получается c =2/0. Но как получилось деление на 0? Буду рада за оказание любой помощи!
0
|
|
| 15.05.2016, 11:19 | |
|
Ответы с готовыми решениями:
5
Вычисление определителя матрицы N*N Вычисление следа матрицы и определителя Вычисление определителя Методом Гаусса |
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
| 15.05.2016, 11:50 | |
|
lena-emrikh, у тебя жуткие проблемы с индексацией в твоей матрице.
Матрица "n на n", индексация начинает с нуля, но у тебя повсеместно в циклах индекс топает до n включительно.
1
|
|
|
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 5
|
|
| 15.05.2016, 12:03 [ТС] | |
|
Спасибо, исправила при сканировании индексацию в цикле (i<=n и j<=n).
Теперь лучше, но все равно неверно считает определитель. Так он получается равным -42, а не 24
0
|
|
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|
| 15.05.2016, 13:04 | |
|
lena-emrikh, а как исправила?
Код, заключенный в теги C++, пожалуйста.
1
|
|
|
0 / 0 / 0
Регистрация: 15.05.2016
Сообщений: 5
|
|
| 15.05.2016, 13:08 [ТС] | |
|
Вот так!
Кликните здесь для просмотра всего текста
int n;
fscanf (f1, "%d", &n); cout <<n << endl;; for (int i = 1; i<=n; i++) { for (int j = 1; j<=n; j++) { fscanf (f1, "%d", &A[i][j]); printf ("%3d", A[i][j]); } cout << endl; } Простите, я новичок, не знаю еще, как управлять сайтом. Но очень постараюсь сделать, если Вы объясните, как сделать текст, заключенный в теги
0
|
|
|
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
|
|||||||
| 15.05.2016, 13:38 | |||||||
Сообщение было отмечено lena-emrikh как решение
РешениеВсе, что будет находиться между ними будет трактоваться как код C++.
1
|
|||||||
| 15.05.2016, 13:38 | |
|
Помогаю со студенческими работами здесь
6
Функция класса(вычисление определителя произвольной матрицы) работает не правильно(постоянно определитель 0) Нахождение определителя Подстроение алгоритма определителя
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога
SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
|
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога
Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip"
Извлеките архив и вы увидите. . .
|
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога
Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д.
Сборка примера
Скачайте. . .
|
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net
REST сервисы временно не работают, только через Web.
Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
|
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
|
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|