Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Перевести с С++ на Си


Автор: DaLLaas 4.6.2017, 18:20
очень нужна помощь!



#include <iostream>
#include <cmath>

using namespace std;
double* minor (int p, double A[], int n) 
{
double *M= new double [(n-1)*(n-1)];
int s=0;
for (int i=0; i<(n*n); i++) 
{

if((i%n==p%n)||(i/n==p/n)) continue;
M[s]=A[i];
s++;
}
return M;
}

double det (double A[], int n) 
{
if(n==1) return A[0];

else 
{
double res=0;
for(int i=0;i<n;i++) 
{
res+= A[i] * det(minor(i,A,n),n-1) * pow(-1,i);
}
return res;
}

}

int main( ) 
{
setlocale(0,"");
while(true) 
{
system("CLS");
cout << "Размерность матрицы: "; 
int R; 
cin >> R;

double *a= new double [R*R];


for (int i=0; i<R*R; i++ ) 
{
cout << "Parca " << i+1 << ": "; cin >> a[i];
}

cout << endl;


for (int i=0; i<R*R; i++)
{
cout << a[i] << " ";
if(i%R==R-1) cout << endl;
}

cout << endl;



cout << "det("<<R<<")= " << det(a,R) << endl;
cout<<endl;
system("pause");
}

}

Автор: ss 4.6.2017, 19:21
этим ты обманешь не преподавателя а только себя

Код

#include <locale.h>
#include <math.h>
#include <stdlib.h>
#include <stdio.h>
//using namespace std;
double* minor (int p, double A[], int n) 
{
double *M= malloc((n-1)*(n-1)*sizeof(double));
int s=0;
for (int i=0; i<(n*n); i++) 
{

if((i%n==p%n)||(i/n==p/n)) continue;
M[s]=A[i];
s++;
}
return M;
}

double det (double A[], int n) 
{
if(n==1) return A[0];

else 
{
double res=0;
for(int i=0;i<n;i++) 
{
res+= A[i] * det(minor(i,A,n),n-1) * pow(-1,i);
}
return res;
}

}

int main(void) 
{
setlocale(0,"");
while(0) 
{
system("CLS");
printf("Размерность матрицы: "); 
int R; 
scanf("%i", &R);

double *a= malloc(R*R * sizeof(double));


for (int i=0; i<R*R; i++ ) 
{
printf("Parca %i :", i+1); scanf("%f", &a[i]);
}

printf("\n");


for (int i=0; i<R*R; i++)
{
printf("%f ", a[i]);
if(i%R==R-1) printf("\n");
}

printf("\n");



printf("det (%d)=%f\n\n", R, det(a,R));

system("pause");
}




Автор: DaLLaas 4.6.2017, 21:32
Я знаю , что обманываю только себя, но программирование не мой профиль , поэтому у меня не выходит.

У меня один вопрос
for (int i=0; i<(n*n); i++) --------- в этой строчке ошибку видит, в чём проблема?
{
if((i%n==p%n)||(i/n==p/n)) continue;
M[s]=A[i];
s++;
}

Автор: ss 5.6.2017, 10:12
какую ошибку выдает ?

Автор: konshyn 3.7.2017, 17:36
Цитата(DaLLaas @  4.6.2017,  21:32 Найти цитируемый пост)
for (int i=0; i<(n*n); i++) --------- в этой строчке ошибку видит, в чём проблема?


Цитата(ss @  5.6.2017,  10:12 Найти цитируемый пост)
какую ошибку выдает ? 


Только в c11 разрешили создавать переменные в операторе for, а компиляция, видимо, происходит со стандартом 2003 года, а если бы Ansi Си, то вылезли другие ошибки.

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