Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15

    [c] problema determintante matrice

    ciao a tutti, devo creare un programma che da file prenda gli elementi di una matricce quadrata e restituisca il det. ora l algoritmo credo sia giusto,ma mi da un warning (nn facendo funzionare il programma)
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <string.h>
    int matri(int **M,int rc);
    int finale(int **M);
    
    
    int main(int argc,char *argv[])
    {
        int **M;
        int i,j,rc;
        FILE *f;
        int prova=0;
        f=fopen(argv[1],"r");
        while(!feof(f))
        {
            fscanf(f,"%d",&prova);
            prova++;
        }
        rc=sqrt(prova);
        rewind(f);
        M=(int**)malloc(rc*sizeof(int*));
        for(i=0; i<rc; i++)
        {
            M[i]=(int*)malloc(rc*sizeof(int));
            for(j=0; j<rc; j++)
            {
                fscanf(f,"%d",&M[i][j]);
            }
        }
       printf("%d",matri(M,rc)) ;
        return 0;
    }
    int matri(int **M,int rc)
    {
        int sommam=0;
        int **TEM;
        int i,j,k,r,c;
    
    
        if (rc==2)
        {
            return finale(M);
        }
    TEM=(int**)malloc((rc-1)*sizeof(int*));
        for(k=0; k<rc; k++)
        {
            r=0;
            c=0;
            for(i=1; i<rc; i++)
            { TEM[i]=(int*)malloc((rc-1)*sizeof(int));
                for(j=0; j<rc; j++)
                {
    
    
                    if(j!=k)
                    {
                        TEM[r][c]=M[i][j];
                        c++;
                    }
                    if(c==rc-1)
                    {
                        r++;
                        c=0;
                    }
                }
            }
    
    
                sommam=sommam+pow(-1,k)*(M[0][k])*matri(TEM,rc-1);
    
    
    
    
    
    
    
    
    }
    
    
    
    
        return sommam;
    
    
    }
    int finale(int **M)
    {
    
    
      return   M[0][0]*M[1][1] -M[0][1]*M[1][0];
    }

    grazie a tutti
    Ultima modifica di razzoman; 23-11-2013 a 11:16

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Quale warning?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Quale warning?
    scusa l ho scritto nel programma e non nell introduzione,mi dice che la variabile tem potrebbe essere non usata (è dentro la funzione matri)
    edit: ho trovato il problema (ora ho zero warning,non alloccavo la matrice tem) ma il programma nn funge lo stesso!
    Ultima modifica di razzoman; 23-11-2013 a 11:09

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ok ... ma "non funziona" non chiarisce il problema.

    Quali dati fornisci e cosa ottieni per dire che non funziona?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Ok ... ma "non funziona" non chiarisce il problema.

    Quali dati fornisci e cosa ottieni per dire che non funziona?
    metto una matrice 3*3 di det 0 (la matrice è data dagli elementi
    1 2 3
    0 0 0
    2 3 4 )
    e il programma mi da come risultato -6

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai fatto un po' di debugging per seguire passo passo il calcolo ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Hai fatto un po' di debugging per seguire passo passo il calcolo ?
    non ce l hanno ancora spiegato all uni,non so dove mettere le mani

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non

    for(i=1; i<rc; i++)

    ma

    for(i=0; i<rc; i++)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2013
    Messaggi
    15
    Quote Originariamente inviata da oregon Visualizza il messaggio
    Non

    for(i=1; i<rc; i++)

    ma

    for(i=0; i<rc; i++)
    ho provato a fare il debug e ora il programma non va proprio più!( i lo faccio partire da 1 e non da 0 perchè così mi salta direttamente la riga per il determinante della matrice,cmq provo anche come dici te,grazie)
    forse ho trovato l errore,facendo il debug,per contare quanti elementi c erano nella matrice mettevo un intero di prova e siccome so che era una matrice quadrata il suo quadrato mi darà il nunero di riga e colonna. il problema era che facevo fscanf(f,%d,prova) prova++, facendo ovviamente sballare i valori,ora però metto fscanf(f,%d,c)prova++;ma il programma mi da 0 errori ma nell avviarlo mi dice errore memoria non può essere written
    Ultima modifica di razzoman; 23-11-2013 a 12:08

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Hai modificato la for che ti ho detto?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.