codice:
#include <iostream>using namespace std;
void leggimat(int r,int c,char *mat);
void stampa(int r,int c,char *mat);
void inserisciseq(int dim,char *seq);
void ricercacolonna(int r,int c,char *mat,char *seq,int dim,int ncolonna);
void ricercariga(int r,int c,char *mat,char *seq,int dim,int nriga);
void ricercaparallele(int r,int c,char *mat,char *seq,int dim,int nparallele);
int main()
{
int r,c;
int nriga=0;
int ncolonna=0;
int nparallele=0;
int dim; //dimensione della sequenza
do
{
cout<<"inserisci numero righe ";
cin>>r;
} while(r<=0);
do
{
cout<<"inserisci numero colonne ";
cin>>c;
} while(c<=0);
char mat[r][c];
leggimat(r,c,&mat[0][0]);
stampa(r,c,&mat[0][0]);
do
{
cout<<"inserisci la dimensione della sequenza che vuoi cercare ";
cin>>dim;
} while(dim<=0);
char seq[dim]; //vettore sequenza di caratteri
inserisciseq(dim,&seq[0]);
ricercacolonna(r,c,&mat[0][0],&seq[0],dim,ncolonna);
ricercariga(r,c,&mat[0][0],&seq[0],dim,nriga);
ricercaparallele(r,c,&mat[0][0],&seq[0],dim,nparallele);
cout<<"il numero di sequenze trovate nelle diagonali parallele e' "<<nparallele;
}
void leggimat(int r,int c,char *mat)
{
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
do
{
cout<<"inserisci elemento ["<<i+1<<"]["<<j+1<<"] ";
cin>>*(mat+i*c+j);
} while(*(mat+i*c+j)<'A' || *(mat+i*c+j)>'z' );
}
}
}
void stampa(int r,int c,char *mat)
{
for(int i=0;i<r;i++)
{
for(int j=0;j<c;j++)
{
cout<<*(mat+i*c+j)<<" ";
}
cout<<endl;
}
}
void inserisciseq(int dim,char *seq)
{
for(int i=0;i<dim;i++)
{
cout<<"inserisci carattere ["<<i+1<<"] ";
cin>>*(seq+i);
}
}
void ricercacolonna(int r,int c,char *mat,char *seq,int dim,int ncolonna)
{
int conta;
for(int j=0;j<c;j++)
{
conta=0;
for(int i=0;i<r;i++)
{
if(tolower(*(mat+i*c+j))==tolower(*(seq+i)))
{
conta++;
}
}
if(conta==dim)
{
cout<<"la sequenza cercata si trova nella colonna "<<j+1<<" "<<endl;
ncolonna++;
}
}
}
void ricercariga(int r,int c,char *mat,char *seq,int dim,int nriga)
{
int conta1;
for(int j=0;j<r;j++)
{
conta1=0;
for(int i=0;i<c;i++)
{
if(tolower(*(mat+j*c+i))==tolower(*(seq+i)))
{
conta1++;
}
}
if(conta1==dim)
{
cout<<"la sequenza cercata si trova nella riga"<<j+1<<" "<<endl;
nriga++;
}
}
}
void ricercaparallele(int r,int c,char *mat,char *seq,int dim,int nparallele)
{
int conta3;
for(int j=0;j<c/2;j++)
{
conta3=0;
for(int i=0;i<dim;i++)
{
if(tolower(*(mat+(i+j)*c+(i+j))==tolower(*(seq+i))))
{
conta3++;
}
}
if(conta3==dim)
{
nparallele++;
}
}
}
il problema dovrebbe essere nel sottoprogramma "ricercaparallele".Grazie in anticipo.