Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.04.2014, 17:50   #1
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
Восклицание правило Саррюса (правило треугольников) C++ или Delphi

привет, всем активным участникам форума. помогите, пожалуйста, написать программу на языке C++ или Delphi .

задание:
нужно написать программу, чтобы она решала матрицу по правилу Саррюса (правило треугольников)
вот картинка этого правила:
k3_image001.jpg k3_image002.jpg
вот так нужно, чтобы считалась матрица:
=(a11*a22*a33)+(a12*a23*a31)+(a13*a 21*a32)-(a13*a22*a31)-(a11*a32*a23)-(a12*a21*a33)

на форме компонент StrinGrid в который нужно вводить матрицу и кнопка для её решения (чтобы выводилось решение полностью, а не только ответ).

всем огромное спасибо за помощь и внимание!!!
carrie bradshaw вне форума Ответить с цитированием
Старый 27.04.2014, 23:42   #2
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
По умолчанию

Если кто то может помочь, то напишите, пожалуйста!
carrie bradshaw вне форума Ответить с цитированием
Старый 28.04.2014, 21:50   #3
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
По умолчанию

есть программа на Pascal, возможно кто-то знает как это можно реализовать на Delphi или C++

Код:
program zd;
Const n=3; m=3;

Type
matr  = array[1..n,1..m] of integer;

Const
A: matr = ( ( 2, 10, 1 ),
            ( 3, 4, -1 ),
            ( 1, 6, 2 )
           );
Var
S:Real;
Begin
S:=(   ( ( A[1,1] )*( A[2,2] )*( A[3,3] ) )+
       ( ( A[1,2] )*( A[2,3] )*( A[3,1] ) )+
       ( ( A[1,3] )*( A[2,1] )*( A[3,2] ) )-
       ( ( A[1,3] )*( A[2,2] )*( A[3,1] ) )-
       ( ( A[1,1] )*( A[3,2] )*( A[2,3] ) )-
       ( ( A[1,2] )*( A[2,1] )*( A[3,3] ) )  );

Writeln('( A[1,1] )*( A[2,2] )*( A[3,3] ) + ( A[1,2] )*( A[2,3] )*( A[3,1] ) + ( A[1,3] )*( A[2,1] )*( A[3,2] ) - ( A[1,3] )*( A[2,2] )*( A[3,1] ) - ( A[1,1] )*( A[3,2] )*( A[2,3] ) - ( A[1,2] )*( A[2,1] )*( A[3,3] ) = ',
 A[1,1],'*',A[2,2],'*',A[3,3],'+',A[1,2],'*',A[2,3],'*',A[3,1],'+',A[1,3],'*',A[2,1],'*',A[3,2],'-',A[1,3],'*',A[2,2],'*',A[3,1],'-',A[1,1],'*',A[3,2],'*',A[2,3],'-',A[1,2],'*',A[2,1],'*',A[3,3],'=', S:0,4 );
END.
надеюсь на помощь!
carrie bradshaw вне форума Ответить с цитированием
Старый 28.04.2014, 22:08   #4
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
По умолчанию

вот интерфейс программы:
123.JPG

всем огромное спасибо за внимание и надеюсь за помощь!
carrie bradshaw вне форума Ответить с цитированием
Старый 28.04.2014, 23:04   #5
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
По умолчанию

вот программа на C++
Код:
#pragma hdrstop
#pragma argsused

#include <tchar.h>
#include <stdio.h>
#include <iostream>
#include<cstdio>
using std::cout;
using std::cin;
using std::endl;

