Ciao a tutti, sono nuovo del forum. Avrei un dubbio su un esercizio, spero possiate aiutarmi.
--------
Implementare la funzione C:
int insert_word(char* word, char** m, int m_rows, int m_cols,int row, int col, int direction);
che data in input una stringa word che rappresenta una parola, e una matrice m rappresentante un cruciverba di dimensioni m_rows e m_cols, inserisca la parola word nella matrice m a partire dalla posizione [row, col]. Se la variabile di input direction ha valore 0 la parola deve essere inserita orizzontalmente, altrimenti verticalmente. Nel cruciverba le caselle nere sono identificate dal carattere '#', le caselle vuote dal carattere '_', le caselle possono anche contenere una qualsiasi lettera fra la 'a' e la 'z'. Per poter inserire la parola nella posizione e direzione richiesta, non devono esserci caselle nere e se ci sono lettere esse devono coincidere con quelle della parola stessa. Inoltre la parola deve terminare esattamente in corrsipondenza di una casella nera oppure sul bordo. La funzione deve ritornare 0 se la parola non può essere inserita, 1 altrimenti.
--------
Qui il mio codice:
#include <stdlib.h>
#include <string.h>
#include "esercizio1.h"
int insert_word(char* word, char** m, int m_rows, int m_cols,
int row, int col, int direction) {
int s=strlen(word);
int i=row;
int j=col;
int l=0;
int n=0;
if (direction==1) {
if (i+s<m_rows) {
n=-1;
for (i; i<i+s; i++) {
n++;
if(m[i][j]=='#' || m[i][j]!=*(word+n))
return 0;
}
i=row;
n=0;
for (i; i<i+s; i++) {
m[i][j]=*(word+n);
n++;
}
return 1;
}
}
if (direction==0) {
if (j+s<m_cols) {
l=-1:
for (j; j<j+s; j++) {
l++;
if(m[i][j]=='#' || m[i][j]!=*(word+l);)
return 0;
}
j=col;
l=0;
for (j; j<j+s; j++) {
m[i][j]=*(word+l);
l++;
}
}
return 1;
}
}
Non capisco perchè non funzioni.
In s memorizzo la lunghezza della stringa, poi controllo che la parola vada immessa verticolamente o orizzontalmente con if (direction==1/0), controllo che la parola non
sia troppo lungha con if (i/j+s<m_rows/m_cols), scorro poi gli elementi della matrice
per vedere se c'è un "#, oppure un elemento che non combacia anche per posizione con una lettera della parola, nel caso ritorno 0. Se ciò non avviene resetto il valore di i/j
, in cui avevo salvato la riga/colonna di partenza e scorro la matrice facendo l'assegnazione.
Il problema è che non riesco a fare proprio l'assegnazione, le caselle vuote rimangono vuote e non capisco il motivo.
Spero possiate aiutarmi, grazie in anticipo.