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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2011, 22:48   #1
Soundkilla
 
Регистрация: 02.03.2011
Сообщений: 6
По умолчанию Беда с указателями

Есть такой код, матрицу беру из файла, при вычислении определителя вылазит систем эксепшн, дебаггер ругается на что-то в 20ой строчке, я думаю, что напутал с указателями. Не могли бы помочь исправить ошибку (возможно, не правильно считаю определитель?), и подсказать, как добавить вычисление сумм элементов главной, и 2ух диагоналей под главной? Спасибо.
Код:
#include "stdafx.h"
#include <stdio.h>
#include <math.h>
 

int * Minor(int *a,int n, int i,int j)
{
    if (n<=1) return a;
    else
    {int **mass = new int *[n-1];
    for(int k=0; k<n-1;k++)
    {
        mass[k] = new int[n-1];
    }

    for(int k = 0; k<n;k++)
    {
        for(int l = 0; l<n;l++)
        {
            if(l!=j || k!=i) mass[k][l] = a[k*(n-1)+l];
        }
    }

    return *mass;
    }
}

double Det(int *a, int n, int i, int j)
{
    double res = 0;
    double p=-1;
    for(int k=0; k<n;k++)
    {
        res+=a[k*n]*pow(p,i+j)*Det(Minor(a,n,i,j),n,i+1,j);
    }
    return res;
}


int main()
{
    int n = 0;
    int m = 0;

    //открываем файл
    FILE * fp = fopen("matrix.txt", "r");
    if (fp)
    {
        fscanf(fp,"%d %d",&n,&m);
    }
    else return 0;

    int **a = new int *[n];
    for(int i = 0; i<n;i++)
    {
        a[i] = new int[m];
    }

    for(int i = 0; i<n;i++)
    {
        for(int j = 0; j<m;j++)
        {
            fscanf(fp,"%d",&a[i][j]);
        }
    }

    fclose(fp);

    for(int i =0; i<n;i++)
    {
        for(int j =0; j<m;j++)
        {
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }  


    printf("\n %d \n", Det(*a,n,0,0));

    //return 0;
}
Нужно срочно, если поможете-буду безумно благодарен
Soundkilla вне форума Ответить с цитированием
Старый 02.03.2011, 23:09   #2
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

Код:
int * Minor(int *a,int n, int i,int j)
{
    if (n<=1) return a;
    else
    {int **mass = new int *[n-1];
    for(int k=0; k<n-1;k++)
    {
        mass[k] = new int[n-1];
    }

    for(int k = 0; k<n-1;k++)
    {
        for(int l = 0;l<n-1;l++)
        {
            if(l!=j || k!=i) mass[k][l] = a[k*(n-1)+l];
        }
    }

    return *mass;
    }
}
для начала так
onewho вне форума Ответить с цитированием
Старый 02.03.2011, 23:24   #3
Soundkilla
 
Регистрация: 02.03.2011
Сообщений: 6
По умолчанию

Спасибо, но всё равно эксепшн вылазит =(
Теперь какая-то с памятью что ли ерунда....не понимаю(
Soundkilla вне форума Ответить с цитированием
Старый 03.03.2011, 00:41   #4
Lex-7051
Пользователь
 
Регистрация: 02.03.2011
Сообщений: 24
По умолчанию

Ты только создаёшь новые, а старые не удаляешь. Память могла кончиться. Нужно прописать циклы с оператором delete
Lex-7051 вне форума Ответить с цитированием
Старый 03.03.2011, 14:54   #5
Soundkilla
 
Регистрация: 02.03.2011
Сообщений: 6
По умолчанию

Не получается...
Soundkilla вне форума Ответить с цитированием
Старый 08.03.2011, 22:05   #6
Soundkilla
 
Регистрация: 02.03.2011
Сообщений: 6
По умолчанию

Ребят не понимаю в чём проблема. Пожалуйста, помогите!
Soundkilla вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Беда с координатами PRAmus Мультимедиа в Delphi 35 04.09.2010 22:44
Беда с кодировкой As_Pushkin HTML и CSS 7 23.06.2010 20:46
беда Морячок Паскаль, Turbo Pascal, PascalABC.NET 3 05.06.2010 15:41