Ciao a tutti, ho problemi con un esercizio di programmazione..
Data una mappa rettangolare contenente lettere dell’alfabeto minuscole, memorizzata in un file di testo, devo realizzare un programma in grado di individuare la sequenza di caratteri uguali disposti sulla stessa riga o sulla stessa colonna ed avente lunghezza massima. Il nome del file e la lettera da ricercare sono passati su linea di comando. Un esempio di mappa è il seguente:
qqaaaczzbxq
wwwcccsbrrb
eddddddeeba
dddbacqwerr
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define R 4
#define C 11+1
struct sequenza { //dichiarazione struttura
int riga,colonna;
int inizio,fine;
};
int main(int argc, char * argv[])
{
char m[R][C];
int i,j,max=0,lunghezza=0,flag_orizzontale=0;
struct sequenza seq;
FILE *fp;
seq.riga=0, seq.colonna=0, seq.inizio=0, seq.fine=0;
if(argc!=3){
printf("Errore\n");
return -1;
}
fp=fopen(argv[1],"r");
if(fp==NULL){
printf("errore apertura file\n");
return -2;
}
//controllo se la sequenza e' in orizzontale
for (i=0;i<R;i++){
for (j=0;j<C;j++){
fscanf(fp,"%c ",&m[i][j]);
if(*argv[2]==m[i][j]){ //argv[2] è la lettera che mi passa da riga di comando
lunghezza++;
if(lunghezza>max){ //se trovo una sequenza di caratteri uguali più lunga in orizzontale
max=lunghezza;
seq.riga=i+1; //la riga parte da 0 quindi +1
seq.fine=j+1;
seq.inizio=seq.fine-max;
flag_orizzontale=1; //se trovo la seguenza in orizzontale vale 1
lunghezza=0; //resetto il contatore per cercare eventualmente un altra sequenza max
}
}
}
}
//controllo se la sequenza e' in verticale
for (j=0;j<C;j++){
for (i=0;i<R;i++){
if(*argv[2]==m[i][j]){
lunghezza++;
if(lunghezza>max){ //se trovo una sequenza di caratteri uguali più lunga in orizzontale
max=lunghezza;
seq.colonna=i+1;
seq.fine=j+1;
seq.inizio=seq.fine-max;
flag_orizzontale=0; //se trovo la seguenza in orizzontale vale 1
lunghezza=0; //resetto il contatore per cercare eventualmente un atra sequenza max
}
}
}
}
if (flag_orizzontale==1){
printf("Sequenza trovata: Carattere %c - orizzontale - riga %d - lunghezza %d\n", *argv[2], seq.riga, max);
printf("Inizio: Colonna %d - Fine: colonna %d \n", seq.inizio,seq.fine);
}
else
{
printf("Sequenza trovata: Carattere %c - verticale - colonna %d - lunghezza %d\n", *argv[2], seq.colonna, max);
printf("Inizio: riga %d - Fine: riga %d \n", seq.inizio,seq.fine);
}
return 0;
}
Potere aiutarmi a capire dove sbaglio? Il problema è che quando eseguo mi sballa totalmente le righe e colonne