PDA

View Full Version : Calcolo det matrice


Stallwars
23-01-2010, 15:22
Raga ho provato a sviluppare un programma per il calcolo del determinante di una matrice max 1000 per 1000 ma mi da errore: ARITHMETIC ON POINTER AN INCOMPLETE TYPE... cioè??
Help!!! xD :D :help:

Eccovi il codice se può servire... L'errore me lo da sulle righe 119 e 139.
Credo scambi la moltiplicazione per un puntatore ma nn so come risolvere.

#include<stdio.h>


void load(int *h, int x, int y);
long determinante (long X[][], int x);
long totdet(long X[][], long mx, int h);


void
main ()
{

long M[1000][1000];
int i=1, j=1, x, y;

printf("\t\tCALCOLO DETERMINANTE MATRICI QUADRATE.\n
\t\tIL CALCOLO VIENE ESEGUITO SU ELEMENTI\n
\t\tCOMPRESI TRA -3000 e 3000.\n\n
\t\tDIMENSIONE MASSIMA MATRICE: 1000x1000\n\n");







//CARICAMENTO GRANDEZZA MATRICE

do
{
if(i<1||i>1000) printf("\n\nIl valore inserito e' errato, inserire un valore compreso tra 1 e 1000.");

printf("\n\n\n*Inserire il numero di righe (e colonne) della matrice: ");
scanf("%d",&i);
}
while(i<1||i>1000);


j=i;


printf("\n\n\n\n\n");


do
{
for(x=0; x<i; x++)
{
load(&M[y][x], y, x);
}

y++;
}
while(y<j);


printf("\n\n\n\t\tIl determinante della matrice è: %ld", determinante(M ,x ));


system("PAUSE");

}



_______________FINE MAIN_______________





void
load(int *h, int y, int x)
{
do
{

if(*h<-3000||*h>3000) printf("\n\nINSERISCI UN VALORE CORRETTO\n\n");

printf("***Inserire l'elemento di indici %d,%d della matrice: ", y+1, x+1);
scanf("%d",&*h);

}
while(*h<-3000||*h>3000);

}










long
determinante(long X[][], int x)
{

int h, DET=1, TOTDET;


for(h=0;h<x-1;h++)
{
DET=X[h][h]*(DET); /*vedi teorema di laplace*/
}

h++;

TOTDET=totdet(X , DET, h);

return TOTDET;

}








long
totdet(long X[][], long mx, int h)
{

return mx*(((X[h][h])*(X[h+1][h+1]))-((X[h+1][h])*(X[h][h+1])));

}

gugoXX
23-01-2010, 16:17
Illeggibile

Stallwars
23-01-2010, 16:49
Scusate... Aggiusto e riposto. =) :rolleyes: :D :sofico:

Aggiungo: fino al caricamento tutto ok. Le righe sono nella funzione "totdet" e nella funzione "determinante"
Il resto dovrebbe fungere dato k l'ho testato.:muro: :nera:

gugoXX
23-01-2010, 17:23
Il calcolo del determinante secondo Laplace e' ricorsivo, ma nel codice non vedo la ricorsione.
E non penso sia opportuno supportare una matrice 1000x1000 e poi inserire i dati uno ad uno con una scanf...

Stallwars
24-01-2010, 14:02
Il calcolo del determinante secondo Laplace e' ricorsivo, ma nel codice non vedo la ricorsione.
E non penso sia opportuno supportare una matrice 1000x1000 e poi inserire i dati uno ad uno con una scanf...


No la ricorsione c'è... Praticamente l'indice h punta in maniera incrementale agli elementi con indici eguali... E' come se applicassi tante volte laplace finchè non ottieni un minore 2x2... A quel punto calcola il minore.

Per quanto riguarda la scanf... Forse c'è qlke altro metodo + pratico! xD :muro: :D
Cmq credo mi riconosca le moltiplicazioni come puntatori :oink: :help:

gugoXX
24-01-2010, 15:12
Guarda che stai praticamente moltiplicando solo i termini della diagonale maggiore, e poi il determinante delll'ultima sotto-matrice 2X2 in basso a destra.
Mancano tutti gli altri contributi, ed e' li' che ci si diverte.

Inutile correggere la versione corrente quando comunque non funzionerebbe.

Stallwars
25-01-2010, 16:58
Guarda che stai praticamente moltiplicando solo i termini della diagonale maggiore, e poi il determinante delll'ultima sotto-matrice 2X2 in basso a destra.
Mancano tutti gli altri contributi, ed e' li' che ci si diverte.

Inutile correggere la versione corrente quando comunque non funzionerebbe.

Cavolo... Erroraccio nell'interpretazione del teorema... xD

coidrok
22-04-2013, 12:17
io mi son tenuto un pò più stretto.Qui potete trovare un file eseguibile java per calcolare determinante e rango di matrici 3x3 :Prrr:
http://uosew.weebly.com/software.html

gugoXX
22-04-2013, 13:20
Se vuoi restare su questo thread devi postare il codice, che e' quello che ci interessa.
Se invece si tratta solo di eseguibile, devi spostarti su "Programmi e Utility"

Poi vabbe', il thread originale era di 3 anni fa ;)