Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [Delphi] Матрица. Сумма диагонадей


Автор: DeeCee 16.12.2007, 22:26
Дана матрица размера n*n. Сосчитать сумму элементов главной диагонали всех матриц и найти их определители.

Автор: Treod 6.1.2008, 17:51

Цитата

Сосчитать сумму элементов главной диагонали всех матриц и найти их определители

Как понять? Матрица же вроде одна....

Автор: Burka 7.1.2008, 01:10
Код

Var S:integer;
begin
i:=0;
For i:=1 to n
 Inc(s,Matrix1[i]);
end;

а потом складывый S всех матриц..

а что такое определители я хз)

Автор: Treod 7.1.2008, 15:17
Вот код нахождения определителя:

Код


#include "stdafx.h"
#include <iostream>
#include <math.h>
using namespace std;


int _tmain(int argc, _TCHAR* argv[])
{
    double *a, k, r, max;
    int i, j ,q, n, j_max;

    cout << "Input n: ";
    cin >> n;
    a=new double [n*n];
    for (i=0; i<n; i++){
        for (j=0; j<n; j++){
            cout << "Input a[" << i << "][" << j << "]=";
            cin >> a[i*n+j];
        }
    }
    for (i=0; i<n; i++){
        for (j=0; j<n; j++)
            cout << a[i*n+j] << " ";
        cout << endl;
    }

    for (i=0; i<n-1; i++){
        // Ищем максимальный по 
        // модулю элемент в столбце
        max=a[i*n+i];
        j_max=i;
        for (j=i+1; j<n; j++){
            if (fabs(a[j*n+i])>fabs(max)){
                max=a[j*n+i];
                j_max=j;
            }
        }
        // Меняем строки местами
        if (j_max!=i){
            for (j=0; j<n; j++){
                r=a[j_max*n+j];
                a[j_max*n+j]=a[i*n+j];
                a[i*n+j]=-r;
            }
        }
        /*
        Если элемент главной диагонали не равен нулю,
        используя элементарные преобразования,
        обнуляем все элементы j-ого столбца,
        начиная с i+1 элемента.
        */
        if (a[i*n+i]!=0){
            for (j=i+1; j<n; j++){
                k=a[j*n+i]/a[i*n+i];
                for (q=i; q<n; q++)
                    a[j*n+q]-=k*a[i*n+q];
            }
        }
        else{
            cout << "Net resh!";
            return 0;
        }
    }
    if (a[(n-1)*n+(n-1)]==0){
        cout << "Net resh!";
        return 0;
    }

    k=1;
    for (i=0; i<n; i++)
        k=k*a[i*n+i];
    cout << endl;
    cout << "det= " << k << endl;

    delete [] a;
    cin >> i;
    return 0;
}



Автор: THandle 7.1.2008, 15:19
Treod, так ведь надо на Delphi smile 

Автор: Treod 7.1.2008, 18:11

Цитата

Treod, так ведь надо на Delphi 


Сорри, не обратил внимания. Может найдется кто перепишет эту прогу на делфи... 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)