void qwadMatrixPrint(int* *pM, int n)
{
    for (int str=0;str<n;str++)
	{
        for (int col=0;col<n;col++)
        {
			std::cout<<pM[col][str]<<"\t";
        }
		std::cout<<"\n";
	}
}
//функция вывода произвольной матрицы nxn в файл
void MatrixMovF(int n)
{
	for (int str=0;str<n;str++)
	{
        for (int col=0;col<n;col++)
		{
			std::cout<<((rand() % 100)*((rand() % 3)-1))<<("\t");
		}
		std::cout<<"\n";
	}
}
//функция нахождения определителя матрицы по правилу треугольника
int determMatrix(int* *pM, int n,int deep=0)
{
    if(n==2)
		return pM[0][0+deep]*pM[1][1+deep]-pM[0][1+deep]*pM[1][0+deep];

	int znak= 1;//переменная определяющая знак алгебраического дополнения Aij
//  ( Aij=(-1)^(i+j)*Mij где Mij-минор;минор произвольного элемента квадратной
//  матрицы Pij  равен определителю матрицы, полученной из исходной
//вычеркиванием i-ой строки и j-го столбца.)
	int sum_det= 0;

    for(int i= 0; i< n; i++)
    {
		int* *pI= new int* [n-1];//создание нового масива указатей
        //указывающих только на столбцы минора(верхние ненужные строки(ка)
        //отсекаються за щет переменной deep(глубина рекурсии))

		//создание очередного минора
            int p=0;
        for(int ii= 0; ii< n; ii++ )
        {
			if(ii==i)continue;

            pI[p]=pM[ii];
            p++;
		}

        sum_det+= znak*pM[i][deep]*determMatrix(pI,(n-1),(deep+1));//переменная deep(глубина рекурсии)
        //указывает первую строку с которой начинаетья данный минор

        delete [] pI;//освобождение памяти
        znak*= -1;

    }
	return sum_det;
}


int main(int argc, char * argv[])
{
    setlocale(LC_ALL, "rus");

    int n=0;
    cout<<"Введите порядок матрицы : "<<endl;
	cin>>n;

    freopen("test.in", "w", stdout);//открыть файл test.in для записи
                                    //связать с потоком stdout(вывода)
    MatrixMovF(n);
	freopen("test.in", "r", stdin);//открыть файл test.in для чтения
                                    //связать с потоком stdin (ввода)

    int* *pMat=new int* [n];//pMat присваеваеться указатель на масив указателей на столбцы матрицы
    //Инициализация элементов матрицы
	for(int col=0; col<n; col++) pMat[col]=new int[n];


        for (int str=0;str<n;str++)
        {
			for (int col=0;col<n;col++)
            {
                cin>>pMat[col][str];//инициализация элемента столбца матрицы
                                    //прочитаным из файла test.in значением
			}
        }
    freopen("test.out", "w", stdout);//открыть файл test.in для записи
									//связать с потоком stdout(вывода)

    qwadMatrixPrint(pMat, n);
	int determ =determMatrix(pMat, n);
    cout<<"Определитель матрицы "<<n<<"x"<<n<<endl;
    cout<<"равен "<<determ<<endl;



//освобождение памяти
for (int i=0;i<n;i++)
    {
        delete [] pMat[i];
	}
    delete [] pMat;

    return 0;
}
ошибка в строчке:
Код:
		std::cout<<((rand() % 100)*((rand() % 3)-1))<<("\t");
carrie bradshaw вне форума Ответить с цитированием
Старый 28.04.2014, 23:33   #6
reflexx
Пользователь
 
Регистрация: 27.04.2014
Сообщений: 21
По умолчанию

На Delphi 7
Вложения
Тип файла: zip Project.zip (6.5 Кб, 19 просмотров)
reflexx вне форума Ответить с цитированием
Старый 28.04.2014, 23:36   #7
carrie bradshaw
Форумчанин
 
Регистрация: 25.01.2014
Сообщений: 105
По умолчанию

reflexx, огромное вам спасибо!
carrie bradshaw вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сработает ли правило? BelleD Помощь студентам 2 20.12.2012 01:11
футбольное правило artush1984 Свободное общение 14 29.05.2012 16:50
Правило Лопиталя... Sota Свободное общение 3 03.05.2008 12:30
правило дорожного движение Алиба Фриланс 4 05.12.2007 01:06