Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    ricerca diagonali parallele alla principale

    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.

  2. #2
    avevo dimenticato di aggiungere che si trattava di c++....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.