Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ошибка в коде

6.6K
04 марта 2007 года
Mendler
48 / / 20.09.2006
Сори, может тут чтото простое, но я не могу найти эту ошибку.
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);
}
9
04 марта 2007 года
Lerkin
3.0K / / 25.03.2003
Память под матрицы ты выделяешь, а освобождать - не освобождаешь. Хотя проблема может быть и не в этом, но все-таки делай правильно.
361
04 марта 2007 года
Odissey_
661 / / 19.09.2006
Первое что бросилось в глаза -

float **a;
*a = new float [sizeA];

В этом месте ты разименвываешь указатель на область памяти. На какую?
320
04 марта 2007 года
m_Valery
1.0K / / 08.01.2007
Да,тут явно с массивами не то...
Создать динамический массив и заполнить случ.числами
 
Код:
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;
    }

напечатать массив,(подлючить #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(i=0;i<sizeA;i++)
      delete[] a;
                 delete[] a;

И я чего то не понял зачем автор использует массив типа float,
ведь rand() все равно генерит случ.числа типа int от 0 до RAND_MAX ?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог