Advertisement
RiccardoMontagnin

Corretto

May 19th, 2015
285
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. void match(int *X, int*P, int dim, int dimP, int i, int count_match, ofstream & OUT)
  7. {
  8.         int j=0;
  9.         bool stop=false;
  10.  
  11.     //Condizione d'uscita
  12.     if(dim<dimP){
  13.  
  14.         OUT<<"fine";
  15.         return;
  16.  
  17.     }
  18.  
  19.                 while(!stop /* && Manca una condizione */) //Finchè stop è diverso da true allora eseguo il mio ciclo while
  20.                 {
  21.                         if(X[i+j]==P[j]) //eseguo un confronto fra il valore i in X e quello in j che, se uguale, viene incrementato,
  22.                         {                               // inoltre a i sommo j, per continuare il confronto anche coi successivi numeri                                
  23.                                 j++;        //SE uguale incremento j
  24.                                 if(j==dimP) //Ora, se j è uguale alla dimensine di P, ovvero quando ho un match
  25.                                 {
  26.                                         count_match++; //il contatore dei match viene incrementato
  27.                                         OUT<<"match n."<<count_match<<" a partire dalla posizione "<<i<<endl; //stampo su output il match appena trovato
  28.                                 }
  29.                        
  30.                         }
  31.                         else //se i due valori negli array sono differenti
  32.                         {
  33.                 /* Impostare j a 0 non serve a niente, tornerà a 0 da solo */
  34.                                 // j=0; //reimposto j a 0, ossia lo riporto sul primo valore dell'array P
  35.                                 stop=true; //imposto stop a false, permettendo così l'uscita dal ciclo while
  36.                         }
  37.                
  38.                         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
  39.                 }
  40.        
  41. }
  42.  
  43.  
  44.  
  45. int main()
  46. {
  47.         ifstream IN("input");
  48.         ofstream OUT("output");
  49.        
  50.         if(IN && OUT)
  51.         {
  52.                 int X[400];
  53.                 int P[20];
  54.                 int n_el, dimP, i, count_match, dim;
  55.                
  56.                 for(int l=0; l<400; l++)
  57.                 {
  58.                         X[l]=0;
  59.                 }
  60.        
  61.                 for(int j=0; j<20; j++)
  62.                 {
  63.                         P[j]=0;
  64.                 }
  65.                
  66.                 IN>>n_el;
  67.                 for(int l=0; l<n_el; l++)
  68.                 {
  69.                         IN>>X[l];
  70.                 }
  71.                
  72.                 IN>>dimP;
  73.                 for(int j=0; j<dimP; j++)
  74.                 {
  75.                         IN>>P[j];
  76.                 }
  77.                
  78.                 match(X, P, dim/*-1*/, dimP, i/*+1*/, count_match, OUT);    //Senza -1 e +1
  79.          
  80.          IN.close();
  81.         OUT.close();
  82.         }
  83.         else
  84.         cout<<" Errore nell'apertura dei files ";
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement