PDA

Visualizza la versione completa : [C++] Problema Algoritmo Ricerca Sequenza Numerica


Mrhide1
06-01-2016, 13:00
Ciao a tutti,
ho un problema con un programma in cui data una sequenza numerica molto lunga,presa da file, devo ricercare una sequenza numerica più piccola di cui devo dare io la dimensione e inoltre il programma mi deve dire quante volte si ripete tale sequenza.Il programma inizialmente l'ho fatto bene perchè ho scritto un algoritmo che andava bene per una sequenza di due numeri,ma chiaramente così non va bene perchè deve valere anche per dimensioni maggiori.Posto solamente la parte di codice dove sta il problema tanto il resto del programma è solo apertura del file,allocazione dinamica ecc.

L'algoritmo iniziale è questo:

int incremento = 1; int contatore_ripetizioni=0;
for (int i=0;i<riemp;i++)
{
for (int j=0;j<dim;j++)
{
if (vet1[i]==vet2[j])
{
while (incremento != dim) {
if (vet1[i+incremento]==vet2[j+incremento])
{
contatore_ripetizioni++;
incremento++;
}
else break;

}
}
else
j++;


}
}

Per capirci riemp è la dimensione dell'array preso da file,dim è la dimensione(assegnato da tastiera) dell'array più piccolo che vogliamo ricercare esempio due per cercare la sequenza 1,2.Contatore_ripetizione è il contatore che ho usato per farmi dire la programma quante volte si ripete la sequenza cercata e Incremento è un altro contatore per fare ripetere il processo di comparazione. Il problema è che il programma non va,parte ma dopo avere inserito i numeri da cercare non va avanti e suppongo che il problema sia nel while perchè se non trova la sequenza esempio 1.

P.S. else break; sta là perchè non sapevo come interrompe il ciclo nel caso in cui nella comparazione tipo 1 2 3,magari trova 1 2 mentre il 3 no allora deve uscire dal ciclo while.

dario09
07-01-2016, 17:15
ciao, guarda questo codice spero ti sia utile.


#include "stdafx.h"
#include <conio.h>
#include <stdio.h>
main()
{
int vet1 [] = {1,2,3,4,5,6,7,1,2,3,4,12,13,14,15,1,2,3,4,20,21,2 2,23,1,2,3,4};
int vet2 [] = {1,2,3,4};
int riemp = 27;//lunghezza vet1
int dim = 4;//lungheza vet2
int incremento;
int contatore_ripetizioni=0;
bool oK;

for (int i=0;i<riemp-dim+1;i++)
{
incremento=0;
if (vet1[i]==vet2[0])
{
do
{
oK=false;
if (vet1[i+incremento]==vet2[incremento])
{
//contatore_ripetizioni++;
incremento++;
oK = true;
}
} while(incremento < dim && oK);

if(oK)
{
for(int c=0;c<dim;c++)
cout <<vet2[c];
}
cout << endl;
}
}
getch();
}

Loading