Ciao, sono nuovo ma ultimamente ho letto molto su questo forum... e mi ha aiutato parecchio, ma non riesco a risolvere un'esercizio assegnatoci all'università.
il mio problema è che (penso) gestisco in modo errato le matrici ed il passaggio a funzioni.
(edit: preciso che ho gia cercato il passaggio tramite puntatori ma non riesco a capire in questo specifico caso come fare)
il testo dell'esercizio è il seguente:
il prototipo che devo rispettare è:Data una tabella bidimensionale mat N x N (N > 2) di parole di lunghezza variabile e un intero positivo k, scrivere una procedura contaParole che conta quante parole cominciano e finiscono con le stesse k lettere in ciascuna delle quattro parti ottenute suddividendo la tabella in base alla diagonale principale e secondaria. Le parole sulle diagonali non devono essere conteggiate.
ed ho scritto il seguente codice:codice:void contaparole(char *mat[][N], int k, int *nord, int *est, int *sud, int *ovest)
io mi son creato un main per testare il programma:codice:#include <string.h> void diagonali (int mat2[N][N]); /*Ausiliare di coordinate, setta tutte le diagonali a 4 e divide est e ovest (rispettivamente 2 e 3)*/ void coordinate (int mat2[N][N]); /*Imposta la coordinata sulla cella: 0: Nord, 1: Sud, 2: Est, 3: Ovest, 4: Diagonale*/ int uguali(char *stringa, int k, int len); /*Ausiliare di contaparole, 1 se la parola inizia e finisce con k lettere =, 0 se no*/ void contaparole(char *mat[][N], int k, int *nord, int *est, int *sud, int *ovest) { int i,j,len; int mat2[N][N]; int n,s,e,o; n=s=e=o=0; coordinate(mat2); for (j=0;j<N;j++) //riga { for (i=0;i<N;i++) //colonna { len=strlen(mat[j][i]); if (k<len && mat2[j][i]!=4) { if(uguali(mat[j][i],k,len)) { switch (mat2[j][i]) { case 0: n++; break; case 1: s++; break; case 2: e++; break; case 3: o++; break; case 4: break; } } } } } *nord=n; *sud=s; *est=e; *ovest=o; } int uguali(char *stringa, int k, int len) /*Ausiliare di contaparole, 1 se la parola inizia e finisce con k lettere =, 0 se no*/ { int i, ok=0; for(i=0;i<k;i++) { if(stringa[i]==stringa[(len-1)-i]) ok++; else ok=0; } return (ok==k)? 1:0; } void coordinate (int mat2[N][N]) /*Imposta la coordinata sulla cella: 0: Nord 1: Sud 2: Est 3: Ovest 4: Diagonale */ { int i=0,j=0,i_max,i_min; diagonali(mat2); for (j=0;j<(N);j++) //riga { i_min=j; i_max=(N-1-j); if(j<((N-1)/2)) for (i=0;i<=(N/2);i++) //colonna { if(mat2[j][i_min]!=4) mat2[j][i_min]=0; if(mat2[j][i_max]!=4) mat2[j][i_max]=0; i_min++; i_max--; } if(j>(N/2)) for (i=(N/2);i>=0;i--) //colonna { if(mat2[j][i_min]!=4) mat2[j][i_min]=1; if(mat2[j][i_max]!=4) mat2[j][i_max]=1; i_min--; i_max++; } } } void diagonali (int mat2[N][N]) /*Ausiliare di coordinate, setta tutte le diagonali a 4 e divide est e ovest (rispettivamente 2 e 3)*/ { int i=0,j=0; for (j=0;j<N;j++) //riga for (i=0;i<N;i++) //colonna { if(i<(N/2)) mat2[j][i] = 3; else mat2[j][i] = 2; if ((j==i)||(i==(N-1-j))) mat2[j][i] = 4; } }
il mio problema è che mentre, con il mio main funziona tutto alla perfezione nessun warning e gira, quando lo consegno (in una pagina dell'univerità fatta apposta) mi da i seguenti warning:codice:#define N 3 int _tmain(int argc, _TCHAR* argv[]) { int nord,est,ovest,sud; int i,j,k; char *mat[N][N]; mat[0][0]="aaaaa"; mat[0][1]="abdcba"; mat[0][2]="abba"; mat[1][0]="abab"; mat[1][1]="bb"; mat[1][2]="abbccabb"; mat[2][0]="abba"; mat[2][1]="aabbaa"; mat[2][2]="aaaa"; printf("tabella inserita:\n"); for (j=0;j<N;j++) //riga { for (i=0;i<N;i++) //colonna { printf ("%s\t",mat[j][i]); } printf("\n"); } printf("inserire k: "); scanf("%d",&k); printf("\n"); contaparole(mat,k,&nord,&est,&sud,&ovest); printf("nord:%d \nsud:%d \nest:%d \novest:%d\n",nord,sud,est,ovest); return 0; }
quindi penso che di aver gestito male il passaggio della matrice char *mat[][N] nella funzione contaparole..Test.c:30: warning implicit declaration of function ‘contaParole’
qualcuno mi può illuminare??
grazie a tutti in anticipo

Rispondi quotando
