int sizeA = 3;//строки
int sizeB = 4;// столбцы
float **a = new float*[sizeA];
for(int i=0;i<sizeA;i++){
a = new float[sizeB];
for(int j=0;j<sizeB;j++)
a[j] = rand()%100;
}
ошибка в коде
9 раз из 10 программа работает правильно, а на 10 выскакивает ошибка :/
вот код:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <time.h>
#include <stdlib.h>
template <class T> void rand_Matrix (T **, int);
template <class T> float determine(T **, int);
void _print(int x);
void _print(float x);
float _abs(float x);
int _abs(int x);
int main()
{
srand(time(0));
int sizeA = 3;
int sizeB = 4;
float **a;
float detA;
int **b;
float detB;
*a = new float [sizeA];
for(int i = 0; i < sizeA; i++)
a = new float [sizeA];
printf("Determine A:\n");
rand_Matrix(a,sizeA);
detA = determine(a,sizeA);
printf("\nDet(A): %f",detA);
b = new int *[sizeB];
for(int i = 0; i < sizeB; i++)
b = new int [sizeB];
printf("\n\nDetermine B:\n");
rand_Matrix(b,sizeB);
detB = determine(b,sizeB);
printf("\nDet(B): %d\n", detB);
if (detA > detB) printf("Det(A) > Det(B)");
if (detA < detB) printf("Det(A) < Det(B)");
if (detA == detB) printf("Det(A) == Det(B)");
getch();
}
template <class T> float determine(T **arr, int size)
{
int b, l, i = 0, j = 0;
float k; double opr=1;
T c[1];
float e=0.000001;
while (i<size && j<size)
{
c[0]=0;
for (b=i;b<size;b++)
if (_abs(arr[j])>c[0])
{
l=b;
c[0]=_abs(arr[j]);
}
if (c[0]<e)
{
i++;
j++;
continue;
}
if (l!=i)
for (b=j;b<size;b++)
{
c[0]=arr;
arr=arr[l];
arr[l]=-c[0];
}
if (arr[i+1][j]!=0)
for (l=i+1;l<size;l++)
{
c[0]=(-arr[l][j]/arr[j]);
for (b=j;b<size;b++)
arr[l]+=(c[0]*arr);
}
i++;
j++;
}
for (i=0;i<size;i++)
opr*=arr;
return(opr);
}
template <class T> void rand_Matrix (T **arr, int size)
{
for (int i = 0; i < size; i++)
{
printf("\n");
for (int j = 0; j < size; j++)
{
arr[j] = rand()%9+1;
_print(arr[j]);
}
}
}
void _print(int x)
{
printf("%d ",x);
}
void _print(float x)
{
printf("%0.f ",x);
}
float _abs(float x)
{
fabs(x);
}
int _abs(int x)
{
abs(x);
}
Память под матрицы ты выделяешь, а освобождать - не освобождаешь. Хотя проблема может быть и не в этом, но все-таки делай правильно.
float **a;
*a = new float [sizeA];
В этом месте ты разименвываешь указатель на область памяти. На какую?
Создать динамический массив и заполнить случ.числами
Код:
напечатать массив,(подлючить #include <iomanip>)
Код:
for(int i=0;i<sizeA;i++){
for(int j=0;j<sizeB;j++){
cout<<setw(10)<<a[j]<<'\t';
}
cout<<endl;
}
for(int j=0;j<sizeB;j++){
cout<<setw(10)<<a[j]<<'\t';
}
cout<<endl;
}
обязательно освободить память
Код:
for(i=0;i<sizeA;i++)
delete[] a;
delete[] a;
delete[] a;
delete[] a;
И я чего то не понял зачем автор использует массив типа float,
ведь rand() все равно генерит случ.числа типа int от 0 до RAND_MAX ?