Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <fstream>
- using namespace std;
- void match(int *X, int*P, int dim, int dimP, int i, int count_match, ofstream & OUT)
- {
- int j=0;
- bool stop=false;
- //Condizione d'uscita
- if(dim<dimP){
- OUT<<"fine";
- return;
- }
- while(!stop /* && Manca una condizione */) //Finchè stop è diverso da true allora eseguo il mio ciclo while
- {
- if(X[i+j]==P[j]) //eseguo un confronto fra il valore i in X e quello in j che, se uguale, viene incrementato,
- { // inoltre a i sommo j, per continuare il confronto anche coi successivi numeri
- j++; //SE uguale incremento j
- if(j==dimP) //Ora, se j è uguale alla dimensine di P, ovvero quando ho un match
- {
- count_match++; //il contatore dei match viene incrementato
- OUT<<"match n."<<count_match<<" a partire dalla posizione "<<i<<endl; //stampo su output il match appena trovato
- }
- }
- else //se i due valori negli array sono differenti
- {
- /* Impostare j a 0 non serve a niente, tornerà a 0 da solo */
- // j=0; //reimposto j a 0, ossia lo riporto sul primo valore dell'array P
- stop=true; //imposto stop a false, permettendo così l'uscita dal ciclo while
- }
- match(X, P, dim-1, dimP, i+1, count_match, OUT); //richiamo la funzione match e rieseguo il tutto, partendo da una posizione in più e diminuendo la dimensione dell'array X
- }
- }
- int main()
- {
- ifstream IN("input");
- ofstream OUT("output");
- if(IN && OUT)
- {
- int X[400];
- int P[20];
- int n_el, dimP, i, count_match, dim;
- for(int l=0; l<400; l++)
- {
- X[l]=0;
- }
- for(int j=0; j<20; j++)
- {
- P[j]=0;
- }
- IN>>n_el;
- for(int l=0; l<n_el; l++)
- {
- IN>>X[l];
- }
- IN>>dimP;
- for(int j=0; j<dimP; j++)
- {
- IN>>P[j];
- }
- match(X, P, dim/*-1*/, dimP, i/*+1*/, count_match, OUT); //Senza -1 e +1
- IN.close();
- OUT.close();
- }
- else
- cout<<" Errore nell'apertura dei files ";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement