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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.03.2010, 16:51   #1
Sparky
Участник клуба
 
Аватар для Sparky
 
Регистрация: 15.05.2009
Сообщений: 1,222
По умолчанию С паскаля на c++

Добрый вечер, время прижимает.Нужна написать программу вычисляющую определитель 4 порядка на с++. Взяла прогу на паскале
Код:
const n=4;
type matr=array[1..n,1..n] of longint;
var a,b:matr;
i,j,dt:longint;
procedure PrintMatr(m:matr;n:integer);
var i,j:integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
write(m[i,j]:3);
writeln;
end;
end;
procedure GetMatr(a:matr; var b:matr; m,i,j:integer);
var ki,kj,di,dj:integer;
begin
di:=0;
for ki:=1 to m-1 do
begin
if (ki=i) then di:=1;
dj:=0;
for kj:=1 to m-1 do
begin
if (kj=j) then dj:=1;
b[ki,kj]:=a[ki+di,kj+dj];
end;
end;
end;
Function Determinant(a:matr;n:integer):longint;
var i,j,d,k:longint;
b:matr;
begin
d:=0; k:=1;
if (n<1) then
begin
writeln('Determinant: Cann''t run. N=',n); halt;
end;
if (n=1)
then d:=a[1,1]
else if (n=2)
then d:=a[1,1]*a[2,2]-a[2,1]*a[1,2]
else { n>2 }
for i:=1 to n do
begin
GetMatr(a,b,n,i,1);
d:=d+k*a[i,1]*Determinant(b,n-1);
k:=-k;
end;
Determinant:=d;
end;
begin
randomize;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=random(5);
PrintMatr(a,n);
dt:=Determinant(a,n);
writeln('=========');
writeln('Determinant=',dt);
end.
Попробовала переписать
Код:
#include "stdafx.h"
#include <iostream>
#include <windows.h>


/*======================================================
													описание данных
==========================================================*/
	const int n=3;	//размерность массива
	int mtx[n][n];	//матрица
	int temp_matrix[n][n];
	int i,j;
	int det_res;	//определитель

void printMtx(int matrix[n][n])	//процедура печати матрицы (матрица)
{
	for (i=0; i<n; i++)
	{
		for (j=0; j<n; j++)
			std::cout<<matrix[i][j]<<" ";
		std::cout<<"\n"; 
	}
}

void get_matr(int matrix[n][n],int kolvo,int i,int j)	//процедура вычеркивания строки и столбца
{
	int ki,kj,di,dj;
	di=0;
	for (ki=0;ki<kolvo-1;ki++)
	{
		if (ki==i) di=1;
		dj=0;
		for (kj=0;kj<kolvo-1;kj++)
		{
			if (kj==j) dj=1;
			temp_matrix[ki][kj]=matrix[ki+di][kj+dj];
		}
	}
}

int det(int matrix[n][n], int count)	//функция вычисления определителя(матрица,размерность)
{
	int temp=0;	//временная переменная для хранения определителя
	int k=1;	//степень
/*================================================
													вычисление определителей
================================================*/
	if(count<1){
		std::cout<<"not run";
                return 0;
        }
	else if (count==1)
		temp=matrix[0][0];
	else if (count==2)
		temp=matrix[0][0]*matrix[1][1]-matrix[1][0]*matrix[0][1];
	else
	{
		for(i=0;i<count+1;i++)
		{
			get_matr(matrix,count,i,0);
			
			temp=temp+k*matrix[i][0]*det(temp_matrix,count-1);
			k=-k;
		}
	}
	return temp;
}

void main()
{	
/*==========================================================
													инициализация элементов матрицы
========================================================================*/
	srand(17);
	for (i=0;i<n;i++)
		for(j=0;j<n;j++)
			mtx[i][j]=(int)(rand()%5);

	printMtx(mtx);
	
/*====================================
													вычисление определителя
=======================================*/
	det_res=det(mtx,n);
	std::cout<< "Determinant = " << det_res << std::endl;
	getchar();		
}
Но ответы при одинаковых данных не сходятся, ошибка в проге на c++, помогите пожалуйста исправить
Единственное, что ограничивает полет мысли программиста-компилятор

Последний раз редактировалось Sparky; 09.03.2010 в 17:17.
Sparky вне форума Ответить с цитированием
Старый 09.03.2010, 16:56   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

еще раз внимательней пройдись по строкам и кодируй их в строгом соответствии с тем, что на паскале, также используй одинаковые переменные, быстрее можно найти место, где неправильно переписано

в принципе код совсем несложный, не понимаю почему у тебя что-то не так получилось закодить
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]
RUSt88 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
от паскаля к с++ WOLFak Обсуждение статей 11 27.01.2010 00:18
из Паскаля в С++ Lees27 Общие вопросы C/C++ 1 14.09.2009 23:29
Графика Паскаля ErnurN Паскаль, Turbo Pascal, PascalABC.NET 3 03.06.2009 17:04
Сканнер Паскаля nusik Общие вопросы C/C++ 4 24.04.2009 23:04
Интерпретатор Паскаля SvetickPro Помощь студентам 1 17.10.2008 22:00