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:
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.
il prototipo che devo rispettare è:
codice:
void contaparole(char *mat[][N], int k, int *nord, int *est, int *sud, int *ovest)
ed ho scritto il seguente codice:
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;
		}
}
io mi son creato un main per testare il programma:
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;
}
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:
Test.c:30: warning implicit declaration of function ‘contaParole’
quindi penso che di aver gestito male il passaggio della matrice char *mat[][N] nella funzione contaparole..
qualcuno mi può illuminare??
grazie a tutti in anticipo