Salve a tutti sto svolgendo un esercizio in cui mi viene chiesto di fare diverse operazioni su una matrice di caratteri, l' ultimo punto mi chiede di verificare se una sequenza(inserita dall' utente) si trova su più diagonali parallele alla principale e in caso affermativo riportarne il numero al main. Il problema è che non mi funziona bene questa ricerca penso che il problema sia sugli indici...
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.