PDA

Visualizza la versione completa : ricerca diagonali parallele alla principale


MATTEO1994
10-04-2015, 09:42
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...

#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. :)

MATTEO1994
10-04-2015, 13:46
avevo dimenticato di aggiungere che si trattava di c++....

Loading