Dark_Tranquillity
07-05-2004, 17:48
Ho quest'ormai famosissimo programma. Lo compilo, mi viene compilato senza errori ma al momento che lo richiamo a un certo punto si blocca.
Qualcuno mi są dire come faccio a trovare l'errore?
#include <stdio.h>
#include <malloc.h>
/* PROTOTIPO FUNZIONI */
void scambia_righe(int **m, int size, int r1, int r2, int start);
void det(int **m, int size, int *risultato, int start);
main()
{
int **m, n;
int i, j, risultato;
printf("Inserisci la dimensione n: ");
scanf("%d", &n);
if (!(m = (int **)malloc(n*n*sizeof(int))))
abort();
for(i=0; i<n; ++i)
for(j=0; j<n; ++j)
{
printf("Inserisci il valore dell'elemento (%d,%d): ", i+1, j+1);
scanf("%d", &m[i][j]);
}
det(m, n, &risultato, 0);
printf("Determinante: %d", risultato);
return 0;
}
void scambia_righe(int **m, int size, int r1, int r2, int start)
{
int i, tmp;
for(i=start; i<size; ++i)
{
tmp = m[r1][i];
m[r1][i] = m[r2][i];
m[r2][i] = tmp;
}
}
void det(int **m, int size, int *risultato, int start)
{
int r;
int sgn = 1;
int det_min;
*risultato = 0;
if(start == (size - 1))
*risultato = m[size-1][size-1];
for(r=start; r<size; ++r)
{
if(r != start)
{
sgn = -1;
scambia_righe(m, size, start, r, start);
}
det(m, size, &det_min, start+1);
*risultato += sgn * m[start][start] * det_min;
if(r != start)
scambia_righe(m, size, start, r, start);
}
}
Qualcuno mi są dire come faccio a trovare l'errore?
#include <stdio.h>
#include <malloc.h>
/* PROTOTIPO FUNZIONI */
void scambia_righe(int **m, int size, int r1, int r2, int start);
void det(int **m, int size, int *risultato, int start);
main()
{
int **m, n;
int i, j, risultato;
printf("Inserisci la dimensione n: ");
scanf("%d", &n);
if (!(m = (int **)malloc(n*n*sizeof(int))))
abort();
for(i=0; i<n; ++i)
for(j=0; j<n; ++j)
{
printf("Inserisci il valore dell'elemento (%d,%d): ", i+1, j+1);
scanf("%d", &m[i][j]);
}
det(m, n, &risultato, 0);
printf("Determinante: %d", risultato);
return 0;
}
void scambia_righe(int **m, int size, int r1, int r2, int start)
{
int i, tmp;
for(i=start; i<size; ++i)
{
tmp = m[r1][i];
m[r1][i] = m[r2][i];
m[r2][i] = tmp;
}
}
void det(int **m, int size, int *risultato, int start)
{
int r;
int sgn = 1;
int det_min;
*risultato = 0;
if(start == (size - 1))
*risultato = m[size-1][size-1];
for(r=start; r<size; ++r)
{
if(r != start)
{
sgn = -1;
scambia_righe(m, size, start, r, start);
}
det(m, size, &det_min, start+1);
*risultato += sgn * m[start][start] * det_min;
if(r != start)
scambia_righe(m, size, start, r, start);
}
}