Passaggio di matrici a una funzione !!

di il
7 risposte

Passaggio di matrici a una funzione !!

Ciao ragazzi,
ho delle difficolta' nel risolvere gli errori che mi vengono segnalati in fase di compilazione del programma di seguito.. tralasciando il fatto che l'impostazione stessa del metodo risolutivo del problema possa essere sbagliato e ragionando solo dal punto di vista formale, non riesco a sistemare la parte evidenziata...

#include <stdio.h>
#include <stdlib.h>

#define X 10
#define Y 10

typedef struct {
unsigned char blue;
unsigned char green;
unsigned char red;
}Pixel;

int pixelcmp(Pixel pixel1,Pixel pixel2);
void matruguale(Pixel imm[][],int x,int y);

int main()
{
Pixel immagine[X][Y];
int x=X,y=Y;
int q,w;

matruguale(immagine,x,y);

return 0;
}


int pixelcmp(Pixel pixel1,Pixel pixel2) {
int p=0;

if ((pixel1.blue==pixel2.blue)&&(pixel1.green==pixel2.green)&&(pixel1.red==pixel2.red))
p=1;

return p;
}

void matruguale(Pixel imm[][],int x,int y) {

int trovatodiverso=0;
int i,l,m,k;

for (i=0;i<x;i++) {
for (k=0;k<y;k++){
for (l=i;l<x;l++) {
for (m=k;m<y;m++) {
if (pixelcmp(imm[l][m],imm[l][l+1])==0)
trovatodiverso=1;
}
}
if (trovatodiverso==0) {
printf("Rettangolo %d per %d a partire dal vertice (%d;%d)\n",l,m,i,k);
break;
}
else {
matruguale(imm[][],x-1,y);
matruguale(imm[][],x,y-1);
matruguale(imm[][],x-1,y-1);
}
}
}
}

nella if evidenziata il compilatore segnala "invalid use of array with unspecified bounds" (quindi direi che non rileva le dimensioni del vettore) mentre nelle tre funzioni evidenziate dice semplicemente che c'è un errore prima della ] ...

7 Risposte

  • Re: Passaggio di matrici a una funzione !!

    Invece di passare la matrice, passa un puntatore e larghezza e altezza.
    Poi il posizionamento all'interno della matrice lo esegui con un semplice calcolo, per la posizione (x,y) fai
    puntatore + ( x + y * larghezza ) * sizeof(pixel)
  • Re: Passaggio di matrici a una funzione !!

    Provo a modificare usando i puntatori (inizialmente ho evitato perché pensavo complicassero la cosa, ma forse come dici tu è meglio passare la matrice tramite puntatore...)
    Grazie
  • Re: Passaggio di matrici a una funzione !!

    Se devi lavorare su un'immagine e meglio (più veloce) ragionare nei termini che ti ho spiegato e lasciar perdere le matrici
  • Re: Passaggio di matrici a una funzione !!

    Allora, ho provato a seguire i tuoi consigli ma dato che sono alle prime armi (non conosco neppure l'operatore sizeof che hai usato nella soluzione proposta..) alla fine non sono riuscito a risolvere la questione e ho ripiegato ancora sul passaggio dell'intera matrice
    ora ho risolto alcune piccole cose e credo di aver capito dov'é il problema esattamente:

    Pixel p1=imm[l][m];
    Pixel p2=imm[l][m+1];

    il compilatore non ha le dimensioni della matrice (e in effetti io l'ho passata senza dimensioni perche' altrimenti da un'altro errore) e mi dice che non posso usare l'array in questo modo perche' appunto non ne ha le dimensioni...

    in sostanza ho risolto qualcosa ma rimane il fatto che non riesco a tirare fuori dalla matrice i singoli elementi...
  • Re: Passaggio di matrici a una funzione !!

    Se ti viene più facile, puoi lavorare con una matrice definendo un vettore che ha dimensione NxM; questo ti semplifica tutti i passaggi, con l'accortezza però di accedere in questo modo ai singoli elementi:
    elem(x,y)=Vettore[x+y*N];
    Ripeto: se lavori con un'immagine è più facile ragionare in questo modo piuttosto che con le matrici.
  • Re: Passaggio di matrici a una funzione !!

    Ok, quest'ultima soluzione mi è più chiara.. nel frattempo qualcosa ho risolto.. se decido di passare la matrice per intero (e non tramite puntatori) bisogna passarle almeno la seconda dimensione.. cosa che non riuscivo a fare.. ora ho sistemato.. sembra vada meglio, devo fare qualche prova..
    detto cio', voglio provare comunque l'ultima soluzione che mi hai suggerito perché penso di aver capito come funziona e mi sembra migliore..
    Grazie dei consigli !!
  • Re: Passaggio di matrici a una funzione !!

    Tutto a posto, risolto !
    ultima cosa... per acquisire un unsigned char e' corretta la specifica %u ?? il compilatore non da errore, pero' da uno warning...
    Grazie mille !
Devi accedere o registrarti per scrivere nel forum
7 risposte