Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175

    [C] incompatible pointer type

    allora nel programma sottostante mi viene dato un errore alla linea 62 (quella in rosso), l'errore è:
    det.c: In function `det':
    det.c:62: warning: passing arg 4 of `det' from incompatible pointer type
    det.c:62: void value not ignored as it ought to be
    codice:
    #include <stdio.h>
    #define SIZE 2
    
    /* PROTOTIPO FUNZIONE */
    void scambia_righe(int **m, int size, int r1, int r2, int start);
    void det(int **m, int size, int start, int **ris);
    
    /* PROGRAMMA CHIAMANTE */
    int main()
    {
    int **m;
    int i, j, n, *ris;
    
        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,0, &ris);
    	printf("Determinante = %d \n", ris);
    	return 0;
            free(m);
    }
    
    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 start, int **ris)
    {
    int r;
    int sgn = 1;
    int risultato = 0;
    
    /* CASO DI UNA MATRICE 1x1 */
    if(start == (size - 1))
    *ris = (int *)m[size-1][size-1];
         for(r=start; r<size; ++r)
    	{
    	if(r != start)
    	{
    	sgn = -1; /*scambiando due righe il determinante del minore cambia di segno*/
    	scambia_righe(m, size, start, r, start);
    	}
    	risultato += sgn * m[start][start] * det(m, size, start+1, &risultato);
    		if(r != start)
    			scambia_righe(m, size, start, r, start);
    	}
    	*ris = (int *)risultato;
    }

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Beh... il quarto parametro della funzione det è dichiarato per essere un array bidimensionale di interi, mentre tu, con quella chiamata, gli passi l'indirizzo di una variabile intera.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    perche tu gli passi &risultato che è un puntatore ad int (int *) mentre nella funzione hai dichiarato che l'argomento deve essere un puntatore a puntatore a int (int**): ma perchè poi moltliplichi per il rusultato di det visto che det non ritorna niente?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da anx721
    ma perchè poi moltlichi per il rusultato di det visto che det non ritorna niente?
    Effettivamente...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    come lo modifichereste voi?
    sono agli inizi col C

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    up

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2000
    Messaggi
    1,175
    up

  8. #8
    Utente di HTML.it L'avatar di ChReAn
    Registrato dal
    Aug 2002
    Messaggi
    486
    Beh ma... Come fai a usare il valore restituito da det in un'espressione, visto che

    1) det e' dichiarata void
    2) det non ha nessuna return al suo interno

    ???

    Cosi', per dire...
    ChReAn
    -------------------

    Slackware 9.1 powered

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 © 2024 vBulletin Solutions, Inc. All rights reserved.